Dynamics AX 2012'de Makro ve strFmt ile Dize Biçimlendirme
Yayınlandı: 16 Şubat 2025 00:48:59 UTC
Son güncelleme: 12 Ocak 2026 08:44:33 UTC
Bu makale, Dynamics AX 2012'de strFmt'de biçim dizesi olarak makro kullanıldığında ortaya çıkan bazı tuhaf davranışları ve bunların nasıl çözüleceğine dair örnekleri açıklamaktadır.
String Formatting with Macro and strFmt in Dynamics AX 2012
Bu yazıda yer alan bilgiler Dynamics AX 2012 R3'e dayanmaktadır. Diğer sürümler için geçerli olabilir veya olmayabilir.
Geçtiğimiz günlerde strFmt fonksiyonuyla ilgili beni bir süre şaşırtan bir sorunla karşılaştım. En şaşırtıcı yanı ise, Axapta/Dynamics AX geliştiricisi olarak geçirdiğim uzun yıllar boyunca garip bir tesadüfle daha önce hiç böyle bir sorunla karşılaşmamış olmamdı.
Sorun şuydu ki, strFmt fonksiyonu için format dizesi olarak bir makro kullanmaya çalıştım ve bu işe yaramadı. % parametrelerini tamamen göz ardı etti ve yalnızca dizenin geri kalanını döndürdü.
Araştırdıktan sonra, makroların kendilerinin de metin dizelerini biçimlendirmek için kullanılabileceğini keşfettim ki bu da bilmediğim bir şeydi. Neyse, yeni bir şey öğrenmek her zaman iyidir, ama daha önce buna rastlamamış olmam beni yine de çok şaşırttı.
Temelde, buna benzer bir şey.
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Bu yöntem işe yaramayacaktır çünkü makrodaki % işaretleri aslında makronun kendi dize biçimlendirme özelliklerinde kullanılmaktadır. Bu durumda, strFmt fonksiyonu biçimlendirme dizesini "--" olarak görecek ve bu nedenle yalnızca bunu döndürecektir.
Şuna benzer bir şey:
info(#FormatMacro(salesId,itemId,lineNum));
Çalışacaktır, ancak muhtemelen istediğiniz şekilde değil. Üç değişkenin değerlerini yazdırmak yerine, değişkenlerin adlarını yazdıracaktır, bu durumda "salesId-itemId-lineNum". (Makroya parametre geçirirken virgüllerden sonra boşluk bırakmadığıma dikkat edin, normalde metot çağrılarında yaptığım gibi. Çünkü makro aslında bu boşlukları da kullanacak, bu nedenle boşluk bıraksaydım çıktı "salesId-itemId-lineNum" olurdu.)
Bir makroyu strFmt ile biçimlendirme dizesi olarak kullanmak için, yüzde işaretlerini ters eğik çizgilerle kaçırmanız gerekir, şöyle:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Bu, format dizesini doğrudan sağlamış gibi çalışacaktır.
Bu küçük iş, örnekleri göstermektedir:
{
#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));
}
Daha Fazla Okuma
Bu yazıyı beğendiyseniz, şu öneriler de ilginizi çekebilir:
- Dynamics AX 2012'de "Veri sözleşmesi nesnesi için meta veri sınıfı tanımlanmadı" hatası
- Dynamics AX 2012'de Hangi Alt Sınıfın Örneklendirileceğini Bulmak İçin SysExtension Çerçevesini Kullanma
- Dynamics AX 2012'de data() ve buf2Buf() Arasındaki Fark
