AIF ஆவண சேவைகளை X++ இலிருந்து நேரடியாக அழைக்கிறது Dynamics AX 2012
வெளியிடப்பட்டது: 16 பிப்ரவரி, 2025 அன்று AM 11:23:42 UTC
இந்த கட்டுரையில், டைனமிக்ஸ் ஏஎக்ஸ் 2012 இல் பயன்பாட்டு ஒருங்கிணைப்பு கட்டமைப்பு ஆவண சேவைகளை எக்ஸ் ++ குறியீட்டிலிருந்து நேரடியாக எவ்வாறு அழைப்பது என்பதை நான் விளக்குகிறேன், உள்வரும் மற்றும் வெளிச்செல்லும் அழைப்புகள் இரண்டையும் பின்பற்றுகிறது, இது AIF குறியீட்டில் பிழைகளைக் கண்டறிந்து பிழைத்திருத்தம் செய்வதை கணிசமாக எளிதாக்கும்.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
இந்த இடுகையில் உள்ள தகவல்கள் Dynamics AX 2012 R3 ஐ அடிப்படையாகக் கொண்டவை. இது மற்ற பதிப்புகளுக்கு செல்லுபடியாகலாம் அல்லது செல்லுபடியாகாமல் இருக்கலாம்.
நான் சமீபத்தில் ஒரு வாடிக்கையாளருக்கு மற்றொரு அமைப்பிலிருந்து பெறும் தரவுகளின் அடிப்படையில் வாடிக்கையாளர்களை உருவாக்குவதற்கான பயன்பாட்டு ஒருங்கிணைப்பு கட்டமைப்பு (AIF) உள்வரும் துறைமுகத்தை செயல்படுத்த உதவினேன். டைனமிக்ஸ் AX ஏற்கனவே CustCustomer ஆவண சேவையை வழங்குவதால், இதற்கான தர்க்கத்தை செயல்படுத்துகிறது, அதை எளிமையாக வைத்து நிலையான தீர்வைப் பயன்படுத்த முடிவு செய்தோம்.
இருப்பினும், டைனமிக்ஸ் ஏஎக்ஸ் ஏற்றுக்கொள்ளும் எக்ஸ்எம்எல் ஐ உருவாக்க வெளிப்புற அமைப்பைப் பெறுவதில் நிறைய சிக்கல்கள் இருந்தன என்பது விரைவில் மாறியது. டைனமிக்ஸ் ஏஎக்ஸ் ஆல் உருவாக்கப்பட்ட எக்ஸ்எம்எல் ஸ்கீமா மிகவும் சிக்கலான ஒன்றாகும், மேலும் டைனமிக்ஸ் ஏஎக்ஸ் இல் சில பிழைகள் இருப்பதாகவும் தோன்றுகிறது, இது சில நேரங்களில் எக்ஸ்எம்எல்லை நிராகரிக்க காரணமாகிறது, இது மற்ற கருவிகளின்படி ஸ்கீமா-செல்லுபடியாகும், எனவே மொத்தத்தில், இது நான் நினைத்ததை விட குறைவான எளிமையானது என்பதை நிரூபித்தது.
முயற்சியின் போது, சில எக்ஸ்எம்எல் கோப்புகளில் சரியாக என்ன சிக்கல் என்பதைக் கண்டுபிடிக்க நான் அடிக்கடி போராடினேன், ஏனெனில் ஏஐஎஃப் வழங்கிய பிழை செய்திகள் தகவலறிந்ததை விட குறைவாக உள்ளன. இது கடினமாக இருந்தது, ஏனென்றால் MSMQ வழியாக ஒரு புதிய செய்தியை அனுப்ப வெளிப்புற அமைப்பு காத்திருக்க வேண்டியிருந்தது, பின்னர் AIF ஒரு பிழையைக் காண்பதற்கு முன்பு செய்தியை எடுத்து செயலாக்க வேண்டும்.
எனவே ஓரளவு விரைவான சோதனைக்காக உள்ளூர் எக்ஸ்எம்எல் கோப்புடன் சேவை குறியீட்டை நேரடியாக அழைக்க முடியுமா என்று நான் ஆராய்ந்தேன், அது மாறிவிடும் - அது மட்டுமல்ல, அதைச் செய்வது மிகவும் எளிதானது மற்றும் உண்மையில் மிகவும் அர்த்தமுள்ள பிழை செய்திகளை வழங்குகிறது.
கீழேயுள்ள எடுத்துக்காட்டு வேலை ஒரு உள்ளூர் எக்ஸ்எம்எல் கோப்பைப் படித்து, ஒரு வாடிக்கையாளரை உருவாக்க 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');
}
வாடிக்கையாளர்.create() முறையால் திரும்பிய AifEntityKey பொருள் (இது AIF இல் "உருவாக்கு" சேவை செயல்பாட்டிற்கு ஒத்திருக்கிறது) எந்த வாடிக்கையாளர் உருவாக்கப்பட்டார் என்பது பற்றிய தகவல்களைக் கொண்டுள்ளது, மற்றவற்றுடன், உருவாக்கப்பட்ட CustTable பதிவின் RecId.
நீங்கள் சோதிக்க முயற்சிப்பது அதற்கு பதிலாக வெளிச்செல்லும் துறைமுகமாக இருந்தால் அல்லது உள்வரும் துறைமுகத்தில் எக்ஸ்எம்எல் எப்படி இருக்க வேண்டும் என்பதற்கான எடுத்துக்காட்டு உங்களுக்குத் தேவைப்பட்டால், அதற்கு பதிலாக வாசிப்பு () முறையை ("வாசிப்பு" சேவை செயல்பாட்டுடன் தொடர்புடையது) அழைப்பதன் மூலம் ஒரு வாடிக்கையாளரை ஒரு கோப்பிற்கு ஏற்றுமதி செய்ய ஆவண வகுப்பைப் பயன்படுத்தலாம், இப்படிக்கு:
{
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' என்பதை நிச்சயமாக மாற்ற வேண்டும்.