How to compare two records buffer field to field.
public static container compareRecords(Common _record1, Common _record2)
{
SysDictTable dictTable = new SysDictTable(_record1.TableId);
SysDictField dictField;
FieldId fieldId, extFieldId;
container ret;
int i, j;
;
if (_record1.TableId != _record2.TableId)
return conNull();
for (i=1; i<=dictTable.fieldCnt(); ++i)
{
fieldId = dictTable.fieldCnt2Id(i);
dictField = new SysDictField(_record1.tableId, fieldId);
if (!dictField.isSystem())
{
for (j=1; j<= dictField.arraySize(); ++j)
{
extFieldId = fieldId2Ext(fieldId, j);
if (_record1.(extFieldId) != _record2.(extFieldId))
{
ret += [extFieldId, _record1.(extFieldId), _record2.(extFieldId)];
}
}
}
}
return ret;
}
For Demo purpose you can use below code in job/runnable class.
static void demoCompareRecords(Args _args)
{
VendTable vendTable_1 = VendTable::find('ABC');
VendTable vendTable_2 = VendTable::find('XYZ');
container con;
int i;
;
con = MyClass::compareRecords(vendTable_1 , vendTable_2 );
for (i=1; i<=conLen(con); i+=3)
{
info(strFmt("%1, %2 ,%3"
,fieldId2Name(tableNum(VendTable), conPeek(con, i))
,conPeek(con, i+1)
,conPeek(con, i+2)
)
);
}
}



Tidak ada komentar:
Posting Komentar