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