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.
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):
{
;
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:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
U moet seker maak dat u hierdie metode van die beheerderklas afroep.