Miklix

Dynamics AX 2012 дээрх X++ програмаас AIF баримт бичгийн үйлчилгээ рүү шууд залгах

Нийтэлсэн: 2025 оны гуравдугаар сарын 19 21:35:24 (UTC)

Энэ нийтлэлд би Dynamics AX 2012 дээрх Application Integration Framework баримт бичгийн үйлчилгээг хэрхэн шууд X++ кодоос залгах, орж ирж буй болон гарах дуудлагыг дуурайж, AIF кодын алдааг олох, дибаг хийхэд ихээхэн хялбар болгох талаар тайлбарласан.


Энэ хуудсыг аль болох олон хүнд хүртээмжтэй болгох үүднээс англи хэлнээс орчуулсан. Харамсалтай нь машин орчуулга нь төгс төгөлдөр технологи болоогүй байгаа тул алдаа гарч болзошгүй. Хэрэв та хүсвэл англи хэл дээрх эх хувилбарыг эндээс үзэх боломжтой.

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

Энэхүү постын мэдээлэл нь Dynamics AX 2012 R3-д үндэслэсэн бөгөөд бусад хувилбаруудад хэрэгжих эсэх нь тодорхойгүй байж болно.

Саяхан би нэг хэрэглэгчид тусалж байсан бөгөөд тэдний өөр нэг системээс авсан өгөгдлөөр хэрэглэгчид үүсгэхийн тулд Application Integration Framework (AIF) оролтын порт хэрэгжүүлэх шаардлагатай байсан. Харин Dynamics AX нь хэрэглэгчид үүсгэх логикыг хэрэгжүүлсэн CustCustomer баримт бичгийн үйлчилгээг аль хэдийнээ нийлүүлсэн тул бид энгийн бөгөөд стандарт шийдлийг ашиглахаар шийдсэн.

Гэхдээ хурдан хугацаанд гадаад систем нь Dynamics AX хүлээн авах XML үүсгэхэд олон асуудал гарч байгааг илрүүлсэн. Dynamics AX-аас үүсгэсэн XML схем нь нэлээд төвөгтэй бөгөөд мөн хэд хэдэн багийн асуудлууд байгааг харах боломжтой байдаг тул заримдаа схемийн хувьд зөвшөөрөгдсөн 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() аргаар буцаж ирсэн AifEntityKey обьект нь ямар хэрэглэгч үүссэнийг харуулдаг бөгөөд үүнд үүссэн CustTable бичлэгийн RecId зэрэг мэдээлэл багтана.

Хэрэв та турших гэж байгаа зүйл нь оролтын порт биш, харин гаргах порт эсвэл XML хэрхэн харагдах ёстой тухай жишээг л хүсэж байгаа бол, та баримт бичгийн ангийг хэрэглэгчийг файлууд руу экспорт хийхэд ашиглаж болно. Үүний тулд read() аргыг ашиглах хэрэгтэй (энэ нь "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'-г уншихыг хүссэн хэрэглэгчийн дансны дугаараар солих хэрэгтэй гэдгийг мартаж болохгүй.

Bluesky дээр хуваалцаарайFacebook дээр хуваалцахLinkedIn дээр хуваалцахTumblr дээр хуваалцахX дээр хуваалцаарайLinkedIn дээр хуваалцахPinterest дээрх пин

Миккел Кристенсен

Зохиогчийн тухай

Миккел Кристенсен
Миккел бол miklix.com сайтыг бүтээгч, эзэмшигч юм. Тэрээр мэргэжлийн компьютерийн программист/програм хангамж хөгжүүлэгчээр 20 гаруй жил ажилласан туршлагатай бөгөөд одоогоор Европын томоохон мэдээллийн технологийн корпорацид бүтэн цагаар ажиллаж байна. Блог хөтлөөгүй үедээ тэрээр чөлөөт цагаа олон төрлийн сонирхол, хобби, үйл ажиллагаанд зарцуулдаг бөгөөд энэ нь энэ вэб сайтад багтсан олон янзын сэдвүүдэд тодорхой хэмжээгээр тусгагдсан байж магадгүй юм.