码迷,mamicode.com
首页 > 其他好文 > 详细

3.3 类

时间:2014-05-07 09:02:24      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   tar   

1. 目标

使用集合类,在X++中存储数据

列出哪些应用对象控制不同的GUI组件

修改并使用Application Substituted Kernel Classes.

扩展RunBase框架,来创建新的批处理。

使用Args对象传送信息。

2.介绍

AX提供了大量标准系统类,你可以在开发X++代码时使用。本节课介绍一些最公共的系统类,并演示修改他们的方法。

3.集合类

X++包含两种复合数据类型:数组和容器,可以用于存储简单数据类型的值,而不能用于存储对象。AX集合类为存储对象而设计。

有以下集合类可以使用:

List

Map

Set

Array

Struct

下面的类也辅助聚合数据

RecordSortedList

RecordInsertList

3.1 List

List对象包含可以访问的序列成员。列表,是一种结构,能够包含任何X++类型的成员。列表的所有成员都必须是同一种类型。

下面方法是List对象常用的:

addEnd(anytype) 添加一个成员,到列表的末尾

addStart(anytype) 添加一个成员,到列表的开始

elements() 返回列表的成员个数

getEnumerator() 返回列表对象的ListEnumerator对象

typeId() 返回列表包含的数据类型

ListEnumerator类,允许你便利列表的元素。下面的方法,是ListEnumerator对象常用的。

current() 然会列表当前指针的值

moveNext() 将枚举移动下列表的下一个项目。列表枚举从列表的第一个元素之前开始,所以moveNext()必须被调用,来确保指向列表的第一个元素。

reset() 移动枚举到列表的开始位置

下面的例子,演示了怎样创建一个列表,然后遍历他,并提取值

3.1.1 创建一个新的List对象,指定数据类型

3.1.2 使用List.addEnd()和List.addStart()方法,为其添加成员

3.1.3 使用List.getEnumerator()方法,设置ListEnumerator对象

3.1.4 使用ListEnumerator.reset(),回到列表开始的位置。

3.1.5 使用ListEnumerator.moveNext(),遍历列表的成员

3.1.6 使用ListEnumerator.current(),取得当前成员的值

bubuko.com,布布扣
List integerList = new List(Types::Integer); 
ListEnumerator enumerator; 
// Add some elements to the list 
integerList.addEnd(1); 
integerList.addEnd(2); 
integerList.addStart(3); 
// Set the enumerator 
enumerator = integerList.getEnumerator(); 
// Go to beginning of enumerator 
enumerator.reset(); 
//Go to the first element in the List 
enumerator.moveNext(); 
// Print contents of first and second elements 
info(strfmt("First element is %1", enumerator.current())); 
enumerator.moveNext(); 
info(strfmt("Second element is %1", enumerator.current()));
bubuko.com,布布扣

3.2 Map

Map对象用一个值Key关联另一个值value。Key和Value都可以是任何X++可用的类型。key和value的类型,在map的声明中指定。用map意味着,能很快地访问值。

多个key可以指向同一个value,但是一个key同一时间,只能指向一个value。如果[key,value]对的key已经存在,它会用value覆盖之前的值。

下面的方法,是map对象常用的:

insert(_key,_value) 添加一个成员到map,_key和_value可以是任何类型

remove(_key) 从map中移除一个[key,value]对

lookup(_key) 返回key的value

elements() 返回map的成员数量

getEnumerator() 返回map对象的MapEnumerator对象

MapEnumerator类允许你遍历map的成员。下面是MapEnumerator对象常用的方法:

currentKey() 得到当前键值对的key

currentValue() 得到当前键值对的value

moveNext() 将枚举移动到下个键值对。Map枚举从第一个键值对之前的位置开始,所以必须调用moveNext(),让枚举指向第一个元素。

reset() 将枚举移动到map开始的位置

下面的例子,演示了如何创建一个Custmoers per State的map,然后遍历它,并提取他的值

3.2.1 创建一个新的Map对象,制定它的数据类型

3.2.2 遍历CustTable的每条记录,并使用Map.exists()方法,来检查CustTable.stateName()在map的键中是否存在。

3.2.3 如果不存在,则使用Map.insert()来插入一个键值对(CustTable.stateName(),1)

3.2.4 如果存在,则将其value加1

3.2.5 使用Map.getEnumerator()方法设置MapEnumerator对象。

3.2.6 使用MapEnumerator.reset()回到map开始的位置

3.2.7 使用MapEnumerator.moveNext()遍历map的成员

3.2.8 使用MapEnumerator.currentKey()和MapEnumerator.currentValue(),来获取当前成员的值

bubuko.com,布布扣
Map mapStateNumbers; 
MapEnumerator enumerator; 
CustTable custTable; 
mapStateNumbers = new Map(Types::String, Types::Integer); 
while select custTable 
{ 
if(mapStateNumbers.exists(custTable.stateName())) 
{ 
mapStateNumbers.insert(custTable.stateName(), 
mapStateNumbers.lookup(custTable.stateName())+1); 
} 
else 
{ 
mapStateNumbers.insert(custTable.StateName(), 1); 
} 
} 
enumerator = mapStateNumbers.getEnumerator(); 
while (enumerator.moveNext()) 
{ 
info(strfmt("%1 customers are located in %2.", 
enumerator.currentValue(), enumerator.currentKey()); 
}
bubuko.com,布布扣

3.3 Set

Set是一种集合,它的成员是独一无二的。成员的值作为key,自动排列。List集合与它不同的是,List的成员可以放在制定位置,不是自动按照成员的值排列。

Set成员可以是任意X++类型,所有成员必须是相同的类型。

当一个值已经在set中存在,再次添加它,会被忽略,set的成员的数量也不会增加。

下面是Set对象常用的方法:

add(anytype) 插入一个值到set

remove(anytype) 从set中移除一个值

in(anytype) 检查一个制定的值,是否是set的成员

elements() 返回set包含的成员的数量

getEnumerator() 从Set对象返回一个SetEnumerator对象。

SetEnumerator类允许你遍历set的成员。SetEnumerator对象常用的方法有:

current() 返回当前指向的值

moveNext() 将set的枚举移动到下个值。Set枚举从第一个值之前的位置开始,所以必须调用moveNext()方法,使枚举指向第一个元素。

reset() 将枚举移动到set开始的位置

下面的例子,演示了如何创建两个集合,并必将两个集合的公共成员,并删除他们

3.3.1 创建一个Set对象,制定它的数据类型

3.3.2 使用Set.Insert()方法,为Set对象添加成员

3.3.3 使用Set.getEnumerator()方法,为Set设置SetEnumerator对象。

3.3.4 使用SetEnumerator.reset(),回到set开始的位置

3.3.5 使用SetEnumerator.moveNext()方法,遍历set的成员

3.3.6 使用SetEnumerator.current(),获取set当前的成员的值

3.3.7 使用Set.in(),寻找值。如果找到,使用Set.remove()移除它

bubuko.com,布布扣
Set setOne; 
Set setTwo; 
SetEnumerator enumerator; 
Int value; 
setOne = new Set(types::Integer); 
setOne.add(1); 
setOne.add(2); 
setOne.add(3); 
setTwo = new Set(Types::Integer); 
setTwo.add(3); 
setTwo.add(4); 
setTwo.add(5); 
enumerator = setOne.getEnumerator(); 
while (enumerator.moveNext()) 
{ 
value = enumerator.current(); 
if (setTwo.in(value)) 
{ 
setTwo.remove(value); 
} 
}
bubuko.com,布布扣

3.4 Array

Array对象,持有单一类型的值,可以是对象和记录。该类型的对象,可能会传递给函数和方法。值按顺序存储。

Array对象有下列常用方法:

eists(int) 检查一个值存在于指定位置。

lastIndex() 获取用于在array中存储值得最大的index

value(int _index,[anytype _value]) 获取或设置数组成员的值

typeId() 获取数组的数据类型

下面的例子,使用一个数组对象,持有三个不同的查询对象

Array array = new Array (Types::Class); 
array.value(1, new Query()); 
array.value(2, new Query()); 
array.value(3, new Query());

3.5 Struct

Struct 对象是一个实体,能够持有一组任何X++类型的值。Struct用来组织特定实体的一组信息。

例如,可能要存储一个客户的名字,组,和地址,并将复合信息,组成一个项。

下面是struct对象常用的方法:

add(str _fieldName,anytype _value) 添加一个新字段给结构体,并给它指定一个值

exists(str _fieldName) 制定特定字段在结构体中是否存在

fieldName(int _index) 返回结构体中,特定位置的字段的名

fields() 返回结构体中字段的数量

index(str _fieldName) 计算字段在结构体中的位置

remove(str _fieldName) 从结构体中移除一个字段

value(str _fieldName,anytype _value) 获取或设置制定字段的值

valueIndex(int _index,anytype _value) 获取或设置指定位置的字段的值

结构体中字段通过一个数据类型和一个名字来制定。当结构体通过new()方法创建时,可以添加字段。在结构体创建后,可以使用add()方法来创建字段。如果一个字段使用add()方法被添加,字段的值在同一时间被制定,并且值得数据类型要设置。如果一个字段在结构体初始化期间被添加,需要使用value()或valueIndex()方法,来指派他的值。

结构体中,字段的顺序按照字母顺序排列

下面是使用结构体的例子

bubuko.com,布布扣
Struct struct = new Struct(); 
int i; 
// Add new fields and values
struct.add("Group", "DOM"); 
struct.add("Name", "Jane Doe"); 
struct.add("Shoesize", 45); 
// Prints the type and name of all items in the struct
for (i = 1 ; i <= struct.fields() ; i++) 
{ 
info(strfmt("%1 : %2", struct.fieldType(i), 
struct.fieldName(i))); 
}
bubuko.com,布布扣

3.3 类,布布扣,bubuko.com

3.3 类

标签:style   blog   class   code   java   tar   

原文地址:http://www.cnblogs.com/hsuyafeng/p/3710404.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!