Miklix

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)


Halaman ini telah diterjemahkan mesin daripada bahasa Inggeris untuk menjadikannya boleh diakses oleh seramai mungkin orang. Malangnya, terjemahan mesin belum lagi merupakan teknologi yang sempurna, jadi ralat boleh berlaku. Jika anda mahu, anda boleh melihat versi bahasa Inggeris asal di sini:

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):

public Query getQuery()
{
    ;

    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:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Anda perlu pastikan untuk memanggil kaedah ini dari kelas pengawal.

Kongsi di BlueskyKongsi di FacebookKongsi di LinkedInKongsi di TumblrKongsi di XKongsi di LinkedInSematkan pada Pinterest

Mikkel Christensen

Mengenai Pengarang

Mikkel Christensen
Mikkel ialah pencipta dan pemilik miklix.com. Beliau mempunyai lebih 20 tahun pengalaman sebagai pengaturcara komputer/pembangun perisian profesional dan kini bekerja sepenuh masa untuk sebuah syarikat IT Eropah yang besar. Apabila tidak menulis blog, dia menghabiskan masa lapangnya dengan pelbagai minat, hobi dan aktiviti, yang mungkin sedikit sebanyak dapat dilihat dalam pelbagai topik yang diliputi di laman web ini.