AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.06.2017, 14:49   #1  
mdanko2000 is offline
mdanko2000
Участник
 
44 / 40 (2) +++
Регистрация: 21.04.2014
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
А как таблица называется? Чтобы на ней потренироваться.
Не думаю что это поможет , таблица называется ExportXMLExcelMainTable.

Я у себя поменял dictField.Type() на dictField.baseType() и всё заработало.

Ну и как пожелание, при переходе по дереву таблиц может имеет смысл фильтровать данные в гриде для текущей таблицы ?
Старый 29.03.2022, 09:30   #2  
oleggy is offline
oleggy
Участник
 
258 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Таблица: zRecordInfoTmp
Метод: zRecordInfoTmp

X++:
static zRecordInfoTmp fillForRecord(Common record, zRecordInfoTmp _zRecordInfoTmp = null, str _dsName = "", int _dsNum = 0, int _repeatCount = 1)
{
    zRecordInfoTmp          zRecordInfoTmp;
    DictTable               dictTable;
    DictField               dictField;
    int                     fieldCnt;
    int                     i;
    int                     j;
    int                     arraySize;
    str                     ts;
    ;
    if (_zRecordInfoTmp)
        zRecordInfoTmp = _zRecordInfoTmp;

    dictTable = new DictTable(record.TableId);
    fieldCnt  = dictTable.fieldCnt();

    for (i = 1; i <= fieldCnt; i++)
    {
        dictField = dictTable.fieldObject(dictTable.fieldCnt2Id(i));
        arraySize = dictField.arraySize();
        for (j = 1; j <= arraySize; j++)
        {
            if (dictField.isSql())
            {
                //w(dictField.);
                zRecordInfoTmp.clear();
                zRecordInfoTmp.FormDatasourceNum = _dsNum;
                zRecordInfoTmp.FormDatasourceName = _dsName;
                zRecordInfoTmp.RefRecId = record.RecId;
                zRecordInfoTmp.TableName = dictTable.name();
                if (_dsName && _repeatCount > 1)
                    zRecordInfoTmp.TableName += strfmt(" [%1]", _dsName);
                zRecordInfoTmp.RefTableId = dictTable.id();
                zRecordInfoTmp.RefFieldName = dictField.name(DbBackEnd::Native, j) + (arraySize > 1 ? strFmt('[%1]', j) : "");
                zRecordInfoTmp.RefFieldId = dictField.id();
                zRecordInfoTmp.FieldArrayIdx = j;
                zRecordInfoTmp.FieldLabel = dictField.label(j);

                if (dictField.type() == Types::Time)
                {
                    zRecordInfoTmp.FieldValue = time2str(record.(fieldid2ext(dictField.id(), j)), 1, 1);
                }
                else if (dictField.type() != Types::Container 
                        && dictField.baseType() != Types::Container // <------  fix
                        ) 
                {
                    ts = strfmt("%1", dictField.type());
                    zRecordInfoTmp.FieldValue = strfmt("%1", record.(fieldid2ext(dictField.id(), j)));
                }
                else
                {
                    zRecordInfoTmp.FieldValue = "[Container]";
                }
                zRecordInfoTmp.insert();
            }
        }
    }
    return zRecordInfoTmp;
}


Если имеется таблица у которой поле является EDT который в свою очередь является производным от Extends который в свою очередь с типом Container. Тогда вылетает ошибка.

Последний раз редактировалось oleggy; 29.03.2022 в 09:34.
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 29.03.2022, 10:49   #3  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
643 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от oleggy Посмотреть сообщение
Таблица: zRecordInfoTmp
Метод: zRecordInfoTmp

X++:
                else if (dictField.type() != Types::Container 
                        && dictField.baseType() != Types::Container // <------  fix


Если имеется таблица у которой поле является EDT который в свою очередь является производным от Extends который в свою очередь с типом Container. Тогда вылетает ошибка.
Чуть выше написано же, что достаточно метод type() исправить на baseType() и ошибки не будет. Т.е. первое условие можно в принципе выкинуть и все будет работать:
Цитата:
Сообщение от mdanko2000 Посмотреть сообщение
Я у себя поменял dictField.Type() на dictField.baseType() и всё заработало.
Или у вас даже в этом случае воспроизводится ошибка?
__________________
// no comments
Теги
github

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка записи в SalesParmSubLine FrolovAndy DAX: Программирование 2 09.01.2018 15:48
Dax12 форма ListPage: как скрыть/отобразить MenuItemButton без смены фокуса записи в гриде Aquarius DAX: Программирование 10 30.11.2016 14:36
Как лучше хранить ссылки на записи - (RefTableId, Company, RefRecId) mazzy DAX: Программирование 41 08.07.2011 13:18
ALEG: Доступны записи тренингов по Microsoft Dynamics NAV Blog bot DAX Blogs 0 21.03.2007 15:00
Автоматическое увеличение значения поля при создании новой записи. sguryev DAX: Программирование 3 06.02.2003 14:00

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:18.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.