Dynamics AX 2012'de AIF Belge Hizmetlerini Doğrudan X++'dan Çağırma
Yayınlandı: 16 Şubat 2025 11:23:17 UTC
Son güncelleme: 12 Ocak 2026 08:55:25 UTC
Bu makalede, Dynamics AX 2012'de Uygulama Entegrasyon Çerçevesi (AIF) belge servislerini X++ kodundan doğrudan nasıl çağırabileceğinizi, hem gelen hem de giden çağrıları taklit ederek AIF kodundaki hataları bulmayı ve ayıklamayı önemli ölçüde kolaylaştırabileceğinizi açıklıyorum.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
Bu yazıda yer alan bilgiler Dynamics AX 2012 R3'e dayanmaktadır. Diğer sürümler için geçerli olabilir veya olmayabilir.
Geçtiğimiz günlerde, bir müşterinin başka bir sistemden aldıkları verilere dayanarak müşteri oluşturmak için bir Uygulama Entegrasyon Çerçevesi (AIF) gelen portunu uygulamasına yardımcı oluyordum. Dynamics AX zaten bu mantığı uygulayan CustCustomer belge hizmetini sağladığı için, işi basitleştirmek ve standart çözümü kullanmak istedik.
Ancak, harici sistemin Dynamics AX'in kabul edeceği XML üretmesinde birçok sorun olduğu kısa sürede anlaşıldı. Dynamics AX tarafından üretilen XML şeması oldukça karmaşık ve ayrıca Dynamics AX'te bazen diğer araçlara göre şema açısından geçerli olan XML'i reddetmesine neden olan birkaç hata da mevcut gibi görünüyor; bu nedenle, sonuç olarak düşündüğümden daha karmaşık olduğu ortaya çıktı.
Bu süreçte, AIF tarafından sağlanan hata mesajlarının yeterince bilgilendirici olmaması nedeniyle, bazı XML dosyalarındaki sorunun tam olarak ne olduğunu anlamakta sık sık zorlandım. Ayrıca, hatayı görebilmek için önce harici sistemin MSMQ üzerinden yeni bir mesaj göndermesini, ardından AIF'nin mesajı alıp işlemesini beklemem gerektiğinden, bu süreç oldukça zahmetliydi.
Bu nedenle, daha hızlı test yapabilmek için servis kodunu doğrudan yerel bir XML dosyasıyla çağırmanın mümkün olup olmadığını araştırdım ve bunun mümkün olduğunu, üstelik çok basit olduğunu ve aslında çok daha anlamlı hata mesajları sağladığını gördüm.
Aşağıdaki örnek iş, yerel bir XML dosyasını okur ve bunu AxdCustomer sınıfıyla (CustCustomer servisi tarafından kullanılan belge sınıfı) kullanarak bir müşteri oluşturmaya çalışır. İhtiyaç duyarsanız, diğer tüm belge sınıfları için de benzer işler oluşturabilirsiniz, örneğin AxdSalesOrder için.
{
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 tarafından döndürülen AifEntityKey nesnesi (AIF'deki "create" servis işlemine karşılık gelir), diğer şeylerin yanı sıra, hangi müşterinin oluşturulduğuna dair bilgiler içerir; bu bilgiler arasında oluşturulan CustTable kaydının RecId'si de bulunur.
Eğer test etmeye çalıştığınız şey bir Giden port ise veya sadece Gelen portta XML'in nasıl görünmesi gerektiğine dair bir örneğe ihtiyacınız varsa, bunun yerine "read" servis işlemine karşılık gelen read() yöntemini çağırarak bir müşteriyi dosyaya aktarmak için document sınıfını da kullanabilirsiniz, şöyle:
{
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');
}
Elbette '123456' yerine okumak istediğiniz müşterinin hesap numarasını yazmalısınız.
Daha Fazla Okuma
Bu yazıyı beğendiyseniz, şu öneriler de ilginizi çekebilir:
- Dynamics AX 2012'de X++ Kodundan Bir Enumun Elemanları Üzerinde Yineleme Nasıl Yapılır
- Dynamics AX 2012'de "Veri sözleşmesi nesnesi için meta veri sınıfı tanımlanmadı" hatası
- Dynamics AX 2012 SysOperation Framework Hızlı Genel Bakış
