Menggunakan Pertanyaan dalam Kelas Kontrak Data SysOperation dalam Dynamics AX 2012
Diterbitkan: 19 Mac 2025 pada 9:33:32 PTG UTC
Artikel ini membincangkan butiran tentang cara menambahkan pertanyaan yang boleh dikonfigurasikan dan boleh ditapis pengguna pada kelas kontrak data SysOperation dalam Dynamics AX 2012 (dan Dynamics 365 for Operations)
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
Maklumat dalam pos ini adalah berdasarkan Dynamics AX 2012 R3. Ia mungkin sah atau tidak sah untuk versi lain. (Kemas kini: Saya boleh mengesahkan bahawa ini juga berfungsi di Dynamics 365 for Operations)
Saya selalu terlupa butiran tentang cara untuk menentukan dan memulakan kueri dalam rangka kerja SysOperation. Saya rasa kebanyakan pekerjaan batch yang saya buat tidak berdasarkan kueri yang boleh dikonfigurasi oleh pengguna, tetapi kadang-kadang saya perlu membuat pekerjaan batch seperti itu, jadi pos ini juga untuk rujukan saya sendiri.
Pertama, dalam kelas kontrak data, kueri akan disimpan dalam bentuk string. Kaedah parm-nya mesti dihiasi dengan atribut AifQueryTypeAttribute, seperti ini (dalam contoh ini saya telah menggunakan kueri SalesUpdate, tetapi anda boleh menggantikannya dengan sebarang kueri AOT):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Jika anda mahu kueri ditentukan oleh kelas pengawal sebaliknya, anda juga boleh menggunakan string kosong. Dalam kes itu, anda juga perlu melaksanakan beberapa kaedah pembantu (yang anda mungkin patut laksanakan juga untuk keselesaan anda sendiri apabila anda perlu mengakses kueri tersebut):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Jika anda perlu memulakan kueri (contohnya, menambah julat), anda perlu melaksanakan kaedah initQuery:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Anda perlu pastikan untuk memanggil kaedah ini dari kelas pengawal.