Impulz Technologies LLC

Menu
  • Home
  • About Us
  • Solutions
    • Microsoft Dynamics 365 Finance & Supply Chain Management
    • Microsoft Power Platform
      • Power BI
      • Power Apps
  • Products
    • Impulz Positive Pay
    • Impulz Construction 365
  • Blog
  • Services
    • Application Support And Maintenance
    • ISV Development
    • Project Resources
  • Clients
  • Contact Us

Impulz Technologies LLC

Microsoft Dynamics 365 Finance and Operations: Customization of non-extendable code

  • Home
  • Blog
  • Dynamics 365
  • Microsoft Dynamics 365 Finance and Operations: Customization of non-extendable code
  • October 18, 2022
  • Shahbaz Khan

In Dynamics 365 Finance and Operations customization in standard objects is done through extension-based development. But there are some scenarios where a class method which needs to be customized through CoC (Chain of Command) is having Hookable attribute set as False. In that case you cannot create a CoC of that method.

For example, there is a class with a run method’s Hookable property set as false.

Public class CredManCreditLimitAdjGenerate extends RunBase
{
    [Hookable(false)]
    public void run()
    {
        if (!this.validate())
        {
            throw error("@SYS18447");
        }
    if (deleteExistingLines && CredManCreditLimitAdjTrans::exist(journalId))
        {
            CredManCreditLimitAdjTrans::deleteAllJournalLines(journalId);
        }
    this.processQueryRun();
    }
}

In this scenario the requirement is to execute some logic after this class’s run method execution is done. If it was a Hookable[true] method then you can simply create an extension of the class CredManCreditLimitAdjGenerate, create a CoC of run() and perform your new logic after the next call of run method. But in this case, you cannot do so.

In order to achieve this requirement technically you just create a new class CredManCreditLimitAdjGenerate_Impulz and set it as a child of CredManCreditLimitAdjGenerate class. Then override run() and include all the parent code with your required logic in it. Below is the code:

Public class CredManCreditLimitAdjGenerate_Impulz extends CredManCreditLimitAdjGenerate
{
    [Hookable(false)]
    public void run()
    {
        if (!this.validate())
        {
            throw error("@SYS18447");
        }
        if (deleteExistingLines && CredManCreditLimitAdjTrans::exist(journalId))
        {
            CredManCreditLimitAdjTrans::deleteAllJournalLines(journalId);
        }
        this.processQueryRun();

        //Write your required new logic here
    }
}

The additional thing you have to do is to change the reference of the original class to your new class by initializing its object or if the class is called from a menu item/button, then simply hide the menu item/button and add a new one with you new class reference.

Using the above approach you can also completely remove the standard run method logic and just add new logic which cannot be possible in case of CoC as you do have to call next() before or after new logic unless the method has the attribute Replaceable[true]. Replaceable[True] allows to skip next call in the extended method.

Note: If the class is private or internal or final then it cannot be extended so in that case you have to entirely copy the class with new name and change the reference in code.

Posted in Dynamics 365Tagged D365, D365 FO Customization, D365 FO Extensions, Development, Dynamics 365 Finance and Operations, X++

Recent Posts

  • Microsoft Dynamics 365 Finance and Operations: Importing deployable package to UAT/Production using Lifecycle Services
  • Postman Best Practices for Microsoft Dynamics 365 Finance and Supply Chain Management
  • Microsoft Dataverse is not a database
  • Connect the Angular with Microsoft Dataverse – Part 3 of 3
  • Connect the Angular with a Microsoft Dataverse using Web API – Part 2 of 3

Recent Comments

No comments to show.

Archives

  • April 2023
  • February 2023
  • January 2023
  • October 2022
  • September 2022
  • August 2022
  • July 2022

Categories

  • Business
  • Dynamics 365
  • Microsoft Azure
  • Microsoft Dataverse
  • Microsoft Power Platform
  • Power BI
  • Uncategorized

Latest Post

  • Microsoft Dynamics 365 Finance and Operations: Importing deployable package to UAT/Production using Lifecycle Services
  • Postman Best Practices for Microsoft Dynamics 365 Finance and Supply Chain Management
  • Microsoft Dataverse is not a database
  • Connect the Angular with Microsoft Dataverse – Part 3 of 3
  • Connect the Angular with a Microsoft Dataverse using Web API – Part 2 of 3

Tags

Application integration with D365 Azure Azure AD Banking D365 D365 code management D365 FO D365 FO Azure DevOps D365 FO Customization D365 FO Extensions D365 FO VM Deployment D365 MPOS Retail D365FO Excel Export to SharePoint Dataverse Dataverse integration Debugging Development dev to UAT Dynamics 365 Finance and Operations Dynamics 365 FO Security Dynamics 365 with git Lifecycle Services Microsoft .Net Microsoft Azure Microsoft Dataverse Microsoft Dynamics 365 Microsoft Dynamics 365 Commerce Microsoft Dynamics 365 Finance and Operations Microsoft Dynamics 365 Retail MPOS Microsoft Dynamics 365 Retail MPOS customization Microsoft Dynamics 365 version control Model Driven Apps OAuth 2.0 Package deployment Positive pay Postman Power Apps Power BI Power Platform Reporting Safe pay SharePoint Virtual Machine Web APIs X++
© Impulz Technologies - All right reserved.