标签: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(),取得当前成员的值
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()));
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(),来获取当前成员的值
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()); }
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()移除它
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); } }
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()方法,来指派他的值。
结构体中,字段的顺序按照字母顺序排列
下面是使用结构体的例子
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))); }
标签:style blog class code java tar
原文地址:http://www.cnblogs.com/hsuyafeng/p/3710404.html