Miklix

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

Publikované: 16. februára 2025 o 1:23:06 UTC
Posledná aktualizácia: 12. januára 2026 o 8:47:19 UTC

Tento článok podrobne popisuje, ako pridať používateľom konfigurovateľný a filtrovateľný dotaz do triedy dátových zmlúv SysOperation v systéme 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 systéme Dynamics AX 2012 R3. Môžu, ale nemusia byť platné aj pre iné verzie. (Aktualizácia: Môžem potvrdiť, že to funguje aj v systéme Dynamics 365 for Operations)

Vždy akoby zabúdam na detaily 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ľom konfigurovateľných dotazoch, ale občas potrebujem vytvoriť takúto dávkovú úlohu, takže tento príspevok slúži aj pre moju vlastnú referenciu.

Najprv bude v triede dátových kontraktov uložený dotaz zabalený v reťazci. Jeho metóda parm musí byť doplnená atribútom AifQueryTypeAttribute takto (v tomto príklade som použil dotaz SalesUpdate, ale môžete ho nahradiť ľubovoľným dotazom AOT):

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

    packedQuery = _packedQuery;
    return packedQuery;
}

Ak chcete, aby o dotaze rozhodovala trieda kontroléra, 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 mali implementovať aj tak pre vaše pohodlie, keď potrebujete pristupovať 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 kontroléra.

Ďalšie čítanie

Ak sa vám tento príspevok páčil, možno sa vám budú páčiť aj tieto návrhy:


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

Mikkel Christensen

O autorovi

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