Miklix

Gebruik 'n navraag in 'n SysOperation-datakontrakklas in Dynamics AX 2012

Gepubliseer: 16 Februarie 2025 om 01:25:16 UTC
Laas opgedateer: 12 Januarie 2026 om 08:47:34 UTC

Hierdie artikel gaan oor die besonderhede oor hoe om 'n gebruikerskonfigureerbare en filtreerbare navraag by 'n SysOperation-datakontrakklas in Dynamics AX 2012 (en Dynamics 365 for Operations) te voeg.


Hierdie bladsy is masjienvertaal uit Engels om dit vir soveel mense moontlik toeganklik te maak. Ongelukkig is masjienvertaling nog nie 'n volmaakte tegnologie nie, dus kan foute voorkom. As jy verkies, kan jy die oorspronklike Engelse weergawe hier sien:

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

Die inligting in hierdie plasing is gebaseer op Dynamics AX 2012 R3. Dit mag dalk geldig wees vir ander weergawes, maar ook nie. (Opdatering: Ek kan bevestig dat dit ook op Dynamics 365 for Operations werk)

Ek vergeet altyd die besonderhede oor hoe om 'n navraag in die SysOperation-raamwerk te spesifiseer en te initialiseer. Ek dink die meeste van die bondeltake wat ek gemaak het, is nie gebaseer op gebruikerskonfigureerbare navrae nie, maar nou en dan moet ek so 'n bondeltaak maak, so hierdie plasing is ook vir my eie verwysing.

Eerstens, in die datakontrakklas, sal die navraag in 'n string gestoor word. Die parm-metode moet versier word met die AifQueryTypeAttribute-attribuut, soos volg (in hierdie voorbeeld het ek die SalesUpdate-navraag gebruik, maar jy kan dit met enige AOT-navraag vervang):

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

    packedQuery = _packedQuery;
    return packedQuery;
}

As jy wil hê dat die navraag eerder deur die beheerderklas bepaal word, kan jy ook 'n leë string gebruik. In daardie geval moet jy ook 'n paar hulpmetodes implementeer (wat jy waarskynlik in elk geval vir jou eie gerief moet implementeer wanneer jy toegang tot die navraag benodig):

public Query getQuery()
{
    ;

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

public void setQuery(Query _query)
{
    ;

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

As jy die navraag moet initialiseer (byvoorbeeld, reekse byvoeg), moet jy 'n initQuery-metode implementeer:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Jy moet seker maak dat jy hierdie metode vanaf die beheerderklas aanroep.

Verdere Leeswerk

As jy hierdie plasing geniet het, sal jy dalk ook van hierdie voorstelle hou:


Deel op BlueskyDeel op FacebookDeel op LinkedInDeel op TumblrDeel op XDeel op LinkedInSpeld op Pinterest

Mikkel Christensen

Oor die skrywer

Mikkel Christensen
Mikkel is die skepper en eienaar van miklix.com. Hy het meer as 20 jaar ondervinding as 'n professionele rekenaarprogrammeerder/sagteware-ontwikkelaar en is tans voltyds in diens van 'n groot Europese IT-korporasie. Wanneer hy nie blog nie, spandeer hy sy vrye tyd aan 'n groot verskeidenheid belangstellings, stokperdjies en aktiwiteite, wat tot 'n mate weerspieël kan word in die verskeidenheid onderwerpe wat op hierdie webwerf gedek word.