Utilizarea unei interogări într-o clasă de contract de date SysOperation în Dynamics AX 2012
Publicat: 16 februarie 2025 la 01:23:04 UTC
Ultima actualizare: 12 ianuarie 2026 la 08:47:18 UTC
Acest articol prezintă detalii despre cum se adaugă o interogare configurabilă și filtrabilă de utilizator la o clasă de contracte de date SysOperation în Dynamics AX 2012 (și Dynamics 365 for Operations)
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
Informațiile din această postare se bazează pe Dynamics AX 2012 R3. Este posibil să fie sau nu valabile pentru alte versiuni. (Actualizare: Pot confirma că funcționează și pe Dynamics 365 for Operations)
Se pare că uit mereu detaliile despre cum să specific și să inițializez o interogare în framework-ul SysOperation. Presupun că majoritatea joburilor batch pe care le-am făcut nu se bazează pe interogări configurabile de utilizator, dar din când în când trebuie să fac un astfel de job batch, așa că această postare este și pentru propria mea referință.
În primul rând, în clasa contractului de date, interogarea va fi stocată împachetată într-un șir de caractere. Metoda sa parm trebuie decorată cu atributul AifQueryTypeAttribute, astfel (în acest exemplu am folosit interogarea SalesUpdate, dar o puteți înlocui cu orice interogare AOT):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Dacă doriți ca interogarea să fie decisă de clasa controller, puteți utiliza și un șir gol. În acest caz, trebuie să implementați și câteva metode helper (pe care probabil ar trebui să le implementați oricum pentru propria comoditate atunci când trebuie să accesați interogarea):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Dacă trebuie să inițializezi interogarea (de exemplu, să adaugi intervale), ar trebui să implementezi o metodă initQuery:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Trebuie să te asiguri că apelezi această metodă din clasa controller.
Lectură suplimentară
Dacă ți-a plăcut această postare, s-ar putea să-ți placă și aceste sugestii:
- Apelarea serviciilor de documente AIF direct de la X++ în Dynamics AX 2012
- Utilizarea cadrului SysExtension pentru a afla ce subclasă să instanțieze în Dynamics AX 2012
- Identificarea clasei și a interogării documentului pentru serviciul AIF în Dynamics AX 2012
