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:
static void tableInheritanceAndListBug(Args _args) { CompanyInfo companyInfo; List companyInfoList; ListEnumerator companyInfoEnumerator; companyInfoList = new List(Types::Record); select firstOnly 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.
static void tableInheritanceAndListBugWorkaround(Args _args) { CompanyInfo companyInfo; List companyInfoList; ListEnumerator companyInfoEnumerator; companyInfoList = new List(Types::Container); select firstOnly 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
UPDATE: the bugs is reported to MS Support
No comments:
Post a Comment