8-800-700-15-02

Звонок по России
бесплатный

info@i-neti.ru

Табличное наследование и наборы объектов

asd
Дата публикации: 20.02.2014

Имейте в виду, существует проблема с хранением записей дочерних таблиц в наборах объектов, например List.

Если у вас есть иерархия таблиц и вам нужно добавить запись дочерней таблицы в List, а затем попытаться получить ее обратно, информация из родительских таблиц теряется вместе со значением поля InstanceRelationType.

Следующий джоб воспроизводит ситуацию:

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));
    }
}

Результат: 

Данные: RecId: 5637151316, Имя: Contoso Entertainment Systems - E & G дивизия, InstanceRelationType: 41 
List: RecId: 5637151316, Name:, InstanceRelationType: 0 

Лучшим решением будет использовать функцию buf2con, чтобы преобразовать буфер таблицы в контейнер, сохранить контейнер в List, затем использовать con2buf для выбора значения перечислением.

 

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));
    }
}

Результат: 

Данные: RecId: 5637151316, Имя: Contoso Entertainment Systems - E & G дивизия, InstanceRelationType: 41 
List: RecId: 5637151316, Имя: Contoso Entertainment Systems - E & G дивизия, InstanceRelationType: 41


Примечание: запрос об этой ошибке отравлен в MS Support.

Оригинал статьи на английском: ссылка.

 

Акция "Тест-драйв Сопровождения"

Попробуй сопровождение АХ до подписания договора!


Узнать подробнее

Другие записи в блоге

20.02.2020
Упрощенное получение значения аналитики После релиза Dynamics 365 for Operations [Enterprise Edition] структура аналитик и бизнес-логика немного изменились. В этом посте я познакомлю вас с...
17.02.2020
В этом ролике Дмитрий, разработчик Dynamics расскажет:
24.01.2020
В этом видео Дмитрий Уткин расскажет о том, как автоматически собрать модель в Microsoft Dynamics AX 2012 с помощью Pipelines в Azure DevOps.

Подпишитесь на блог

Все интересные статьи нашего блога на Вашем почтовом ящике!


Подписка

Служба контроля качества сервиса

Свои пожелания и отзывы о качестве обслуживания Вы можете оставить в разделе


Письмо директору