Miklix

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 പോലുള്ള മറ്റെല്ലാ ഡോക്യുമെന്റ് ക്ലാസുകൾക്കും സമാനമായ ജോലികൾ ചെയ്യാൻ കഴിയും.

static void CustomerCreate(Args _args)
{
    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" സേവന പ്രവർത്തനവുമായി ബന്ധപ്പെട്ടത്) വിളിച്ച് ഒരു ഉപഭോക്താവിനെ ഒരു ഫയലിലേക്ക് കയറ്റുമതി ചെയ്യാൻ നിങ്ങൾക്ക് ഡോക്യുമെന്റ് ക്ലാസ് ഉപയോഗിക്കാം, ഉദാഹരണത്തിന്:

static void CustomerRead(Args _args)
{
    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' എന്നതിന് പകരം നിങ്ങൾ വായിക്കാൻ ആഗ്രഹിക്കുന്ന ഉപഭോക്താവിന്റെ അക്കൗണ്ട് നമ്പർ ചേർക്കണം.

കൂടുതൽ വായനയ്ക്ക്

നിങ്ങൾക്ക് ഈ പോസ്റ്റ് ഇഷ്ടപ്പെട്ടെങ്കിൽ, ഈ നിർദ്ദേശങ്ങളും നിങ്ങൾക്ക് ഇഷ്ടപ്പെട്ടേക്കാം:


ബ്ലൂസ്കൈയിൽ പങ്കിടുകഫേസ്ബുക്കിൽ പങ്കിടുകLinkedIn-ൽ പങ്കിടുകTumblr-ൽ പങ്കിടുകX-ൽ പങ്കിടുകLinkedIn-ൽ പങ്കിടുകPinterest-ൽ പിൻ ചെയ്യുക

മിക്കൽ ക്രിസ്റ്റൻസൺ

എഴുത്തുകാരനെ കുറിച്ച്

മിക്കൽ ക്രിസ്റ്റൻസൺ
മിക്കൽ miklix.com ന്റെ സ്രഷ്ടാവും ഉടമയുമാണ്. ഒരു പ്രൊഫഷണൽ കമ്പ്യൂട്ടർ പ്രോഗ്രാമർ/സോഫ്റ്റ്‌വെയർ ഡെവലപ്പർ എന്ന നിലയിൽ 20 വർഷത്തിലേറെ പരിചയമുള്ള അദ്ദേഹം ഇപ്പോൾ ഒരു വലിയ യൂറോപ്യൻ ഐടി കോർപ്പറേഷനിൽ മുഴുവൻ സമയ ജോലിക്കാരനാണ്. ബ്ലോഗിംഗ് അല്ലാത്തപ്പോൾ, അദ്ദേഹം തന്റെ ഒഴിവു സമയം വിവിധ താൽപ്പര്യങ്ങൾ, ഹോബികൾ, പ്രവർത്തനങ്ങൾ എന്നിവയിൽ ചെലവഴിക്കുന്നു, ഇത് ഒരു പരിധിവരെ ഈ വെബ്‌സൈറ്റിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന വിഷയങ്ങളിൽ പ്രതിഫലിച്ചേക്കാം.