Miklix

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.

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');
}

வாடிக்கையாளர்.create() முறையால் திரும்பிய AifEntityKey பொருள் (இது AIF இல் "உருவாக்கு" சேவை செயல்பாட்டிற்கு ஒத்திருக்கிறது) எந்த வாடிக்கையாளர் உருவாக்கப்பட்டார் என்பது பற்றிய தகவல்களைக் கொண்டுள்ளது, மற்றவற்றுடன், உருவாக்கப்பட்ட CustTable பதிவின் RecId.

நீங்கள் சோதிக்க முயற்சிப்பது அதற்கு பதிலாக வெளிச்செல்லும் துறைமுகமாக இருந்தால் அல்லது உள்வரும் துறைமுகத்தில் எக்ஸ்எம்எல் எப்படி இருக்க வேண்டும் என்பதற்கான எடுத்துக்காட்டு உங்களுக்குத் தேவைப்பட்டால், அதற்கு பதிலாக வாசிப்பு () முறையை ("வாசிப்பு" சேவை செயல்பாட்டுடன் தொடர்புடையது) அழைப்பதன் மூலம் ஒரு வாடிக்கையாளரை ஒரு கோப்பிற்கு ஏற்றுமதி செய்ய ஆவண வகுப்பைப் பயன்படுத்தலாம், இப்படிக்கு:

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 இல் பகிரவும்பின்டரஸ்டில் பின் செய்யவும்

மிக்கேல் பேங் கிறிஸ்டென்சன்

எழுத்தாளர் பற்றி

மிக்கேல் பேங் கிறிஸ்டென்சன்
மிக்கல் என்பவர் miklix.com இன் படைப்பாளர் மற்றும் உரிமையாளர் ஆவார். அவருக்கு 20 ஆண்டுகளுக்கும் மேலான தொழில்முறை கணினி நிரலாளர்/மென்பொருள் உருவாக்குநராக அனுபவம் உள்ளது, மேலும் தற்போது ஒரு பெரிய ஐரோப்பிய ஐடி நிறுவனத்தில் முழுநேரப் பணியாளராக உள்ளார். வலைப்பதிவு செய்யாதபோது, ​​அவர் தனது ஓய்வு நேரத்தை பரந்த அளவிலான ஆர்வங்கள், பொழுதுபோக்குகள் மற்றும் செயல்பாடுகளில் செலவிடுகிறார், இது இந்த வலைத்தளத்தில் உள்ளடக்கப்பட்ட பல்வேறு தலைப்புகளில் ஓரளவுக்கு பிரதிபலிக்கக்கூடும்.