Miklix

ଡାଇନାମିକ୍ସ 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।

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() ପଦ୍ଧତି (ଯାହା AIF ରେ "create" ସେବା କାର୍ଯ୍ୟ ସହିତ ମେଳ ଖାଏ) ଦ୍ୱାରା ଫେରସ୍ତ ହୋଇଥିବା AifEntityKey ବସ୍ତୁରେ କେଉଁ ଗ୍ରାହକ ସୃଷ୍ଟି ହୋଇଥିଲେ ସେ ବିଷୟରେ ସୂଚନା ଥାଏ, ଅନ୍ୟାନ୍ୟ ଜିନିଷ ମଧ୍ୟରେ ସୃଷ୍ଟି ହୋଇଥିବା CustTable ରେକର୍ଡର RecId ମଧ୍ୟ।

ଯଦି ଆପଣ ଯାହା ପରୀକ୍ଷା କରିବାକୁ ଚେଷ୍ଟା କରୁଛନ୍ତି ତାହା ଏକ ଆଉଟବାଉଣ୍ଡ ପୋର୍ଟ ଅଟେ କିମ୍ବା ଆପଣଙ୍କୁ କେବଳ ଇନବାଉଣ୍ଡ ପୋର୍ଟରେ XML କିପରି ଦେଖାଯିବା ଉଚିତ ତାହାର ଏକ ଉଦାହରଣ ଆବଶ୍ୟକ, ତେବେ ଆପଣ 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' ବଦଳାଇବା ଉଚିତ।

ଅଧିକ ପଠନ

ଯଦି ଆପଣ ଏହି ପୋଷ୍ଟକୁ ଉପଭୋଗ କରିଛନ୍ତି, ତେବେ ଆପଣଙ୍କୁ ଏହି ପରାମର୍ଶଗୁଡ଼ିକ ମଧ୍ୟ ପସନ୍ଦ ଆସିପାରେ:


ବ୍ଲୁସ୍କିରେ ସେୟାର କରନ୍ତୁଫେସବୁକରେ ସେୟାର କରନ୍ତୁଲିଙ୍କଡିନ୍‌ରେ ସେୟାର୍‌ କରନ୍ତୁଟମ୍ବଲରରେ ସେୟାର କରନ୍ତୁX ରେ ସେୟାର କରନ୍ତୁଲିଙ୍କଡିନ୍‌ରେ ସେୟାର୍‌ କରନ୍ତୁପିନ୍ଟରେଷ୍ଟରେ ପିନ୍ କରନ୍ତୁ

ମିକେଲ୍ କ୍ରିଷ୍ଟେନସେନ୍

ଲେଖକଙ୍କ ବିଷୟରେ

ମିକେଲ୍ କ୍ରିଷ୍ଟେନସେନ୍
ମିକେଲ୍ ହେଉଛନ୍ତି miklix.com ର ସୃଷ୍ଟିକର୍ତ୍ତା ଏବଂ ମାଲିକ। ତାଙ୍କର ଜଣେ ବୃତ୍ତିଗତ କମ୍ପ୍ୟୁଟର ପ୍ରୋଗ୍ରାମର/ସଫ୍ଟୱେର୍ ଡେଭଲପର ଭାବରେ 20 ବର୍ଷରୁ ଅଧିକ ଅଭିଜ୍ଞତା ଅଛି ଏବଂ ସେ ବର୍ତ୍ତମାନ ଏକ ବଡ଼ ୟୁରୋପୀୟ IT କର୍ପୋରେସନରେ ପୂର୍ଣ୍ଣକାଳୀନ ନିଯୁକ୍ତି ପାଇଛନ୍ତି। ବ୍ଲଗ୍ ନ ଲେଖିବା ସମୟରେ, ସେ ତାଙ୍କର ଖାଲି ସମୟ ବିଭିନ୍ନ ପ୍ରକାରର ଆଗ୍ରହ, ହବି ଏବଂ କାର୍ଯ୍ୟକଳାପରେ ବିତାଇଥାନ୍ତି, ଯାହା କିଛି ପରିମାଣରେ ଏହି ୱେବସାଇଟରେ ଆବୃତ ବିଭିନ୍ନ ବିଷୟଗୁଡ଼ିକରେ ପ୍ରତିଫଳିତ ହୋଇପାରେ।