Použitie dotazu v triede kontraktu údajov SysOperation v Dynamics AX 2012
Publikované: 16. februára 2025 o 1:23:06 UTC
Tento článok obsahuje podrobnosti o tom, ako pridať používateľsky konfigurovateľný a filtrovateľný dotaz do triedy zmluvy údajov SysOperation v Dynamics AX 2012 (a Dynamics 365 for Operations)
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
Informácie v tomto príspevku sú založené na Dynamics AX 2012 R3. Môže a nemusí platiť pre iné verzie. (Aktualizácia: Môžem potvrdiť, že to funguje aj na Dynamics 365 for Operations)
Vždy sa mi zdá, že zabúdam na podrobnosti o tom, ako zadať a inicializovať dotaz v rámci SysOperation. Myslím, že väčšina dávkových úloh, ktoré som robil, nie je založená na používateľsky konfigurovateľných dopytoch, ale občas potrebujem urobiť takúto dávkovú prácu, takže tento príspevok je tiež pre moju vlastnú referenciu.
Po prvé, v triede dátových zmlúv bude dotaz uložený zabalený do reťazca. Jeho metóda parm musí byť ozdobená atribútom AifQueryTypeAttribute, ako je to napríklad (v tomto príklade som použil dotaz SalesUpdate, ale môžete ho nahradiť akýmkoľvek dotazom AOT):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Ak chcete, aby o dotaze rozhodovala namiesto toho trieda radiča, môžete použiť aj prázdny reťazec. V takom prípade musíte implementovať aj niekoľko pomocných metód (ktoré by ste pravdepodobne aj tak mali implementovať pre svoje pohodlie, keď potrebujete získať prístup k dotazu):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Ak potrebujete inicializovať dotaz (napríklad pridať rozsahy), mali by ste implementovať metódu initQuery:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Musíte sa uistiť, že túto metódu voláte z triedy radiča.