Miklix

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

Paskelbta: 2025 m. vasario 16 d. 01:22:54 UTC
Paskutinį kartą atnaujinta: 2026 m. sausio 12 d. 08:47:12 UTC

Šiame straipsnyje išsamiai aprašoma, kaip į „SysOperation“ duomenų sutarties klasę „Dynamics AX 2012“ (ir „Dynamics 365 for Operations“) įtraukti vartotojo konfigūruojamą ir filtruojamą užklausą.


Š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“. Ji gali tikti kitoms versijoms, o gali ir netikti. (Atnaujinimas: galiu patvirtinti, kad tai veikia ir su „Dynamics 365 for Operations“)

Visada pamirštu, kaip nurodyti ir inicijuoti užklausą „SysOperation“ sistemoje. Manau, kad dauguma mano sukurtų paketinių užduočių nėra pagrįstos vartotojo konfigūruojamomis užklausomis, bet kartais man reikia atlikti tokią paketinę užduotį, todėl šis įrašas skirtas ir mano asmeninei informacijai.

Pirma, duomenų sutarties klasėje užklausa bus saugoma supakuota į eilutę. Jos parm metodas turi būti papildytas AifQueryTypeAttribute atributu, štai taip (šiame pavyzdyje naudojau SalesUpdate užklausą, bet ją galite 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ą spręstų valdiklio klasė, galite naudoti ir tuščią eilutę. Tokiu atveju taip pat turite įdiegti keletą pagalbinių metodų (kuriuos tikriausiai turėtumėte įdiegti savo patogumui, kai reikės 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);
}

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

Papildoma literatūra

Jei jums patiko šis įrašas, jums taip pat gali patikti šie pasiūlymai:


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

Mikkel Christensen

Apie autorių

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