How long have you been using Microsoft Dynamics Ax?

Toplam Sayfa Görüntüleme Sayısı

Popular Posts

Translate

Bu Blogda Ara

24 Şubat 2012 Cuma

Filter data with selected data from previous form / Formda seçilen değer ile açılan formu filtreleme

TR | ENG
Merhaba,

Bir formda çalışırken o form üzerindeki veriler ile ilgili başka bir formu açıp yeni açılan form üzerinde ilgili kayıta göre verinin filtrelenmesi gerekiyor ise yapmamız gereken çok kısa geliştirmeden bahsedeceğim.

Örneğin madde kartı üzerinden başka bir forma gidip yeni açılan form üzerindeki verileri madde kartındaki seçtiğimiz veri ile filtrelemek istiyoruz.

Öncelikle yeni bir tablo, form ve menu item oluşturuyoruz.

Tabloda ilişki kuracağımız alan olarak bizi ItemId ilgilendiriyor diğer alanlar size kalmış

Tabloyu açtıktan sonra formu oluşturuyor ve form üzerine tablonun istediğimiz alanlarını sürükleyip bırakıyoruz.

Formu kullanarak menuitemı display tipte oluşturup oluşturduğumuz menuitemı madde kartı formu üzerine buttonGroup a sürükleyip bırakıyoruz.

Şu ana kadar yaptıklarımız ile madde kartı üzerinde eklediğimiz butona tıklandığında yeni hazırladığımız form açılacak ama tüm değerleri gösterecek.

Şimdi filtreleme kısmına geçelim.

Yeni formumuzun veri kaynağının init methodunda super kısmından sonra aşağıdaki kod bloğunu eklememiz yeterli olacak.


if (element.args().dataset() == tablenum(InventTable))
{
 SysQuery::findOrCreateRange(    
YeniTablo_ds.query().dataSourceTable(
tablenum(YeniTablo)),fieldnum(YeniTablo,ItemId)).value(
element.args().record().(fieldnum(InventTable,ItemId)));
}

Yazdığımız kodun sadece InventTable dan gelen çağırılar için çalışmasını istediğimizden ilk satırda kontrol yapıyoruz.

Sonra SysQuery objesinin findOrCreateRange ile filtreleme için alanı yok ise yaratıyor var ise yaratmadan bulup değer atamamızı sağlıyor.

findOrCreateRange methodu ilk parametre olarak veri kaynağını ikinci parametre olarak alan kodu istiyor.

Formda kullandığımız veri kaynağının adının sonuna _ds ekleyerek veri kaynağına query() ile sorgusuna ve son olarak dataSourceTable ile de tablo idsini verdiğimiz tabloya ulaşabiliriz.

Elde ettiğimiz filtreye değer vermek için value methodunu kullanıyoruz ve paramtere olarak parametre ile gelen kayıdı element.args().record() ile alıyor ve sonrasında .(alankodu) ile kayıt kümesindeki belirttiğimiz alan kodlu alanı filtreye gönderiyoruz.

Kod kısa olsa bile anlatması biraz uzun sürdü, umarım işinize yarar.

Bol AX'lı günler.

Alper.


------------------------------------------------------------------------------------------------------------

Hi there,

If you want to filter data from previous form you would simply do the followings below.

Create new table, form and menu item.

Take menu item drag and drop it to form which will be used to called from.

After you do all this overwrite the init method of datasource on the new form and paste the code below just after your modifications (table names, filed names).


if (element.args().dataset() == tablenum(InventTable))
{
 SysQuery::findOrCreateRange(  
NewTable_ds.query().dataSourceTable(
tablenum(NewTable)),fieldnum( NewTable ,ItemId)).value(
element.args().record().(fieldnum(InventTable,ItemId)));
}


This is it you filtered your data with data which came from previous form.

What we just did is simply check is data coming from table we wanted

Find or create range on forms data source and filed by using  "NewTable_ds.query().dataSourceTable(
tablenum(NewTable))" and "fieldnum( NewTable ,ItemId)" and finally assign filter value  "element.args().record().(fieldnum(InventTable,ItemId))" as you can see we used element.args().record() to get row and .(filed number) to get rows specific column.

Hope you find it useful.
Happy AXing,
Alper.




Hiç yorum yok:

Yorum Gönder