Alfasith AX

Alfasith AX
اللَّهُمَّ انْفَعْنِي بِمَا عَلَّمْتَنِي، وَعَلِّمْنِي مَا يَنْفَعُنِي، وَزِدْنِي عِلْمًا

Tuesday, June 21, 2022

Overlayer/Override a methods in D365

 Hi,


Overlayer of standard code to execute your methods is not possible literally, whereas there are several other ways to override.

Procedure.

1. Class to register the override you created.

2. Call the registered call on the eventHander.

Registering Override method.

/// <summary>
/// Custom class created by MAI on 6/21/2022
/// to register the <c>Purchtable</c> form.
/// </summary>
public class PurchTableEventHandler
{
    /// <summary>
    /// Post event handler for <c>Purchtable</c> Initialized event.
    /// </summary>
    /// <param name=“_sender”></param>
    /// <param name=“_e”></param>
    [FormDataSourceEventHandler(formDataSourceStr(PurchTable, PurchTable), FormDataSourceEventType::Initialized)]
    public static void PurchTable_OnInitialized(FormDataSource _sender, FormDataSourceEventArgs _e)
    {
        var overrides = PurchTableFormExtensionOverrides::construct();
 
        _sender.object(fieldNum(PurchTable, CashDisc)).registerOverrideMethod(methodStr(FormDataObject, validate),
            methodStr(PurchTableFormExtensionOverrides, CashDisc_OnValidate), overrides);
    }
}

Calling the Registered methods.

/// <summary>
/// Calling override classes <c>PurchTable</c> data source field methods.
/// </summary>
public class PurchTableFormExtensionOverrides
{
    protected void new()
    {
    }
 
    /// <summary>
    /// Constructs a new instance of <c>PurchTableFormExtensionOverrides</c> .
    /// </summary>
    /// <returns>
    /// new of  <c>PurchTableFormExtensionOverrides</c> class.
    /// </returns>
    public static PurchTableFormExtensionOverrides construct()
    {
        return new PurchTableFormExtensionOverrides();
    }
 
 
    /// <summary>
    /// Checks whether <c>CashDisc</c> is valid.
    /// </summary>
    /// <param name = "_targetField"> The <c>FormDataObject</c> where the Validate is triggered.</param>
    public boolean CashDisc_OnValidate(FormDataObject _targetField)
    {

        boolean ret = _targetField.validate();
 
        if (ret)
        {
            //Your code
        }
 
        return ret;
    }
}

Regards,



Calling custom method of other layer objects created in form level in D365

 Hi,


Using an event handler, we cannot call the custom methods created in another later / model/ ISV object. 

On calling formRun.CreateDeliveryNote()  throws the error ‘FormRun doesn't have the method CreateDeliveryNote.

FormDataSource purchTable_ds = sender.datasource();
FormRun formRun = purchTable_ds.formRun();
formRun.CreateDeliveryNote() ;

Conclusion is to use only COC not eventhandler

[ExtensionOf(formDataFieldStr(PurchTable, PurchTable, DeliveryDate))]
final class PurchTableDeliveryDateField_Extension
{
    public void modified()
    {
         next modified();
         element.CreateDeliveryNote(); // Custom method from Other Later / Model 
    }
}


Regards

How to invoke and iterate List as Contract methods in AX 2012/ D365

Hi, Public void performContractIterate(ClassContainsListAsContract    _ListCarryClass) { List contractFieldList = new List(Types::Class); ...