Makale Özeti

Axapta içersinde nesne tabanlı(object oriented) programlama'ya ait en güçlü örnekleri sınıflarda görmekteyiz. Axapta 'da sınıf yazmak ve yönetmek son derece kolaydır. Biz sınıfları birçok uygulamamızda veya yaptığımız geliştirmelerde kullanmaktayız. Axapta'da sınıfları bu kadar çok kullanmamızı sağlayan en güçlü özelliklerinden biri Dialog metodudur. Bu makalede sınıflarda lookup metodunu nasıl kullanacağımızı göreceksiniz.

Makale

Dynamics Ax - Sınıflarda lookup işlemi

Bildiğiniz gibi Dynamics Ax'da kodlarımızı X++ dilinde yazmaktayız. X++ dilinin içeriği ve biçimi C#, Visual .Net ve java dillerine benzemekte. X++ dili bu dillerin  referanslarına ve benzer içeriklerine sahiptir. Tabi Java biçimine daha çok benzediğini söylemeliyiz.  X++ dilini daha  iyi anlayabilmemiz ve farklılıkları daha iyi tespit edebilmemiz için object oriented programlama yöntemlerini iyi anlamamız gerekecektir.

Axapta içersinde object oriented programlama'ya ait en güçlü örnekleri sınıflarda görmekteyiz.  Axapta 'da sınıf yazmak ve yönetmek son derece kolaydır. Biz sınıfları birçok uygulamamızda veya yaptığımız geliştirmelerde kullanmaktayız. Axapta'da sınıfları bu kadar çok kullanmamızı sağlayan en güçlü özelliklerinden biri Dialog metodudur. Bu metod ile değişkenlerimizi ( parametre, girdi) tanımlamamızı sağlar.

Bu makalede de sınıflarda kullandığımız Dialog metodunda StringEdit tipinde bir değişkende(alanda) Lookup metodunu nasıl oluşturacağımızı bir örnekle anlamaya çalışacağız.

Örneğimizde Fiş Numarası ve Fiş tarihi bilgilerini alan,  bu parametrelerle de muhasebe günlüğü işlemlerini bir StringEdit alanında görüntüleyeceğiz.

Bu örnek için LedgerJournalTrans tablosunu kullanacağız. Tabi olaya dialog metodumuzu yazarak başlayacağız yalnız sınıfla ilgili diğer metodların ve gerekli değişkenlerin tanımlandığını var saymaktayım.

Object dialog(DialogRunbase _dialog, boolean _forceOnClient )
{
           DialogGroup dimensionGroup;
           Dialog dialog = super(_dialog, _forceOnClient);
           ;

           dialogVoucher = dialog.addFieldValue(typeid(voucher),voucher,"Fiş Numarası");
           dialogTransDate = dialog.addFieldValue(typeid(TransDate),transDate,"İşlem Tarihi");
           dialogJournalRecId = dialog.addFieldValue(typeid(RecId),journalRecId,"Fiş Satırı");
           dialogJournalRecId.lookupButton(FormLookupButton::Always);


           return dialog;
}

Sınıfımızı dialog'unda görüntülenmek üzere 3 adet dialog alanı oluşturuyoruz. Yukarıda belirtiğim gibi bu alanlardan dialogVoucher ve dialogTransDate alanları görüntüleyeceğimiz  fiş ve fişin tarihi. Günlük işlemlerini ise dialogJournalRecId alanında lookup olarak görüntüleyeceğiz. Burada dikkat etmemiz geren nokta bu alanın LookUpButton özelliğini "herzaman" olarak  atamak olmalıdır.  Bu özellik bize StringEdit alanı için lookup işlemini açacaktır. Şimdi lookup metodumuzu yazalım.

Sınıfların dialog'larına alan eklediğimizde bunlar birer object olduğu için, Axapta bunlara birer isim atayacaktır. "Fld_1_1" gibi. Bizim eklediğimiz alanın ismini ise (info(dialogJournalRecId .name)) ile alabiliriz. 

Aslında şimdi yapacağımız işlem .Net den alışık olduğumuz bir object'in metodunu OverWrite (Üzerine Yazmak) etmeden farklı değildir. Bizde Axapta tarafından ismi verilmiş olan dialogJournalRecId  isimli alanımızın Lookup metodunu OverWrite edeceğiz.

Şimdi Axapta dialogJournalRecId alanına Fld3_1 ismini verecektir. Sınıfımızın içine aşağadaki metod'u yazarak işlemimizi tamamlayalım.

void Fld3_1_lookup()
{
        FormRun fr=this.dialogModify().parmDialog().formRun();
        object control = fr.controlCallingMethod();
        SysTableLookup sysTableLookup =SysTableLookup::newParameters(tableNum(LedgerJournalTrans), control);
        Query query = new Query();
        QueryBuildDataSource qbds;
        ;

        sysTableLookup.addLookupfield(fieldNum(LedgerJournalTrans, RecId));
        sysTableLookup.addLookupfield(fieldNum(LedgerJournalTrans, JournalNum));
        sysTableLookup.addLookupfield(fieldNum(LedgerJournalTrans, AccountType));
        sysTableLookup.addLookupfield(fieldNum(LedgerJournalTrans, AccountNum));
        sysTableLookup.addLookupfield(fieldNum(LedgerJournalTrans, txt));
        sysTableLookup.addLookupfield(fieldNum(LedgerJournalTrans, AmountCurDebit));
        sysTableLookup.addLookupfield(fieldNum(LedgerJournalTrans, AmountCurCredit));

        qbds = query.addDataSource(tableNum(LedgerJournalTrans));
        qbds.addRange(fieldNum(LedgerJournalTrans,Voucher)).value(queryValue(dialogVoucher.value()));
        qbds.addRange(fieldNum(LedgerJournalTrans,TransDate)).value(queryValue(dialogTransDate.value()));
        sysTableLookup.parmQuery(query);
        sysTableLookup.performFormLookup();
}

Sınıfı çalıştırdığımıda fiş ve fiş tarihi girdiğimizde dialogJournalRecId  alanında yukarıda belirttiğimiz alanları gösteren bir lookup açılacaktır. Benzer yöntemlerle lookup haricindeki diğer özellikleri de kullanabilirsiniz.

Yukarıda yazılan metodların içeriklerine ve detaylarına girmedim.  Bunlarla ilgili açıklamaları birçok yerde bulabilirsiniz.

 

Volkan Acar

volkan.vacar@gmail.com