![]() |
#1 |
Участник
|
Dynamics AX Geek: Useful methods for sets / record2set example
Источник: http://AxGeek.spaces.live.com/Blog/c...DB13!138.entry
============== I find myself working with sets and maps a lot. They are a fast and easy way to buffer information without going back to the database all the time. The set object has a few nice methods to compare sets. Union Pass two sets to this method. The method returns a new set that includes all items from either set. Difference Pass two sets to this method. The return set includes all items from the first set that are not found in the second set. Intersection Pass two sets to this method. The method return set includes all items found in both sets. The following example illustrates the three methods. record2Set creates a set out of any table record (for simplicity arrays are excluded here). The format is fieldname#value The method is applied to two customer records. Check out the results you are getting:
{ custTable custTable_1; custTable custTable_2; Set setCustTable_1; Set setCustTable_2; Set compare; set record2set(common _record) { DictTable dictTable; DictField dictField; FieldId fieldId; Set recordSet; ; dictTable = new DictTable(_record.tableId); recordSet = new Set(Types::String); for (fieldId = dictTable.fieldNext(0);fieldId;fieldId = dictTable.fieldNext(fieldId)) { dictField = dictTable.fieldObject(fieldId); if (!dictField.isSystem() && dictField.arraySize() == 1) recordSet.add(strfmt("%1#%2",dictField.name(),_record.(fieldId))); } return recordSet; } ; custTable_1 = CustTable::find('4000'); custTable_2 = CustTable::find('4000'); custTable_1.AccountNum = "1234"; custTable_1.Name = "Test"; custTable_2.CreditMax = 333.33; setCustTable_1 = record2set(custTable_1); setCustTable_2 = record2set(custTable_2); compare = Set::difference(setCustTable_1,setCustTable_2); print compare.toString(); compare = Set::difference(setCustTable_2,setCustTable_1); print compare.toString(); compare = Set::intersection(setCustTable_1,setCustTable_2); print compare.toString(); compare = Set::union(setCustTable_1,setCustTable_2); print compare.toString(); pause; } ![]() ![]() ============== Источник: http://AxGeek.spaces.live.com/Blog/c...DB13!138.entry |
|
|
|