Quantcast
Channel: Microsoft Dynamics AX
Viewing all articles
Browse latest Browse all 130240

Blog Post: Table inheritance and collection objects

$
0
0

Be aware that there is an issue with storing child table records in collection objects like List.

If you have a table hierarchy and add a child table record to a List and then try to get it back, information from parent tables is lost, along with InstanceRelationType field value.

The following job reproes the issue:

staticvoid tableInheritanceAndListBug(Args _args)
{
CompanyInfo companyInfo;
List companyInfoList;
ListEnumerator companyInfoEnumerator;
 
companyInfoList =new List(Types::Record);
 
selectfirstOnly companyInfo;
 
info(strFmt(
"Orig: RecId: %1, Name: %2, InstanceRelationType: %3",
companyInfo.RecId,
companyInfo.Name,
companyInfo.InstanceRelationType));
 
companyInfoList.addEnd(companyInfo);
 
companyInfoEnumerator = companyInfoList.getEnumerator();
if(companyInfoEnumerator.moveNext())
{
companyInfo = companyInfoEnumerator.current();
info(strFmt(
"List: RecId: %1, Name: %2, InstanceRelationType: %3",
companyInfo.RecId,
companyInfo.Name,
companyInfo.InstanceRelationType));
}
}

Output:
Orig: RecId: 5637151316, Name: Contoso Entertainment Systems - E&G Division, InstanceRelationType: 41
List: RecId: 5637151316, Name: , InstanceRelationType: 0


The workaround is to use buf2con function to convert the table buffer to a container, save the container in the list and finally use con2buf when fetching the value with enumerator.

staticvoid tableInheritanceAndListBugWorkaround(Args _args)
{
CompanyInfo companyInfo;
List companyInfoList;
ListEnumerator companyInfoEnumerator;
 
companyInfoList =new List(Types::Container);
 
selectfirstOnly companyInfo;
 
info(strFmt(
"Orig: RecId: %1, Name: %2, InstanceRelationType: %3",
companyInfo.RecId,
companyInfo.Name,
companyInfo.InstanceRelationType));
 
companyInfoList.addEnd(buf2Con(companyInfo));
 
companyInfoEnumerator = companyInfoList.getEnumerator();
if(companyInfoEnumerator.moveNext())
{
companyInfo =con2Buf(companyInfoEnumerator.current());
info(strFmt(
"List: RecId: %1, Name: %2, InstanceRelationType: %3",
companyInfo.RecId,
companyInfo.Name,
companyInfo.InstanceRelationType));
}
}

Output:
Orig: RecId: 5637151316, Name: Contoso Entertainment Systems - E&G Division, InstanceRelationType: 41
List: RecId: 5637151316, Name: Contoso Entertainment Systems - E&G Division, InstanceRelationType: 41
 

Viewing all articles
Browse latest Browse all 130240


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>