Miklix

ಡೈನಾಮಿಕ್ಸ್ AX 2012 ನಲ್ಲಿ X++ ನಿಂದ ನೇರವಾಗಿ AIF ದಾಖಲೆ ಸೇವೆಗಳಿಗೆ ಕರೆ ಮಾಡುವುದು

ಪ್ರಕಟಣೆ: ಫೆಬ್ರವರಿ 16, 2025 ರಂದು 11:23:45 ಪೂರ್ವಾಹ್ನ UTC ಸಮಯಕ್ಕೆ
ಕೊನೆಯದಾಗಿ ನವೀಕರಿಸಲಾಗಿದೆ: ಜನವರಿ 12, 2026 ರಂದು 08:55:35 ಪೂರ್ವಾಹ್ನ 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 ಅನ್ನು ತಿರಸ್ಕರಿಸಲು ಕಾರಣವಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಒಟ್ಟಾರೆಯಾಗಿ, ಇದು ನಾನು ಭಾವಿಸಿದ್ದಕ್ಕಿಂತ ಕಡಿಮೆ ಸರಳವೆಂದು ಸಾಬೀತಾಯಿತು.

ಈ ಪ್ರಯತ್ನದ ಸಮಯದಲ್ಲಿ, ಕೆಲವು 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() ವಿಧಾನದಿಂದ ಹಿಂತಿರುಗಿಸಲಾದ AifEntityKey ವಸ್ತುವು (ಇದು AIF ನಲ್ಲಿ "ರಚಿಸಿ" ಸೇವಾ ಕಾರ್ಯಾಚರಣೆಗೆ ಅನುಗುಣವಾಗಿರುತ್ತದೆ) ಯಾವ ಗ್ರಾಹಕರನ್ನು ರಚಿಸಲಾಗಿದೆ ಎಂಬುದರ ಕುರಿತು ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿದೆ, ಇತರ ವಿಷಯಗಳ ಜೊತೆಗೆ ರಚಿಸಲಾದ 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 ವರ್ಷಗಳಿಗೂ ಹೆಚ್ಚು ಅನುಭವ ಹೊಂದಿದ್ದಾರೆ ಮತ್ತು ಪ್ರಸ್ತುತ ದೊಡ್ಡ ಯುರೋಪಿಯನ್ ಐಟಿ ಕಾರ್ಪೊರೇಷನ್‌ನಲ್ಲಿ ಪೂರ್ಣ ಸಮಯದ ಉದ್ಯೋಗಿಯಾಗಿದ್ದಾರೆ. ಬ್ಲಾಗಿಂಗ್ ಮಾಡದಿರುವಾಗ, ಅವರು ತಮ್ಮ ಬಿಡುವಿನ ವೇಳೆಯನ್ನು ವ್ಯಾಪಕವಾದ ಆಸಕ್ತಿಗಳು, ಹವ್ಯಾಸಗಳು ಮತ್ತು ಚಟುವಟಿಕೆಗಳಲ್ಲಿ ಕಳೆಯುತ್ತಾರೆ, ಇದು ಸ್ವಲ್ಪ ಮಟ್ಟಿಗೆ ಈ ವೆಬ್‌ಸೈಟ್‌ನಲ್ಲಿ ಒಳಗೊಂಡಿರುವ ವಿವಿಧ ವಿಷಯಗಳಲ್ಲಿ ಪ್ರತಿಫಲಿಸಬಹುದು.