Miklix

วิธีการทําซ้ําองค์ประกอบของ 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 คุณสามารถทําดังนี้:

DictEnum dictEnum = new DictEnum(enumNum(SalesStatus));
Counter  c;
;

for (c = 0; c < dictEnum.values(); c++)
{
    info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}

การดําเนินการนี้จะส่งออกสัญลักษณ์และป้ายกํากับของแต่ละองค์ประกอบในอีนัมไปยังอินโฟล็อก

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

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

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

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