Miklix

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)


Această pagină a fost tradusă automat din limba engleză pentru a o face accesibilă cât mai multor persoane. Din păcate, traducerea automată nu este încă o tehnologie perfecționată, astfel încât pot apărea erori. Dacă preferați, puteți vizualiza versiunea originală în limba engleză aici:

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):

public Query getQuery()
{
    ;

    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:

public void 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:


Distribuie pe BlueskyDistribuie pe FacebookDistribuie pe LinkedInDistribuie pe TumblrDistribuie pe XDistribuie pe LinkedInPin pe Pinterest

Mikkel Christensen

Despre autor

Mikkel Christensen
Mikkel este creatorul și proprietarul miklix.com. El are peste 20 de ani de experiență ca programator de calculatoare/dezvoltator software profesionist și este în prezent angajat cu normă întreagă pentru o mare corporație europeană de IT. Atunci când nu scrie pe blog, își petrece timpul liber cu o gamă largă de interese, hobby-uri și activități, care se pot reflecta într-o anumită măsură în varietatea de subiecte abordate pe acest site.