Miklix

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

ಪ್ರಕಟಣೆ: ಫೆಬ್ರವರಿ 16, 2025 ರಂದು 11:23:45 ಪೂರ್ವಾಹ್ನ UTC ಸಮಯಕ್ಕೆ

ಈ ಲೇಖನದಲ್ಲಿ, ಡೈನಾಮಿಕ್ಸ್ ಎಎಕ್ಸ್ 2012 ನಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ ಇಂಟಿಗ್ರೇಷನ್ ಫ್ರೇಮ್ವರ್ಕ್ ಡಾಕ್ಯುಮೆಂಟ್ ಸೇವೆಗಳನ್ನು ಎಕ್ಸ್ ++ ಕೋಡ್ನಿಂದ ನೇರವಾಗಿ ಹೇಗೆ ಕರೆಯುವುದು ಎಂಬುದನ್ನು ನಾನು ವಿವರಿಸುತ್ತೇನೆ, ಒಳಬರುವ ಮತ್ತು ಹೊರಹೋಗುವ ಕರೆಗಳನ್ನು ಅನುಕರಿಸುತ್ತದೆ, ಇದು ಎಐಎಫ್ ಕೋಡ್ನಲ್ಲಿ ದೋಷಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲು ಮತ್ತು ಡೀಬಗ್ ಮಾಡಲು ಗಮನಾರ್ಹವಾಗಿ ಸುಲಭಗೊಳಿಸುತ್ತದೆ.


ಸಾಧ್ಯವಾದಷ್ಟು ಜನರಿಗೆ ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡಲು ಈ ಪುಟವನ್ನು ಇಂಗ್ಲಿಷ್‌ನಿಂದ ಯಂತ್ರಭಾಷಾಂತರಿಸಲಾಗಿದೆ. ದುರದೃಷ್ಟವಶಾತ್, ಯಂತ್ರಭಾಷಾಂತರವು ಇನ್ನೂ ಪರಿಪೂರ್ಣ ತಂತ್ರಜ್ಞಾನವಾಗಿಲ್ಲ, ಆದ್ದರಿಂದ ದೋಷಗಳು ಸಂಭವಿಸಬಹುದು. ನೀವು ಬಯಸಿದರೆ, ನೀವು ಮೂಲ ಇಂಗ್ಲಿಷ್ ಆವೃತ್ತಿಯನ್ನು ಇಲ್ಲಿ ವೀಕ್ಷಿಸಬಹುದು:

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

ಈ ಪೋಸ್ಟ್ ನಲ್ಲಿರುವ ಮಾಹಿತಿಯು ಡೈನಾಮಿಕ್ಸ್ ಎಎಕ್ಸ್ 2012 ಆರ್ 3 ಅನ್ನು ಆಧರಿಸಿದೆ. ಇದು ಇತರ ಆವೃತ್ತಿಗಳಿಗೆ ಮಾನ್ಯವಾಗಿರಬಹುದು ಅಥವಾ ಇಲ್ಲದಿರಬಹುದು.

ನಾನು ಇತ್ತೀಚೆಗೆ ಗ್ರಾಹಕರಿಗೆ ಅಪ್ಲಿಕೇಶನ್ ಇಂಟಿಗ್ರೇಷನ್ ಫ್ರೇಮ್ವರ್ಕ್ (ಎಐಎಫ್) ಇನ್ಬೌಂಡ್ ಪೋರ್ಟ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತಿದ್ದೆ, ಅವರು ಮತ್ತೊಂದು ಸಿಸ್ಟಮ್ನಿಂದ ಪಡೆಯುತ್ತಿರುವ ಡೇಟಾದ ಆಧಾರದ ಮೇಲೆ ಗ್ರಾಹಕರನ್ನು ರಚಿಸಲು. ಡೈನಾಮಿಕ್ಸ್ ಎಎಕ್ಸ್ ಈಗಾಗಲೇ ಕಸ್ಟ್ ಕಸ್ಟಮರ್ ಡಾಕ್ಯುಮೆಂಟ್ ಸೇವೆಯನ್ನು ಒದಗಿಸುವುದರಿಂದ, ಇದು ಇದಕ್ಕೆ ತರ್ಕವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ, ನಾವು ಅದನ್ನು ಸರಳವಾಗಿಡಲು ಮತ್ತು ಪ್ರಮಾಣಿತ ಪರಿಹಾರವನ್ನು ಬಳಸಲು ನಿರ್ಧರಿಸಿದ್ದೇವೆ.

ಆದಾಗ್ಯೂ, ಡೈನಾಮಿಕ್ಸ್ ಎಎಕ್ಸ್ ಸ್ವೀಕರಿಸುವ XML ಅನ್ನು ಉತ್ಪಾದಿಸಲು ಬಾಹ್ಯ ವ್ಯವಸ್ಥೆಯನ್ನು ಪಡೆಯಲು ಸಾಕಷ್ಟು ಸಮಸ್ಯೆಗಳಿವೆ ಎಂದು ಶೀಘ್ರದಲ್ಲೇ ತಿಳಿದುಬಂದಿದೆ. ಡೈನಾಮಿಕ್ಸ್ ಎಎಕ್ಸ್ ನಿಂದ ಉತ್ಪತ್ತಿಯಾದ XML ಸ್ಕೀಮಾ ಸಾಕಷ್ಟು ಸಂಕೀರ್ಣವಾಗಿದೆ ಮತ್ತು ಡೈನಾಮಿಕ್ಸ್ ಎಎಕ್ಸ್ ನಲ್ಲಿ ಕೆಲವು ದೋಷಗಳಿವೆ ಎಂದು ತೋರುತ್ತದೆ, ಅದು ಕೆಲವೊಮ್ಮೆ ಇತರ ಪರಿಕರಗಳ ಪ್ರಕಾರ ಸ್ಕೀಮಾ-ಮಾನ್ಯವಾಗಿರುವ XML ಅನ್ನು ತಿರಸ್ಕರಿಸಲು ಕಾರಣವಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಒಟ್ಟಾರೆಯಾಗಿ, ಇದು ನಾನು ಯೋಚಿಸಿದ್ದಕ್ಕಿಂತ ಕಡಿಮೆ ಸರಳವಾಗಿದೆ ಎಂದು ಸಾಬೀತಾಗಿದೆ.

ಪ್ರಯತ್ನದ ಸಮಯದಲ್ಲಿ, ಕೆಲವು XML ಫೈಲ್ ಗಳೊಂದಿಗೆ ನಿಖರವಾಗಿ ಸಮಸ್ಯೆ ಏನು ಎಂದು ಕಂಡುಹಿಡಿಯಲು ನಾನು ಆಗಾಗ್ಗೆ ಹೆಣಗಾಡುತ್ತಿದ್ದೆ ಏಕೆಂದರೆ ಎಐಎಫ್ ಒದಗಿಸಿದ ದೋಷ ಸಂದೇಶಗಳು ಮಾಹಿತಿಗಿಂತ ಕಡಿಮೆ. ಇದು ಸಹ ಕಷ್ಟಕರವಾಗಿತ್ತು, ಏಕೆಂದರೆ ಬಾಹ್ಯ ವ್ಯವಸ್ಥೆಯು MSMQ ಮೂಲಕ ಹೊಸ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ನಾನು ಕಾಯಬೇಕಾಗಿತ್ತು ಮತ್ತು ನಂತರ ನಾನು ದೋಷವನ್ನು ನೋಡುವ ಮೊದಲು ಎಐಎಫ್ ಸಂದೇಶವನ್ನು ಎತ್ತಿಕೊಂಡು ಅದನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ.

ಆದ್ದರಿಂದ ಸ್ವಲ್ಪ ವೇಗದ ಪರೀಕ್ಷೆಗಾಗಿ ಸ್ಥಳೀಯ 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');
}

ಕಸ್ಟಮರ್.ಕ್ರಿಯೇಟ್ () ವಿಧಾನದಿಂದ ಹಿಂದಿರುಗಿಸಲಾದ AifEntityKey ಆಬ್ಜೆಕ್ಟ್ (ಇದು AIF ನಲ್ಲಿ "ರಚಿಸಿ" ಸೇವಾ ಕಾರ್ಯಾಚರಣೆಗೆ ಅನುರೂಪವಾಗಿದೆ) ಯಾವ ಗ್ರಾಹಕರನ್ನು ರಚಿಸಲಾಗಿದೆ ಎಂಬುದರ ಬಗ್ಗೆ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿದೆ, ಇತರ ವಿಷಯಗಳ ಜೊತೆಗೆ ರಚಿಸಿದ ಕಸ್ಟ್ ಟೇಬಲ್ ರೆಕಾರ್ಡ್ ನ ರೆಸಿಡ್.

ನೀವು ಪರೀಕ್ಷಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರುವುದು ಔಟ್ಬೌಂಡ್ ಪೋರ್ಟ್ ಆಗಿದ್ದರೆ ಅಥವಾ ಇನ್ಬೌಂಡ್ ಪೋರ್ಟ್ನಲ್ಲಿ ಎಕ್ಸ್ಎಂಎಲ್ ಹೇಗೆ ಕಾಣಬೇಕು ಎಂಬುದಕ್ಕೆ ನಿಮಗೆ ಉದಾಹರಣೆ ಬೇಕಿದ್ದರೆ, ಬದಲಿಗೆ ರೀಡ್ () ವಿಧಾನವನ್ನು ("ಓದು" ಸೇವಾ ಕಾರ್ಯಾಚರಣೆಗೆ ಅನುಗುಣವಾಗಿ) ಕರೆಯುವ ಮೂಲಕ ಗ್ರಾಹಕರನ್ನು ಫೈಲ್ಗೆ ರಫ್ತು ಮಾಡಲು ನೀವು ದಾಖಲೆ ವರ್ಗವನ್ನು ಬಳಸಬಹುದು, ಹೀಗೆ:

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 ನಲ್ಲಿ ಪಿನ್ ಮಾಡಿ

Mikkel Bang Christensen

ಲೇಖಕರ ಬಗ್ಗೆ

Mikkel Bang Christensen
ಮಿಕೆಲ್ miklix.com ನ ಸೃಷ್ಟಿಕರ್ತ ಮತ್ತು ಮಾಲೀಕರು. ಅವರು ವೃತ್ತಿಪರ ಕಂಪ್ಯೂಟರ್ ಪ್ರೋಗ್ರಾಮರ್/ಸಾಫ್ಟ್‌ವೇರ್ ಡೆವಲಪರ್ ಆಗಿ 20 ವರ್ಷಗಳಿಗೂ ಹೆಚ್ಚು ಅನುಭವ ಹೊಂದಿದ್ದಾರೆ ಮತ್ತು ಪ್ರಸ್ತುತ ದೊಡ್ಡ ಯುರೋಪಿಯನ್ ಐಟಿ ಕಾರ್ಪೊರೇಷನ್‌ನಲ್ಲಿ ಪೂರ್ಣ ಸಮಯದ ಉದ್ಯೋಗಿಯಾಗಿದ್ದಾರೆ. ಬ್ಲಾಗಿಂಗ್ ಮಾಡದಿರುವಾಗ, ಅವರು ತಮ್ಮ ಬಿಡುವಿನ ವೇಳೆಯನ್ನು ವ್ಯಾಪಕವಾದ ಆಸಕ್ತಿಗಳು, ಹವ್ಯಾಸಗಳು ಮತ್ತು ಚಟುವಟಿಕೆಗಳಲ್ಲಿ ಕಳೆಯುತ್ತಾರೆ, ಇದು ಸ್ವಲ್ಪ ಮಟ್ಟಿಗೆ ಈ ವೆಬ್‌ಸೈಟ್‌ನಲ್ಲಿ ಒಳಗೊಂಡಿರುವ ವಿವಿಧ ವಿಷಯಗಳಲ್ಲಿ ಪ್ರತಿಫಲಿಸಬಹುದು.