Miklix

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.


Bu sayfa, mümkün olduğunca çok kişi tarafından erişilebilir olması amacıyla İngilizce'den makine çevirisiyle çevrilmiştir. Ne yazık ki, makine çevirisi henüz mükemmelleştirilmiş bir teknoloji değildir, bu nedenle hatalar meydana gelebilir. Tercih ederseniz, orijinal İngilizce versiyonu buradan görüntüleyebilirsiniz:

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.

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

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:

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

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

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

Bu, format dizesini doğrudan sağlamış gibi çalışacaktır.

Bu küçük iş, örnekleri göstermektedir:

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));
}

Daha Fazla Okuma

Bu yazıyı beğendiyseniz, şu öneriler de ilginizi çekebilir:


Bluesky'de paylaşFacebook'ta paylaşLinkedIn'de paylaşTumblr'da paylaşX'te paylaşLinkedIn'de paylaşPinterest'e Pinleyin

Mikkel Christensen

Yazar Hakkında

Mikkel Christensen
Mikkel miklix.com'un yaratıcısı ve sahibidir. Profesyonel bilgisayar programcısı/yazılım geliştiricisi olarak 20 yılı aşkın deneyime sahiptir ve şu anda büyük bir Avrupa BT şirketinde tam zamanlı olarak çalışmaktadır. Blog yazmadığı zamanlarda, boş zamanlarını çok çeşitli ilgi alanları, hobiler ve aktivitelerle geçirmektedir ve bu da bir dereceye kadar bu web sitesinde kapsanan konuların çeşitliliğine yansıyabilir.