AIF ஆவண சேவைகளை X++ இலிருந்து நேரடியாக அழைக்கிறது Dynamics AX 2012
வெளியிடப்பட்டது: 16 பிப்ரவரி, 2025 அன்று AM 11:23:42 UTC
கடைசியாகப் புதுப்பிக்கப்பட்டது: 12 ஜனவரி, 2026 அன்று AM 8:55:34 UTC
இந்தக் கட்டுரையில், Dynamics AX 2012 இல் Application Integration Framework ஆவண சேவைகளை X++ குறியீட்டிலிருந்து நேரடியாக எவ்வாறு அழைப்பது என்பதை விளக்குகிறேன், உள்வரும் மற்றும் வெளிச்செல்லும் அழைப்புகள் இரண்டையும் பின்பற்றுகிறது, இது AIF குறியீட்டில் பிழைகளைக் கண்டறிந்து பிழைத்திருத்துவதை கணிசமாக எளிதாக்கும்.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
இந்தப் பதிவில் உள்ள தகவல்கள் Dynamics AX 2012 R3 ஐ அடிப்படையாகக் கொண்டவை. இது மற்ற பதிப்புகளுக்கு செல்லுபடியாகலாம் அல்லது செல்லுபடியாகாமல் இருக்கலாம்.
சமீபத்தில் ஒரு வாடிக்கையாளர் மற்றொரு அமைப்பிலிருந்து பெறும் தரவின் அடிப்படையில் வாடிக்கையாளர்களை உருவாக்குவதற்கான பயன்பாட்டு ஒருங்கிணைப்பு கட்டமைப்பு (AIF) உள்வரும் போர்ட்டை செயல்படுத்த உதவி செய்து கொண்டிருந்தேன். Dynamics AX ஏற்கனவே CustCustomer ஆவண சேவையை வழங்குவதால், இதற்கான தர்க்கத்தை செயல்படுத்துகிறது, நாங்கள் அதை எளிமையாக வைத்து நிலையான தீர்வைப் பயன்படுத்த முடிவு செய்தோம்.
இருப்பினும், Dynamics AX ஏற்றுக்கொள்ளும் XML ஐ உருவாக்க வெளிப்புற அமைப்பைப் பெறுவதில் நிறைய சிக்கல்கள் இருப்பது விரைவில் தெரியவந்தது. Dynamics AX ஆல் உருவாக்கப்பட்ட XML ஸ்கீமா மிகவும் சிக்கலான ஒன்றாகும், மேலும் Dynamics AX இல் சில பிழைகள் இருப்பதாகவும் தெரிகிறது, அவை சில நேரங்களில் மற்ற கருவிகளின்படி schema-செல்லுபடியாகும் XML ஐ நிராகரிக்க காரணமாகின்றன, எனவே மொத்தத்தில், இது நான் நினைத்ததை விட குறைவான எளிமையானது என்பதை நிரூபித்தது.
இந்த முயற்சியின் போது, AIF வழங்கும் பிழை செய்திகள் குறைவான தகவல்களால் ஆனவை என்பதால், சில XML கோப்புகளில் என்ன பிரச்சனை இருக்கிறது என்பதைக் கண்டுபிடிக்க நான் அடிக்கடி சிரமப்பட்டேன். இது சோர்வாகவும் இருந்தது, ஏனென்றால் வெளிப்புற அமைப்பு 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 இல் "உருவாக்கு" சேவை செயல்பாட்டிற்கு ஒத்திருக்கிறது) எந்த வாடிக்கையாளர் உருவாக்கப்பட்டது என்பது பற்றிய தகவலைக் கொண்டுள்ளது, மற்றவற்றுடன் உருவாக்கப்பட்ட CustTable பதிவின் RecId.
நீங்கள் சோதிக்க முயற்சிப்பது ஒரு அவுட்பவுண்ட் போர்ட்டைப் போல இருந்தால் அல்லது இன்பவுண்ட் போர்ட்டில் எக்ஸ்எம்எல் எப்படி இருக்க வேண்டும் என்பதற்கான ஒரு எடுத்துக்காட்டு உங்களுக்குத் தேவைப்பட்டால், அதற்கு பதிலாக 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' ஐப் படிக்க விரும்பும் வாடிக்கையாளரின் கணக்கு எண்ணுடன் மாற்ற வேண்டும்.
மேலும் படிக்க
இந்த இடுகை உங்களுக்குப் பிடித்திருந்தால், இந்த பரிந்துரைகளையும் நீங்கள் விரும்பலாம்:
- டைனமிக்ஸ் AX 2012 இல் மேக்ரோ மற்றும் strFmt உடன் சரம் வடிவமைப்பு
- Dynamics AX 2012 இல் அனைத்து தசமங்களுடன் ஒரு உண்மையான சரமாக மாற்றவும்
- டைனமிக்ஸ் AX 2012 இல் AIF சேவைக்கான ஆவண வகுப்பு மற்றும் கேள்வியை அடையாளம் காணுதல்
