Dynamics AX 2012 میں میکرو اور strFmt کے ساتھ سٹرنگ فارمیٹنگ
شائع شدہ: 16 فروری، 2025 کو 12:49:07 AM UTC
یہ مضمون strFmt میں میکرو کو فارمیٹ سٹرنگ کے طور پر استعمال کرتے وقت Dynamics AX 2012 میں کچھ عجیب رویے کی وضاحت کرتا ہے، ساتھ ہی اس کے ارد گرد کام کرنے کے طریقے کی مثالیں بھی۔
String Formatting with Macro and strFmt in Dynamics AX 2012
اس پوسٹ میں معلومات Dynamics AX 2012 R3 پر مبنی ہے۔ یہ دوسرے ورژن کے لیے درست ہو سکتا ہے یا نہیں۔
مجھے حال ہی میں strFmt فنکشن کے ساتھ ایک مسئلہ کا سامنا کرنا پڑا جس نے مجھے تھوڑی دیر کے لیے حیران کردیا۔ سب سے حیران کن بات یہ تھی کہ میں نے ایک عجیب و غریب اتفاق سے اپنے کئی سالوں میں بطور Axapta/Dynamics AX ڈویلپر کبھی اس کا سامنا نہیں کیا۔
مسئلہ یہ تھا کہ میں نے میکرو کو strFmt فنکشن کے لیے فارمیٹ سٹرنگ کے طور پر استعمال کرنے کی کوشش کی اور یہ کام نہیں ہوا۔ اس نے % پیرامیٹرز کو مکمل طور پر نظر انداز کیا اور صرف سٹرنگ کا بقیہ حصہ واپس کیا۔
اس پر غور کرنے کے بعد، میں نے دریافت کیا کہ میکرو خود کو سٹرنگز کو فارمیٹ کرنے کے لیے استعمال کیا جا سکتا ہے، جو کہ میں نہیں جانتا تھا۔ اوہ ٹھیک ہے، کچھ نیا سیکھنا ہمیشہ اچھا ہوتا ہے، لیکن میں پھر بھی بہت حیران تھا کہ مجھے اس سے پہلے ایسا نہیں ہوا تھا۔
بنیادی طور پر، کچھ اس طرح
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
کام نہیں کرے گا کیونکہ میکرو میں % نشانیاں دراصل میکرو کی اپنی سٹرنگ فارمیٹنگ کی خصوصیات کے لیے استعمال ہوتی ہیں۔ اس صورت میں، strFmt فنکشن فارمیٹنگ سٹرنگ کو "--" کے طور پر دیکھے گا اور اس لیے صرف اسے واپس کرے گا۔
کچھ اس طرح:
info(#FormatMacro(salesId,itemId,lineNum));
کام کرے گا، لیکن شاید اس طرح نہیں جس طرح آپ چاہتے ہیں۔ تین متغیرات کی قدروں کو آؤٹ پٹ کرنے کے بجائے، یہ اس صورت میں "salesId-itemId-lineNum" میں متغیرات کے ناموں کو آؤٹ پٹ کرے گا۔ (دیکھیں کہ میں نے میکرو کو پیرامیٹرز پاس کرتے وقت کوما کے بعد خالی جگہیں نہیں لگائیں، جیسا کہ میں عام طور پر میتھڈ کالز میں کرتا ہوں۔ اس کی وجہ یہ ہے کہ میکرو درحقیقت ایسی خالی جگہوں کو بھی استعمال کرے گا، اس لیے آؤٹ پٹ "salesId-itemId-lineNum" ہو گی اگر میں کرتا ہوں)۔
strFmt کے ساتھ فارمیٹنگ سٹرنگ کے طور پر میکرو کو اصل میں استعمال کرنے کے لیے، آپ کو بیک سلیش کے ساتھ فیصد کے نشانات سے بچنے کی ضرورت ہے، اس طرح:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
یہ دراصل اس طرح کام کرے گا جیسے آپ نے فارمیٹ سٹرنگ کو براہ راست فراہم کیا ہو۔
یہ چھوٹا سا کام مثالوں کی وضاحت کرتا ہے:
{
#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));
}