การใช้แบบสอบถามในคลาสสัญญาข้อมูล SysOperation ใน Dynamics AX 2012
ที่ตีพิมพ์: 16 กุมภาพันธ์ 2025 เวลา 1 นาฬิกา 24 นาที 32 วินาที 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 อยู่เสมอ ฉันเดาว่างานแบตช์ส่วนใหญ่ที่ฉันทำไม่ได้ขึ้นอยู่กับแบบสอบถามที่กำหนดค่าได้โดยผู้ใช้ แต่บางครั้งฉันก็จำเป็นต้องสร้างงานแบตช์ดังกล่าว ดังนั้นโพสต์นี้จึงมีไว้สำหรับอ้างอิงส่วนตัวของฉันด้วย
ประการแรก ในคลาสสัญญาข้อมูล แบบสอบถามจะถูกเก็บไว้ในรูปแบบสตริง วิธีการพารามิเตอร์จะต้องได้รับการตกแต่งด้วยแอตทริบิวต์ 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);
}
คุณต้องแน่ใจว่าจะเรียกใช้วิธีการนี้จากคลาสตัวควบคุม