การใช้แบบสอบถามในคลาสสัญญาข้อมูล SysOperation ใน Dynamics AX 2012
ที่ตีพิมพ์: 16 กุมภาพันธ์ 2025 เวลา 1 นาฬิกา 24 นาที 32 วินาที UTC
ปรับปรุงล่าสุด : 12 มกราคม 2026 เวลา 8 นาฬิกา 47 นาที 26 วินาที UTC
บทความนี้จะอธิบายรายละเอียดเกี่ยวกับวิธีการเพิ่มแบบสอบถามที่ผู้ใช้สามารถกำหนดค่าและกรองได้ลงในคลาสสัญญาข้อมูล SysOperation ใน Dynamics AX 2012 (และ Dynamics 365 for Operations)
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
ข้อมูลในโพสต์นี้อ้างอิงจาก Dynamics AX 2012 R3 อาจใช้ได้หรือไม่ก็ได้กับเวอร์ชันอื่นๆ (อัปเดต: ฉันยืนยันได้ว่าวิธีการนี้ใช้ได้กับ Dynamics 365 for Operations ด้วยเช่นกัน)
ฉันมักจะลืมรายละเอียดเกี่ยวกับวิธีการกำหนดและเริ่มต้นใช้งานคิวรีในเฟรมเวิร์ก SysOperation อยู่เสมอ ฉันคิดว่างานแบตช์ส่วนใหญ่ที่ฉันทำไม่ได้ใช้คิวรีที่ผู้ใช้กำหนดค่าได้ แต่บางครั้งฉันก็จำเป็นต้องสร้างงานแบตช์แบบนั้น ดังนั้นโพสต์นี้จึงเป็นข้อมูลอ้างอิงสำหรับตัวฉันเองด้วย
ขั้นแรก ในคลาส Data Contract นั้น คำสั่งค้นหาจะถูกจัดเก็บในรูปแบบสตริง โดยเมธอด parm ของคำสั่งค้นหานั้นจะต้องมีการตกแต่งด้วยแอตทริบิวต์ AifQueryTypeAttribute ดังนี้ (ในตัวอย่างนี้ ผมใช้คำสั่งค้นหา SalesUpdate แต่คุณสามารถแทนที่ด้วยคำสั่งค้นหา AOT ใดก็ได้):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
หากคุณต้องการให้คลาสคอนโทรลเลอร์เป็นผู้กำหนดคำสั่งค้นหา คุณสามารถใช้สตริงว่างได้เช่นกัน ในกรณีนั้น คุณจะต้องเขียนเมธอดตัวช่วยเพิ่มเติมอีกสองสามเมธอด (ซึ่งคุณควรเขียนอยู่แล้วเพื่อความสะดวกของคุณเองเมื่อต้องการเข้าถึงคำสั่งค้นหา):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
หากคุณต้องการเริ่มต้นการทำงานของคิวรี (เช่น การเพิ่มช่วงข้อมูล) คุณควรสร้างเมธอด initQuery ขึ้นมา:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
คุณต้องตรวจสอบให้แน่ใจว่าได้เรียกใช้เมธอดนี้จากคลาสคอนโทรลเลอร์แล้ว
อ่านเพิ่มเติม
หากคุณชอบโพสต์นี้ คุณอาจชอบคำแนะนำเหล่านี้ด้วย:
- การระบุคลาสเอกสารและแบบสอบถามสำหรับบริการ AIF ใน Dynamics AX 2012
- ข้อผิดพลาด "ไม่มีคลาสเมตาดาต้าที่กําหนดไว้สําหรับวัตถุสัญญาข้อมูล" ใน Dynamics AX 2012
- ความแตกต่างระหว่าง data() และ buf2Buf() ใน Dynamics AX 2012
