Uporaba poizvedbe v podatkovnem pogodbenem razredu SysOperation v Dynamics AX 2012
Objavljeno: 16. februar 2025 ob 1:23:07 dop. UTC
Ta članek obravnava podrobnosti o tem, kako dodati poizvedbo, ki jo lahko konfigurira uporabnik in jo je mogoče filtrirati, v razred podatkovne pogodbe SysOperation v Dynamics AX 2012 (in Dynamics 365 for Operations)
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
Informacije v tej objavi temeljijo na Dynamics AX 2012 R3. Lahko velja ali ne velja za druge različice. (Posodobitev: lahko potrdim, da to deluje tudi v Dynamics 365 for Operations)
Zdi se, da vedno pozabim na podrobnosti o tem, kako določiti in inicializirati poizvedbo v ogrodju SysOperation. Predvidevam, da večina paketnih opravil, ki sem jih opravljal, ne temelji na poizvedbah, ki jih lahko konfigurira uporabnik, ampak vsake toliko časa moram opraviti takšno paketno opravilo, zato je ta objava tudi za mojo lastno referenco.
Prvič, v razredu podatkovne pogodbe bo poizvedba shranjena zapakirana v niz. Njegova metoda parm mora biti okrašena z atributom AifQueryTypeAttribute, tako (v tem primeru sem uporabil poizvedbo SalesUpdate, vendar jo lahko zamenjate s katero koli poizvedbo AOT):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Če želite, da poizvedbo namesto tega določi razred krmilnika, lahko uporabite tudi prazen niz. V tem primeru morate implementirati tudi nekaj pomožnih metod (ki bi jih verjetno vseeno morali implementirati za lastno udobje, ko morate dostopati do poizvedbe):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Če morate inicializirati poizvedbo (na primer dodati obsege), morate implementirati metodo initQuery:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Poskrbeti morate za klic te metode iz razreda krmilnika.