Dynamics AX 2012-də X++-dan birbaşa AIF Sənəd Xidmətlərinə zəng etmək
Nəşr olundu: 16 fevral 2025 at 11:26:00 UTC
Son yeniləmə: 12 yanvar 2026 at 08:55:42 UTC
Bu məqalədə, Dynamics AX 2012-də Tətbiq İnteqrasiyası Çərçivəsi sənəd xidmətlərinə birbaşa X++ kodundan necə zəng etməyi izah edirəm, həm daxil olan, həm də xaric olan zəngləri təqlid edir ki, bu da AIF kodundakı səhvləri tapmağı və düzəltməyi xeyli asanlaşdıra bilər.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
Bu yazıdakı məlumat Dynamics AX 2012 R3-ə əsaslanır. Digər versiyalar üçün keçərli ola bilər və ya olmaya da bilər.
Bu yaxınlarda bir müştəriyə başqa bir sistemdən aldıqları məlumatlara əsasən müştərilər yaratmaq üçün Tətbiq İnteqrasiyası Çərçivəsinin (AIF) daxilolma portunu tətbiq etməyə kömək edirdim. Dynamics AX artıq bunun məntiqini tətbiq edən CustCustomer sənəd xidmətini təqdim etdiyindən, onu sadə saxlamağa və standart həlldən istifadə etməyə qərar verdik.
Lakin tezliklə məlum oldu ki, xarici sistemin Dynamics AX-ın qəbul edəcəyi XML yaratmasında bir çox problem var. Dynamics AX tərəfindən yaradılan XML sxemi olduqca mürəkkəbdir və görünür ki, Dynamics AX-da bəzən digər alətlərə görə sxem baxımından etibarlı olan XML-i rədd etməsinə səbəb olan bir neçə səhv var, buna görə də ümumilikdə, düşündüyümdən daha az sadə oldu.
Bu iş zamanı AIF tərəfindən verilən səhv mesajları o qədər də məlumatverici olmadığı üçün müəyyən XML fayllarında problemin nə olduğunu anlamaqda çətinlik çəkirdim. Bu, həm də yorucu idi, çünki xarici sistemin MSMQ üzərindən yeni bir mesaj göndərməsini və sonra AIF-in mesajı götürüb emal etməsini gözləməli oldum, sonra isə səhv görməzdən əvvəl.
Buna görə də, daha sürətli test üçün xidmət kodunu birbaşa yerli XML faylı ilə çağırmağın mümkün olub-olmadığını araşdırdım və məlum oldu ki, bu mümkündür - və bununla yanaşı, bunu etmək çox asandır və əslində daha mənalı səhv mesajları təqdim edir.
Aşağıdakı nümunə işi yerli XML faylını oxuyur və müştəri yaratmaq üçün onu AxdCustomer sinfi (CustCustomer xidməti tərəfindən istifadə edilən sənəd sinfi) ilə istifadə etməyə çalışır. Lazım gələrsə, bütün digər sənəd sinifləri, məsələn, AxdSalesOrder üçün də oxşar işlər görə bilərsiniz.
{
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() metodu ilə qaytarılan AifEntityKey obyekti (AIF-də "yarat" xidmət əməliyyatına uyğundur), digər məlumatlarla yanaşı, hansı customer-in yaradıldığı haqqında məlumatları, yaradılmış CustTable qeydinin RecId-ni ehtiva edir.
Əgər test etməyə çalışdığınız şey Outbound portudursa və ya sadəcə XML-in Inbound portunda necə görünməli olduğuna dair bir nümunəyə ehtiyacınız varsa, read() metodunu ("read" xidmət əməliyyatına uyğun olaraq) çağıraraq, klienti fayla ixrac etmək üçün document sinfindən də istifadə edə bilərsiniz:
{
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');
}
Əlbəttə ki, oxumaq istədiyiniz müştərinin hesab nömrəsi ilə '123456' əvəz etməlisiniz.
Əlavə Oxu
Bu yazı xoşunuza gəldisə, bu təklifləri də bəyənə bilərsiniz:
- Dynamics AX 2012-də Hüquqi Şəxsi (Şirkət Hesabları) silin
- Dynamics AX 2012 SysOperation Framework Sürətli Baxış
- The Difference Between data() and buf2Buf() in Dynamics AX 2012
