Thursday, May 14, 2015

Cache display methods in AX 2012

Display methods must be written at the table level

However, developers often write display or edit methods to perform some calculations and then bind them on form's controls to allow user to display or edit values in those bounded controls. 

Display/Edit methods create excessive client-server round trips and impact on product performance. And if there are  display methods added on the form it will make 5 client-server round trips, one for each method.

Options 1: CacheAddMethod
This issue can be addressed by using the CacheAddMethod on the FormDataSource. This method enables the form to calculate all of the display methods in single round trip to the server rather making individual calls.

Let's assume you have added edit method on ProjTable form to show some calcuated dates. Override init() method under ProjTable datasource and write following code;
public void init() {    super(); 
ProjTable_ds.cacheAddMethod(tableMethodStr(ProjTable, projectCompletedDate), false); }
Options 2: SysClientCacheDataMethodAttribute
AX2012 also allows to use SysClientCacheDataMethodAttribute attribute in the display method declaration. Then, forms should cache such methods automatically.
Attribute's constructor accept one optional parameter (_updateOnWrite), which corresponds to the second parameter of cacheAddMethod().
Example:
[SysClientCacheDataMethodAttribute(true)]
display DirPartyType type()
{...}
[SysClientCacheDataMethodAttribute] public display EcoResProductTitle title()
{    return inventTable.product().title(); }
Options 3: CacheDataMethod peoperty on Form's control
AX 2012 introduces a new feature called the Declarative Display caching. This allows you to enable caching by setting the form control property CacheDataMethod with either of three values; Yes, No and Auto

A lot more on this topic is here https://msdn.microsoft.com/en-us/library/aa596691.aspx

Happy Daxure!ing