Miklix

Uporaba poizvedbe v podatkovnem pogodbenem razredu SysOperation v Dynamics AX 2012

Objavljeno: 16. februar 2025 ob 1:23:07 dop. UTC

Ta članek obravnava podrobnosti o tem, kako dodati poizvedbo, ki jo lahko konfigurira uporabnik in jo je mogoče filtrirati, v razred podatkovne pogodbe SysOperation v 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 Dynamics AX 2012 R3. Lahko velja ali ne velja za druge različice. (Posodobitev: lahko potrdim, da to deluje tudi v Dynamics 365 for Operations)

Zdi se, da vedno pozabim na podrobnosti o tem, kako določiti in inicializirati poizvedbo v ogrodju SysOperation. Predvidevam, da večina paketnih opravil, ki sem jih opravljal, ne temelji na poizvedbah, ki jih lahko konfigurira uporabnik, ampak vsake toliko časa moram opraviti takšno paketno opravilo, zato je ta objava tudi za mojo lastno referenco.

Prvič, v razredu podatkovne pogodbe bo poizvedba shranjena zapakirana v niz. Njegova metoda parm mora biti okrašena z atributom AifQueryTypeAttribute, tako (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 bi jih verjetno vseeno morali implementirati za lastno udobje, ko morate dostopati 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);
}

Poskrbeti morate za klic te metode iz razreda krmilnika.

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

Mikkel Bang Christensen

O avtorju

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