Miklix

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

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

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 години опит като професионален компютърен програмист/разработчик на софтуер и в момента работи на пълен работен ден в голяма европейска ИТ корпорация. Когато не пише в блога, той прекарва свободното си време в широк спектър от интереси, хобита и дейности, които до известна степен могат да бъдат отразени в разнообразието от теми, обхванати в този уебсайт.