Miklix

การจัดรูปแบบสตริงด้วยแมโครและ strFmt ใน Dynamics AX 2012

ที่ตีพิมพ์: 16 กุมภาพันธ์ 2025 เวลา 0 นาฬิกา 49 นาที 08 วินาที UTC
ปรับปรุงล่าสุด : 12 มกราคม 2026 เวลา 8 นาฬิกา 44 นาที 37 วินาที UTC

บทความนี้อธิบายถึงพฤติกรรมที่แปลกประหลาดบางอย่างใน Dynamics AX 2012 เมื่อใช้มาโครเป็นสตริงรูปแบบใน strFmt รวมถึงตัวอย่างวิธีการแก้ไขปัญหาดังกล่าว


หน้าเพจนี้ได้รับการแปลจากเครื่องคอมพิวเตอร์จากภาษาอังกฤษ เพื่อให้ทุกคนเข้าถึงได้มากที่สุด น่าเสียดายที่การแปลด้วยเครื่องยังไม่ถือเป็นเทคโนโลยีที่สมบูรณ์แบบ จึงอาจเกิดข้อผิดพลาดได้ หากต้องการ คุณสามารถดูเวอร์ชันภาษาอังกฤษต้นฉบับได้ที่นี่:

String Formatting with Macro and strFmt in Dynamics AX 2012

ข้อมูลในโพสต์นี้อ้างอิงจาก Dynamics AX 2012 R3 อาจใช้ได้หรือไม่ก็ได้กับเวอร์ชันอื่นๆ

เมื่อไม่นานมานี้ ผมพบปัญหาเกี่ยวกับฟังก์ชัน strFmt ซึ่งทำให้ผมงงอยู่พักใหญ่ ส่วนที่น่างงที่สุดก็คือ ด้วยความบังเอิญอย่างประหลาด ผมไม่เคยเจอปัญหานี้มาก่อนเลยตลอดหลายปีที่ทำงานเป็นนักพัฒนา Axapta/Dynamics AX

ปัญหาคือ ผมพยายามใช้มาโครเป็นรูปแบบสตริงสำหรับฟังก์ชัน strFmt แต่มันใช้งานไม่ได้ มันไม่สนใจพารามิเตอร์ % เลย และส่งคืนเฉพาะส่วนที่เหลือของสตริงเท่านั้น

หลังจากค้นคว้าเพิ่มเติม ฉันก็พบว่ามาโครสามารถใช้ในการจัดรูปแบบสตริงได้ ซึ่งเป็นสิ่งที่ฉันไม่รู้มาก่อนเช่นกัน ไม่เป็นไร การเรียนรู้สิ่งใหม่ๆ ย่อมเป็นเรื่องดีเสมอ แต่ฉันก็ยังรู้สึกประหลาดใจมากที่ฉันไม่เคยเจอเรื่องนี้มาก่อน

โดยพื้นฐานแล้วก็ประมาณนี้

#define.FormatMacro('%1-%2-%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

วิธีนี้จะใช้ไม่ได้ผล เพราะเครื่องหมาย % ในมาโครนั้นถูกใช้สำหรับคุณสมบัติการจัดรูปแบบสตริงของมาโครเอง ในกรณีนี้ ฟังก์ชัน strFmt จะมองเห็นสตริงการจัดรูปแบบเป็น "--" และจะส่งคืนค่าดังกล่าวเท่านั้น

ประมาณนี้:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

มันจะทำงานได้ แต่คงไม่ใช่แบบที่คุณต้องการ แทนที่จะแสดงค่าของตัวแปรทั้งสามตัว มันจะแสดงชื่อของตัวแปรแทน ในกรณีนี้คือ "salesId-itemId-lineNum" (โปรดสังเกตว่าฉันไม่ได้เว้นวรรคหลังเครื่องหมายจุลภาคเมื่อส่งพารามิเตอร์ไปยังมาโคร เหมือนที่ฉันทำปกติในการเรียกใช้เมธอด นั่นเป็นเพราะมาโครจะใช้ช่องว่างเหล่านั้นด้วย ดังนั้นผลลัพธ์จะเป็น "salesId- itemId- lineNum" ถ้าฉันเว้นวรรค)

ในการใช้มาโครเป็นสตริงสำหรับจัดรูปแบบด้วย strFmt คุณต้องใช้เครื่องหมายแบ็กสแลชเพื่อหลีกเลี่ยงเครื่องหมายเปอร์เซ็นต์ ดังนี้:

#define.FormatMacro('\\%1-\\%2-\\%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

วิธีนี้จะใช้ได้ผลเหมือนกับว่าคุณได้ระบุสตริงรูปแบบโดยตรงแล้ว

งานเล็กๆ ชิ้นนี้แสดงให้เห็นถึงตัวอย่างต่างๆ:

static void StrFmtMacroTest(Args _args)
{
    #define.FormatMacro('%1-%2-%3')
    #define.FormatMacroEscaped('\\%1-\\%2-\\%3')
    SalesId salesId = '1';
    ItemId  itemId  = '2';
    LineNum lineNum = 3.00;
    ;

    info(#FormatMacro(salesId,itemId,lineNum));
    info(strFmt(#FormatMacro, salesId, itemId, lineNum));
    info(strFmt(#FormatMacroEscaped, salesId, itemId, lineNum));
}

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

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


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

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

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

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