Dynamics AX 2012'de Makro ve strFmt ile Dize Biçimlendirme
Yayınlandı: 16 Şubat 2025 00:48:59 UTC
Bu makalede, strFmt'de biçim dizesi olarak bir makro kullanıldığında Dynamics AX 2012'de görülen bazı tuhaf davranışlar açıklanmakta ve bu sorunların nasıl aşılacağına dair örnekler verilmektedir.
String Formatting with Macro and strFmt in Dynamics AX 2012
Bu gönderideki bilgiler Dynamics AX 2012 R3'e dayanmaktadır. Diğer sürümler için geçerli olabilir veya olmayabilir.
Yakın zamanda strFmt fonksiyonuyla ilgili beni biraz şaşırtan bir sorunla karşılaştım. En şaşırtıcı kısmı, garip bir tesadüf eseri, uzun yıllar Axapta/Dynamics AX geliştiricisi olarak geçirdiğim süre boyunca daha önce hiç karşılaşmamış olmamdı.
Sorun, strFmt işlevi için biçim dizesi olarak bir makro kullanmaya çalışmam ve işe yaramamasıydı. % parametrelerini tamamen yok sayıyor ve yalnızca dizenin geri kalanını döndürüyordu.
Bunu araştırdıktan sonra, makroların kendilerinin dizeleri biçimlendirmek için kullanılabileceğini keşfettim, bu da bilmediğim bir şeydi. Neyse, yeni bir şey öğrenmek her zaman iyidir, ancak daha önce buna rastlamamış olmama çok şaşırdım.
Temel olarak buna benzer bir şey
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
çalışmayacaktır çünkü makrodaki % işaretleri aslında makronun kendi dize biçimlendirme özellikleri için kullanılır. Bu durumda, strFmt işlevi biçimlendirme dizesini "--" olarak görecek ve bu nedenle yalnızca onu döndürecektir.
Şöyle bir şey:
info(#FormatMacro(salesId,itemId,lineNum));
çalışacaktır, ancak muhtemelen istediğiniz şekilde olmayacaktır. Üç değişkenin değerlerini çıktı olarak vermek yerine, değişkenlerin adlarını çıktı olarak verecektir, bu durumda "salesId-itemId-lineNum". (Makroya parametre geçirirken virgüllerden sonra boşluk koymadığımı fark edin, yöntem çağrılarında genellikle yaptığım gibi. Bunun nedeni, makronun aslında bu tür boşlukları da kullanacak olmasıdır, bu yüzden eğer kullansaydı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 şu şekilde kaçırmanız gerekir:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Bu aslında biçim dizesini doğrudan vermişsiniz gibi çalışacaktır.
Bu küçük çalışma örnekleri açıklıyor:
{
#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));
}