Axapta’da lookup ezme

Fatih hocamın da dediği gibi Ax’ta kod yazmayı bilmektense kodun nereye yazılacağını bilmek daha önemlidir.

Koda ait gerçekler;

  • Form:SalesTable > Datasources:SalesLine > ETGInventDimCombinationName (eklenmiş yeni alan) alanına yazıldı.
  • Bu kod “InventDimCombination” madde boyutu birleşimleri tablosunu gösteren bir lookup açar.
  • // DRT MK G240 20111020 bu şekilde notlar yazmanız daha sonra kodu hatırlamanız için çok faydalı olacaktır. DRT:firma MK:kodu yazan G240:geliştirme no ve tarih.
  • sysTableLookup.addLookupfield(fieldnum(InventDimCombination, RecId), true); Bu koddaki “true” ifadesi seçim sonrası dönecek değeri belirtmek için kullanılır.
public void lookup(FormControl _formControl, str _filterStr)
{
    Query                   query = new Query();
    QueryBuildDataSource    queryBuildDataSource;
    QueryBuildRange         queryBuildRange;
    SysTableLookup          sysTableLookup;

    ;
    //super(_formControl, _filterStr);
    sysTableLookup = SysTableLookup::newParameters(tablenum(InventDimCombination), _formControl);
    sysTableLookup.addLookupfield(fieldnum(InventDimCombination, Name));
    sysTableLookup.addLookupfield(fieldnum(InventDimCombination, ItemId));
    sysTableLookup.addLookupfield(fieldnum(InventDimCombination, ConfigId));
    sysTableLookup.addLookupfield(fieldnum(InventDimCombination, InventSizeId));
    //  DRT MK G240 20111020 {
    sysTableLookup.addLookupMethod(tablemethodstr(InventDimCombination, inventSizeName));
    //  DRT MK }
    sysTableLookup.addLookupfield(fieldnum(InventDimCombination, InventColorId));
    sysTableLookup.addLookupfield(fieldnum(InventDimCombination, RecId), true);

    queryBuildDataSource = query.addDataSource(tablenum(InventDimCombination));
    
    if(_filterStr)
        if(!InventDimCombination::findName(_filterStr))
            queryBuildDataSource.addRange(fieldnum(InventDimCombination, Name)).value(_filterStr);

    if(SalesLine.ItemId)
    {
        queryBuildRange = queryBuildDataSource.addRange(fieldnum(InventDimCombination, ItemId));
        queryBuildRange.value(SalesLine.ItemId);
    }
    sysTableLookup.parmQuery(query);
    sysTableLookup.performFormLookup();
}

Bu kod ne yapar?

    //  DRT MK G240 20111020 {
    sysTableLookup.addLookupMethod(tablemethodstr(InventDimCombination, inventSizeName));
    //  DRT MK }

Lookup’a bir metod eklemek için kullanılır. Marka adını almak için kullandığımız display metod;

display Name inventSizeName()
{
    return InventSize::find(this.InventSizeId, this.ItemId).Name;
}

Bu kod ne yapar?

    if(_filterStr)
        if(!InventDimCombination::findName(_filterStr))
            queryBuildDataSource.addRange(fieldnum(InventDimCombination, Name)).value(_filterStr);

Bu kod ise alan girilen değeri filtre olarak eklemek kullanılır. Mesela MKP* yazıldığında bu değere göre lookup filterenmiş olarak açılır. İkinci “if” bloğu ise; seçimden sonra tekrar lookup’ı açtığında tek satır gelmesini engelliyor.

Merhaba Ax Developers! :)

Ax ortamı ve X++ kodlama dili hakkında bilgiler içeren siteme hoş geldiniz. Umarım aradığınız doğru bilgiye ulaşabilirsiniz.

Kısaca;

Bu site 2011 yılında ETG’de aldığım Ax Developer eğitimi sonrasında öğrendiklerimi ya da beğendiğim kodları unutmamak ve herkesle paylaşmak için kurulmuştur.

Eğitmenimiz olan ETG’den Fatih Demirci‘ye çok teşekkür ederim, öz verili ve iyi niyetli yaklaşımı için. Bu yazıyı yazdığım zamanlarda çalıştığım firma Doktor Tarsa‘da geliştirmeler yapıyor olacağız, ETG’den Developer Mehmet Höke ile.

Fakat söylemem lazım, yoğunluk nedeniyle çok sık yazamamaktan korkuyorum. Yoğunluğun nedeni Ocak 2012’de canlı kullanıma geçiliyor olması. Bu süreçte öğrendiklerimi sizinle de paylaşmayı umuyorum.