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

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)


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

public Query getQuery()
{
    ;

    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:

public void initQuery()
{
    Query queryLocal = this.getQuery();
    ;

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Trebuie să vă asigurați că apelați această metodă din clasa controlerului.

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

Mikkel Bang Christensen

Despre autor

Mikkel Bang 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.