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
Pēdējo reizi atjaunināts: 2026. gada 12. janvāris 08:47:13 UTC

Šajā rakstā ir sniegta detalizēta informācija par to, kā pievienot lietotāja konfigurējamu un filtrējamu vaicājumu SysOperation datu līguma klasei 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ā ierakstā sniegtā informācija ir balstīta uz Dynamics AX 2012 R3. Tā var būt vai nebūt derīga citām versijām. (Atjauninājums: varu apstiprināt, ka tas darbojas arī Dynamics 365 for Operations)

Man vienmēr šķiet, ka aizmirstu detaļas par to, kā norādīt un inicializēt vaicājumu SysOperation ietvarā. Pieņemu, ka lielākā daļa pakešuzdevumu, ko esmu veidojis, nav balstīti uz lietotāja konfigurējamiem vaicājumiem, taču laiku pa laikam man ir jāizveido šāds pakešuzdevums, tāpēc šis ieraksts ir paredzēts arī manai uzziņai.

Pirmkārt, datu līguma klasē vaicājums tiks saglabāts iepakots virknē. Tās parm metodei jābūt papildinātai ar AifQueryTypeAttribute atribūtu, šādi (šajā piemērā esmu izmantojis SalesUpdate vaicājumu, bet to var 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 noteiktu kontrollera klase, varat izmantot arī tukšu virkni. Šādā gadījumā jums ir jāievieš arī pāris palīgmetodes (kuras, iespējams, vajadzētu ieviest jebkurā gadījumā jūsu ērtībai, kad jums ir jāpiekļūst 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), jāievieš initQuery metode:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Jums jāpārliecinās, ka šī metode tiek izsaukta no kontrollera klases.

Papildu lasāmviela

Ja jums patika šī ziņa, jums varētu patikt arī šie ieteikumi:


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

Mikkel Christensen

Par autoru

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