Miklix

Paggamit ng Query sa isang SysOperation Data Contract Class sa Dynamics AX 2012

Nai-publish: Marso 19, 2025 nang 9:33:35 PM UTC

Tinutukoy ng artikulong ito ang mga detalye kung paano magdagdag ng na-configure at na-filter na query ng user sa isang SysOperation data contract class sa Dynamics AX 2012 (at Dynamics 365 for Operations)


Ang pahinang ito ay isinalin sa makina mula sa Ingles upang gawin itong naa-access sa pinakamaraming tao hangga't maaari. Sa kasamaang palad, ang pagsasalin ng makina ay hindi pa isang perpektong teknolohiya, kaya maaaring mangyari ang mga error. Kung gusto mo, maaari mong tingnan ang orihinal na bersyong Ingles dito:

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

Ang impormasyong nasa post na ito ay batay sa Dynamics AX 2012 R3. Maaaring ito ay wasto o hindi wasto para sa ibang bersyon. (Update: Maari kong kumpirmahin na gumagana rin ito sa Dynamics 365 for Operations)

Lagi ko na lang nakakalimutan ang mga detalye kung paano tukuyin at i-initialize ang isang query sa SysOperation framework. Siguro dahil karamihan sa mga batch job na ginagawa ko ay hindi nakabatay sa mga query na pwedeng i-configure ng user, pero paminsan-minsan kailangan ko pa ring gumawa ng ganitong klaseng batch job, kaya’t ang post na ito ay para din sa aking sariling reference.

Una, sa data contract class, ang query ay itinatago bilang naka-pack sa isang string. Ang kanyang parm method ay kailangang markahan ng AifQueryTypeAttribute na attribute, tulad ng ganito (sa halimbawang ito, ginamit ko ang SalesUpdate query, pero maaari mong palitan ito ng kahit anong AOT query):

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

    packedQuery = _packedQuery;
    return packedQuery;
}

Kung nais mong ang query ay tukuyin ng controller class imbes na ito, maaari mo ring gamitin ang isang walang laman na string. Sa kasong iyon, kailangan mo ring mag-implementa ng ilang helper methods (na marahil ay kailangan mong gawin para sa iyong sariling kaginhawahan kapag kailangan mong ma-access ang query):

public Query getQuery()
{
    ;

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

public void setQuery(Query _query)
{
    ;

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

Kung kailangan mong i-initialize ang query (halimbawa, magdagdag ng mga range), dapat mong i-implementa ang isang initQuery method:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Kailangan mong tiyakin na tatawagin mo ang method na ito mula sa controller class.

Ibahagi sa BlueskyIbahagi sa FacebookIbahagi sa LinkedInIbahagi sa TumblrIbahagi sa XIbahagi sa LinkedInI-pin sa Pinterest

Mikkel Christensen

Tungkol sa May-akda

Mikkel Christensen
Si Mikkel ang lumikha at may-ari ng miklix.com. Siya ay may higit sa 20 taong karanasan bilang isang propesyonal na computer programmer/software developer at kasalukuyang nagtatrabaho ng full-time para sa isang malaking European IT corporation. Kapag hindi nagba-blog, ginugugol niya ang kanyang bakanteng oras sa isang malawak na hanay ng mga interes, libangan, at aktibidad, na maaaring sa ilang lawak ay makikita sa iba't ibang mga paksang sakop sa website na ito.