The code involved the use of the changecompany keyword. It's an easy approach for reading records from different company accounts within one Ax database.
The syntax is pretty straightforward:
changecompany('id')
{
// record handling
}
Put the record handling between accolades and you are good to go. But...
Example of some disfunctional code:
static void MyExample(Args _args)
{
DataArea DataArea;
CustTable CustTable;
;
while select DataArea
where !DataArea.isVirtual
{
changecompany(DataArea.id)
{
while select CustTable
where CustTable.Name like 'A*'
{
info(strfmt("%1 %2 %3",CustTable.dataAreaId,CustTable.AccountNum,CustTable.Name));
}
}
}
}
The above does not work or gives unreliable results.
What to do: You have to reset your table variable, after the changecompany but before your perform the record handling..
Example of some working code:
static void MyExample(Args _args)
{
DataArea DataArea;
CustTable CustTable;
;
while select DataArea
where !DataArea.isVirtual
{
changecompany(DataArea.id)
{
CustTable=null; // remember to reset the record object
while select CustTable
where CustTable.Name like 'A*'
{
info(strfmt("%1 %2 %3",CustTable.dataAreaId,CustTable.AccountNum,CustTable.Name));
}
}
}
}
You saved me a lot of time. Thanks!
ReplyDeleteI have found that using
ReplyDelete"while select DataArea
where !DataArea.isVirtual "
selects companies where "DataArea.isVirtual == true".
Has anyone else experienced this?