Search code examples
axaptax++dynamics-365-operationsdynamics-ax7

Is it possible to get element.args() from an extended method in Dynamics 365 for operations


In Dynamics 365 for operations I am trying to use a post-event handler of the init() form method from LedgerTransVoucher to find tableId of:

element.args().dataset()

There is a big switch statement in the method that i want to extend with one more case. What i have done so far is just creating an extension class but i don't really know how to get the data from the extended method

[ExtensionOf(formStr(LedgerTransVoucher))]
final class LedgerTransVoucher_Extension
{
    /// <summary>
    ///
    /// </summary>
    /// <param name="args"></param>
    [PostHandlerFor(formStr(LedgerTransVoucher), formMethodStr  (LedgerTransVoucher, init))]
    public static void LedgerTransVoucher_Post_init(XppPrePostArgs args)
    {
        TableId sourceTable;

        //sourceTable = element.args().dataset();
        //if(sourceTable == tableNum(myTable))
        //{
        //    do something here
        //}
    }
}

to call:

sourceTable = element.args().dataset();

of course doesn't work but i wan't to know if i can somehow retrieve the data from the extended method.

This can be done very easily with customization but i want to do everything i can to use extensions instead.

Any ideas or possible workarounds?


Solution

  • You can try something like this:

    [PostHandlerFor(formStr(LedgerTransVoucher), formMethodStr  (LedgerTransVoucher, init))]
    public static void LedgerTransVoucher_Post_init(XppPrePostArgs args)
    {
        TableId sourceTable;
        FormRun element;
    
        element = args.getThis();
        sourceTable = element.args().dataset();
    
        if(sourceTable == tableNum(myTable))
        {
            do something here
        }
    }
    

    or

    [FormEventHandler(formStr(LedgerTransVoucher), FormEventType::Initialized)]
    public static void LedgerTransVoucher_OnInitialized(xFormRun sender, FormEventArgs e)
    {
        if(sender.args().dataset() == tableNum(myTable))
        {
            do something here
        }
    }