Užklausos naudojimas SysOperation duomenų sutarties klasėje Dynamics AX 2012
Paskelbta: 2025 m. vasario 16 d. 01:22:54 UTC
Šiame straipsnyje pateikiama išsami informacija apie tai, kaip pridėti vartotojo konfigūruojamą ir filtruojamą užklausą prie SysOperation duomenų sutarties klasės sistemoje Dynamics AX 2012 (ir Dynamics 365 for Operations)
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
Šiame įraše pateikta informacija pagrįsta Dynamics AX 2012 R3. Jis gali galioti arba negalioja kitoms versijoms. (Atnaujinimas: galiu patvirtinti, kad tai veikia ir „Dynamics 365 for Operations“)
Man atrodo, kad visada pamirštu išsamią informaciją, kaip nurodyti ir inicijuoti užklausą SysOperation sistemoje. Manau, kad dauguma paketinių užduočių, kurias darau, nėra pagrįstos vartotojo konfigūruojamomis užklausomis, bet retkarčiais man reikia atlikti tokį paketinį darbą, todėl šis įrašas taip pat skirtas man pačiam.
Pirma, duomenų sutarties klasėje užklausa bus saugoma supakuota į eilutę. Jo parm metodas turi būti papuoštas atributu AifQueryTypeAttribute (šiame pavyzdyje naudojau užklausą SalesUpdate, bet galite ją pakeisti bet kuria AOT užklausa):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Jei norite, kad užklausą nuspręstų valdiklio klasė, taip pat galite naudoti tuščią eilutę. Tokiu atveju taip pat turite įdiegti keletą pagalbinių metodų (kuriuos tikriausiai vis tiek turėtumėte įdiegti savo patogumui, kai jums reikia pasiekti užklausą):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Jei reikia inicijuoti užklausą (pavyzdžiui, pridėti diapazonus), turėtumėte įdiegti initQuery metodą:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Būtinai iškvieskite šį metodą iš valdiklio klasės.