Miklix

การใช้แบบสอบถามในคลาสสัญญาข้อมูล 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;
}

หากคุณต้องการให้คลาสคอนโทรลเลอร์เป็นผู้กำหนดคำสั่งค้นหา คุณสามารถใช้สตริงว่างได้เช่นกัน ในกรณีนั้น คุณจะต้องเขียนเมธอดตัวช่วยเพิ่มเติมอีกสองสามเมธอด (ซึ่งคุณควรเขียนอยู่แล้วเพื่อความสะดวกของคุณเองเมื่อต้องการเข้าถึงคำสั่งค้นหา):

public Query getQuery()
{
    ;

    return new Query(SysOperationHelper::base64Decode(packedQuery));
}

public void setQuery(Query _query)
{
    ;

    packedQuery = SysOperationHelper::base64Encode(_query.pack());
}

หากคุณต้องการเริ่มต้นการทำงานของคิวรี (เช่น การเพิ่มช่วงข้อมูล) คุณควรสร้างเมธอด initQuery ขึ้นมา:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

คุณต้องตรวจสอบให้แน่ใจว่าได้เรียกใช้เมธอดนี้จากคลาสคอนโทรลเลอร์แล้ว

อ่านเพิ่มเติม

หากคุณชอบโพสต์นี้ คุณอาจชอบคำแนะนำเหล่านี้ด้วย:


แชร์บนบลูสกายแชร์บนเฟสบุ๊คแชร์บน LinkedInแชร์บน Tumblrแชร์บน Xแชร์บน LinkedInปักหมุดบน Pinterest

มิคเคล คริสเตนเซ่น

เกี่ยวกับผู้เขียน

มิคเคล คริสเตนเซ่น
ไมเคิล คือผู้สร้างและเจ้าของเว็บไซต์ miklix.com เขามีประสบการณ์เป็นโปรแกรมเมอร์/นักพัฒนาซอฟต์แวร์คอมพิวเตอร์มืออาชีพมากว่า 20 ปี และปัจจุบันทำงานเต็มเวลาให้กับบริษัทไอทีขนาดใหญ่แห่งหนึ่งในยุโรป เมื่อไม่ได้เขียนบล็อก เขาจะใช้เวลาว่างไปกับความสนใจ งานอดิเรก และกิจกรรมต่างๆ มากมาย ซึ่งในระดับหนึ่งอาจสะท้อนให้เห็นได้จากหัวข้อต่างๆ มากมายที่กล่าวถึงในเว็บไซต์นี้