grid etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
grid etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

5 Şubat 2016 Cuma

AXAPTA - Kullanıcının grid başlığından filtreyi değiştirmesini engelleme

SysQuery::findOrCreateRange(InventDim_DS.query().dataSourceTable(tablenum(InventDim)),fieldnum(InventDim,InventSiteId)).status(RangeStatus::Locked);

22 Ocak 2016 Cuma

Axapta - Neden bazen MultiSelectionHelper bazen klasik okuma yöntemi?

Bir formda gridde seçili kayıtları okumak için klasik yöntem aşağıdaki gibidir:

 c = CustTable_DS.getFirst(true);
 while (c.RecId != 0)
 {
      info(c.Name);
      c = CustTable_DS.getNext();
 }


Ancak bu yöntemin bir sakıncası vardır. Bu yöntemle kayıt okuduğunuz zaman eğer ki kullanıcı listeden birkaç kayıt işaretlemeyip sadece üzerinde durduğu kaydı işlemek isterse o kayıt malesef atlanır. Bunu bertaraf etmek için aşağıdaki eklemeyi yapmak gerekir:


c = CustTable_DS.getFirst(true);
noSelected = true;
while (c.RecId != 0)
{
     noSelected = false;
     info(c.Name);
     c = CustTable_DS.getNext();

}
if  (noSelected)
    info(CustTable.Name);

MultiSelectionHelper sınıfı bu sıkıntıyı bertaraf eder:

 MultiSelectionHelper helper = MultiSelectionHelper::construct();
CustTable c;
;

helper.parmDatasource(CustTable_ds);

c = helper.getFirst();
while (c.RecId != 0)
{
      info(c.Name);
      c = helper.getNext();

}

Ancak MultiSelectionHelper sınıfının da bir dezavantajı vardır. Eğer ki kullanıcı gridde kayıtları sıralamak isterse ve o sıraya göre liste almak isterse yine yukarıdaki klasik yöntemi kullanmak gerekir zira MultiSelectionHelper sınıfı kullanıcının yaptığı sıralamayı malesef dikkate almaz.

MultiselectionHelper sınıfının bir sınıf içinde kullanılması:

public static void main(Args _args)
{
    SMAServiceOrderTable    serviceOrder;
    MultiSelectionHelper    helper;
    FormRun                 caller = _args.caller();
    FormDataSource          SMAServiceOrderTable_DS;
  
    SMAServiceOrderTable_DS = caller.dataSource();
    helper = MultiSelectionHelper::createFromCaller(caller);
    helper.createQueryRanges(SMAServiceOrderTable_DS.queryBuildDataSource(),fieldStr(SMAServiceOrderTable,RecId));
    
    serviceOrder = helper.getFirst();
    
    while(serviceOrder)
    {
        info(strFmt("%1",serviceOrder.RecId));
        serviceOrder = helper.getNext();
    }
}

30 Haziran 2015 Salı

Axapta - Grid kolonunda resim görüntülemek

Örnek tablomuzda eğer RefRecId değeri dolu ise OK değilse Cancel buton resmi göstereceğiz. Bunun için tablomuza bir display method yazıyoruz:

 display ImageRes dispIsOKImg(gzrForeSightOrderLines l)
 {
   #resAppl;
   return l.RefRecId == 0 ? #ImageError : #Image_OK;
 }


Gridinize bir Window kontrol ekleyin. Örnekteki ismi LineOK olsun. Kontrolün AlignControl özelliğini No yapın. DataMethod'a display methodumuzun adı (burada dispIsOKImg), Datasource alanına da tablomuzun adını (burada gzrForeSightOrderLines) yazıyoruz. Height ve Width alanlarına da uygun değerler verin. Ben 14 yazdım. Eğer resimleriniz çok büyükse ImageMode değerini Size to fit yapabilirsiniz.

Formu çalıştırdığınızda resimlerin sık  sık yenilendiğini göreceksiniz. Bunu engellemek için resimleri formu ilk çalıştırırken yüklemek gerekir:

ClassDeclaration metodu:
ImageList                           imageList;

Init metodu:
#resAppl
imageList = new Imagelist(Imagelist::smalliconWidth(),Imagelist::smalliconHeight());
imagelist.add(new image(#Image_OK));
imagelist.add(new image(#ImageError));
LineOK.imageList(imageList);


Display metoddaki return satırını aşağıdakiyle değiştirin:

return l.RefRecId == 0 ? 1 : 0;

resAppl makrosunun içindeki imaj listesini görmek/güncellemek için AOT->Macros->ResAppl->Düzenle.

Sistemde kayıtlı tüm imaj dosyalarını görmek için Araçlar->Geliştirme araçları->Katılaştırılmış kaynaklar (Bu terim türkçeye gerçekten çok tuhaf çevrilmiş, orijinalinde Embedded resources yazıyor ki bu çok daha anlamlı, gömülü kaynaklar olmalıydı).

4 Temmuz 2013 Perşembe

AXAPTA - Gridde bir kayda hızlı konumlanmak

Kayda konumlanmak için findrecord ve findvalue methodları çok yavaş. Bunun yerine filter kullanılabiliyor ancak o zaman da ekranda sadece istenen kayıtlar görüntülenebiliyor. Eğer tüm kayıtlar görüntülensin ve cursor de istediğimiz kayıtta konumlansın istiyorsanız  bir blogda rastladığım orijinal lookup formlarında da kullanılan aşağıdaki yöntemi kullanabilirsiniz:

element.args().lookupField(fieldnum(SMAServiceOrderTable, ServiceOrderId));
element.args().lookupValue(_order.ServiceOrderId);
 

SMAServiceOrderTable_ds.executeQuery();

Not: Arama için kullandığınız alanın indeksli olması gerektiğini unutmayın!..