Blog Listem

24 Haziran 2013 Pazartesi

AXAPTA - cacheAddMethod ile display methodları hızlandırmak

Axapta normalde bir kayıttaki display methodları dolaşırken defalarca ard arda çağırabilir. Bu display method sayısı fazla olduğunda can sıkıcı hale gelebilir.  cacheAddMethod ile display methodlar serverda bir arabellekte saklanır ve oldukça güzel performans artışı sağlanabilir. Bu method "datasource"un init methodunda super sonrası çağrılabilir. Yanlış yerde çağrıldığında donmalara sebep olabiliyor. Ayrıca bu display methodların "tablo" display methodu olması gerekiyor.
Bu yöntem aynı zamanda edit methodlar için de çalışıyor.

public void init()
{
    super();
    this.cacheAddMethod(tableMethodStr(B_CallTrack, CustomerName));
    this.cacheAddMethod(tableMethodStr(B_CallTrack, EndUserWarrantyStart));
    this.cacheAddMethod(tableMethodStr(B_CallTrack, ExtendedWarrantyDate));
    this.cacheAddMethod(tableMethodStr(B_CallTrack, ModelGroupID));
}


 Ara belleğe alınan display/edit methodlar update methodu çalışmadan güncellenmezler. Update methodundan önce güncellenmeleri gerektiğinde cacheCalculateMethod u kullanabilirsiniz:
B_CallTrack_DS.cacheCalculateMethod(tableMethodStr(B_CallTrack, EndUserWarrantyStart));
 

AX 2012 için güncelleme:

AX 2012'de bu işlem çok daha basit. SysClientCacheDataMethodAttribute kullanarak bu iş basitçe halledilebiliyor. Opsiyonel olarak bir parametre eklenmiş. True gönderildiğinde yukardaki update meselesi de çözülmüş oluyor. Ancak bu şekilde tanımlama yapıldığında display/edit metod tüm formlarda cache içine alınıyor. Eğer her formda ayrı ayrı yapılmak isteniyorsa eski yöntem de halen geçerli.


[SysClientCacheDataMethodAttribute(true)]
display name dispCustName()
{
    return CustTable::find(this.CustAccount).Name;
}
 

AXAPTA - Display method yetki kontrolü

//BP Deviation documented
display CustName customerName()
{
    CustName    custName    = '';
    DictTable   dictTable   = new DictTable(tablenum(CustTable));
    ;

    if (dictTable.rights() >= AccessType::View)
    {
        custName = CustTable::find(this.CustAccount).Name;
    }

    return custName;
}

6 Haziran 2013 Perşembe

AXAPTA - Günün başı ve sonu

     info( strfmt("%1 --- %2", datetobeginUtcDateTime( today() , DateTimeUtil::getUserPreferredTimeZone() ) ,
        datetoendUtcDateTime( today(), DateTimeUtil::getUserPreferredTimeZone() )));