ภาพรวมอย่างรวดเร็วของกรอบงาน SysOperation ของ Dynamics AX 2012
ที่ตีพิมพ์: 15 กุมภาพันธ์ 2025 เวลา 22 นาฬิกา 36 นาที 30 วินาที UTC
ปรับปรุงล่าสุด : 12 มกราคม 2026 เวลา 8 นาฬิกา 39 นาที 47 วินาที 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 แต่จะใช้งานได้แม้ว่าจะไม่ได้สืบทอดก็ตาม ข้อดีของการสืบทอดจากคลาสแม่คือจะให้ข้อมูลเซสชันบางอย่างที่อาจมีประโยชน์
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
ในตัวอย่างนี้ itemId เป็นสมาชิกข้อมูล คุณต้องสร้างเมธอด parm สำหรับสมาชิกข้อมูลแต่ละตัวและติดแท็กด้วย DataMemberAttribute เพื่อให้เฟรมเวิร์กทราบว่าเป็นข้อมูลอะไร ซึ่งจะช่วยให้เฟรมเวิร์กสร้างไดอะล็อกให้คุณโดยอัตโนมัติ
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
บริการ
คลาสบริการ (Service class) คือคลาสที่บรรจุตรรกะทางธุรกิจที่แท้จริง มันไม่ได้เกี่ยวข้องกับการแสดงกล่องโต้ตอบ การประมวลผลแบบกลุ่ม หรืออะไรทำนองนั้น – นั่นเป็นความรับผิดชอบของคลาสควบคุม (Controller class) การแยกส่วนนี้จะช่วยให้คุณออกแบบโค้ดได้ดีขึ้นและสร้างโค้ดที่นำกลับมาใช้ซ้ำได้มากขึ้น
เช่นเดียวกับคลาส Data Contract คลาส Service ไม่จำเป็นต้องสืบทอดจากคลาสใดโดยเฉพาะ แต่ควรสืบทอดจากคลาส SysOperationServiceBase อย่างน้อยที่สุดหากคุณคาดว่า Service จะทำงานในรูปแบบ Batch Job เนื่องจากคลาสแม่จะให้ข้อมูลบางอย่างเกี่ยวกับบริบทของ Batch เมธอดที่เริ่มต้นการทำงาน (เช่น รันตรรกะทางธุรกิจ) ต้องรับออบเจ็กต์ของคลาส Data Contract ของคุณเป็นอินพุต และควรตกแต่งด้วย [SysEntryPointAttribute] ตัวอย่างเช่น:
{
}
โดยใช้เมธอดที่เรียกว่า run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
ตัวควบคุม
คลาส Controller ทำหน้าที่จัดการการเรียกใช้งานและการประมวลผลแบบกลุ่มของการดำเนินการของคุณ นอกจากนี้ยังช่วยให้มั่นใจได้ว่าโค้ดจะถูกเรียกใช้งานในรูปแบบ CIL เพื่อประสิทธิภาพสูงสุด โดยทั่วไปแล้วคลาส Controller จะสืบทอดมาจากคลาส SysOperationServiceController แต่ก็มีตัวเลือกอื่นๆ ด้วยเช่นกัน
{
}
คอนสตรัคเตอร์ของคลาสแม่จะรับชื่อคลาส ชื่อเมธอด และ (เลือกได้) โหมดการทำงานเป็นพารามิเตอร์ โดยชื่อคลาสและชื่อเมธอดควรเป็นชื่อของคลาสบริการของคุณและชื่อของเมธอดที่จะเรียกใช้ ดังนั้น คุณอาจเขียนเมธอด construct ของคอนโทรลเลอร์ของคุณได้ดังนี้:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
ดังนั้น เมธอดหลักของคลาส MyController จึงสามารถเรียบง่ายได้ดังนี้
{
;
MyController::construct().startOperation();
}
และโดยพื้นฐานแล้วคุณก็ทำเสร็จแล้ว ตัวอย่างข้างต้นเป็นเพียงตัวอย่างง่ายๆ และเฟรมเวิร์กนี้ยังมีตัวเลือกและความเป็นไปได้อื่นๆ อีกมากมาย แต่ตัวอย่างนี้ใช้เป็นภาพรวมอย่างรวดเร็วหากคุณต้องการทบทวนความรู้หลังจากไม่ได้ใช้เฟรมเวิร์กนี้มาสักพัก
อ่านเพิ่มเติม
หากคุณชอบโพสต์นี้ คุณอาจชอบคำแนะนำเหล่านี้ด้วย:
- การใช้แบบสอบถามในคลาสสัญญาข้อมูล SysOperation ใน Dynamics AX 2012
- ลบนิติบุคคล (บัญชีบริษัท) ใน Dynamics AX 2012
- วิธีการทําซ้ําองค์ประกอบของ Enum จากรหัส X++ ใน Dynamics AX 2012
