Miklix

Uporaba poizvedbe v podatkovnem pogodbenem razredu SysOperation v Dynamics AX 2012

Objavljeno: 16. februar 2025 ob 1:23:07 dop. UTC
Nazadnje posodobljeno: 12. januar 2026 ob 8:47:20 dop. UTC

Ta članek podrobno opisuje, kako dodati uporabniško konfigurirano in filtrirano poizvedbo razredu podatkovnih pogodb SysOperation v programu Dynamics AX 2012 (in Dynamics 365 for Operations).


Ta stran je bila strojno prevedena iz angleščine, da bi bila dostopna čim večjemu številu ljudi. Žal strojno prevajanje še ni popolna tehnologija, zato lahko pride do napak. Če želite, si lahko izvirno angleško različico ogledate tukaj:

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

Informacije v tej objavi temeljijo na programu Dynamics AX 2012 R3. Morda veljajo za druge različice, morda pa tudi ne. (Posodobitev: Lahko potrdim, da to deluje tudi v programu Dynamics 365 for Operations.)

Vedno pozabim podrobnosti o tem, kako določiti in inicializirati poizvedbo v ogrodju SysOperation. Predvidevam, da večina paketnih opravil, ki sem jih izvajal, ne temelji na uporabniško konfiguriranih poizvedbah, vendar občasno moram narediti takšno paketno opravilo, zato je ta objava tudi za mojo lastno referenco.

Najprej bo v razredu podatkovnih pogodb poizvedba shranjena zapakirana v nizu. Njena metoda parm mora biti opremljena z atributom AifQueryTypeAttribute, takole (v tem primeru sem uporabil poizvedbo SalesUpdate, vendar jo lahko zamenjate s katero koli poizvedbo AOT):

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

    packedQuery = _packedQuery;
    return packedQuery;
}

Če želite, da poizvedbo namesto tega določi razred krmilnika, lahko uporabite tudi prazen niz. V tem primeru morate implementirati tudi nekaj pomožnih metod (ki jih verjetno vseeno morate implementirati za lastno udobje, ko potrebujete dostop do poizvedbe):

public Query getQuery()
{
    ;

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

public void setQuery(Query _query)
{
    ;

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

Če morate inicializirati poizvedbo (na primer dodati obsege), morate implementirati metodo initQuery:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

To metodo morate poklicati iz razreda krmilnika.

Nadaljnje branje

Če vam je bila ta objava všeč, vam bodo morda všeč tudi ti predlogi:


Delite na BlueskyDelite na FacebookuDelite na LinkedInuDelite na TumblrDelite na XDelite na LinkedInuPripni na Pinterest

Mikkel Christensen

O avtorju

Mikkel Christensen
Mikkel je avtor in lastnik spletne strani miklix.com. Ima več kot 20 let izkušenj kot profesionalni računalniški programer/razvijalec programske opreme in je trenutno za polni delovni čas zaposlen v veliki evropski IT korporaciji. Kadar ne piše bloga, svoj prosti čas posveča številnim interesom, hobijem in dejavnostim, kar se do neke mere odraža v raznolikosti tem na tem spletnem mestu.