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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.08.2013, 23:10   #1  
kit22 is offline
kit22
Участник
 
30 / 12 (1) ++
Регистрация: 15.08.2012
Добрый! Дело в том, что у меня в этом поле может храниться много query.pack(). Заполнение поля идет следующим образом

X++:
 this.containerField += query.pack()
То есть мне надо узнать, есть ли в этом поле уже данный запрос, а в поле, например, хранится уже 4 query.pack() и пришел новый query.pack(). И мне не надо записывать query.pack() в это поле, если он уже есть там.
Старый 10.08.2013, 23:57   #2  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от kit22 Посмотреть сообщение
Добрый! Дело в том, что у меня в этом поле может храниться много query.pack(). Заполнение поля идет следующим образом

X++:
 this.containerField += query.pack()
То есть мне надо узнать, есть ли в этом поле уже данный запрос, а в поле, например, хранится уже 4 query.pack() и пришел новый query.pack(). И мне не надо записывать query.pack() в это поле, если он уже есть там.
Для проверки данного запроса на наличие в поле таблицы придумал вот такой способ:
X++:
static void EqualQueries(Args _args)
{
    // Таблица, содержащая контейнер запроса AssetTable
    QueryTable  myQueryTable;
    container   containerField;

    // AssetTable - Эквивалентны
    container   packedQuery = new Query(querystr(AssetTable)).pack();

    // AxdAddress - неэквивалентны
    // container   packedQuery = new Query(querystr(AxdAddress)).pack();
    ;

    // Наполнил исходными данными
    /*
    containerField += (new Query(querystr(AssetTable))      .pack());
    containerField += (new Query(querystr(AssetBudgetModel)).pack());
    containerField += (new Query(querystr(AssetProposal))   .pack());
    containerField += (new Query(querystr(AxdExpense))      .pack());

    myQueryTable.QueryCon = containerField;
    myQueryTable.write();
    */

    select firstonly myQueryTable;
    containerField = myQueryTable.QueryCon;

    // Сравниваю
    while (conlen(containerField))
    {
        if (new Query(containerField).pack() == packedQuery)
        {
            info("Equal");
        }

        containerField = condel(containerField, 1, 1);
    }
}

Последний раз редактировалось Cardagant; 11.08.2013 в 00:39.
За это сообщение автора поблагодарили: kit22 (1).
Старый 11.08.2013, 20:04   #3  
kit22 is offline
kit22
Участник
 
30 / 12 (1) ++
Регистрация: 15.08.2012
Спасибо! Действительно работает, хотя и немного искусственно Но других способов не нашел. Странно, что conpeek падает на сравнение. Видимо, дело в том, что query.pack() пакуется как контейнер с BLOB данными.
Старый 12.08.2013, 09:38   #4  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от kit22 Посмотреть сообщение
Спасибо! Действительно работает, хотя и немного искусственно Но других способов не нашел. Странно, что conpeek падает на сравнение. Видимо, дело в том, что query.pack() пакуется как контейнер с BLOB данными.
Соглашусь, что вполне может быть связано с этим.
Может кто-то предложит более красивый вариант решения данной задачи.
Рад помочь!
Старый 13.08.2013, 11:41   #5  
Мартынов Дмитрий is offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Регистрация: 02.02.2004
Адрес: г. Москва
Цитата:
Сообщение от Cardagant Посмотреть сообщение
Соглашусь, что вполне может быть связано с этим.
Может кто-то предложит более красивый вариант решения данной задачи.
Рад помочь!
А как вообще сравнить два query ?
Напрашивается один простой способ:

X++:
if (
query1.dataSourceNo(1).toString() == query2.dataSourceNo(1).toString();
)
Если это сработает - то дальше очевидно распаковываем нужный контейнер в query и сравнить два query.
Теги
ax2009, container, query

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX Sustained Engineering: Servicing of Dynamics AX 2012 and Dynamics AX 2012 Feature Pack Blog bot DAX Blogs 0 08.05.2012 23:12
AIF: OData Query Service Blog bot DAX Blogs 0 24.08.2011 09:11
jinx: Dynamics AX – Query-Ranges und Filtereinstellungen des Benutzers Blog bot DAX auf Deutsch 0 04.02.2010 00:05
Сравнение двух полей в Query Lucky13 DAX: Программирование 3 17.08.2005 11:42

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

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

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