Dynamics AX 2012-ൽ X++ ൽ നിന്ന് നേരിട്ട് AIF ഡോക്യുമെന്റ് സേവനങ്ങളിലേക്ക് വിളിക്കുക
പ്രസിദ്ധീകരിച്ചത്: 2025, ഫെബ്രുവരി 16 11:24:37 AM UTC
അവസാനം അപ്ഡേറ്റ് ചെയ്തത്: 2026, ജനുവരി 12 8:55:39 AM UTC
ഈ ലേഖനത്തിൽ, ഡൈനാമിക്സ് എഎക്സ് 2012 ലെ ആപ്ലിക്കേഷൻ ഇന്റഗ്രേഷൻ ഫ്രെയിംവർക്ക് ഡോക്യുമെന്റ് സേവനങ്ങളെ എക്സ്++ കോഡിൽ നിന്ന് നേരിട്ട് എങ്ങനെ വിളിക്കാമെന്ന് ഞാൻ വിശദീകരിക്കുന്നു, ഇൻബൗണ്ട്, ഔട്ട്ബൗണ്ട് കോളുകൾ അനുകരിക്കുന്നു, ഇത് എഐഎഫ് കോഡിലെ പിശകുകൾ കണ്ടെത്തുന്നതും ഡീബഗ് ചെയ്യുന്നതും ഗണ്യമായി എളുപ്പമാക്കുന്നു.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
ഈ പോസ്റ്റിലെ വിവരങ്ങൾ ഡൈനാമിക്സ് AX 2012 R3 അടിസ്ഥാനമാക്കിയുള്ളതാണ്. മറ്റ് പതിപ്പുകൾക്ക് ഇത് സാധുതയുള്ളതോ സാധുതയില്ലാത്തതോ ആകാം.
മറ്റൊരു സിസ്റ്റത്തിൽ നിന്ന് ലഭിക്കുന്ന ഡാറ്റയെ അടിസ്ഥാനമാക്കി ഉപഭോക്താക്കളെ സൃഷ്ടിക്കുന്നതിനായി ഒരു ആപ്ലിക്കേഷൻ ഇന്റഗ്രേഷൻ ഫ്രെയിംവർക്ക് (AIF) ഇൻബൗണ്ട് പോർട്ട് നടപ്പിലാക്കാൻ ഒരു ഉപഭോക്താവിനെ ഞാൻ അടുത്തിടെ സഹായിച്ചിരുന്നു. ഡൈനാമിക്സ് AX ഇതിനകം തന്നെ കസ്റ്റമർ ഡോക്യുമെന്റ് സേവനം നൽകുന്നതിനാൽ, ഇതിനുള്ള യുക്തി നടപ്പിലാക്കുന്നതിനാൽ, ഇത് ലളിതമാക്കി സ്റ്റാൻഡേർഡ് പരിഹാരം ഉപയോഗിക്കാൻ ഞങ്ങൾ തീരുമാനിച്ചു.
എന്നിരുന്നാലും, ഡൈനാമിക്സ് AX സ്വീകരിക്കുന്ന XML ജനറേറ്റ് ചെയ്യുന്നതിന് ബാഹ്യ സിസ്റ്റം ലഭ്യമാക്കുന്നതിൽ ധാരാളം പ്രശ്നങ്ങളുണ്ടെന്ന് താമസിയാതെ മനസ്സിലായി. ഡൈനാമിക്സ് AX ജനറേറ്റ് ചെയ്യുന്ന XML സ്കീമ വളരെ സങ്കീർണ്ണമായ ഒന്നാണ്, കൂടാതെ മറ്റ് ഉപകരണങ്ങൾ അനുസരിച്ച് സ്കീമ-സാധുതയുള്ള XML നിരസിക്കാൻ ചിലപ്പോൾ കാരണമാകുന്ന Dynamics AX-ൽ കുറച്ച് ബഗുകൾ മാത്രമേയുള്ളൂ, അതിനാൽ മൊത്തത്തിൽ, ഇത് ഞാൻ വിചാരിച്ചതിലും ലളിതമല്ലെന്ന് തെളിഞ്ഞു.
ഈ ശ്രമത്തിനിടയിൽ, ചില XML ഫയലുകളുടെ പ്രശ്നം എന്താണെന്ന് കൃത്യമായി കണ്ടെത്താൻ ഞാൻ പലപ്പോഴും പാടുപെട്ടു, കാരണം AIF നൽകുന്ന പിശക് സന്ദേശങ്ങൾ വളരെ വിവരദായകമല്ല. ബാഹ്യ സിസ്റ്റം 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() രീതി (AIF-ലെ "create" സേവന പ്രവർത്തനവുമായി പൊരുത്തപ്പെടുന്ന) വഴി തിരികെ നൽകുന്ന AifEntityKey ഒബ്ജക്റ്റിൽ, ഏത് ഉപഭോക്താവിനെ സൃഷ്ടിച്ചു എന്നതിനെക്കുറിച്ചുള്ള വിവരങ്ങൾ അടങ്ങിയിരിക്കുന്നു, മറ്റ് കാര്യങ്ങൾക്കൊപ്പം സൃഷ്ടിച്ച CustTable റെക്കോർഡിന്റെ RecId-ഉം.
നിങ്ങൾ പരീക്ഷിക്കാൻ ശ്രമിക്കുന്നത് ഒരു ഔട്ട്ബൗണ്ട് പോർട്ട് ആണെങ്കിലോ ഇൻബൗണ്ട് പോർട്ടിൽ XML എങ്ങനെയിരിക്കണമെന്ന് ഒരു ഉദാഹരണം മാത്രം ആവശ്യമുണ്ടെങ്കിലോ, പകരം 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' എന്നതിന് പകരം നിങ്ങൾ വായിക്കാൻ ആഗ്രഹിക്കുന്ന ഉപഭോക്താവിന്റെ അക്കൗണ്ട് നമ്പർ ചേർക്കണം.
കൂടുതൽ വായനയ്ക്ക്
നിങ്ങൾക്ക് ഈ പോസ്റ്റ് ഇഷ്ടപ്പെട്ടെങ്കിൽ, ഈ നിർദ്ദേശങ്ങളും നിങ്ങൾക്ക് ഇഷ്ടപ്പെട്ടേക്കാം:
- Dynamics AX 2012-ൽ "ഡാറ്റാ കോൺട്രാക്റ്റ് ഒബ്ജക്റ്റിനായി മെറ്റാഡാറ്റ ക്ലാസ് നിർവചിച്ചിട്ടില്ല" എന്ന പിശക്
- Dynamics AX 2012-ലെ X++ കോഡിൽ നിന്ന് ഒരു ഇനത്തിന്റെ മൂലകങ്ങൾ എങ്ങനെ മറികടക്കാം
- Dynamics AX 2012-ൽ മാക്രോ, strFmt എന്നിവ ഉപയോഗിച്ച് String Formatting
