Miklix

ଡାଇନାମିକ୍ସ AX 2012 ରେ X++ ରୁ ସିଧାସଳଖ AIF ଦସ୍ତାବିଜ ସେବାକୁ କଲ୍ କରିବା

ପ୍ରକାଶିତ: 11:25:04 AM UTC ଠାରେ ଫେବୃଆରୀ 16, 2025

ଏହି ପ୍ରବନ୍ଧରେ, ମୁଁ ବର୍ଣ୍ଣନା କରୁଛି ଯେ ଡାଇନାମିକ୍ସ AX 2012 ରେ ଆପ୍ଲିକେସନ ଇଣ୍ଟିଗ୍ରେସନ ଫ୍ରେମୱାର୍କ ଡକ୍ୟୁମେଣ୍ଟ ସେବାଗୁଡିକୁ କିପରି ସିଧାସଳଖ X++ କୋଡ୍ ରୁ କଲ୍ କରିବେ, ଉଭୟ ଇନ୍ବାଉଣ୍ଡ ଏବଂ ଆଉଟବାଉଣ୍ଡ କଲ୍ ଅନୁକରଣ କରିବେ, ଯାହା ଏଆଇଏଫ୍ କୋଡ୍ ରେ ତ୍ରୁଟି ଖୋଜିବା ଏବଂ ଡିବଗ୍ କରିବା ଯଥେଷ୍ଟ ସହଜ କରିପାରେ।


ଏହି ପୃଷ୍ଠାକୁ ଅଧିକରୁ ଅଧିକ ଲୋକଙ୍କ ପାଖରେ ପହଞ୍ଚାଇବା ପାଇଁ ଇଂରାଜୀରୁ ମେସିନ୍ ଅନୁବାଦ କରାଯାଇଥିଲା। ଦୁର୍ଭାଗ୍ୟବଶତଃ, ମେସିନ୍ ଅନୁବାଦ ଏପର୍ଯ୍ୟନ୍ତ ଏକ ସିଦ୍ଧ ପ୍ରଯୁକ୍ତିବିଦ୍ୟା ନୁହେଁ, ତେଣୁ ତ୍ରୁଟି ହୋଇପାରେ। ଯଦି ଆପଣ ଚାହାଁନ୍ତି, ତେବେ ଆପଣ ଏଠାରେ ମୂଳ ଇଂରାଜୀ ସଂସ୍କରଣ ଦେଖିପାରିବେ:

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

ଏହି ପୋଷ୍ଟରେ ଥିବା ସୂଚନା ଡାଇନାମିକ୍ସ ଏଏକ୍ସ ୨୦୧୨ ଆର୩ ଉପରେ ଆଧାରିତ । ଏହା ଅନ୍ୟ ସଂସ୍କରଣ ପାଇଁ ବୈଧ ହୋଇପାରେ କିମ୍ବା ହୋଇନପାରେ।

ମୁଁ ନିକଟରେ ଜଣେ ଗ୍ରାହକଙ୍କୁ ଅନ୍ୟ ସିଷ୍ଟମରୁ ପ୍ରାପ୍ତ ଡାଟା ଆଧାରରେ ଗ୍ରାହକ ସୃଷ୍ଟି କରିବା ପାଇଁ ଏକ ଆପ୍ଲିକେସନ୍ ଇଣ୍ଟିଗ୍ରେସନ ଫ୍ରେମୱାର୍କ (ଏଆଇଏଫ) ଇନ୍ବାଉଣ୍ଡ ପୋର୍ଟ କାର୍ଯ୍ୟକାରୀ କରିବାରେ ସାହାଯ୍ୟ କରୁଥିଲି । ଯେହେତୁ ଡାଇନାମିକ୍ସ AX ପୂର୍ବରୁ କଷ୍ଟକଷ୍ଟୋମର ଡକ୍ୟୁମେଣ୍ଟ ସେବା ପ୍ରଦାନ କରେ, ଯାହା ଏଥିପାଇଁ ଯୁକ୍ତିକୁ କାର୍ଯ୍ୟକାରୀ କରେ, ଆମେ ଏହାକୁ ସରଳ ରଖିବାକୁ ଏବଂ ମାନକ ସମାଧାନ ବ୍ୟବହାର କରିବାକୁ ନିଷ୍ପତ୍ତି ନେଇଛୁ।

ତଥାପି, ଏହା ଶୀଘ୍ର ଜଣାପଡିଲା ଯେ ଏକ୍ସଏମଏଲ ଉତ୍ପାଦନ କରିବା ପାଇଁ ବାହ୍ୟ ସିଷ୍ଟମ ପାଇବାରେ ଅନେକ ସମସ୍ୟା ଅଛି ଯାହା ଡାଇନାମିକ୍ସ ଏଏକ୍ସ ଗ୍ରହଣ କରିବ । ଡାଇନାମିକ୍ସ ଏଏକ୍ସ ଦ୍ୱାରା ଉତ୍ପନ୍ନ ଏକ୍ସଏମଏଲ ସ୍କିମା ଏକ ବହୁତ ଜଟିଳ ଏବଂ ଏହା ମଧ୍ୟ ଦେଖାଯାଏ ଯେ ଡାଇନାମିକ୍ସ ଏଏକ୍ସରେ କିଛି ତ୍ରୁଟି ଅଛି ଯାହା ବେଳେବେଳେ ଏକ୍ସଏମଏଲକୁ ପ୍ରତ୍ୟାଖ୍ୟାନ କରିଥାଏ ଯାହା ଅନ୍ୟ ଉପକରଣ ଗୁଡିକ ଅନୁଯାୟୀ ସ୍କିମା-ବୈଧ ଅଟେ, ତେଣୁ ମୋଟାମୋଟି ଭାବରେ, ଏହା ମୁଁ ଭାବିଥିବା ତୁଳନାରେ କମ୍ ସରଳ ପ୍ରମାଣିତ ହୋଇଛି ।

ପ୍ରୟାସ ସମୟରେ, ମୁଁ ପ୍ରାୟତଃ କିଛି XML ଫାଇଲ୍ ରେ ପ୍ରକୃତରେ ସମସ୍ୟା କ'ଣ ତାହା ଜାଣିବାପାଇଁ ସଂଘର୍ଷ କରୁଥିଲି କାରଣ AIF ଦ୍ୱାରା ପ୍ରଦାନ କରାଯାଇଥିବା ତ୍ରୁଟି ବାର୍ତ୍ତାଗୁଡିକ ସୂଚନାମୂଳକ ଠାରୁ କମ୍ ଅଟେ। ଏହା ମଧ୍ୟ କଷ୍ଟଦାୟକ ଥିଲା, କାରଣ ମୋତେ ବାହ୍ୟ ସିଷ୍ଟମକୁ ଏମଏସଏମକ୍ୟୁ ଉପରେ ଏକ ନୂତନ ସନ୍ଦେଶ ପଠାଇବା ପାଇଁ ଅପେକ୍ଷା କରିବାକୁ ପଡିଥିଲା ଏବଂ ତା'ପରେ ମୁଁ ଏକ ତ୍ରୁଟି ଦେଖିବା ପୂର୍ବରୁ ସନ୍ଦେଶ ଉଠାଇବା ଏବଂ ଏହାକୁ ପ୍ରକ୍ରିୟା କରିବାକୁ ଏଆଇଏଫ ପାଇଁ ଅପେକ୍ଷା କରିବାକୁ ପଡିଥିଲା ।

ତେଣୁ ମୁଁ ଅନୁସନ୍ଧାନ କଲି ଯେ କିଛି ମାତ୍ରାରେ ଦ୍ରୁତ ପରୀକ୍ଷଣ ପାଇଁ ସ୍ଥାନୀୟ XML ଫାଇଲ୍ ସହିତ ସେବା କୋଡ୍ କୁ ସିଧାସଳଖ କଲ୍ କରିବା ସମ୍ଭବ କି ନାହିଁ ଏବଂ ଏହା ଜଣାପଡିଛି ଯେ ଏହା ହେଉଛି - ଏବଂ କେବଳ ସେତିକି ନୁହେଁ, ଏହା କରିବା ପ୍ରକୃତରେ ସହଜ ଏବଂ ପ୍ରକୃତରେ ଅଧିକ ଅର୍ଥପୂର୍ଣ୍ଣ ତ୍ରୁଟି ବାର୍ତ୍ତା ପ୍ରଦାନ କରେ ।

ନିମ୍ନରେ ଦିଆଯାଇଥିବା ଉଦାହରଣ ଚାକିରି ଏକ ସ୍ଥାନୀୟ XML ଫାଇଲ୍ ପଢିଥାଏ ଏବଂ ଗ୍ରାହକ ସୃଷ୍ଟି କରିବା ପାଇଁ ଏହାକୁ ଏକ୍ସଡିକସ୍ଟୋମର ଶ୍ରେଣୀ (ଯାହା କି କଷ୍ଟକଷ୍ଟୋମର ସେବା ଦ୍ୱାରା ବ୍ୟବହୃତ ଡକ୍ୟୁମେଣ୍ଟ ଶ୍ରେଣୀ) ସହିତ ବ୍ୟବହାର କରିବାକୁ ଚେଷ୍ଟା କରେ। ଯଦି ଆପଣ ଆବଶ୍ୟକ କରନ୍ତି ତେବେ ଆପଣ ଅନ୍ୟ ସମସ୍ତ ଦସ୍ତାବିଜ ଶ୍ରେଣୀପାଇଁ ସମାନ ଚାକିରି କରିପାରିବେ, ଉଦାହରଣ ସ୍ୱରୂପ, ଆକ୍ସଡ୍ସାଲେସର୍ଡର।

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');
}

ଗ୍ରାହକଙ୍କ ଦ୍ଵାରା ଫେରସ୍ତ କରାଯାଇଥିବା AIFEntityke ଉଦ୍ଦେଶ୍ୟ() ପଦ୍ଧତି (ଯାହା AIFରେ "ସୃଷ୍ଟି" ସେବା ଅପରେସନ୍ ସହିତ ମେଳ ଖାଉଛି) ରେ କେଉଁ ଗ୍ରାହକ ସୃଷ୍ଟି କରାଯାଇଥିଲା ସେ ବିଷୟରେ ସୂଚନା ରହିଛି, ଅନ୍ୟ ାନ୍ୟ ଜିନିଷ ସହିତ ସୃଷ୍ଟି ହୋଇଥିବା କଷ୍ଟଟେବୁଲ୍ ରେକର୍ଡର ରେକ୍ଆଇଡି ରହିଛି।

ଯଦି ଆପଣ ଯାହା ପରୀକ୍ଷା କରିବାକୁ ଚେଷ୍ଟା କରୁଛନ୍ତି ତାହା ଏହା ପରିବର୍ତ୍ତେ ଏକ ଆଉଟ୍ବାଉଣ୍ଡ ପୋର୍ଟ ଅଟେ କିମ୍ବା ଯଦି ଆପଣଙ୍କୁ କେବଳ ଇନବାଉଣ୍ଡ ପୋର୍ଟରେ XML କିପରି ଦେଖାଯିବା ଉଚିତ ତାହାର ଏକ ଉଦାହରଣ ଆବଶ୍ୟକ ହୁଏ, ତେବେ ଆପଣ ଏହା ବଦଳରେ ପଠନ () ପଦ୍ଧତି ("ପଢନ୍ତୁ" ସେବା ଅପରେସନ୍ ସହିତ ଅନୁରୂପ) କଲ୍ କରି ଏକ ଫାଇଲକୁ ଗ୍ରାହକଙ୍କୁ ରପ୍ତାନି କରିବାକୁ ଦସ୍ତାବିଜ ଶ୍ରେଣୀ ବ୍ୟବହାର କରିପାରିବେ। ସେମିତି:

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 କର୍ପୋରେସନରେ ପୂର୍ଣ୍ଣକାଳୀନ ନିଯୁକ୍ତି ପାଇଛନ୍ତି। ବ୍ଲଗ୍ ନ ଲେଖିବା ସମୟରେ, ସେ ତାଙ୍କର ଖାଲି ସମୟ ବିଭିନ୍ନ ପ୍ରକାରର ଆଗ୍ରହ, ହବି ଏବଂ କାର୍ଯ୍ୟକଳାପରେ ବିତାଇଥାନ୍ତି, ଯାହା କିଛି ପରିମାଣରେ ଏହି ୱେବସାଇଟରେ ଆବୃତ ବିଭିନ୍ନ ବିଷୟଗୁଡ଼ିକରେ ପ୍ରତିଫଳିତ ହୋଇପାରେ।