Використання запиту в класі контрактів даних SysOperation в Dynamics AX 2012
Опубліковано: 16 лютого 2025 р. о 01:23:10 UTC
У цій статті докладно описано, як додати налаштовуваний користувачем і фільтрований запит до класу контракту даних SysOperation у Dynamics AX 2012 (і Dynamics 365 for Operations)
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
Інформація в цій публікації базується на Dynamics AX 2012 R3. Він може бути дійсним, а може і не дійсним для інших версій. (Оновлення: я можу підтвердити, що це також працює в Dynamics 365 for Operations)
Я завжди начебто забуваю подробиці про те, як вказати та ініціалізувати запит у фреймворку SysOperation. Я припускаю, що більшість пакетних завдань, які я роблю, не базуються на запитах, які налаштовується користувачем, але час від часу мені потрібно робити таку пакетну роботу, тому ця публікація також для моєї довідки.
По-перше, у класі контракту даних запит буде зберігатися упакованим у рядок. Його метод parm повинен бути прикрашений атрибутом AifQueryTypeAttribute, як ось так (у цьому прикладі я використовував запит SalesUpdate, але ви можете замінити його будь-яким запитом AOT):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Якщо ви хочете, щоб запит визначав клас контролера, ви також можете використовувати порожній рядок. У цьому випадку вам також потрібно реалізувати кілька допоміжних методів (які ви, ймовірно, все одно повинні реалізувати для власної зручності, коли вам знадобиться доступ до запиту):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Якщо вам потрібно ініціалізувати запит (наприклад, додати діапазони), вам слід реалізувати метод initQuery:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Вам потрібно переконатися, що ви викликали цей метод з класу контролера.