დარეკვა AIF დოკუმენტის სერვისებზე პირდაპირ X++-დან Dynamics AX 2012-ში
გამოქვეყნებულია: 16 თებერვალი, 2025, 11:25:02 UTC
ბოლო განახლება: 12 იანვარი, 2026, 08:55:39 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 სქემა საკმაოდ რთულია და, როგორც ჩანს, Dynamics AX-ში რამდენიმე შეცდომაა, რაც ზოგჯერ იწვევს XML-ის უარყოფას, რომელიც სხვა ინსტრუმენტების მიხედვით სქემატურია, ამიტომ, საბოლოო ჯამში, ეს უფრო მარტივი აღმოჩნდა, ვიდრე მეგონა.
ამ მცდელობისას ხშირად მიჭირდა იმის გარკვევა, თუ რა იყო კონკრეტულად პრობლემის მიზეზი გარკვეულ XML ფაილებთან დაკავშირებით, რადგან AIF-ის მიერ მოწოდებული შეცდომის შეტყობინებები არასაკმარისად ინფორმაციულია. ეს ასევე დამღლელი იყო, რადგან შეცდომის დანახვამდე გარე სისტემის მიერ ახალი შეტყობინების გაგზავნას და შემდეგ 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 ობიექტი (რომელიც შეესაბამება AIF-ში „create“ სერვისის ოპერაციას) შეიცავს ინფორმაციას იმის შესახებ, თუ რომელი მომხმარებელი შეიქმნა, სხვა საკითხებთან ერთად, შექმნილი CustTable ჩანაწერის RecId-საც.
თუ თქვენ ცდილობთ გამავალი პორტის შემოწმებას ან უბრალოდ გჭირდებათ მაგალითი, თუ როგორ უნდა გამოიყურებოდეს XML შემომავალ პორტზე, ასევე შეგიძლიათ გამოიყენოთ document კლასი კლიენტის ფაილში ექსპორტისთვის 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“ იმ მომხმარებლის ანგარიშის ნომრით, რომლის წაკითხვაც გსურთ.
დამატებითი საკითხავი
თუ ეს პოსტი მოგეწონათ, შეიძლება ეს რჩევებიც მოგეწონოთ:
- დოკუმენტის კლასის და მოთხოვნის იდენტიფიცირება AIF სერვისისთვის Dynamics AX 2012-ში
- სიმებიანი ფორმატირება მაკრო და strFmt დინამიკაში AX 2012
- გადაიყვანეთ რეალური სიმებიანი ყველა ათობითი დინამიკაში AX 2012
