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) ) ); } }
Hi! Good post!
ReplyDeleteThe following method is very helpful sometimes:
Global::bufCmp(buffer1, buffer2)