Використання запиту в класі контрактів даних SysOperation в Dynamics AX 2012
Опубліковано: 16 лютого 2025 р. о 01:23:10 UTC
Останнє оновлення: 12 січня 2026 р. о 08:47:22 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);
}
Вам потрібно переконатися, що цей метод викликається з класу контролера.
Додаткова література
Якщо вам сподобався цей пост, вам також можуть сподобатися ці пропозиції:
- Короткий огляд Dynamics AX 2012 SysOperation Framework
- Видалення юридичної особи (облікових записів компаній) у Dynamics AX 2012
- Форматування рядків за допомогою Macro і strFmt в Dynamics AX 2012
