29 Şubat 2012 Çarşamba
Tablo alanları arasında dinamik gezinmek.
Merhaba,
Birbirinden türetilmiş tablolarda veya dinamik olarak oluşturduğunuz ve alan adını bilmediğiniz tablolarda kullanabileceğinizi bir kod örneğini paylaşmak isterim.
Öncelikle kodu anlamaya başlamadan önce bazı şeyleri açıklayalım.
DictTable parametre olarak gönderdiğiniz tablo numarasının bağlı olduğu tablo objesi ile ilgili bilgilere ulaşmanızı sağlayan bir sınıf.
DictField parametre olarak gönderdiğimiz tablo numarası ve alan numarasının bağlı olduğu tablo alanı ile ilgili bilgilere ulaşılmasını sağlayan sınıf.
Anytye değişken tipi ile okuma yapacağımız tablonun alanlarının veri türü her ne olursa olsun çevirme işlemine tabi tutmadan saklamamızı sağlıyor.
Örnekte müşteriler tablosunun bir kaydı için alanları gezip sistem alanı olmayan alanların önce alan adını sonra = işareti ekleyerek alanın değerini info ile yazdırıyoruz.
DictTable dictTable = new DictTable(tableNum(CustTable));
DictField dictField;
int counter, fieldId;
CustTable custTable;
anytype value;
select firstonly custTable;
for (counter = 1; counter <= dictTable.fieldCnt(); counter++)
{
fieldId = dictTable.fieldCnt2Id(counter);
dictField = new DictField(tableNum(CustTable), fieldId);
if (!dictField.isSystem())
{
value = custTable.(fieldId);
if(value)
{
info(strFmt('%1 = %2', dictField.label(), any2str(value)));
}
}
}
Dinamik tablo yapılarında kullanabileceğiniz bu yapıyı faydalı bulduğunuzu umarım.
Bol AX'lı günler,
Alper.
DictTable dictTable = new DictTable(tableNum(CustTable));
DictField dictField;
int counter, fieldId;
CustTable custTable;
anytype value;
select firstonly custTable;
for (counter = 1; counter <= dictTable.fieldCnt(); counter++)
{
fieldId = dictTable.fieldCnt2Id(counter);
dictField = new DictField(tableNum(CustTable), fieldId);
if (!dictField.isSystem())
{
value = custTable.(fieldId);
if(value)
{
info(strFmt('%1 = %2', dictField.label(), any2str(value)));
}
}
}
Dinamik tablo yapılarında kullanabileceğiniz bu yapıyı faydalı bulduğunuzu umarım.
Bol AX'lı günler,
Alper.
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.
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.
22 Şubat 2012 Çarşamba
Error 29506 while installing SQL server management studio express 2005
Merhaba,
Windows 7 üzerinde SQL server management studio 2005 versiyonunu yüklemeye çalıştığınızda hata kodu olarak 29506 alıyorsanız aşağıdaki adımları izleyin.
Windows 7 üzerinde SQL server management studio 2005 versiyonunu yüklemeye çalıştığınızda hata kodu olarak 29506 alıyorsanız aşağıdaki adımları izleyin.
- Başlat -> Programlar -> Donatılar -> Komut Sistemi ' ne sağ tıklayıp yönetici olarak başlatın.
- SQL in kurulum dosyasının olduğu klasöre konumlanın.
- Kurulum dosyasının adını yazarak kurulumu başlatın.
When I try to install SQL server management studio express for 2005, then I got the 29506 error. To pass this error click start menu->accessories, right click on 'Command Prompt' and select run as administrator. on the command window, navigate to the path where you have the installation file. Now just type the file name and hit enter it will start the installer.
Alper.
Kaydol:
Kayıtlar (Atom)


