Miklix

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

Objavljeno: 16. februar 2025. u 01:25:39 UTC

Ovaj članak prolazi kroz detalje o tome kako dodati korisnički konfigurabilan i filtriran upit u klasu 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 su zasnovane na Dynamics AX 2012 R3. Može ili ne mora vrijediti za druge verzije. (Ažuriranje: Mogu potvrditi da ovo radi i na Dynamics 365 for Operations)

Uvijek se čini da zaboravljam detalje o tome kako specificirati i inicijalizirati upit u SysOperation frameworku. Pretpostavljam da većina batch poslova koje sam pravio nisu zasnovani na korisnički konfigurabilnim upitima, ali s vremena na vrijeme moram napraviti takav batch posao, tako da je ovaj post također za moju referencu.

Prvo, u klasi ugovora podataka, upit će biti pohranjen upakovan u niz. Njegova parm metoda mora biti ukrašena atributom AifQueryTypeAttribute, kao što je tako (u ovom primjeru sam koristio SalesUpdate upit, 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 bude odlučen od strane klase kontrolera umjesto toga, možete koristiti i prazan string. U tom slučaju, također morate implementirati nekoliko pomoćnih metoda (koje biste vjerojatno ionako trebali implementirati za vlastitu udobnost 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 opsege), trebali biste implementirati initQuery metodu:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Morate se pobrinuti da pozovete ovu metodu iz klase kontrolera.

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

Mikkel Bang Christensen

O autoru

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