Použití dotazu v třídě SysOperation Data Contract v Dynamics AX 2012
Vydáno: 16. února 2025 v 1:21:38 UTC
Poslední aktualizace: 12. ledna 2026 v 8:47:04 UTC
Tento článek podrobně popisuje, jak přidat uživatelem konfigurovatelný a filtrovatelný dotaz do třídy datových kontraktů SysOperation v Dynamics AX 2012 (a Dynamics 365 for Operations).
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
Informace v tomto příspěvku jsou založeny na aplikaci Dynamics AX 2012 R3. Pro jiné verze mohou, ale nemusí být platné. (Aktualizace: Mohu potvrdit, že to funguje i v aplikaci Dynamics 365 for Operations.)
Vždycky si jakoby zapomínám na detaily, jak specifikovat a inicializovat dotaz v frameworku SysOperation. Myslím, že většina dávkových úloh, které jsem dělal, není založena na uživatelsky konfigurovatelných dotazech, ale čas od času potřebuji takovou dávkovou úlohu vytvořit, takže tento příspěvek je také pro mou vlastní informaci.
Nejprve bude dotaz ve třídě datového kontraktu uložen zabalený v řetězci. Jeho metoda parm musí být doplněna atributem AifQueryTypeAttribute, například takto (v tomto příkladu jsem použil dotaz SalesUpdate, ale můžete jej nahradit libovolným dotazem AOT):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Pokud chcete, aby o dotazu rozhodovala třída kontroleru, můžete také použít prázdný řetězec. V takovém případě je také třeba implementovat několik pomocných metod (které byste pravděpodobně měli implementovat pro vaše vlastní pohodlí, když potřebujete k dotazu přistupovat):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Pokud potřebujete inicializovat dotaz (například přidat rozsahy), měli byste implementovat metodu initQuery:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Musíte se ujistit, že tuto metodu voláte z třídy kontroleru.
Další čtení
Pokud se vám tento příspěvek líbil, mohly by se vám líbit i tyto návrhy:
- Rozdíl mezi data() a buf2Buf() v Dynamics AX 2012
- Chyba „Pro objekt smlouvy dat není definována žádná třída metadat“ v Dynamics AX 2012
- Volání dokumentových služeb AIF přímo z X++ v Dynamics AX 2012
