Buffer to Buffer data and update only different fields with setFieldAsTouched method and Reflection class using X++ [Dynamics AX]

Friends, In many cases we might need to compare the data which is already stored in the table and only update the fields data that is different.

Buf2Buf() – will help to copy the 2 buffers. But If we want to compare and then update the data which is different in the fields along with any other fields that are dependent on the field[SetFieldAsTouched] below code will help you. [Corrected from the old message/post]

The method setFieldAsTouched takes a field ID as a parameter, and when it is executed, it marks that the field has already been assigned a value. Executing modify or save will thereafter resolve the intra-table field relations, and default, any other fields that depend on the field, which is set as touched.

Note: I am using VendTable in the below example to check and compare using reflection class in combination of AXBC class AXVendTable and SysDictTable. You can use traditional way of updating table instead of using AXBC classes as well

static void SR_SetFieldAsTouched(Args _args)
{
AxVendTable axVendTable;
SysDictTable sysDictTable = new SysDictTable(tablenum(VendTable));
int i;
int fieldCnt;
fieldId fieldId;
VendTable _vendTable, vendTable; // Try out the _vendTable buffer with some modified values
;

ttsbegin;
_vendTable.AddressMap::formatAddress();
axVendTable = AxVendTable::newVendTable(_vendTable);
vendTable = VendTable::findRecId(_vendTable.RecId);

fieldCnt = sysDictTable.fieldCntWithoutSys(); // Get the fieldcount ignoring the system fields

for (i=1;i <= fieldCnt;i++)
{
fieldId = sysDictTable.fieldCnt2Id(i);
if (vendTable.(fieldId) != _vendTable.(fieldId))
{
axVendTable.setFieldAsTouched(fieldId);
}
}

axVendTable.save();
ttscommit;
}

Thanks!!
Sree

Advertisements

2 Responses to “Buffer to Buffer data and update only different fields with setFieldAsTouched method and Reflection class using X++ [Dynamics AX]”

  1. JB Says:

    Exactly what I was looking for, while copying data across companies, thanks!


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: