Miklix

ডায়নামিক্স এএক্স 2012 এ সরাসরি এক্স ++ থেকে এআইএফ ডকুমেন্ট পরিষেবাদিতে কল করা

প্রকাশিত: ১৬ ফেব্রুয়ারী, ২০২৫ এ ১১:২৩:৩৭ AM UTC

এই নিবন্ধে, আমি ব্যাখ্যা করি যে কীভাবে ডায়নামিক্স এএক্স 2012 এ অ্যাপ্লিকেশন ইন্টিগ্রেশন ফ্রেমওয়ার্ক ডকুমেন্ট পরিষেবাগুলি সরাসরি এক্স ++ কোড থেকে কল করা যায়, ইনবাউন্ড এবং আউটবাউন্ড উভয় কলকেই অনুকরণ করে, যা এআইএফ কোডে ত্রুটিগুলি খুঁজে পেতে এবং ডিবাগ করা উল্লেখযোগ্যভাবে সহজ করে তুলতে পারে।


এই পৃষ্ঠাটি যতটা সম্ভব মানুষের কাছে পৌঁছানোর জন্য ইংরেজি থেকে মেশিন অনুবাদ করা হয়েছে। দুর্ভাগ্যবশত, মেশিন অনুবাদ এখনও একটি নিখুঁত প্রযুক্তি নয়, তাই ত্রুটি হতে পারে। আপনি যদি চান, আপনি এখানে মূল ইংরেজি সংস্করণটি দেখতে পারেন:

Calling AIF Document Services Directly from X++ in Dynamics AX 2012

এই পোস্টের তথ্য Dynamics AX 2012 R3 এর উপর ভিত্তি করে। এটি অন্যান্য সংস্করণের জন্য বৈধ হতে পারে বা নাও হতে পারে।

আমি সম্প্রতি একজন গ্রাহককে অন্য সিস্টেম থেকে প্রাপ্ত ডেটার উপর ভিত্তি করে গ্রাহক তৈরি করার জন্য একটি অ্যাপ্লিকেশন ইন্টিগ্রেশন ফ্রেমওয়ার্ক (এআইএফ) ইনবাউন্ড পোর্ট বাস্তবায়নে সহায়তা করছিলাম। যেহেতু ডায়নামিক্স এক্স ইতিমধ্যে কাস্টকাস্টমার ডকুমেন্ট পরিষেবা সরবরাহ করে, যা এর জন্য যুক্তি প্রয়োগ করে, আমরা এটি সহজ রাখার এবং স্ট্যান্ডার্ড সমাধানটি ব্যবহার করার সিদ্ধান্ত নিয়েছি।

যাইহোক, শীঘ্রই এটি প্রমাণিত হয়েছিল যে এক্সএমএল তৈরি করতে বাহ্যিক সিস্টেমটি পেতে অনেক সমস্যা ছিল যা ডায়নামিক্স এএক্স গ্রহণ করবে। ডায়নামিক্স এএক্স দ্বারা উত্পন্ন এক্সএমএল স্কিমাটি বেশ জটিল এবং এটিও প্রদর্শিত হয় যে ডায়নামিক্স এএক্সে কয়েকটি বাগ রয়েছে যা কখনও কখনও এটি এক্সএমএলকে প্রত্যাখ্যান করে যা অন্যান্য সরঞ্জাম অনুসারে স্কিমা-বৈধ, তাই সব মিলিয়ে এটি আমার ভাবার চেয়ে কম সহজ বলে প্রমাণিত হয়েছে।

প্রচেষ্টা চলাকালীন, আমি প্রায়শই নির্দিষ্ট এক্সএমএল ফাইলগুলির সাথে ঠিক কী সমস্যা ছিল তা নির্ধারণ করতে লড়াই করেছি কারণ এআইএফ দ্বারা প্রদত্ত ত্রুটি বার্তাগুলি তথ্যের চেয়ে কম। এটি ক্লান্তিকরও ছিল, কারণ আমাকে এমএসএমকিউতে একটি নতুন বার্তা প্রেরণের জন্য বাহ্যিক সিস্টেমের জন্য অপেক্ষা করতে হয়েছিল এবং তারপরে আবার এআইএফের জন্য বার্তাটি বাছাই করতে এবং কোনও ত্রুটি দেখার আগে এটি প্রক্রিয়া করতে হয়েছিল।

তাই আমি তদন্ত করেছি যে কিছুটা দ্রুত পরীক্ষার জন্য স্থানীয় এক্সএমএল ফাইলের সাথে সরাসরি পরিষেবা কোডটি কল করা সম্ভব কিনা এবং এটি দেখা যাচ্ছে যে এটি - এবং কেবল তাই নয়, এটি করা সত্যিই সহজ এবং আসলে আরও অনেক অর্থবহ ত্রুটি বার্তা সরবরাহ করে।

নীচের উদাহরণ কাজটি একটি স্থানীয় এক্সএমএল ফাইল পড়ে এবং গ্রাহক তৈরি করতে অ্যাক্সডক্লোমার ক্লাস (যা কাস্টকাস্টমার পরিষেবা দ্বারা ব্যবহৃত ডকুমেন্ট ক্লাস) এর সাথে এটি ব্যবহার করার চেষ্টা করে। আপনার যদি প্রয়োজন হয় তবে আপনি অন্যান্য সমস্ত ডকুমেন্ট ক্লাসের জন্য অনুরূপ কাজ করতে পারেন, উদাহরণস্বরূপ AxdSalesOrder।

static void CustomerCreate(Args _args)
{
    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');
}

গ্রাহক.ক্রিয়েট () পদ্ধতি (যা এআইএফ-এ "তৈরি" পরিষেবা অপারেশনের সাথে মিলে যায়) দ্বারা ফেরত দেওয়া AifEntityKey অবজেক্টটিতে তৈরি করা কাস্টটেবল রেকর্ডের অন্যান্য বিষয়গুলির মধ্যে কোন গ্রাহক তৈরি করা হয়েছিল সে সম্পর্কে তথ্য রয়েছে।

আপনি যা পরীক্ষা করার চেষ্টা করছেন তা যদি পরিবর্তে একটি আউটবাউন্ড পোর্ট হয় বা ইনবাউন্ড পোর্টে এক্সএমএল কেমন হওয়া উচিত তার একটি উদাহরণের প্রয়োজন হয় তবে আপনি রিড () পদ্ধতিতে কল করে ("পড়া" পরিষেবা অপারেশনের সাথে সম্পর্কিত) পরিবর্তে কোনও গ্রাহককে কোনও ফাইলে রফতানি করতে ডকুমেন্ট ক্লাসটিও ব্যবহার করতে পারেন, যেমনঃ

static void CustomerRead(Args _args)
{
    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' প্রতিস্থাপন করা উচিত।

ব্লুস্কাইতে শেয়ার করুনফেসবুকে শেয়ার করুনলিংকডইনে শেয়ার করুনটাম্বলারে শেয়ার করুনX-এ শেয়ার করুনলিংকডইনে শেয়ার করুনপিন্টারেস্টে পিন করুন

মিকেল ব্যাং ক্রিস্টেনসেন

লেখক সম্পর্কে

মিকেল ব্যাং ক্রিস্টেনসেন
মিকেল হলেন miklix.com এর স্রষ্টা এবং মালিক। একজন পেশাদার কম্পিউটার প্রোগ্রামার/সফ্টওয়্যার ডেভেলপার হিসেবে তার ২০ বছরেরও বেশি অভিজ্ঞতা রয়েছে এবং বর্তমানে তিনি একটি বৃহৎ ইউরোপীয় আইটি কর্পোরেশনে পূর্ণকালীন কর্মরত। ব্লগিং না করার সময়, তিনি তার অবসর সময় বিভিন্ন আগ্রহ, শখ এবং কার্যকলাপে ব্যয় করেন, যা কিছুটা হলেও এই ওয়েবসাইটে কভার করা বিভিন্ন বিষয়ের মধ্যে প্রতিফলিত হতে পারে।