ڈائنامکس اے ایکس 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 کے لیے اسی طرح کی نوکریاں کر سکتے ہیں۔
{
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() طریقہ ("پڑھیں" سروس آپریشن کے مطابق) کال کرکے کسی صارف کو فائل میں ایکسپورٹ کرنے کے لیے دستاویز کی کلاس بھی استعمال کرسکتے ہیں، اس طرح:
{
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 ڈیٹا کنٹریکٹ کلاس میں سوال کا استعمال
- Dynamics AX 2012 میں قانونی ہستی (کمپنی اکاؤنٹس) کو حذف کریں
- Dynamics AX 2012 میں تمام اعشاریوں کے ساتھ ایک حقیقی کو سٹرنگ میں تبدیل کریں۔
