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