Použitie dotazu v triede kontraktu údajov SysOperation v Dynamics AX 2012
Publikované: 16. februára 2025 o 1:23:06 UTC
Posledná aktualizácia: 12. januára 2026 o 8:47:19 UTC
Tento článok podrobne popisuje, ako pridať používateľom konfigurovateľný a filtrovateľný dotaz do triedy dátových zmlúv SysOperation v systéme 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 systéme Dynamics AX 2012 R3. Môžu, ale nemusia byť platné aj pre iné verzie. (Aktualizácia: Môžem potvrdiť, že to funguje aj v systéme Dynamics 365 for Operations)
Vždy akoby zabúdam na detaily 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ľom konfigurovateľných dotazoch, ale občas potrebujem vytvoriť takúto dávkovú úlohu, takže tento príspevok slúži aj pre moju vlastnú referenciu.
Najprv bude v triede dátových kontraktov uložený dotaz zabalený v reťazci. Jeho metóda parm musí byť doplnená atribútom AifQueryTypeAttribute takto (v tomto príklade som použil dotaz SalesUpdate, ale môžete ho nahradiť ľubovoľným dotazom AOT):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Ak chcete, aby o dotaze rozhodovala trieda kontroléra, 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 mali implementovať aj tak pre vaše pohodlie, keď potrebujete pristupovať 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 kontroléra.
Ďalšie čítanie
Ak sa vám tento príspevok páčil, možno sa vám budú páčiť aj tieto návrhy:
- Použitie rámca SysExtension na zistenie, ktorá podtrieda sa má vytvoriť v Dynamics AX 2012
- Odstráňte právnickú osobu (firemné účty) v Dynamics AX 2012
- Preveďte real na reťazec so všetkými desatinnými miestami v Dynamics AX 2012
