Miklix

Použitie dotazu v triede kontraktu údajov SysOperation v Dynamics AX 2012

Publikované: 16. februára 2025 o 1:23:06 UTC

Tento článok obsahuje podrobnosti o tom, ako pridať používateľsky konfigurovateľný a filtrovateľný dotaz do triedy zmluvy údajov SysOperation v Dynamics AX 2012 (a Dynamics 365 for Operations)


Táto stránka bola strojovo preložená z angličtiny, aby bola prístupná čo najväčšiemu počtu ľudí. Žiaľ, strojový preklad ešte nie je dokonalá technológia, takže sa môžu vyskytnúť chyby. Ak chcete, môžete si pozrieť pôvodnú anglickú verziu tu:

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

Informácie v tomto príspevku sú založené na Dynamics AX 2012 R3. Môže a nemusí platiť pre iné verzie. (Aktualizácia: Môžem potvrdiť, že to funguje aj na Dynamics 365 for Operations)

Vždy sa mi zdá, že zabúdam na podrobnosti o tom, ako zadať a inicializovať dotaz v rámci SysOperation. Myslím, že väčšina dávkových úloh, ktoré som robil, nie je založená na používateľsky konfigurovateľných dopytoch, ale občas potrebujem urobiť takúto dávkovú prácu, takže tento príspevok je tiež pre moju vlastnú referenciu.

Po prvé, v triede dátových zmlúv bude dotaz uložený zabalený do reťazca. Jeho metóda parm musí byť ozdobená atribútom AifQueryTypeAttribute, ako je to napríklad (v tomto príklade som použil dotaz SalesUpdate, ale môžete ho nahradiť akýmkoľvek dotazom AOT):

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

    packedQuery = _packedQuery;
    return packedQuery;
}

Ak chcete, aby o dotaze rozhodovala namiesto toho trieda radiča, môžete použiť aj prázdny reťazec. V takom prípade musíte implementovať aj niekoľko pomocných metód (ktoré by ste pravdepodobne aj tak mali implementovať pre svoje pohodlie, keď potrebujete získať prístup k dotazu):

public Query getQuery()
{
    ;

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

public void setQuery(Query _query)
{
    ;

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

Ak potrebujete inicializovať dotaz (napríklad pridať rozsahy), mali by ste implementovať metódu initQuery:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Musíte sa uistiť, že túto metódu voláte z triedy radiča.

Zdieľať na BlueskyZdieľať na FacebookuZdieľať na LinkedInZdieľať na TumblrZdieľať na XZdieľať na LinkedInPripnúť na Pintereste

Mikkel Bang Christensen

O autorovi

Mikkel Bang Christensen
Mikkel je tvorcom a majiteľom miklix.com. Má viac ako 20 rokov skúseností ako profesionálny počítačový programátor/vývojár softvéru a v súčasnosti pracuje na plný úväzok pre veľkú európsku IT korporáciu. Keď práve nepíše blog, venuje svoj voľný čas širokej škále záujmov, koníčkov a aktivít, čo sa môže do istej miery odrážať v rôznorodosti tém na tejto webovej lokalite.