ডায়নামিক্স এএক্স 2012 এ ম্যাক্রো এবং স্ট্রএফএমটি সহ স্ট্রিং ফর্ম্যাটিং
প্রকাশিত: ১৬ ফেব্রুয়ারী, ২০২৫ এ ১২:৪৯:১৪ AM UTC
এই নিবন্ধটি ডায়নামিক্স এএক্স 2012 এর কিছু অদ্ভুত আচরণ বর্ণনা করে যখন স্ট্রএফএমটিতে ফর্ম্যাট স্ট্রিং হিসাবে ম্যাক্রো ব্যবহার করে, পাশাপাশি এটির চারপাশে কীভাবে কাজ করা যায় তার উদাহরণ।
String Formatting with Macro and strFmt in Dynamics AX 2012
এই পোস্টের তথ্য Dynamics AX 2012 R3 এর উপর ভিত্তি করে। এটি অন্যান্য সংস্করণের জন্য বৈধ হতে পারে বা নাও হতে পারে।
আমি সম্প্রতি স্ট্রএফএমটি ফাংশন নিয়ে একটি সমস্যার মুখোমুখি হয়েছি যা আমাকে কিছুটা বিস্মিত করেছিল। সবচেয়ে বিস্ময়কর অংশটি হ'ল কিছু অদ্ভুত কাকতালীয় কারণে আমি অ্যাক্সাপ্টা / ডায়নামিক্স এএক্স বিকাশকারী হিসাবে আমার বহু বছরে এর আগে কখনও এটির মুখোমুখি হইনি।
সমস্যাটি হ'ল আমি স্ট্রএফএমটি ফাংশনের জন্য ফর্ম্যাট স্ট্রিং হিসাবে একটি ম্যাক্রো ব্যবহার করার চেষ্টা করেছি এবং এটি ঠিক কাজ করে নি। এটি সম্পূর্ণরূপে % প্যারামিটারগুলি উপেক্ষা করেছে এবং কেবল স্ট্রিংয়ের বাকী অংশটি ফিরিয়ে দিয়েছে।
এটি দেখার পরে, আমি আবিষ্কার করেছি যে ম্যাক্রোগুলি নিজেরাই স্ট্রিং ফর্ম্যাট করতে ব্যবহার করা যেতে পারে, যা আমি জানতাম না। ওহ ভাল, নতুন কিছু শিখতে সর্বদা ভাল, তবে আমি এখনও খুব অবাক হয়েছি যে আমি এর আগে এটি সম্মুখীন হইনি।
মূলত, এই মত কিছু
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
কাজ করবে না কারণ ম্যাক্রোতে % চিহ্নগুলি আসলে ম্যাক্রোর নিজস্ব স্ট্রিং ফর্ম্যাটিং বৈশিষ্ট্যগুলির জন্য ব্যবহৃত হয়। এই ক্ষেত্রে, স্ট্রএফএমটি ফাংশনটি ফর্ম্যাটিং স্ট্রিংটিকে "--" হিসাবে দেখতে পাবে এবং তাই কেবল এটিই ফিরিয়ে দেবে।
এরকম কিছু:
info(#FormatMacro(salesId,itemId,lineNum));
কাজ করবে, তবে সম্ভবত আপনি যেভাবে চান সেভাবে নয়। তিনটি ভেরিয়েবলের মানগুলি আউটপুট করার পরিবর্তে, এটি পরিবর্তে ভেরিয়েবলের নামগুলি আউটপুট করবে, এই ক্ষেত্রে "সেলসআইডি-আইটেমআইডি-লাইননাম"। (লক্ষ্য করুন যে আমি ম্যাক্রোতে প্যারামিটারগুলি পাস করার সময় কমার পরে স্পেস রাখিনি, যেমনটি আমি সাধারণত পদ্ধতি কলগুলিতে করি। কারণ ম্যাক্রো আসলে এই জাতীয় স্পেসগুলিও ব্যবহার করবে, তাই আউটপুটটি "সেলসআইডি- আইটেমআইডি-লাইননাম" হবে যদি আমি করি)।
আসলে স্ট্রএফএমটি সহ ফর্ম্যাটিং স্ট্রিং হিসাবে একটি ম্যাক্রো ব্যবহার করতে, আপনাকে ব্যাকস্ল্যাশগুলির সাথে শতাংশের লক্ষণগুলি এড়াতে হবে, যেমন:
;
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));
}