Miklix

Užklausos naudojimas SysOperation duomenų sutarties klasėje Dynamics AX 2012

Paskelbta: 2025 m. vasario 16 d. 01:22:54 UTC

Šiame straipsnyje pateikiama išsami informacija apie tai, kaip pridėti vartotojo konfigūruojamą ir filtruojamą užklausą prie SysOperation duomenų sutarties klasės sistemoje Dynamics AX 2012 (ir Dynamics 365 for Operations)


Šis puslapis buvo mašininiu būdu išverstas iš anglų kalbos, kad juo galėtų naudotis kuo daugiau žmonių. Deja, mašininis vertimas dar nėra tobula technologija, todėl gali pasitaikyti klaidų. Jei pageidaujate, originalią versiją anglų kalba galite peržiūrėti čia:

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

Šiame įraše pateikta informacija pagrįsta Dynamics AX 2012 R3. Jis gali galioti arba negalioja kitoms versijoms. (Atnaujinimas: galiu patvirtinti, kad tai veikia ir „Dynamics 365 for Operations“)

Man atrodo, kad visada pamirštu išsamią informaciją, kaip nurodyti ir inicijuoti užklausą SysOperation sistemoje. Manau, kad dauguma paketinių užduočių, kurias darau, nėra pagrįstos vartotojo konfigūruojamomis užklausomis, bet retkarčiais man reikia atlikti tokį paketinį darbą, todėl šis įrašas taip pat skirtas man pačiam.

Pirma, duomenų sutarties klasėje užklausa bus saugoma supakuota į eilutę. Jo parm metodas turi būti papuoštas atributu AifQueryTypeAttribute (šiame pavyzdyje naudojau užklausą SalesUpdate, bet galite ją pakeisti bet kuria AOT užklausa):

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

    packedQuery = _packedQuery;
    return packedQuery;
}

Jei norite, kad užklausą nuspręstų valdiklio klasė, taip pat galite naudoti tuščią eilutę. Tokiu atveju taip pat turite įdiegti keletą pagalbinių metodų (kuriuos tikriausiai vis tiek turėtumėte įdiegti savo patogumui, kai jums reikia pasiekti užklausą):

public Query getQuery()
{
    ;

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

public void setQuery(Query _query)
{
    ;

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

Jei reikia inicijuoti užklausą (pavyzdžiui, pridėti diapazonus), turėtumėte įdiegti initQuery metodą:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Būtinai iškvieskite šį metodą iš valdiklio klasės.

Pasidalinkite „Bluesky“.Dalintis FacebookBendrinkite „LinkedIn“.Bendrinkite „Tumblr“.Dalintis XBendrinkite „LinkedIn“.Prisegti prie Pinterest

Mikkel Bang Christensen

Apie autorių

Mikkel Bang Christensen
Mikkelis yra miklix.com kūrėjas ir savininkas. Jis turi daugiau nei 20 metų profesionalaus kompiuterių programuotojo ir programinės įrangos kūrėjo patirtį ir šiuo metu visą darbo dieną dirba didelėje Europos IT korporacijoje. Kai jis nerašo tinklaraščio, laisvalaikį skiria įvairiems interesams, pomėgiams ir užsiėmimams, kurie tam tikra prasme gali atsispindėti šioje svetainėje nagrinėjamų temų įvairovėje.