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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.09.2025, 01:22   #8  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
337 / 915 (31) +++++++
Регистрация: 23.10.2012
Моделируем ситуацию с переиспользованием упакованный и "красивого" Query из 9-ки в 12-ке.
Создаём 2 таблицы в 9-ке:
- DimQueryPack, с полем value типа container. Хранит в себе упакованный query;
- DimTableTest, с полем Dimension типа string (array) от EDT Dimension. Нужна для выверки (Dimension Id идентичный между версиями).

Запускаем джоб в 9-ке:
X++:
static void JobDimQueryCreate_Ax5(Args _args)
{
    DimQueryPack            dqp;
    Query                   query;
    QueryBuildDataSource    qbds;
    
    int code2ArrayIdx(SysDimension _sysDimension)
    {
        return new SysDictEnum(enumnum(SysDimension)).value2Index(_sysDimension) + 1;
    }
    
    select firstOnly RecId from dqp;
    
    if (!dqp.RecId)
    {
        query = new query();
        query.literals(1);
        qbds = query.addDataSource(tableNum(DimTableTest));
        qbds.addSelectionField(fieldNum(DimTableTest, Dimension));
        
        //qbds.addRange(fieldNum(DimTableTest, RecId)).value(QueryBuildRangeCondition::create(qbds, fieldId2Name(tableNum(DimTableTest), fieldId2ext(fieldNum(DimTableTest, Dimension), 2))).value(QueryBuildRangeOperator::Equal, '1929').toString());
        qbds.addRange(fieldNum(DimTableTest, RecId)).value(
            strFmt('(( %1.Dimension[2]=="1929" ))',
            qbds.name(),
            fieldid2name(tablenum(DimTableTest), fieldid2ext(fieldnum(DimTableTest, Dimension), code2ArrayIdx(SysDimension::Center))),
            SysQuery::value('1929')
            )
            );
        
        ttsBegin;
        
        dqp.initValue();
        dqp.value = query.pack();
        dqp.insert();
        
        ttsCommit;
    }
}
Экспорт/импорт в 12-ку данных таблиц и запускаем джоб (всего их будет 3):
X++:
static void JobDimQueryCreate_Ax6(Args _args)
{
    DimQueryPack dqp;
    ;
    
    ttsBegin;
    
    dqp.initValue();
    dqp.insert();
    
    ttsCommit;
}
Через TSQL запрос меняем value в 12-ке тем, что лежит в 9-ке (в DimQueryPack).

Запускаем на обеих средах джоб:
X++:
static void JobDimTableTest(Args _args)
{
    DimQueryPack dqp;
    DimTableTest dtt;
    QueryRun     queryRun;
    ;
    
    select firstOnly RecId from dtt;
    
    if (!dtt.RecId)
    {
        ttsBegin;
        dtt.initValue();
        dtt.Dimension[1] = '1929';
        dtt.doInsert();
        
        dtt.clear();
        dtt.initValue();
        dtt.Dimension[2] = '1929';
        dtt.doInsert();
        
        ttsCommit;
    }

    setPrefix(strFmt("Test"));

    while select dqp
    {
        queryRun = new SysQueryRun(dqp.value);
        
        if (queryRun.next())
        {
            info(strFmt("%1", queryRun.get(tableNum(DimTableTest)).RecId));
        }
        else
        {
            warning(strFmt("Нет записей"));
        }
    }
}
Получаем результат, который ничем не отличается от исходного, изложенного в оригинальном посте данной ветки. Это всё было нужно для проверки навязчивой мысли с подменой hex'а в упакованном blob'е. Это сложнее нежели создать view, но является разовым действием по написанию целевой функции. При этом, учитывая контекст, что всё же 12-ка умеет, не через расширенные диапазоны, "красиво" выбирать значения из полей-массивов (см. оригинальный джоб), вероятность решить проблему подобным образом всё ещё существует.

Наверняка есть и иной способ решения, например анализ и отладка низкоуровневых функций. Они начинаются с префикса qe (что в 9-ке, что в 12-ке).
Например, при работе с функцией QueryBuildRange.value интересует функция qeRangeNode :: propChanged.

Последний раз редактировалось Товарищ ♂uatr; 19.09.2025 в 01:25.
Теги
bug, extended query, extended query syntax

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AXAPTA 2012. Работа с выпадающим списком feuerfub DAX: Функционал 1 21.11.2019 15:06
emeadaxsupport: Dynamics AX 2012 Reporting: How to add company logo into query based report Blog bot DAX Blogs 0 06.12.2012 21:11
X++: X++ Arrays Behave Differently in .NET CIL, in Dynamics AX 2012 Blog bot DAX Blogs 0 17.09.2012 23:11
dynamicsaxtraining: Purchase Blog bot DAX Blogs 0 11.03.2012 05:25

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:12.