Dynamics AX ile Excel Raporları Hazırlamak - Yazgelistir.com
Dynamics AX paketi de, diğer Microsoft ürünleri gibi güçlü entegrasyon yeteneklerine sahiptir ve Windows'un COM nesnelerine erişebilir. Excel uygulamasına erişmek için üç seçeneğimiz bulunmaktadır :
1. Formumuza ActiveX nesnesi eklemek
2. COM nesneleri aracılığıyla erişmek
3. Dynmaics AX'in hazır sınıflarını kullanmak
Biz örneğimizde 3. yöntemi uygulayacağız. Çünkü AX sınıflarını kullanmak daha anlaşılır kod yazmamızı ve servis paketi güncellemeleri ile gelecekteki Office versiyonlarını desteklememizi sağlar.
Oluşturacağımız sınıfta 3 adet metod olacak :
void ExcelDosyasiYarat(FileName _dosyaAdi= "") : Sınıfımızdan yeni bir nesne yarattıktan sonra kullanacağımız metoddur. Eğer "_dosyaAdi" parametresini gönderirsek ilgili excel dosyasından yeni bir kopya açar. Parametre göndermezsek yeni bir Excel dosyası yaratır.
void VeriGonder(int satirNo, int sutunNo, AnyType deger) : Oluşturduğumuz Excel dosyasının ilgili satır ve sutununa gönderdiğimiz veriyi yazar.
void Goster(boolean _goster = NoYes::Yes) : Bilgilerini doldurduğumuz Excel dosyasını kullanıcıya göstermeye yarar.
Uygulamamızı yazmaya başlamak için Ctrl+D tuşlarına basarak Uygulama Nesne Ağacı'nı (AOT) açalım. Classes sekmesine gelelim ve sağ tuşa basarak "Yeni Class" seçeneğini işaretleyelim.
Oluşturduğumuz yeni sınıfın ismini "ExcelRaporYaratici" olarak değiştirelim. Sınıf içerisindeki global değişkenlerimizi ilgili sınıfın "classDeclaration" adı verilen tanımlama metodunun içerisine yazıyoruz. Biz sınıfımızda
değişkenlerini kullanacağız. "SysExcel" ile başlayan değişkenler Dynamics AX'den Excel'e erişirken kullanacağımız sınıflarıdır. classDeclaration'ın son durumu aşağıdaki gibi olacaktır :
Bir sonraki adımda gönderdiğimiz _dosyaAdi değişkenine göre varolan bir dosyadan yeni bir kopya yaratan, ya da parametre göndermezsek yeni bir Excel dosyası yaratan metodu yazacağız. Bunun için classDecleration üzerindeyken Ctrl+N komutunu kullanarak yeni bir metod yaratalım ve kodumuzu yazalım :
İstemcinin bilgisayarında Excel uygulaması olmamasına ya da herhangi bir olasılığına karşılık kodumuzu try-catch blokları arasına yazdık. SysExcelApplication::construct(); metodu ile Dynamics Ax, sisteminizde kurulu olan Excel uygulamasına ulaşır ve yeni bir Excel COM nesnesi yaratır. Eğer _dosyaAdi parametresini gönderdiysek sysExcelApplication.workbooks().add(...) metodu ile Excel uygulaması ilgili dosyayı açar, yoksa yeni dosya yaratır. SysExcelWorksheet nesnesi ile ilgili dosyanın 1. sayfasına erişeceğiz.
Excel uygulamasına erişip, ilgili sayfasına ulaştığımıza göre artık dosyanın ilgili satır ve sütununa istediğimiz veriyi yazabiliriz. Bunun için "VeriGonder" metodumuzu yazıyoruz :
Bu metod sayesinde parametre olarak gönderdiğimiz satır ve sütunu gösteren excel hücresine (cell) gidiyor ve verimizi yazıyoruz. Her tür veriyi yazabilmek için deger parametresinin tipini "AnyType" olarak gönderdik.
Excel dosyamızı yarattık ve verileri doldurduk. Artık dosyamızı kullanıcıya gösterebiliriz. Bu işlem için de "Goster" metodumuzu yazıyor ve sınıfımızı tamamlıyoruz.
Yazmış olduğumuz sınıfı herhangi bir uygulamamızdan rahatlıkla çağırabilir ve excel raporu yaratabiliriz. Yazmış olduğumuz sınıfı test etmek için yeni bir "job" yaratalım ve test edelim. Uygulama Nesne Ağacı'nda Jobs sekmesine gelin ve sağ tıklayın ve "Yeni Job" seçeneğini seçin.
Örneğimizde Maddeler tablosunu (Dynamics AX'de InventTable ismindeki tablo) dolaşıp madde numaralarını ve isimlerini Excel'e aktaracağız. Kodumuz resimdeki gibi olacaktır :
Bu kodu çalıştırdığımızda aşağıdaki resimdeki Excel doyası ile karşılaşacağız.
Projeyi ek dosyalar bölümünde bulabilir ve kendi uygulamalarınızda kullanabilirsiniz.
Sorularınız için : anil.ozay@bilisimanadolu.com