Miklix

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

ที่ตีพิมพ์: 16 กุมภาพันธ์ 2025 เวลา 0 นาฬิกา 49 นาที 08 วินาที 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 ปี และปัจจุบันทำงานเต็มเวลาให้กับบริษัทไอทีขนาดใหญ่แห่งหนึ่งในยุโรป เมื่อไม่ได้เขียนบล็อก เขาจะใช้เวลาว่างไปกับความสนใจ งานอดิเรก และกิจกรรมต่างๆ มากมาย ซึ่งในระดับหนึ่งอาจสะท้อนให้เห็นได้จากหัวข้อต่างๆ มากมายที่กล่าวถึงในเว็บไซต์นี้