Pemformatan Rentetan dengan Makro dan strFmt dalam Dynamics AX 2012
Diterbitkan: 19 Mac 2025 pada 9:33:07 PTG UTC
Artikel ini menerangkan beberapa gelagat pelik dalam Dynamics AX 2012 apabila menggunakan makro sebagai rentetan format dalam strFmt, serta contoh tentang cara mengatasinya.
String Formatting with Macro and strFmt in Dynamics AX 2012
Maklumat dalam siaran ini adalah berdasarkan Dynamics AX 2012 R3. Ia mungkin sah atau tidak sah untuk versi lain.
Saya baru-baru ini menghadapi satu masalah dengan fungsi strFmt yang membingungkan saya seketika. Bahagian yang paling membingungkan adalah kerana atas suatu kebetulan yang pelik, saya tidak pernah menghadapinya sebelum ini dalam bertahun-tahun saya sebagai seorang pembangun Axapta/Dynamics AX.
Masalahnya adalah saya cuba menggunakan makro sebagai rentetan format untuk fungsi strFmt dan ia tidak berfungsi. Ia sepenuhnya mengabaikan parameter % dan hanya mengembalikan baki rentetan tersebut.
Selepas menyiasat, saya mendapati bahawa makro itu sendiri boleh digunakan untuk memformat rentetan, yang juga sesuatu yang saya tidak tahu. Oh baiklah, sentiasa baik untuk belajar sesuatu yang baru, tetapi saya masih sangat terkejut kerana saya tidak pernah bertemu dengan ini sebelum ini.
Pada dasarnya, sesuatu seperti ini
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
tidak akan berfungsi kerana tanda % dalam makro sebenarnya digunakan untuk ciri pemformatan rentetan makro itu sendiri. Dalam kes ini, fungsi strFmt akan melihat rentetan format sebagai "--" dan oleh itu hanya akan mengembalikan itu.
Sesuatu seperti ini:
info(#FormatMacro(salesId,itemId,lineNum));
akan berfungsi, tetapi mungkin bukan seperti yang anda mahu. Daripada mengeluarkan nilai tiga pemboleh ubah tersebut, ia akan mengeluarkan nama pemboleh ubah tersebut, dalam kes ini "salesId-itemId-lineNum". (Perhatikan bahawa saya tidak meletakkan ruang selepas koma semasa mempassing parameter ke makro, seperti yang biasa saya lakukan dalam panggilan kaedah. Itu kerana makro itu sendiri sebenarnya akan menggunakan ruang tersebut juga, jadi outputnya akan menjadi "salesId- itemId- lineNum" jika saya melakukannya).
Untuk benar-benar menggunakan makro sebagai rentetan format dengan strFmt, anda perlu melarikan tanda peratus dengan garis belakang, seperti ini:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Ini akan berfungsi seolah-olah anda telah menyediakan rentetan format secara langsung.
Kerja kecil ini menggambarkan contoh-contohnya:
{
#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));
}