ଡାଇନାମିକ୍ସ AX 2012 ରେ X++ ରୁ ସିଧାସଳଖ AIF ଦସ୍ତାବିଜ ସେବାକୁ କଲ୍ କରିବା
ପ୍ରକାଶିତ: 11:25:04 AM UTC ଠାରେ ଫେବୃଆରୀ 16, 2025
ଶେଷ ଥର ପାଇଁ ଅଦ୍ୟତନ ହୋଇଥିଲା: 8:55:40 AM UTC ଠାରେ ଜାନୁଆରୀ 12, 2026
ଏହି ଆର୍ଟିକିଲରେ, ମୁଁ ବ୍ୟାଖ୍ୟା କରୁଛି ଯେ ଡାଇନାମିକ୍ସ AX 2012 ରେ ଆପ୍ଲିକେସନ୍ ଇଣ୍ଟିଗ୍ରେସନ୍ ଫ୍ରେମୱାର୍କ ଡକ୍ୟୁମେଣ୍ଟ ସେବାଗୁଡ଼ିକୁ X++ କୋଡ୍ ରୁ ସିଧାସଳଖ କିପରି କଲ୍ କରିବେ, ଇନବାଉଣ୍ଡ ଏବଂ ଆଉଟବାଉଣ୍ଡ କଲ୍ ଉଭୟକୁ ଅନୁକରଣ କରି, ଯାହା AIF କୋଡ୍ରେ ତ୍ରୁଟି ଖୋଜିବା ଏବଂ ଡିବଗ୍ କରିବା ବହୁତ ସହଜ କରିପାରିବ।
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
ଏହି ପୋଷ୍ଟରେ ଥିବା ସୂଚନା ଡାଇନାମିକ୍ସ AX 2012 R3 ଉପରେ ଆଧାରିତ। ଏହା ଅନ୍ୟ ସଂସ୍କରଣ ପାଇଁ ବୈଧ ହୋଇପାରେ କିମ୍ବା ନ ହୋଇପାରେ।
ମୁଁ ସମ୍ପ୍ରତି ଜଣେ ଗ୍ରାହକଙ୍କୁ ଅନ୍ୟ ସିଷ୍ଟମରୁ ପ୍ରାପ୍ତ କରୁଥିବା ଡାଟା ଉପରେ ଆଧାରିତ ଗ୍ରାହକ ସୃଷ୍ଟି କରିବା ପାଇଁ ଏକ ଆପ୍ଲିକେସନ୍ ଇଣ୍ଟିଗ୍ରେସନ୍ ଫ୍ରେମୱାର୍କ (AIF) ଇନବାଉଣ୍ଡ ପୋର୍ଟ କାର୍ଯ୍ୟକାରୀ କରିବାରେ ସାହାଯ୍ୟ କରୁଥିଲି। ଯେହେତୁ Dynamics AX ପୂର୍ବରୁ CustCustomer ଡକ୍ୟୁମେଣ୍ଟ ସେବା ପ୍ରଦାନ କରୁଛି, ଯାହା ଏଥିପାଇଁ ଯୁକ୍ତି କାର୍ଯ୍ୟକାରୀ କରେ, ଆମେ ଏହାକୁ ସରଳ ରଖିବାକୁ ଏବଂ ମାନକ ସମାଧାନ ବ୍ୟବହାର କରିବାକୁ ନିଷ୍ପତ୍ତି ନେଇଛୁ।
ତଥାପି, ଏହା ଶୀଘ୍ର ଜଣାପଡ଼ିଲା ଯେ Dynamics AX ଗ୍ରହଣ କରିବ ବୋଲି ବାହ୍ୟ ସିଷ୍ଟମକୁ XML ଜେନେରେଟ୍ କରିବାରେ ବହୁତ ସମସ୍ୟା ଥିଲା। Dynamics AX ଦ୍ୱାରା ଜେନେରେଟ୍ ହୋଇଥିବା XML ସ୍କିମା ଏକ ବହୁତ ଜଟିଳ ଏବଂ ଏହା ମଧ୍ୟ ଦେଖାଯାଉଛି ଯେ Dynamics AX ରେ କିଛି ବଗ୍ ଅଛି ଯାହା କେତେକ ସମୟରେ ଏହାକୁ XML କୁ ପ୍ରତ୍ୟାଖ୍ୟାନ କରିବାକୁ ବାଧ୍ୟ କରେ ଯାହା ଅନ୍ୟ ଉପକରଣ ଅନୁସାରେ ସ୍କିମା-ବୈଧ, ତେଣୁ ସର୍ବମୋଟ, ଏହା ମୁଁ ଭାବିଥିଲି ଅପେକ୍ଷା କମ୍ ସରଳ ପ୍ରମାଣିତ ହେଲା।
ପ୍ରୟାସ ସମୟରେ, ମୁଁ ପ୍ରାୟତଃ କିଛି XML ଫାଇଲ୍ଗୁଡ଼ିକରେ କ’ଣ ସମସ୍ୟା ଥିଲା ତାହା ଜାଣିବା ପାଇଁ ସଂଘର୍ଷ କରୁଥିଲି କାରଣ AIF ଦ୍ୱାରା ପ୍ରଦାନ କରାଯାଇଥିବା ତ୍ରୁଟି ବାର୍ତ୍ତାଗୁଡ଼ିକ ସୂଚନାପ୍ରଦ ନୁହେଁ। ଏହା ମଧ୍ୟ କ୍ଳାନ୍ତକାରୀ ଥିଲା, କାରଣ ମୋତେ MSMQ ଉପରେ ଏକ ନୂତନ ବାର୍ତ୍ତା ପଠାଇବା ପାଇଁ ବାହ୍ୟ ସିଷ୍ଟମ୍ ଅପେକ୍ଷା କରିବାକୁ ପଡୁଥିଲା ଏବଂ ତା’ପରେ ପୁଣି ଥରେ AIF ବାର୍ତ୍ତା ଉଠାଇ ଏହାକୁ ପ୍ରକ୍ରିୟାକରଣ କରିବା ପାଇଁ ମୁଁ ଏକ ତ୍ରୁଟି ଦେଖିବା ପୂର୍ବରୁ ଅପେକ୍ଷା କରିବାକୁ ପଡୁଥିଲା।
ତେଣୁ ମୁଁ ଅନୁସନ୍ଧାନ କଲି ଯେ କିଛିଟା ଦ୍ରୁତ ପରୀକ୍ଷଣ ପାଇଁ ସ୍ଥାନୀୟ 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');
}
customer.create() ପଦ୍ଧତି (ଯାହା AIF ରେ "create" ସେବା କାର୍ଯ୍ୟ ସହିତ ମେଳ ଖାଏ) ଦ୍ୱାରା ଫେରସ୍ତ ହୋଇଥିବା AifEntityKey ବସ୍ତୁରେ କେଉଁ ଗ୍ରାହକ ସୃଷ୍ଟି ହୋଇଥିଲେ ସେ ବିଷୟରେ ସୂଚନା ଥାଏ, ଅନ୍ୟାନ୍ୟ ଜିନିଷ ମଧ୍ୟରେ ସୃଷ୍ଟି ହୋଇଥିବା CustTable ରେକର୍ଡର RecId ମଧ୍ୟ।
ଯଦି ଆପଣ ଯାହା ପରୀକ୍ଷା କରିବାକୁ ଚେଷ୍ଟା କରୁଛନ୍ତି ତାହା ଏକ ଆଉଟବାଉଣ୍ଡ ପୋର୍ଟ ଅଟେ କିମ୍ବା ଆପଣଙ୍କୁ କେବଳ ଇନବାଉଣ୍ଡ ପୋର୍ଟରେ XML କିପରି ଦେଖାଯିବା ଉଚିତ ତାହାର ଏକ ଉଦାହରଣ ଆବଶ୍ୟକ, ତେବେ ଆପଣ read() ପଦ୍ଧତି ("ପଠନ" ସେବା କାର୍ଯ୍ୟ ସହିତ ଜଡିତ) କୁ କଲ୍ କରି ଏକ ଗ୍ରାହକଙ୍କୁ ଏକ ଫାଇଲକୁ ରପ୍ତାନି କରିବା ପାଇଁ ଡକ୍ୟୁମେଣ୍ଟ ଶ୍ରେଣୀ ବ୍ୟବହାର କରିପାରିବେ, ଯେପରିକି:
{
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' ବଦଳାଇବା ଉଚିତ।
ଅଧିକ ପଠନ
ଯଦି ଆପଣ ଏହି ପୋଷ୍ଟକୁ ଉପଭୋଗ କରିଛନ୍ତି, ତେବେ ଆପଣଙ୍କୁ ଏହି ପରାମର୍ଶଗୁଡ଼ିକ ମଧ୍ୟ ପସନ୍ଦ ଆସିପାରେ:
- ଡାଇନାମିକ୍ସ AX 2012 ରେ ତ୍ରୁଟି "ଡାଟା ଚୁକ୍ତିଅବଜେକ୍ଟ ପାଇଁ କୌଣସି ମେଟାଡାଟା ଶ୍ରେଣୀ ନିର୍ଦ୍ଦିଷ୍ଟ ନାହିଁ"
- ଡାଇନାମିକ୍ସ AX 2012 ରେ X++ କୋଡ୍ ରୁ ଏକ ଏନୁମ୍ ର ଉପାଦାନଗୁଡିକ ଉପରେ କିପରି ଇଟେରେଟ୍ କରିବେ
- ଡାଇନାମିକ୍ସ AX 2012 ରେ ଏକ ଆଇନଗତ ସଂସ୍ଥା (କମ୍ପାନୀ ଆକାଉଣ୍ଟ) ଡିଲିଟ୍ କରନ୍ତୁ
