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 гэх мэт хийх боломжтой.
{
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" үйлчилгээг хийх үйлдэлтэй холбоотой) гэх мэт:
{
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'-г уншихыг хүссэн хэрэглэгчийн дансны дугаараар солих хэрэгтэй гэдгийг мартаж болохгүй.