วิธีการทําซ้ําองค์ประกอบของ Enum จากรหัส X++ ใน Dynamics AX 2012
ที่ตีพิมพ์: 15 กุมภาพันธ์ 2025 เวลา 23 นาฬิกา 11 นาที 09 วินาที UTC
บทความนี้อธิบายวิธีการแจกแจงและวนซ้ําองค์ประกอบของค่าเยงฐานใน Dynamics AX 2012 รวมถึงตัวอย่างรหัส X++
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
ข้อมูลในโพสต์นี้ขึ้นอยู่กับ Dynamics AX 2012 R3 อาจใช้ได้หรือไม่ถูกต้องสําหรับเวอร์ชันอื่น
เมื่อเร็ว ๆ นี้ฉันกําลังสร้างแบบฟอร์มที่ต้องแสดงค่าสําหรับแต่ละองค์ประกอบในอีนัม แทนที่จะสร้างฟิลด์ด้วยตนเอง (และจําเป็นต้องรักษาฟอร์มหากมีการแก้ไข enum) ฉันตัดสินใจที่จะนําไปใช้แบบไดนามิกเพื่อให้เพิ่มฟิลด์ลงในการออกแบบโดยอัตโนมัติในขณะทํางาน
อย่างไรก็ตามในไม่ช้าฉันก็ค้นพบว่าการทําซ้ําค่าในอีนัมจริง ๆ แม้ว่าจะง่ายพอเมื่อคุณรู้วิธี แต่ก็ค่อนข้างสับสน
เห็นได้ชัดว่าคุณต้องเริ่มต้นด้วยคลาส DictEnum อย่างที่คุณจะเห็นคลาสนี้มีหลายวิธีในการรับข้อมูล เช่น ชื่อและป้ายกํากับจากทั้งดัชนีและค่า
ความแตกต่างระหว่างดัชนีและค่าคือ ดัชนีคือหมายเลขขององค์ประกอบในอีนัมหากองค์ประกอบของอีนัมถูกกําหนดหมายเลขตามลําดับโดยเริ่มจากศูนย์ในขณะที่ค่าคือคุณสมบัติ "ค่า" ที่แท้จริงขององค์ประกอบ เนื่องจากอีนัมส่วนใหญ่มีค่าที่มีหมายเลขตามลําดับจาก 0 ดัชนีและค่าขององค์ประกอบมักจะเหมือนกัน แต่ก็ไม่เสมอไป
แต่คุณจะรู้ได้อย่างไรว่าค่า enum มีค่าใด นี่คือจุดที่มันสับสน คลาส DictEnum มีเมธอดที่เรียกว่า values() คุณอาจคาดหวังว่าวิธีนี้จะส่งคืนรายการค่าของอีนัม แต่เห็นได้ชัดว่ามันง่ายเกินไปดังนั้นจึงส่งคืน จํานวนค่า ที่อีนัมมีแทน อย่างไรก็ตาม จํานวนค่า ไม่มีส่วนเกี่ยวข้องกับค่าจริง ดังนั้นคุณต้องใช้ตัวเลขนี้เป็นพื้นฐานสําหรับการเรียกใช้วิธีการตามดัชนี ไม่ใช่วิธีการตามค่า
ถ้าพวกเขาตั้งชื่อวิธีนี้ว่า indexes() แทน มันคงจะสับสนน้อยลง ;-)
พึงระลึกไว้เสมอว่าค่า enum (และเห็นได้ชัดว่า "ดัชนี") เหล่านี้เริ่มต้นที่ 0 ซึ่งแตกต่างจากดัชนีอาร์เรย์และคอนเทนเนอร์ใน X ++ ซึ่งเริ่มต้นที่ 1 ดังนั้นในการวนซ้ําองค์ประกอบใน enum คุณสามารถทําดังนี้:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
การดําเนินการนี้จะส่งออกสัญลักษณ์และป้ายกํากับของแต่ละองค์ประกอบในอีนัมไปยังอินโฟล็อก