การสร้างฟิลด์การค้นหาสำหรับมิติทางการเงินใน Dynamics 365
ที่ตีพิมพ์: 16 กุมภาพันธ์ 2025 เวลา 11 นาฬิกา 34 นาที 35 วินาที UTC
ปรับปรุงล่าสุด : 16 กุมภาพันธ์ 2025 เวลา 11 นาฬิกา 35 นาที 14 วินาที UTC
บทความนี้อธิบายวิธีการสร้างฟิลด์การค้นหาสำหรับมิติทางการเงินใน Dynamics 365 for Operations รวมถึงตัวอย่างโค้ด X++
Creating a Lookup Field for a Financial Dimension in Dynamics 365
ข้อมูลในโพสต์นี้อิงตาม Dynamics 365 for Operations แต่ข้อมูลส่วนใหญ่สามารถใช้ได้กับ Dynamics AX 2012 ด้วยเช่นกัน (ดูด้านล่าง)
เมื่อไม่นานนี้ ฉันได้รับมอบหมายให้สร้างฟิลด์ใหม่ซึ่งควรสามารถระบุมิติทางการเงินเพียงมิติเดียวได้ ในกรณีนี้คือผลิตภัณฑ์ แน่นอนว่าฟิลด์ใหม่ควรสามารถค้นหาค่าที่ถูกต้องของมิตินี้ได้เช่นกัน
นี่อาจจะซับซ้อนกว่าการค้นหาปกติในตารางเล็กน้อย แต่หากคุณรู้วิธีการ มันก็ไม่เลวร้ายเกินไปนัก
โชคดีที่แอปพลิเคชันมาตรฐานมีฟอร์มค้นหาที่สะดวก (DimensionLookup) ที่สามารถใช้เพื่อจุดประสงค์ดังกล่าวได้ เพียงแค่คุณบอกว่าต้องค้นหาแอตทริบิวต์มิติใด
ขั้นแรก คุณต้องสร้างฟิลด์ฟอร์มขึ้นมาเอง ซึ่งอาจอิงตามฟิลด์ตารางหรือวิธีแก้ไขก็ได้ ไม่สำคัญสำหรับการค้นหา แต่ต้องใช้ชนิดข้อมูลขยาย DimensionValue ไม่ว่าจะด้วยวิธีใดก็ตาม
จากนั้นคุณต้องสร้างตัวจัดการเหตุการณ์ OnLookup สำหรับฟิลด์นั้น หากต้องการสร้างตัวจัดการเหตุการณ์ ให้คลิกขวาที่เหตุการณ์ OnLookup สำหรับฟิลด์ จากนั้นเลือก "คัดลอกเมธอดตัวจัดการเหตุการณ์" จากนั้นคุณสามารถวางเมธอดตัวจัดการเหตุการณ์ว่างลงในคลาสและแก้ไขจากที่นั่นได้
หมายเหตุ: วิธีนี้ส่วนใหญ่จะใช้งานได้กับ Dynamics AX 2012 เช่นกัน แต่แทนที่จะสร้างตัวจัดการเหตุการณ์ คุณสามารถแทนที่วิธีการค้นหาฟิลด์แบบฟอร์มได้
ตัวจัดการเหตุการณ์จะต้องมีลักษณะดังนี้ (แทนที่ชื่อแบบฟอร์มและชื่อฟิลด์ตามความจำเป็น):
FormControlEventHandler(formControlStr( MyForm,
MyProductDimField),
FormControlEventType::Lookup)
]
public static void MyProductDimField_OnLookup( FormControl _sender,
FormControlEventArgs _e)
{
FormStringControl control;
Args args;
FormRun formRun;
DimensionAttribute dimAttribute;
;
dimAttribute = DimensionAttribute::findByName('Product');
args = new Args();
args.record(dimAttribute);
args.caller(_sender);
args.name(formStr(DimensionLookup));
formRun = classFactory.formRunClass(args);formRun.init();
control = _sender as FormStringControl;
control.performFormLookup(formRun);
}