Miklix

ڈائنامکس اے ایکس 2012 میں ایکس ++ سے براہ راست اے آئی ایف دستاویز خدمات کو کال کرنا

شائع شدہ: 16 فروری، 2025 کو 11:23:28 AM UTC
آخری بار اپ ڈیٹ کیا گیا: 12 جنوری، 2026 کو 8:55:28 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 پہلے سے ہی CustomCustomer دستاویز کی خدمت فراہم کرتا ہے، جو اس کے لیے منطق کو نافذ کرتی ہے، ہم نے اسے سادہ رکھنے اور معیاری حل استعمال کرنے کا فیصلہ کیا۔

تاہم، جلد ہی یہ پتہ چلا کہ ایکس ایم ایل بنانے کے لیے بیرونی نظام کو حاصل کرنے میں بہت سی دشواریوں کا سامنا ہے جسے Dynamics AX قبول کرے گا۔ Dynamics AX کے ذریعہ تیار کردہ XML سکیما کافی پیچیدہ ہے اور یہ بھی ظاہر ہوتا ہے کہ Dynamics AX میں کچھ کیڑے ہیں جو بعض اوقات اس XML کو مسترد کرنے کا سبب بنتے ہیں جو دوسرے ٹولز کے مطابق اسکیما کے لحاظ سے درست ہے، اس لیے یہ سب کچھ اس سے کم آسان ثابت ہوا جتنا میں نے سوچا تھا۔

کوشش کے دوران، میں نے اکثر یہ جاننے کے لیے جدوجہد کی کہ مخصوص XML فائلوں میں اصل مسئلہ کیا ہے کیونکہ AIF کی طرف سے فراہم کردہ غلطی کے پیغامات معلوماتی سے کم ہیں۔ یہ تکلیف دہ بھی تھا، کیونکہ مجھے ایم ایس ایم کیو پر ایک نیا پیغام بھیجنے کے لیے بیرونی نظام کا انتظار کرنا پڑا اور پھر دوبارہ AIF کا پیغام اٹھا کر اس پر کارروائی کرنے کے لیے اس سے پہلے کہ میں کوئی خرابی دیکھ سکوں۔

اس لیے میں نے تحقیق کی کہ آیا کسی حد تک تیز رفتار جانچ کے لیے مقامی XML فائل کے ساتھ سروس کوڈ کو براہ راست کال کرنا ممکن ہے اور یہ پتہ چلا کہ ایسا ہے - اور صرف یہی نہیں، یہ کرنا واقعی آسان ہے اور درحقیقت بہت زیادہ معنی خیز غلطی کے پیغامات فراہم کرتا ہے۔

ذیل میں مثال کے طور پر کام ایک مقامی XML فائل کو پڑھتا ہے اور اسے AxdCustomer کلاس (جو کہ دستاویز کی کلاس ہے جو CustCustomer سروس کے ذریعہ استعمال کیا جاتا ہے) کے ساتھ صارف بنانے کی کوشش کرتا ہے۔ اگر آپ کو ضرورت ہو تو آپ تمام دیگر دستاویزات کی کلاسوں، مثال کے طور پر 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 آبجیکٹ جو customer.create() طریقہ کے ذریعہ واپس کیا گیا ہے (جو AIF میں "تخلیق" سروس آپریشن سے مطابقت رکھتا ہے) اس بارے میں معلومات پر مشتمل ہے کہ کس صارف کو بنایا گیا تھا، دیگر چیزوں کے ساتھ ساتھ تخلیق کردہ CustTable ریکارڈ کی RecId۔

اگر آپ جس چیز کی جانچ کرنے کی کوشش کر رہے ہیں وہ اس کے بجائے آؤٹ باؤنڈ پورٹ ہے یا اگر آپ کو صرف ایک مثال کی ضرورت ہے کہ XML کو ان باؤنڈ پورٹ پر کیسا نظر آنا چاہیے، تو آپ اس کے بجائے read() طریقہ ("پڑھیں" سروس آپریشن کے مطابق) کال کرکے کسی صارف کو فائل میں ایکسپورٹ کرنے کے لیے دستاویز کی کلاس بھی استعمال کرسکتے ہیں، اس طرح:

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' کو اس صارف کے اکاؤنٹ نمبر سے بدل دینا چاہیے جسے آپ پڑھنا چاہتے ہیں۔

مزید پڑھنا

اگر آپ اس پوسٹ سے لطف اندوز ہوتے ہیں، تو آپ ان تجاویز کو بھی پسند کر سکتے ہیں:


بلوسکی پر شیئر کریں۔فیس بک پر شیئر کریں۔لنکڈ ان پر شیئر کریں۔ٹمبلر پر شیئر کریں۔ایکس پر شیئر کریں۔لنکڈ ان پر شیئر کریں۔پنٹرسٹ پر پن کریں

میکل کرسٹینسن

مصنف کے بارے میں

میکل کرسٹینسن
مائیکل miklix.com کا خالق اور مالک ہے۔ اس کے پاس ایک پیشہ ور کمپیوٹر پروگرامر/سافٹ ویئر ڈویلپر کے طور پر 20 سال سے زیادہ کا تجربہ ہے اور وہ اس وقت ایک بڑی یورپی آئی ٹی کارپوریشن میں کل وقتی ملازمت کر رہے ہیں۔ جب وہ بلاگنگ نہیں کرتے ہیں، تو وہ اپنا فارغ وقت دلچسپیوں، مشاغل اور سرگرمیوں کی ایک وسیع صف پر صرف کرتا ہے، جو کسی حد تک اس ویب سائٹ پر موجود مختلف موضوعات سے ظاہر ہو سکتا ہے۔