Miklix

วิธีการทําซ้ําองค์ประกอบของ Enum จากรหัส X++ ใน Dynamics AX 2012

ที่ตีพิมพ์: 15 กุมภาพันธ์ 2025 เวลา 23 นาฬิกา 11 นาที 09 วินาที UTC
ปรับปรุงล่าสุด : 12 มกราคม 2026 เวลา 8 นาฬิกา 42 นาที 11 วินาที UTC

บทความนี้อธิบายวิธีการแจงนับและวนลูปผ่านองค์ประกอบของ enum พื้นฐานใน 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 แทนที่จะสร้างฟิลด์ด้วยตนเอง (และต้องดูแลรักษาแบบฟอร์มหาก enum มีการเปลี่ยนแปลงในอนาคต) ฉันจึงตัดสินใจที่จะใช้การสร้างแบบไดนามิกเพื่อให้มันเพิ่มฟิลด์ลงในดีไซน์โดยอัตโนมัติเมื่อใช้งาน

อย่างไรก็ตาม ในไม่ช้าฉันก็พบว่าการวนซ้ำค่าต่างๆ ใน enum นั้น แม้จะง่ายพอเมื่อรู้หลักการแล้ว แต่ก็ค่อนข้างสับสนอยู่บ้าง

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

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

แต่คุณจะรู้ได้อย่างไรว่า enum มีค่าอะไรบ้าง? นี่แหละคือจุดที่ทำให้สับสน คลาส DictEnum มีเมธอดที่ชื่อว่า values() คุณอาจคาดหวังว่าเมธอดนี้จะคืนค่าเป็นลิสต์ของค่าต่างๆ ใน enum แต่เห็นได้ชัดว่านั่นง่ายเกินไป ดังนั้นมันจึงคืนค่าเป็นจำนวนค่าที่ enum มีอยู่ อย่างไรก็ตาม จำนวนค่านี้ไม่เกี่ยวข้องกับค่าที่แท้จริง ดังนั้นคุณต้องใช้จำนวนนี้เป็นพื้นฐานในการเรียกใช้เมธอดที่อิงตามดัชนี ไม่ใช่เมธอดที่อิงตามค่า

ถ้าหากพวกเขาตั้งชื่อเมธอดนี้ว่า 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)));
}

คำสั่งนี้จะแสดงสัญลักษณ์และป้ายกำกับของแต่ละองค์ประกอบใน enum ไปยัง infolog

อ่านเพิ่มเติม

หากคุณชอบโพสต์นี้ คุณอาจชอบคำแนะนำเหล่านี้ด้วย:


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

มิคเคล คริสเตนเซ่น

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

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