Miklix

డైనమిక్స్ AX 2012లో X++ నుండి నేరుగా AIF డాక్యుమెంట్ సేవలను కాల్ చేయడం

ప్రచురణ: 16 ఫిబ్రవరి, 2025 11:23:40 AM UTCకి

ఈ వ్యాసంలో, డైనమిక్స్ AX 2012లో అప్లికేషన్ ఇంటిగ్రేషన్ ఫ్రేమ్‌వర్క్ డాక్యుమెంట్ సేవలను నేరుగా X++ కోడ్ నుండి ఎలా కాల్ చేయాలో నేను వివరిస్తాను, ఇన్‌బౌండ్ మరియు అవుట్‌బౌండ్ కాల్‌లను అనుకరిస్తూ, AIF కోడ్‌లో లోపాలను కనుగొనడం మరియు డీబగ్ చేయడం చాలా సులభం చేస్తుంది.


వీలైనంత ఎక్కువ మందికి అందుబాటులో ఉండేలా ఈ పేజీని ఇంగ్లీష్ నుండి యాంత్రికంగా అనువదించారు. దురదృష్టవశాత్తు, యాంత్రిక అనువాదం ఇంకా పరిపూర్ణమైన సాంకేతికత కాదు, కాబట్టి లోపాలు సంభవించవచ్చు. మీరు కోరుకుంటే, మీరు అసలు ఆంగ్ల సంస్కరణను ఇక్కడ చూడవచ్చు:

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

ఈ పోస్ట్‌లోని సమాచారం డైనమిక్స్ AX 2012 R3 ఆధారంగా రూపొందించబడింది. ఇది ఇతర వెర్షన్‌లకు చెల్లుబాటు కావచ్చు లేదా చెల్లకపోవచ్చు.

నేను ఇటీవల ఒక కస్టమర్ మరొక సిస్టమ్ నుండి అందుకుంటున్న డేటా ఆధారంగా కస్టమర్లను సృష్టించడానికి అప్లికేషన్ ఇంటిగ్రేషన్ ఫ్రేమ్‌వర్క్ (AIF) ఇన్‌బౌండ్ పోర్ట్‌ను అమలు చేయడంలో సహాయం చేస్తున్నాను. డైనమిక్స్ AX ఇప్పటికే కస్టమరర్ డాక్యుమెంట్ సేవను అందిస్తుంది, ఇది దీని కోసం లాజిక్‌ను అమలు చేస్తుంది, మేము దానిని సరళంగా ఉంచాలని మరియు ప్రామాణిక పరిష్కారాన్ని ఉపయోగించాలని నిర్ణయించుకున్నాము.

అయితే, డైనమిక్స్ AX అంగీకరించే XMLను రూపొందించడానికి బాహ్య వ్యవస్థను పొందడంలో చాలా సమస్యలు ఉన్నాయని త్వరలోనే తేలింది. డైనమిక్స్ AX ద్వారా రూపొందించబడిన XML స్కీమా చాలా క్లిష్టమైనది మరియు డైనమిక్స్ AXలో కొన్ని బగ్‌లు ఉన్నాయని కూడా కనిపిస్తుంది, ఇవి కొన్నిసార్లు ఇతర సాధనాల ప్రకారం స్కీమా-చెల్లుబాటు అయ్యే 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లో "క్రియేట్" సర్వీస్ ఆపరేషన్‌కు అనుగుణంగా ఉంటుంది) ఏ కస్టమర్ సృష్టించబడ్డాడనే దాని గురించి సమాచారాన్ని కలిగి ఉంటుంది, ఇతర విషయాలతోపాటు సృష్టించబడిన కస్టటేబుల్ రికార్డ్ యొక్క 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' ని మీరు చదవాలనుకుంటున్న కస్టమర్ ఖాతా నంబర్‌తో భర్తీ చేయాలి.

బ్లూస్కీలో షేర్ చేయండిఫేస్‌బుక్‌లో షేర్ చేయండిలింక్డ్ఇన్‌లో షేర్ చేయండిTumblrలో షేర్ చేయండిX లో షేర్ చేయండిలింక్డ్ఇన్‌లో షేర్ చేయండిPinterestలో పిన్ చేయండి

మికెల్ బ్యాంగ్ క్రిస్టెన్సేన్

రచయిత గురుంచి

మికెల్ బ్యాంగ్ క్రిస్టెన్సేన్
మిక్కెల్ miklix.com సృష్టికర్త మరియు యజమాని. అతనికి ప్రొఫెషనల్ కంప్యూటర్ ప్రోగ్రామర్/సాఫ్ట్‌వేర్ డెవలపర్‌గా 20 సంవత్సరాలకు పైగా అనుభవం ఉంది మరియు ప్రస్తుతం ఒక పెద్ద యూరోపియన్ ఐటీ కార్పొరేషన్‌లో పూర్తి సమయం ఉద్యోగం చేస్తున్నాడు. బ్లాగింగ్ చేయనప్పుడు, అతను తన ఖాళీ సమయాన్ని విస్తృత శ్రేణి ఆసక్తులు, అభిరుచులు మరియు కార్యకలాపాలపై గడుపుతాడు, ఇవి కొంతవరకు ఈ వెబ్‌సైట్‌లో కవర్ చేయబడిన వివిధ అంశాలలో ప్రతిబింబిస్తాయి.