Miklix

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

Gepubliseer: 16 Februarie 2025 om 01:25:16 UTC

Hierdie artikel gaan oor die besonderhede oor hoe om 'n gebruikerkonfigureerbare 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 pos is gebaseer op Dynamics AX 2012 R3. Dit mag of mag nie geldig wees vir ander weergawes nie. (Opdatering: Ek kan bevestig dat dit ook op Dynamics 365 for Operations werk)

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

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

[
    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 besluit moet word, kan jy ook 'n leë string gebruik. In daardie geval moet jy ook 'n paar helpermetodes implementeer (wat jy waarskynlik in elk geval vir jou eie gerief moet implementeer wanneer jy toegang tot die navraag moet kry):

public Query getQuery()
{
    ;

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

public void setQuery(Query _query)
{
    ;

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

As jy die navraag moet inisialiseer (byvoorbeeld, voeg reekse by), moet jy 'n initQuery-metode implementeer:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

U moet seker maak dat u hierdie metode van die beheerderklas afroep.

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

Mikkel Bang Christensen

Oor die skrywer

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