Skip to main content

Cache enabled display field not refreshing issue in Operations


Cache enabled display field not refreshing issue in Operations

Scenario: I have created a display method which is a calculated field called "grossweight". This simply adds two fields net weight+tara weight. Added this display method to form grid. Whenever i change value in grossweight or gross weight, display field should be updated accordingly.  This works fine when you have not enabled cache on the display field. Cache is enabled in order to improve the performance of the form.

Issue here is when we enable cache our display method stopped refreshing with the new values. In my case when changing netweight value grossweight display field was not updated. This is a standard behaviour but from a user perspective this is not acceptable. 

Solution:
On modified of fields gross weight and net weight call cacheCalculateMethod. This will recalculate the display field value hence requirement is achieved. Also performance is not affected as we call the methods only in modified of the two fields.

Code sample:

[FormDataFieldEventHandler(formDataFieldStr(WHSPhysDimUOMPerVariant, WHSPhysDimUOMPerVariant, TaraWeight), FormDataFieldEventType::Modified)]
    public static void TaraWeight_OnModified(FormDataObject sender, FormDataFieldEventArgs e)
    {
        FormDataSource formDataSource = sender.datasource();
        formDataSource.cacheCalculateMethod(#GrossWeight);
    }

[FormDataFieldEventHandler(formDataFieldStr(WHSPhysDimUOMPerVariant, WHSPhysDimUOMPerVariant, NetWeight), FormDataFieldEventType::Modified)]
    public static void NetWeight_OnModified(FormDataObject sender, FormDataFieldEventArgs e)
    {
        FormDataSource formDataSource = sender.datasource();
        formDataSource.cacheCalculateMethod(#GrossWeight);
    }

Please note that we need to pass method display method name as parameter. In the example grossweight is the display method name.

Comments

Popular posts from this blog

Number sequence with existing module and new module

Number sequence customization in Dynamics 365 Create a number sequence in a standard module Step 1: Create new EDT Step 2: Add a new code block to the loadModule in the NumberSeqModuleXXX class Step 3: Add a new static method to the parameters table of the module to get the number sequence reference Using Extension [ExtensionOf(classStr(NumberSeqModuleCustomer))] final class NumberSeqModuleCustTest_Extension { protected void loadModule() { NumberSeqDatatype datatype = NumberSeqDatatype::construct(); next loadModule(); datatype.parmDatatypeId(extendedTypeNum(TestId)); datatype.parmReferenceHelp(literalStr(‘Test ID’)); datatype.parmWizardIsContinuous(false); datatype.parmWizardIsManual(NoYes::No); datatype.parmWizardIsChangeDownAllowed(NoYes::No); datatype.parmWizardIsChangeUpAllowed(NoYes::No); datatype.parmSortField(1); datatype.addParameterType(NumberSeqParameterType::DataArea, true, false); this.create(datatype); } } [ExtensionOf(tableStr(CustParameters...

[D365/AX7] How to: Create and Use number sequence

[D365/AX7] How to: Create number sequence Posted on January 7, 2018 Updated on January 11, 2018 Number sequences are used to generate readable, unique identifiers for master data records and transaction records that require identifiers. A master data record or transaction record that requires an identifier is referred to as a reference. On this example, we are going to create a new number sequence for customer group. Create a new class that extends the NumberSeqModuleCustomer class and then create the method loadModule_Extension and add the following code: class NumberSeqModuleCustomer_CFS extends NumberSeqModuleCustomer {         public void loadModule_Extension()         {                 NumberSeqDatatype datatype = NumberSeqDatatype::construct();          ...

CREATE AND POSTING PURCHASE ORDER THROUGH X++ IN AX 2012 DYNAMICS AX

CREATE AND POSTING PURCHASE ORDER THROUGH X++ IN AX 2012 DYNAMICS AX   static void PurchOrderCreate(Args _args)   { NumberSeq numberSeq; PurchTable purchTable; PurchLine purchLine; ttsBegin; numberSeq = NumberSeq::newGetNum(PurchParameters::numRefPurchId()); numberSeq.used(); purchTable.PurchId = numberSeq.num(); purchTable.initValue(); purchTable.initFromVendTable(VendTable::find('1001')); if (!purchTable.validateWrite()) { throw Exception::Error; } purchTable.insert(); purchLine.PurchId = purchTable.PurchId; purchLine.ItemId = '1205'; purchLine.createLine(true, true, true, true, true, true); ttsCommit; info(strFmt( "Purchase order '%1' has been created", purchTable.PurchId)); } .............................................. static void PurchOrderPost(Args _args) { PurchFormLetter purchFormLetter; PurchTable purchTable; purchTable = PurchTable::find('000409'); purchFormLetter = PurchFormLetter::construct( D...