“Go to the Main Table Form” differences between Axapta 2.x and Dynamics AX 4

 
Good morning,
 
The "Go To Main Table Form" functionality in Axapta used to filter on the child form for the calling record, as well as update as the parent form changed record. In AX 4 that is no longer the case, though child forms opened through menuitem buttons do still behave this way. What happens is that in AX 4, the calling record is no longer passed in args.record() (therefore, linkActive() is no longer triggered on the child datasource); the args members lookupField() and lookupValue() are populated instead with the calling control’s information.
 
If for some reason you want to get back to the jumpref() behavior of Axapta 2.x, add the following code to the SysSetupFormRun class new() method. You may want to create a per-user parameter to enable/disable this feature:
 
void new(Args args)
{
    (…)
    SysSetupFormRun formRun;
    ;
 
    if (!args.record() && args.lookupField()
        && SysUserInfo::find().MyNewJumpRef2xNoYesParameter
        && SysDictClass::is(args.caller(), classnum(SysSetupFormRun)))
    {
        formRun = args.caller();
        if (formRun.objectSet() && formRun.objectSet().cursor())
        {
            args.record(formRun.objectSet().cursor());
        }
    }
    
    super(args);
    (…)
}
 
Note: See SysFormRun::isCalledFromJumpRef(_args, _field) for example
 
Note2: This implementation is very flawed and doesn’t work on records that contain two or more fields with similar relationships (such as the Ledger Accounts on Item Groups). This should instead be coded by adding a QueryBuildDynalink linking the parent and child forms together through the related fields. I leave the details up to the reader.
This entry was posted in Dynamics Ax 4.0x. Bookmark the permalink.