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
Acest articol trece peste detalii despre cum să adăugați o interogare configurabilă și filtrabilă de utilizator la o clasă de contract 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. Poate fi valabil sau nu pentru alte versiuni. (Actualizare: pot confirma că acest lucru funcționează și pe Dynamics 365 for Operations)
Se pare că uit întotdeauna detaliile despre cum să specific și să inițializez o interogare în cadrul SysOperation. Presupun că cele mai multe dintre joburile 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, așa că această postare este și pentru propria mea referință.
În primul rând, în clasa contractului de date, interogarea va fi stocată într-un șir. Metoda sa parm trebuie să fie decorată cu atributul AifQueryTypeAttribute, așa (î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 controlerului, puteți utiliza și un șir gol. În acest caz, trebuie să implementați și câteva metode de ajutor (pe care probabil ar trebui să le implementați oricum pentru confortul dvs. 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țializați interogarea (de exemplu, adăugați intervale), ar trebui să implementați o metodă initQuery:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Trebuie să vă asigurați că apelați această metodă din clasa controlerului.