Lookup Method Oluşturma
Öncelikle Lookup nedir, Axapta üzerinde nasıl kullanılır ona bakalım.
Dynamics Ax yapısında “Lookup”lar genel tanımıyla bir alana girilecek olan veriyi seçme işleminde yardımcı verileri gösteren açılan kutucuklardır. Genellikle form üzerinde kullanılırlar.
Lookuplar methodla müdahale edilmedikçe tablo grupları altındaki “AutoLookup” kısmına atılan alanları(field) gösterirler. Hangi tablodan seçileceğini ise EDT(Extended Data Type) üzerindeki ilişki(releation) belirler. Eğer AutoLookup boş ise lookup indexler üzerinden çalışır.(Bu konuya ilerde detaylı olarak inceleyeceğiz).
Ayrıca istenilirse “Lookup method” ve “Lookup form” gibi işlemlerle kendiniz istediğiniz gibi lookuplar oluşturabilirsiniz. Biz bu konumuzda “Lookup Method” oluşturma işlemini inceleyeceğiz.
Lookup methodlar ile neler yapabileceğimize bir bakalım.
- İstenilen alanları rahatça lookupa ekleyebiliriz.
- Tablo için display alanlar oluşuturup o display alanları lookupta gösterebiliriz.
- Birden fazla tabloya join yaparak diğer tablodan da alan gösterebiliriz.
- Sabit filitreleme(Range) vererek lookupın filitreli gelmesini sağlayabiliriz.
- Datasourceden gelen bir değere bağlı filitreleme çalıştırabiliriz.
- Lookup içersinde group by gibi işlemler yapılabilir.
Lookup method oluşturmak için;
Kullanılacak tablo altına ilgili Lookup methodu yazmak gerekir.
public client static void LookupAdi(FormStringControl _ctrl, //FormdanGelenDeğer _formDeğeri ) { SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(xTabloAdi), _ctrl); Query query = new Query(); QueryBuildDataSource qbdsVendTable = query.addDataSource(tableNum(xTabloAdı)); ; //Sabit range verilecek veya formdan gelen değere göre range verilecekse aşağıdaki kod kullanır //qbdsVendTable.addRange(fieldNum(xTabloAdı, xAlanAdı)).value(SysQuery::value(sabitDeğer yada _formDeğeri)); sysTableLookup.addLookupfield(fieldNum(xTabloAdı, xAlanAdı1)); sysTableLookup.addLookupfield(fieldNum(xTabloAdı, xAlanAdı2)); sysTableLookup.addLookupMethod(tableMethodStr(xTabloAdı, MethodAdı));//Display Method gösterilecekse sysTableLookup.addSelectionField(fieldNum(xTabloAdı, xAlanAdı3)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); }
Daha sonra datasource altındaki “fields” kısmındaki method bölümüne sağtuş “Override Method” diyerek “Lookup” seçilirek method aşağıdaki şekilde düzenlenir.
</span> <pre>public void lookup(FormControl _formControl, str _filterStr) { //super(_formControl, _filterStr); xTabloAdi::LookupAdi(_formControl); //xTabloAdi::LookupAdi(_formControl,xTabloAdi.xAlanAdi); //eğer datasourceden gelen değere göre filtre yapılacaksa }
Örn :
Satış Siparişlerinde(SalesTable), Fatura Hesabı(InvoiceAccount) satış siparişindeki para birimi(SalesTable.CurrencyCode) müşteri hesabındaki para birimiyle(CustTable.Currency) aynı olanları getiren bir lookup yazalım.
CustTable tablosu methodlarının altına aşağıdaki lookup methodu kodunu ekliyoruz.
public client static void looukupInvoiceAccountCurCode(FormStringControl _ctrl,CurrencyCode _currencyCode) { SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(CustTable), _ctrl); Query query = new Query(); QueryBuildDataSource qbdsCustTable = query.addDataSource(tableNum(CustTable)); QueryBuildDataSource qbdsCustGroup; qbdsCustTable.addRange(fieldNum(CustTable, Currency)).value(SysQuery::value(_currencyCode)); sysTableLookup.addLookupfield(fieldNum(CustTable, AccountNum)); sysTableLookup.addLookupMethod(tableMethodStr(CustTable, name));//DisplayMethod sysTableLookup.addLookupfield(fieldNum(CustTable, Currency)); sysTableLookup.addLookupfield(fieldNum(CustTable, CustGroup)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); }
Daha sonra SalesTable formunu açarak SalesTable datasource sinin field düğümünü açarak InvoiceAccount alanını methodlarına lookup methodunu override ederek method aşağıdaki şekilde düzenlenir.
public void lookup(FormControl _formControl, str _filterStr) { //super(_formControl, _filterStr); CustTable::looukupInvoiceAccountCurCode(_formControl,SalesTable.CurrencyCode); }