Miklix

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

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

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 ปี และปัจจุบันทำงานเต็มเวลาให้กับบริษัทไอทีขนาดใหญ่แห่งหนึ่งในยุโรป เมื่อไม่ได้เขียนบล็อก เขาจะใช้เวลาว่างไปกับความสนใจ งานอดิเรก และกิจกรรมต่างๆ มากมาย ซึ่งในระดับหนึ่งอาจสะท้อนให้เห็นได้จากหัวข้อต่างๆ มากมายที่กล่าวถึงในเว็บไซต์นี้