Използване на заявка в клас договор за данни на SysOperation в Dynamics AX 2012
Публикувано: 16 февруари 2025 г. в 1:21:37 ч. 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);
}
Трябва да се уверите, че сте извикали този метод от класа контролер.