Miklix

ภาพรวมอย่างรวดเร็วของกรอบงาน SysOperation ของ Dynamics AX 2012

ที่ตีพิมพ์: 15 กุมภาพันธ์ 2025 เวลา 22 นาฬิกา 36 นาที 30 วินาที UTC

บทความนี้ให้ภาพรวมอย่างรวดเร็ว (หรือเอกสารสรุป) เกี่ยวกับวิธีการนำคลาสการประมวลผลและงานแบตช์ไปใช้ในกรอบงาน SysOperation ใน Dynamics AX 2012 และ Dynamics 365 for Operations


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

Dynamics AX 2012 SysOperation Framework Quick Overview

ข้อมูลในบทความนี้อ้างอิงจาก Dynamics AX 2012 R3 ซึ่งอาจใช้ได้กับเวอร์ชันอื่นหรือไม่ก็ได้ (อัปเดต: ฉันยืนยันได้ว่าข้อมูลในบทความนี้ใช้ได้กับ Dynamics 365 for Operations เช่นกัน)


โพสต์นี้มีไว้เพื่อให้ดูภาพรวมและสรุปข้อมูลโดยย่อเท่านั้น หากคุณเพิ่งเริ่มใช้กรอบงาน SysOperation ฉันขอแนะนำให้คุณอ่านเอกสารเผยแพร่ของ Microsoft เกี่ยวกับเรื่องนี้ด้วย ข้อมูลที่นี่อาจมีประโยชน์หากคุณต้องการทบทวนคลาสต่างๆ ที่เกี่ยวข้องกับการพัฒนาการทำงานด้วยกรอบงานดังกล่าว

แม้จะมีรูปแบบที่แตกต่างกัน แต่เมื่อฉันใช้กรอบงานนี้ ฉันมักจะใช้สามคลาส:

  • สัญญาข้อมูล (ควรขยาย SysOperationDataContractBase)
  • บริการ (ควรขยาย SysOperationServiceBase)
  • ตัวควบคุม ( ต้อง ขยาย SysOperationServiceController)

นอกจากนี้ ฉันอาจใช้คลาส UIBuilder ( ต้อง ขยาย SysOperationUIBuilder) ได้ด้วย แต่จำเป็นเฉพาะเมื่อกล่องโต้ตอบจำเป็นต้องมีความก้าวหน้ามากกว่าที่เฟรมเวิร์กสร้างโดยอัตโนมัติด้วยเหตุผลบางประการ


สัญญาข้อมูล

สัญญาข้อมูลจะเก็บข้อมูลสมาชิกที่จำเป็นสำหรับการดำเนินการของคุณ สามารถเปรียบเทียบได้กับมาโคร CurrentList ทั่วไปที่กำหนดไว้ในกรอบงาน RunBase แต่ใช้งานเป็นคลาสแทน สัญญาข้อมูลควรขยาย SysOperationDataContractBase แต่จะทำงานได้แม้ว่าจะไม่ขยายก็ตาม ข้อดีของการขยายซูเปอร์คลาสคือให้ข้อมูลเซสชันบางอย่างที่อาจมีประโยชน์

[DataContractAttribute]
class MyDataContract extends SysOperationDataContractBase
{
    ItemId itemId;
}

ในตัวอย่างนี้ itemId เป็นสมาชิกข้อมูล คุณต้องใช้เมธอด parm สำหรับสมาชิกข้อมูลแต่ละรายการและแท็กด้วย DataMemberAttribute เพื่อให้เฟรมเวิร์กทราบว่าข้อมูลนั้นคืออะไร การดำเนินการนี้จะทำให้เฟรมเวิร์กสร้างกล่องโต้ตอบให้คุณโดยอัตโนมัติ

[DataMemberAttribute]
public ItemId parmItemId(ItemId _itemId = itemId)
{
    ;

    itemId = _itemId;
    return itemId;
}


บริการ

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

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

class MyService extends SysOperationServiceBase
{
}

โดยใช้วิธีการที่เรียกว่า run:

[SysEntryPointAttribute]
public void run(MyDataContract _dataContract)
{
    // run business logic here
}


ผู้ควบคุม

คลาสคอนโทรลเลอร์จะจัดการการดำเนินการและการประมวลผลแบบแบตช์ของการดำเนินการของคุณ นอกจากนี้ยังช่วยให้แน่ใจว่าโค้ดจะถูกดำเนินการใน CIL เพื่อประสิทธิภาพสูงสุด คลาสคอนโทรลเลอร์โดยทั่วไปจะสืบทอดมาจากคลาส SysOperationServiceController แม้ว่าจะมีตัวเลือกอื่นๆ เช่นกัน

class MyController extends SysOperationServiceController
{
}

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

public static MyController construct()
{
    ;

    return new MyController(classStr(MyService),
    methodStr(MyService, run));
}

จากนั้นวิธีหลักของคลาส MyController ก็สามารถทำได้ง่ายเพียง

public static void main(Args _args)
{
    ;

    MyController::construct().startOperation();
}

และคุณก็ทำเสร็จเรียบร้อยแล้ว ตัวอย่างด้านบนเป็นเพียงตัวอย่างง่ายๆ และกรอบงานนี้ยังมีตัวเลือกและความเป็นไปได้อื่นๆ อีกมากมาย แต่ข้อมูลนี้เป็นเพียงภาพรวมคร่าวๆ หากคุณต้องการทบทวนเมื่อไม่ได้ใช้กรอบงานนี้มาระยะหนึ่ง

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

มิคเคล บัง คริสเตนเซ่น

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

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