Miklix

Korištenje upita u klasi ugovora podataka SysOperation u Dynamics AX 2012

Objavljeno: 16. februar 2025. u 01:25:39 UTC
Posljednje ažurirano: 12. januar 2026. u 08:47:36 UTC

Ovaj članak detaljno objašnjava kako dodati korisnički konfigurabilan i filtriran upit klasi ugovora o podacima SysOperation u Dynamics AX 2012 (i Dynamics 365 for Operations)


Ova stranica je mašinski prevedena sa engleskog kako bi bila dostupna što većem broju ljudi. Nažalost, mašinsko prevođenje još nije usavršena tehnologija, pa može doći do grešaka. Ako želite, možete pogledati originalnu englesku verziju ovdje:

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

Informacije u ovom postu zasnovane su na Dynamics AX 2012 R3. Mogu, ali i ne moraju biti važeće za druge verzije. (Ažuriranje: Mogu potvrditi da ovo također radi na Dynamics 365 for Operations)

Uvijek izgleda zaboravljam detalje o tome kako specificirati i inicijalizirati upit u SysOperation okviru. Pretpostavljam da većina batch poslova koje sam pravio nisu zasnovani na upitima koje može konfigurirati korisnik, ali s vremena na vrijeme moram napraviti takav batch posao, tako da je ovaj post i za moju vlastitu referencu.

Prvo, u klasi ugovora o podacima, upit će biti pohranjen spakovan u string. Njegova metoda parm mora biti ukrašena atributom AifQueryTypeAttribute, ovako (u ovom primjeru sam koristio 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 odredi klasa kontrolera, možete koristiti i prazan string. U tom slučaju, potrebno je implementirati i nekoliko pomoćnih metoda (koje biste vjerovatno trebali implementirati ionako radi vlastite udobnosti kada vam je potreban pristup 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 uvjeriti da pozivate ovu metodu iz klase kontrolera.

Dodatno čitanje

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


Podijelite na BlueskyPodijelite na FacebookuPodijelite na LinkedIn-uPodijelite na Tumblr-uPodijeli na XPodijelite na LinkedIn-uPrikači na Pinterest

Mikkel Christensen

O autoru

Mikkel Christensen
Mikkel je kreator i vlasnik miklix.com. Ima preko 20 godina iskustva kao profesionalni kompjuterski programer/programer softvera i trenutno je zaposlen sa punim radnim vremenom u velikoj evropskoj IT korporaciji. Kada ne piše blog, svoje slobodno vrijeme provodi na širokom spektru interesovanja, hobija i aktivnosti, što se u određenoj mjeri može odraziti na različite teme koje se obrađuju na ovoj web stranici.