Използване на заявка в клас договор за данни на SysOperation в Dynamics AX 2012
Публикувано: 16 февруари 2025 г. в 1:21:37 ч. UTC
Последна актуализация: 12 януари 2026 г. в 8:47:04 ч. 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
- Грешка „Няма дефиниран клас метаданни за обект на договор за данни“ в Dynamics AX 2012
- Бърз преглед на Dynamics AX 2012 SysOperation Framework
