Miklix

Vaicājuma izmantošana SysOperation datu līguma klasē programmā Dynamics AX 2012

Publicēts: 2025. gada 16. februāris 01:22:55 UTC

Šajā rakstā ir sniegta informācija par to, kā SysOperation datu līguma klasei pievienot lietotāja konfigurējamu un filtrējamu vaicājumu programmā Dynamics AX 2012 (un Dynamics 365 for Operations).


Šī lapa tika mašīntulkota no angļu valodas, lai padarītu to pieejamu pēc iespējas vairāk cilvēkiem. Diemžēl mašīntulkošana vēl nav pilnīga tehnoloģija, tāpēc tajā var rasties kļūdas. Ja vēlaties, oriģinālo versiju angļu valodā varat apskatīt šeit:

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

Šajā ziņā sniegtā informācija ir balstīta uz Dynamics AX 2012 R3. Tas var būt un var nebūt derīgs citām versijām. (Atjauninājums: varu apstiprināt, ka tas darbojas arī programmā Dynamics 365 for Operations)

Šķiet, ka es vienmēr aizmirstu sīkāku informāciju par vaicājuma norādīšanu un inicializāciju SysOperation sistēmā. Es domāju, ka lielākā daļa pakešu darbu, ko esmu veicis, nav balstīti uz lietotāja konfigurējamiem vaicājumiem, taču šad un tad man ir jāveic šāds pakešu darbs, tāpēc šī ziņa ir arī mana uzziņai.

Pirmkārt, datu līguma klasē vaicājums tiks saglabāts iesaiņots virknē. Tās parm metodei jābūt dekorētai ar atribūtu AifQueryTypeAttribute (šajā piemērā esmu izmantojis vaicājumu SalesUpdate, taču jūs varat to aizstāt ar jebkuru AOT vaicājumu):

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

    packedQuery = _packedQuery;
    return packedQuery;
}

Ja vēlaties, lai vaicājumu nosaka kontroliera klase, varat izmantot arī tukšu virkni. Tādā gadījumā jums ir jāievieš arī pāris palīgmetodes (kas, iespējams, jums jebkurā gadījumā būtu jāievieš jūsu ērtībām, kad jums ir nepieciešams piekļūt vaicājumam):

public Query getQuery()
{
    ;

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

public void setQuery(Query _query)
{
    ;

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

Ja nepieciešams inicializēt vaicājumu (piemēram, pievienot diapazonus), jums jāievieš initQuery metode:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Noteikti izsauciet šo metodi no kontrollera klases.

Kopīgojiet pakalpojumā BlueskyKopīgot FacebookKopīgojiet vietnē LinkedInKopīgojiet vietnē TumblrKopīgot vietnē XKopīgojiet vietnē LinkedInPiespraust vietnē Pinterest

Mikkel Bang Christensen

Par autoru

Mikkel Bang Christensen
Mikels ir miklix.com radītājs un īpašnieks. Viņam ir vairāk nekā 20 gadu pieredze kā profesionālam programmētājam/programmatūras izstrādātājam, un pašlaik viņš strādā pilna laika darbu lielā Eiropas IT korporācijā. Kad viņš neraksta blogus, viņš pavada brīvo laiku, pievēršoties dažādām interesēm, hobijiem un aktivitātēm, kas zināmā mērā var atspoguļoties šajā tīmekļa vietnē aplūkoto tēmu daudzveidībā.