Makale Özeti

Formlar üzerinde tanımlanmış olan veri kaynaklarına ihtiyaç yönelik olarak müdahele etme şansımız mevcuttur. Veri kaynaklarına bazı kriterler verebiliriz ancak kullanıcının çalışma esnasında bazı özel ihtiyaçlarını karşılamak için kodlar geliştirmemiz gerekmektedir.

Makale

Formlar üzerinde tanımlanmış olan veri kaynaklarına ihtiyaç yönelik olarak müdahele etme şansımız mevcuttur. Veri kaynaklarına bazı kriterler verebiliriz ancak kullanıcının çalışma esnasında bazı özel ihtiyaçlarını karşılamak için kodlar geliştirmemiz gerekmektedir.

Bunun için en iyi yol, veri kaynağının üzerine yazılabilir metotlarından biri olan executeQuery metodunu kullanmaktır.

executeQuery metodu içinden aktif sorguya ulaşmak için this anahtar sözcüğünü kullanabiliriz. this ifadesinden sonra . ‘ya bastığınız zaman, aktif veri kaynağının tüm nitelikleri listelenir. Bizim amacımız veri kaynağının sorgusuna erişmek olduğu için, query()’yi seçiyoruz. Sonrasında da tabloya erişebilmek için, dataSourceTable diyerek ilgili veri kaynağının numarasını girebiliyoruz. İstersek burada – ki bu yöntem daha tercih edilir – tableNum fonksiyonunu kullanarak, tablo adını verip numarasını Axapta’nın bulmasını isteyebiliriz.

this.query().dataSourceTable(TableNum(CustTable))

Bundan sonra bazı metotlar aracılığı ile kriter verme, sıralama gibi işlemleri gerçekleştirebiliriz.

addSortField: Bu metot ile tablonun hangi sahasına / sahalarına göre sıralama gerçekleştireceksek onun numarasını girebiliriz. İstersek tablo adını vermede olduğu gibi FieldNum fonksiyonunu kullanarak saha adını verip numarasını Axapta’nın bulmasını bekleyebiliriz.

         this.query().dataSourceTable(TableNum(CustTable)).addSortField(FieldNum(CustTable, AccountNum));

Bu ifade ile veri kaynağındaki CustTable tablosunun AccountNum sahasına sıralama koymuş olduk.

addRange: Bu metot ile tablonun sahasına / sahalarına kriter verebiliriz. Saha numarası veya FieldNum fonksiyonunu kullanarak ilgili numaraya erişmesini sağladıkdan sonra verdiğimiz değere göre sorgulama gerçekleştirebiliriz.

this.query().dataSourceTable(TableNum(CustTable)).addRange(FieldNum(CustTable,AccountNum)).value(“A*”);

clearRange: İlgili tablonun ilgili sahasına önceden verilmiş kriterleri boşa saymasını istersek bu metotdan yararlanabiliriz. Bu metodu çağırdığımızda parametre olarak hangi saha üzerindeki kriterleri kaldırmak istediğimizi göndermek zorundayız.

this.query().dataSourceTable(TableNum(CustTable)).clearRange(FieldNum(CustTable, AccountNum));

clearRanges: İlgili tablonun özel bir sahasını gözetmeksizin, tüm sahaları üzerindeki tüm kriterlerini kaldırmak istiyorsak bu metodu kullanabiliriz.

         this.query().dataSourceTable(TableNum(CustTable)).clearRanges();

Bir senaryo ile pekiştirelim. Form üzerinde bir combobox olsun ve burada alfabedeki harfler bulunsun. Gelen değere göre müşteriler tablosundaki müşteri kodu o harf ile başlayanlar listelensin ve sıralansın. Daha önce müşteri kodu üzerine verilen tüm kriter pasif hale gelsin. İşlemi başlatmak için, formda bir buton olsun ve butona basıldığı anda işlem gerçekleşsin. Forma eklediğimiz butonun click event’ine aşağıdaki kodu yazmamız gerekir;

        

void clicked()

{

                   ;

                   CustTable_ds.executeQuery();

                   super();

}

CustTable bizim veri kaynağımızın adı. Form üzerindeki kaynağa ulaşmak için, KaynakAdı_ds  ifadesini kullanmamız gerekir. Bu veri kaynağının executeQuery() metodunu çağırıyoruzki, yazacak olduğumuz sorgu aktif hale gelsin ve bilgiler kendini yenileyebilsin.

Veri kaynağının executeQuery() metoduna yazacağımız kod;

        

str _Harf;     

;

         _Harf = strHarfKontrol.valueStr();  à Harf seçimi yapılan combobox’dan gelen bilgi değişkene atanıyor.

this.query().dataSourceTable(TableNum(CustTable)).clearRange(FieldNum(CustTable, AccountNum));

this.query().dataSourceTable(TableNum(CustTable)).addRange(FieldNum(CustTable,AccountNum)).value(_Harf  + “*”);  à String birleştirme ile gelen değişken ile sonu ne olursa olsun demek için * işaretini kullanıyoruz.

this.query().dataSourceTable(TableNum(CustTable)).addSortField(FieldNum(CustTable, AccountNum));

NOT: clearRange ile yapmış olduğumuz kriter temizleme işini, addRange ile ilgili sahanın değerine * atayarak da yapabiliriz. *’ın anlamı tüm kayıtlar demektir. Ancak clearRange() ve clearRanges() metotlarının kullanımını tavsiye ederim.

Yeliz Korkmaz, MVP

yelizkorkmaz@tnn.net