Miklix

Коришћење упита у класи уговора СисОператион Дата у Динамицс АКС 2012

Објављено: 16. фебруар 2025. 01:27:32 UTC
Последње ажурирано: 12. јануар 2026. 08:47:41 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);
}

Морате се уверити да позовете ову методу из класе контролера.

Даље читање

Ако сте уживали у овом посту, можда ће вам се свидети и ови предлози:


Поделите на БлуескиПоделите на ФејсбукуДелите на ЛинкедИнуПодели на Тумблр-уПодели на КсДелите на ЛинкедИнуПин на Пинтерест-у

Миккел Цхристенсен

О аутору

Миккел Цхристенсен
Миккел је креатор и власник миклик.цом. Има преко 20 година искуства као професионални компјутерски програмер/програмер софтвера и тренутно је запослен са пуним радним временом у великој европској ИТ корпорацији. Када не пише блог, своје слободно време проводи на широком спектру интересовања, хобија и активности, што се у извесној мери може одразити на разноврсност тема обрађених на овој веб страници.