ডায়নামিক্স এএক্স 2012 এ সরাসরি এক্স ++ থেকে এআইএফ ডকুমেন্ট পরিষেবাদিতে কল করা
প্রকাশিত: ১৬ ফেব্রুয়ারী, ২০২৫ এ ১১:২৩:৩৭ AM UTC
সর্বশেষ আপডেট: ১২ জানুয়ারী, ২০২৬ এ ৮:৫৫:৩১ AM UTC
এই প্রবন্ধে, আমি ব্যাখ্যা করব কিভাবে Dynamics AX 2012-এ অ্যাপ্লিকেশন ইন্টিগ্রেশন ফ্রেমওয়ার্ক ডকুমেন্ট পরিষেবাগুলিকে সরাসরি X++ কোড থেকে কল করা যায়, যা ইনবাউন্ড এবং আউটবাউন্ড উভয় কলকেই অনুকরণ করে, যা AIF কোডে ত্রুটি খুঁজে বের করা এবং ডিবাগ করা উল্লেখযোগ্যভাবে সহজ করে তুলতে পারে।
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
এই পোস্টের তথ্য Dynamics AX 2012 R3 এর উপর ভিত্তি করে তৈরি। এটি অন্যান্য সংস্করণের জন্য বৈধ হতে পারে আবার নাও হতে পারে।
আমি সম্প্রতি একজন গ্রাহককে অন্য সিস্টেম থেকে প্রাপ্ত ডেটার উপর ভিত্তি করে গ্রাহক তৈরি করার জন্য একটি অ্যাপ্লিকেশন ইন্টিগ্রেশন ফ্রেমওয়ার্ক (AIF) ইনবাউন্ড পোর্ট বাস্তবায়নে সাহায্য করছিলাম। যেহেতু Dynamics AX ইতিমধ্যেই CustCustomer ডকুমেন্ট পরিষেবা প্রদান করে, যা এর জন্য যুক্তি প্রয়োগ করে, তাই আমরা এটিকে সহজ রাখার এবং স্ট্যান্ডার্ড সমাধান ব্যবহার করার সিদ্ধান্ত নিয়েছি।
তবে, শীঘ্রই দেখা গেল যে ডাইনামিক্স AX গ্রহণ করবে এমন এক্সটার্নাল সিস্টেমের XML তৈরি করতে অনেক সমস্যা হচ্ছে। ডাইনামিক্স AX দ্বারা তৈরি XML স্কিমা বেশ জটিল এবং এটিও মনে হচ্ছে যে Dynamics AX-এ কিছু বাগ রয়েছে যা কখনও কখনও এটিকে XML প্রত্যাখ্যান করতে বাধ্য করে যা অন্যান্য সরঞ্জাম অনুসারে স্কিমা-বৈধ, তাই সামগ্রিকভাবে, এটি আমার ধারণার চেয়ে কম সহজ প্রমাণিত হয়েছে।
এই প্রচেষ্টার সময়, আমি প্রায়শই কিছু XML ফাইলের সমস্যাটি ঠিক কী তা বের করতে হিমশিম খাচ্ছিলাম কারণ AIF দ্বারা প্রদত্ত ত্রুটি বার্তাগুলি তথ্যবহুল নয়। এটিও ক্লান্তিকর ছিল, কারণ আমাকে MSMQ-এর মাধ্যমে বহিরাগত সিস্টেমের একটি নতুন বার্তা পাঠানোর জন্য অপেক্ষা করতে হয়েছিল এবং তারপরে আবার AIF-এর বার্তাটি গ্রহণ করে প্রক্রিয়া করার জন্য অপেক্ষা করতে হয়েছিল, যাতে আমি কোনও ত্রুটি দেখতে পাই।
তাই আমি অনুসন্ধান করেছিলাম যে কিছুটা দ্রুত পরীক্ষার জন্য স্থানীয় XML ফাইল দিয়ে সরাসরি পরিষেবা কোড কল করা সম্ভব কিনা এবং দেখা গেল যে এটি সম্ভব - এবং কেবল তাই নয়, এটি করা সত্যিই সহজ এবং আসলে অনেক বেশি অর্থপূর্ণ ত্রুটি বার্তা প্রদান করে।
নিচের উদাহরণের কাজটি একটি স্থানীয় XML ফাইল পড়ে এবং AxdCustomer ক্লাস (যা CustCustomer পরিষেবা দ্বারা ব্যবহৃত ডকুমেন্ট ক্লাস) দিয়ে গ্রাহক তৈরি করার চেষ্টা করে। আপনার প্রয়োজন হলে, আপনি অন্যান্য সমস্ত ডকুমেন্ট ক্লাসের জন্য একই ধরণের কাজ করতে পারেন, উদাহরণস্বরূপ AxdSalesOrder।
{
FileNameOpen fileName = @'C:\\TestCustomerCreate.xml';
AxdCustomer customer;
AifEntityKey key;
#File
;
new FileIoPermission(fileName, #IO_Read).assert();
customer = new AxdCustomer();
key = customer.create( XmlDocument::newFile(fileName).xml(),
new AifEndpointActionPolicyInfo(),
new AifConstraintList());
CodeAccessPermission::revertAssert();
info('Done');
}
customer.create() পদ্ধতি দ্বারা ফেরত পাঠানো AifEntityKey অবজেক্ট (যা AIF-তে "create" পরিষেবা অপারেশনের সাথে সম্পর্কিত) কোন গ্রাহক তৈরি করা হয়েছিল সে সম্পর্কে তথ্য ধারণ করে, অন্যান্য বিষয়ের মধ্যে তৈরি করা CustTable রেকর্ডের RecIdও থাকে।
যদি আপনি যা পরীক্ষা করার চেষ্টা করছেন তা যদি একটি আউটবাউন্ড পোর্ট হয় অথবা যদি আপনার কেবল ইনবাউন্ড পোর্টে XML কেমন হওয়া উচিত তার একটি উদাহরণের প্রয়োজন হয়, তাহলে আপনি read() পদ্ধতি ("read" পরিষেবা অপারেশনের সাথে সম্পর্কিত) কল করে গ্রাহককে একটি ফাইলে রপ্তানি করতে ডকুমেন্ট ক্লাস ব্যবহার করতে পারেন, যেমন:
{
FileNameSave fileName = @'C:\\TestCustomerRead.xml';
Map map = new Map( Types::Integer,
Types::Container);
AxdCustomer customer;
AifEntityKey key;
XMLDocument xmlDoc;
XML xml;
AifPropertyBag bag;
#File
;
map.insert(fieldNum(CustTable, AccountNum), ['123456']);
key = new AifEntityKey();
key.parmTableId(tableNum(CustTable));
key.parmKeyDataMap(map);
customer = new AxdCustomer();
xml = customer.read(key,
null,
new AifEndpointActionPolicyInfo(),
new AifConstraintList(),
bag);
new FileIoPermission(fileName, #IO_Write).assert();
xmlDoc = XmlDocument::newXml(xml);
xmlDoc.save(fileName);
CodeAccessPermission::revertAssert();
info('Done');
}
অবশ্যই, আপনি যে গ্রাহকের অ্যাকাউন্ট নম্বরটি পড়তে চান তার অ্যাকাউন্ট নম্বর দিয়ে '123456' প্রতিস্থাপন করা উচিত।
আরও পড়ুন
যদি আপনি এই পোস্টটি উপভোগ করেন, তাহলে আপনার এই পরামর্শগুলিও পছন্দ হতে পারে:
- Dynamics AX 2012 SysOperation Framework দ্রুত ওভারভিউ
- ডায়নামিক্স এএক্স 2012 এ ডেটা () এবং বিইউএফ 2 বুফ () এর মধ্যে পার্থক্য
- ডায়নামিক্স এএক্স 2012 এ ম্যাক্রো এবং স্ট্রএফএমটি সহ স্ট্রিং ফর্ম্যাটিং
