Miklix

Използване на заявка в клас договор за данни на 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;
}

Ако искате заявката да бъде решена от класа на контролера, можете да използвате и празен низ. В този случай е необходимо да имплементирате и няколко помощни метода (които вероятно е добре да имплементирате така или иначе за ваше удобство, когато имате нужда от достъп до заявката):

public Query getQuery()
{
    ;

    return new Query(SysOperationHelper::base64Decode(packedQuery));
}

public void setQuery(Query _query)
{
    ;

    packedQuery = SysOperationHelper::base64Encode(_query.pack());
}

Ако е необходимо да инициализирате заявката (например, да добавите диапазони), трябва да имплементирате метод initQuery:

public void initQuery()
{
    Query queryLocal = this.getQuery();
    ;

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Трябва да се уверите, че извиквате този метод от класа на контролера.

Допълнително четене

Ако ви е харесала тази публикация, може да ви харесат и тези предложения:


Споделете в BlueskyСподелете във FacebookСподелете в LinkedInСподелете в TumblrСподелете в XСподелете в LinkedInЗакачи в Пинтерест

Микел Кристенсен

За автора

Микел Кристенсен
Микел е създател и собственик на сайта miklix.com. Той има над 20 години опит като професионален компютърен програмист/разработчик на софтуер и в момента работи на пълен работен ден в голяма европейска ИТ корпорация. Когато не пише в блога, той прекарва свободното си време в широк спектър от интереси, хобита и дейности, които до известна степен могат да бъдат отразени в разнообразието от теми, обхванати в този уебсайт.