Miklix

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.


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 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

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

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:

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

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

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:

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));
}
Bluesky'de paylaşFacebook'ta paylaşLinkedIn'de paylaşTumblr'da paylaşX'te paylaşLinkedIn'de paylaşPinterest'e Pinleyin

Mikkel Bang Christensen

Yazar Hakkında

Mikkel Bang 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.