Miklix

AIF ஆவண சேவைகளை X++ இலிருந்து நேரடியாக அழைக்கிறது Dynamics AX 2012

வெளியிடப்பட்டது: 16 பிப்ரவரி, 2025 அன்று AM 11:23:42 UTC
கடைசியாகப் புதுப்பிக்கப்பட்டது: 12 ஜனவரி, 2026 அன்று AM 8:55:34 UTC

இந்தக் கட்டுரையில், Dynamics AX 2012 இல் Application Integration Framework ஆவண சேவைகளை X++ குறியீட்டிலிருந்து நேரடியாக எவ்வாறு அழைப்பது என்பதை விளக்குகிறேன், உள்வரும் மற்றும் வெளிச்செல்லும் அழைப்புகள் இரண்டையும் பின்பற்றுகிறது, இது AIF குறியீட்டில் பிழைகளைக் கண்டறிந்து பிழைத்திருத்துவதை கணிசமாக எளிதாக்கும்.


இந்தப் பக்கம் முடிந்தவரை பலருக்கு அணுகக்கூடியதாக இருக்க வேண்டும் என்பதற்காக ஆங்கிலத்திலிருந்து இயந்திர மொழிபெயர்ப்பு செய்யப்பட்டது. துரதிர்ஷ்டவசமாக, இயந்திர மொழிபெயர்ப்பு இன்னும் முழுமையான தொழில்நுட்பமாக இல்லை, எனவே பிழைகள் ஏற்படலாம். நீங்கள் விரும்பினால், அசல் ஆங்கிலப் பதிப்பை இங்கே காணலாம்:

Calling AIF Document Services Directly from X++ in Dynamics AX 2012

இந்தப் பதிவில் உள்ள தகவல்கள் Dynamics AX 2012 R3 ஐ அடிப்படையாகக் கொண்டவை. இது மற்ற பதிப்புகளுக்கு செல்லுபடியாகலாம் அல்லது செல்லுபடியாகாமல் இருக்கலாம்.

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

இருப்பினும், Dynamics AX ஏற்றுக்கொள்ளும் XML ஐ உருவாக்க வெளிப்புற அமைப்பைப் பெறுவதில் நிறைய சிக்கல்கள் இருப்பது விரைவில் தெரியவந்தது. Dynamics AX ஆல் உருவாக்கப்பட்ட XML ஸ்கீமா மிகவும் சிக்கலான ஒன்றாகும், மேலும் Dynamics AX இல் சில பிழைகள் இருப்பதாகவும் தெரிகிறது, அவை சில நேரங்களில் மற்ற கருவிகளின்படி schema-செல்லுபடியாகும் XML ஐ நிராகரிக்க காரணமாகின்றன, எனவே மொத்தத்தில், இது நான் நினைத்ததை விட குறைவான எளிமையானது என்பதை நிரூபித்தது.

இந்த முயற்சியின் போது, AIF வழங்கும் பிழை செய்திகள் குறைவான தகவல்களால் ஆனவை என்பதால், சில XML கோப்புகளில் என்ன பிரச்சனை இருக்கிறது என்பதைக் கண்டுபிடிக்க நான் அடிக்கடி சிரமப்பட்டேன். இது சோர்வாகவும் இருந்தது, ஏனென்றால் வெளிப்புற அமைப்பு 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() முறையால் திருப்பி அனுப்பப்படும் AifEntityKey பொருள் (AIF இல் "உருவாக்கு" சேவை செயல்பாட்டிற்கு ஒத்திருக்கிறது) எந்த வாடிக்கையாளர் உருவாக்கப்பட்டது என்பது பற்றிய தகவலைக் கொண்டுள்ளது, மற்றவற்றுடன் உருவாக்கப்பட்ட CustTable பதிவின் RecId.

நீங்கள் சோதிக்க முயற்சிப்பது ஒரு அவுட்பவுண்ட் போர்ட்டைப் போல இருந்தால் அல்லது இன்பவுண்ட் போர்ட்டில் எக்ஸ்எம்எல் எப்படி இருக்க வேண்டும் என்பதற்கான ஒரு எடுத்துக்காட்டு உங்களுக்குத் தேவைப்பட்டால், அதற்கு பதிலாக 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 இல் பகிரவும்பின்டரஸ்டில் பின் செய்யவும்

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

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

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