Nis 25, 2014 - Formlar (Forms), X++    Yorum Yok

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.

lookup1

lookup override

public void lookup(FormControl _formControl, str _filterStr)
{
    //super(_formControl, _filterStr);
    CustTable::looukupInvoiceAccountCurCode(_formControl,SalesTable.CurrencyCode);
}

lookup2

Erkan OĞUZ

Önceki Konu->

<- Sonraki Konu

Benzer yazılar

Yorum Yazın...