ಡೈನಾಮಿಕ್ಸ್ 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.
{
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 ನಲ್ಲಿ "ರಚಿಸಿ" ಸೇವಾ ಕಾರ್ಯಾಚರಣೆಗೆ ಅನುರೂಪವಾಗಿದೆ) ಯಾವ ಗ್ರಾಹಕರನ್ನು ರಚಿಸಲಾಗಿದೆ ಎಂಬುದರ ಬಗ್ಗೆ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿದೆ, ಇತರ ವಿಷಯಗಳ ಜೊತೆಗೆ ರಚಿಸಿದ ಕಸ್ಟ್ ಟೇಬಲ್ ರೆಕಾರ್ಡ್ ನ ರೆಸಿಡ್.
ನೀವು ಪರೀಕ್ಷಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರುವುದು ಔಟ್ಬೌಂಡ್ ಪೋರ್ಟ್ ಆಗಿದ್ದರೆ ಅಥವಾ ಇನ್ಬೌಂಡ್ ಪೋರ್ಟ್ನಲ್ಲಿ ಎಕ್ಸ್ಎಂಎಲ್ ಹೇಗೆ ಕಾಣಬೇಕು ಎಂಬುದಕ್ಕೆ ನಿಮಗೆ ಉದಾಹರಣೆ ಬೇಕಿದ್ದರೆ, ಬದಲಿಗೆ ರೀಡ್ () ವಿಧಾನವನ್ನು ("ಓದು" ಸೇವಾ ಕಾರ್ಯಾಚರಣೆಗೆ ಅನುಗುಣವಾಗಿ) ಕರೆಯುವ ಮೂಲಕ ಗ್ರಾಹಕರನ್ನು ಫೈಲ್ಗೆ ರಫ್ತು ಮಾಡಲು ನೀವು ದಾಖಲೆ ವರ್ಗವನ್ನು ಬಳಸಬಹುದು, ಹೀಗೆ:
{
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' ಅನ್ನು ನೀವು ಓದಲು ಬಯಸುವ ಗ್ರಾಹಕರ ಖಾತೆ ಸಂಖ್ಯೆಯೊಂದಿಗೆ ಬದಲಾಯಿಸಬೇಕು.