Miklix

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.


Halaman ini telah diterjemahkan mesin daripada bahasa Inggeris untuk menjadikannya boleh diakses oleh seramai mungkin orang. Malangnya, terjemahan mesin belum lagi merupakan teknologi yang sempurna, jadi ralat boleh berlaku. Jika anda mahu, anda boleh melihat versi bahasa Inggeris asal di sini:

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

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

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:

#define.FormatMacro('%1-%2-%3');
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:

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

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

Ini akan berfungsi seolah-olah anda telah menyediakan rentetan format secara langsung.

Kerja kecil ini menggambarkan contoh-contohnya:

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));
}
Kongsi di BlueskyKongsi di FacebookKongsi di LinkedInKongsi di TumblrKongsi di XKongsi di LinkedInSematkan pada Pinterest

Mikkel Christensen

Mengenai Pengarang

Mikkel Christensen
Mikkel ialah pencipta dan pemilik miklix.com. Beliau mempunyai lebih 20 tahun pengalaman sebagai pengaturcara komputer/pembangun perisian profesional dan kini bekerja sepenuh masa untuk sebuah syarikat IT Eropah yang besar. Apabila tidak menulis blog, dia menghabiskan masa lapangnya dengan pelbagai minat, hobi dan aktiviti, yang mungkin sedikit sebanyak dapat dilihat dalam pelbagai topik yang diliputi di laman web ini.