Miklix

Korištenje upita u klasi ugovora o podacima SysOperation u sustavu Dynamics AX 2012

Objavljeno: 16. veljače 2025. u 01:25:41 UTC
Zadnje ažuriranje: 12. siječnja 2026. u 08:47:37 UTC

Ovaj članak detaljno opisuje kako dodati korisnički konfiguriran i filtriran upit klasi ugovora o podacima SysOperation u sustavu Dynamics AX 2012 (i Dynamics 365 for Operations).


Ova je stranica strojno prevedena s engleskog kako bi bila dostupna što većem broju ljudi. Nažalost, strojno prevođenje još nije usavršena tehnologija pa se mogu pojaviti pogreške. Ako želite, izvornu englesku verziju možete pogledati ovdje:

Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012

Informacije u ovoj objavi temelje se na sustavu Dynamics AX 2012 R3. Mogu, ali i ne moraju biti važeće za druge verzije. (Ažuriranje: Mogu potvrditi da ovo radi i na sustavu Dynamics 365 for Operations)

Čini mi se da uvijek zaboravim detalje o tome kako specificirati i inicijalizirati upit u SysOperation frameworku. Pretpostavljam da većina batch poslova koje sam radio nisu bazirani na korisnički konfiguriranim upitima, ali s vremena na vrijeme moram napraviti takav batch posao, pa je ova objava i za moju vlastitu referencu.

Prvo, u klasi ugovora podataka, upit će biti pohranjen zapakiran u nizu znakova. Njegova metoda parm mora biti ukrašena atributom AifQueryTypeAttribute, ovako (u ovom primjeru koristio sam upit SalesUpdate, ali ga možete zamijeniti bilo kojim AOT upitom):

[
    DataMemberAttribute,
    AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
    ;

    packedQuery = _packedQuery;
    return packedQuery;
}

Ako želite da upit umjesto toga odlučuje klasa kontrolera, možete koristiti i prazan niz znakova. U tom slučaju, također trebate implementirati nekoliko pomoćnih metoda (koje biste vjerojatno trebali implementirati ionako radi vlastite udobnosti kada trebate pristupiti upitu):

public Query getQuery()
{
    ;

    return new Query(SysOperationHelper::base64Decode(packedQuery));
}

public void setQuery(Query _query)
{
    ;

    packedQuery = SysOperationHelper::base64Encode(_query.pack());
}

Ako trebate inicijalizirati upit (na primjer, dodati raspone), trebali biste implementirati metodu initQuery:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Morate se pobrinuti da pozovete ovu metodu iz klase kontrolera.

Dodatno čitanje

Ako vam se svidio ovaj post, možda će vam se svidjeti i ovi prijedlozi:


Podijeli na BlueskyPodijelite na FacebookuPodijelite na LinkedInuPodijelite na TumblrPodijeli na XPodijelite na LinkedInuPrikvači na Pinterest

Mikkel Christensen

O autoru

Mikkel Christensen
Mikkel je kreator i vlasnik miklix.com. Ima više od 20 godina iskustva kao profesionalni računalni programer/razvijač softvera i trenutno je zaposlen na puno radno vrijeme za veliku europsku IT korporaciju. Kada ne piše blog, svoje slobodno vrijeme provodi na široku lepezu interesa, hobija i aktivnosti, što se u određenoj mjeri može odraziti na različite teme obrađene na ovoj web stranici.