Skip to main content

Conditionally Hiding Menu Items in D365 FinOps Menus Without Using Feature Keys

In Microsoft Dynamics 365 Finance and Operations (D365 F&O), menu items are the links that can be clicked on to access forms, reports, classes, jobs, and queries. Feature keys are typically used to control the visibility of menu items based on user licenses. However, there are scenarios where you might want to hide menu items conditionally without relying on feature keys. 

This can be accomplished by extending the 'SysMenuNavigationObjectFactory' class and modifying the checkAddSubMenu(...) method. 

Suppose we want to hide the Vendor payment journal menu item under Accounts payable > Payments > Vendor payment journal

Steps

1. Create an extension of the SysMenuNavigationObjectFactory class

[ExtensionOf(classStr(SysMenuNavigationObjectFactory))]
internal final class SysMenuNavigationObjectFactory_PS_Extension
{

}

2. Create a Chain of Command (CoC) for the checkAddSubMenu method

[ExtensionOf(classStr(SysMenuNavigationObjectFactory))]
internal final class SysMenuNavigationObjectFactory_PS_Extension
{
    protected boolean checkAddSubMenu(SysDictMenu _rootMenu, SysDictMenu _subMenu)
    {
        boolean isVisible = next checkAddSubMenu(_rootMenu, _subMenu);

        isVisible = isVisible && this.checkMyConditionsForMenuItem(_subMenu.name());       

        return isVisible;
    }

}

3. Add your conditional logic to control the visibility of the menu item  

[ExtensionOf(classStr(SysMenuNavigationObjectFactory))]
internal final class SysMenuNavigationObjectFactory_PS_Extension
{

    protected boolean checkAddSubMenu(SysDictMenu _rootMenu, SysDictMenu _subMenu)
    {
        boolean isVisible = next checkAddSubMenu(_rootMenu, _subMenu);

        isVisible = isVisible && this.checkMyConditionsForMenuItem(_subMenu.name());    

        return isVisible;
    }

    private boolean checkMyConditionsForMenuItem(str _menuItem)
    {
        boolean isVisible = true;

        switch (_menuItem)
        {
            case menuItemDisplayStr(LedgerJournalTable5):
                // Add your logic to control the visibility here
                isVisible = false;
                break;
        }

        return isVisible;
    }
}

While feature keys are a powerful tool for controlling menu item visibility, there are situations where conditional hiding without relying on them is necessary. By leveraging  this X++ code, you can achieve flexible and dynamic menu item visibility in D365 F&O.

Comments

Popular posts from this blog

User Security Governance (Preview) feature in D365 FO

Let's take a first look at User security governance . It is the latest set of features in the D365F&O 10.0.43 update which provides useful tools to System administrators for role management, licenses auditing, enhanced audit trails and versioning, supported with some useful very useful reports around license usage, separation of duties violations etc. Key aspects of this feature include: Role Management: Improved tools for creating, modifying, and managing user roles. Audit Trails: Enhanced tracking of changes made to security settings, helping administrators monitor and review security configurations. Compliance: Tools to ensure that security settings comply with organizational policies and regulatory requirements. Feature management A new feature called (Preview) User security governance has been added to Feature management to control the overall functionality. Navigate to System administration > Security > Security governance to explore all the features. Security analy...

Dynamics 365 eCommerce - Setting up the Development Environment

Microsoft Dynamics 365 Commerce is an evolution of Dynamics 365 Retail, which launched with new and improved capabilities for e-commerce, content management. To begin development and extension on Dynamics 365 eCommerce we'll need to install the following tools on the development machine: VSCODE - https://code.visualstudio.com Node.js - https://nodejs.org   (Currently version 10.x is the main supported version and the MSI installer can be found here : https://nodejs.org/dist/latest-v10.x/   ) Yarn - https://legacy.yarnpkg.com Git - https://git-scm.com/downloads (Note that development on eCommerce is only supported on Windows (as at 18/06/20).) Create a folder in your local drive to hold the e-Commerce site code - 'C:\repos' Open CMD in administrator mode and go to the folder directory you just created and clone the  Microsoft eCommerce repository with the following command:  git clone https://github.com/microsoft/Msdyn365.Commerce.Online.git This may take a while....