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)
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):
{
;
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:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Kailangan mong tiyakin na tatawagin mo ang method na ito mula sa controller class.