Makale Özeti

Axapta Com, Com+ ve web servislerine erişme gücüne sahiptir. Bu yazımızda Axapta üzerinden Com nesnelerine erişme konusunu inceleyeceğiz.

Makale

AXAPTA'DAN COM NESNELERİNE ERİŞMEK

Axapta Com, Com+ ve web servislerine erişme gücüne sahiptir.
Bu yazımızda Axapta üzerinden Com nesnelerine erişme konusunu inceleyeceğiz. Örnek olarak, Com kullanarak bir Word uygulaması oluşturacağız.

Axaptanın kendi içindeki class'ları kullanarak Excel'e yazmak mümkünken (SysExcel...) Word için hazır bir class bulunmamaktadır. Bunu nasıl yapacağımıza bakalım.(Aslında Excel için kullanılan Axapta sınıfları da arka planda Com kullanmaktadır.)

Seneryomuz basit. İçeriği satış no, müşteri adı ve teslimat tarihinden oluşan bir raporu Word dökümanına aktaracagız. Son olarakta kaç adet satış listelediğimizi Word dökümanına yer değiştirme yöntemi ile yazdıracağız.
İlk olarak C:\ altında Test.doc adlı bir Word dosyasi oluşturalım. Dosyanın içine "Sipariş Raporu Toplam SATIRSAYISI Satırdır." yazalım. Dosyamızı oluşturduktan sonra artık kodlamaya geçebiliriz.
Axapta üzerinde yeni bir Job oluşturup aşağıdaki şekilde kodlayalım.


static void WORDJOB(Args _args)
{
    SalesTable st;
    COM wordAppl, documents, document,selection,cell;
    COM range, tables, rows,table,find;
    int row;
    
    //Word nesnemizi oluşturup "Test.doc" ile çalışacağımızı belirtiyoruz.
    wordAppl = new COM('Word.Application');
    documents= wordAppl.documents();
    document = documents.add("C:/Test.doc");
    selection= wordAppl.selection();
    range= selection.range();
    tables = document.tables();
    row=1;
    //3 sütun ve 1 satırdan oluşan bir tablo oluşturuyoruz.
    table= tables.add(range,row,3,1,0);
    //Her kayıt için bir satır ekleyeceğimizden rowları rows değişkenine atıyoruz.
    rows=table.rows();
    //Tablonun hürelerine erişip gerekli değerleri atıyoruz.
    cell = table.cell(row,1); Range = cell.range(); range.text("SIPARIS NO");
    cell = table.cell(row,2); Range = cell.range(); range.text("MUSTERI ADI");
    cell = table.cell(row,3); Range = cell.range(); range.text("SON TESLIMAT TARIHI");

    while select * from st
    {
        //Her kayıt için bir satır ekliyoruz.
        Rows.add();
        row++;
        cell = table.cell(row,1); Range = cell.range(); range.text(st.SalesId);
        cell = table.cell(row,2); Range = cell.range(); range.text(st.customerName());
        cell = table.cell(row,3); Range = cell.range(); range.text(st.deliveryDate);
    }
    find = Selection.Find();
    find.ClearFormatting();
    //Worddeki "SATIRSAYISI" kelimesini bulup row değişkeninin değeri ile değiştiriyoruz.
    //num2str sayıları string'e dönüştüren Axaptanın kendi fonksiyonudur.
    find.execute("SATIRSAYISI",false,false,false,false,false,false,
        2,false,num2str(row-1,10,0,0,0) ,2,false,false,false,false);
    wordAppl.visible(true);
    wordAppl =null;
    documents=null;
    document =null;
}

Job'u çalıştırdığımda bendeki çıktı :

Ax_Word (73K)

Gördüğünüz gibi Axapta üzerinden com nesnesine erişip, uygulama geliştirmek oldukça basit.

Word üzerinde tablo oluştururken ve find metodunu çalıştırırken oldukça fazla parametre kullandık. Bu parametrelerin açıklamaları hakkında bilgi için,
http://msdn2.microsoft.com/en-us/library/microsoft.office.interop.word.aspx
sitesini ziyaret edebilirsiniz. Ya da Word içindeyken Tools>Macro>Record New Macro ile oluşturduğunuz macro kodlarını inceleyebilirsiniz.

Zekeriya YOLCU
MCSD.Net

zekeriya.yolcu@gmail.com