Dynamics 365 Finance & Operations – How to use chain of command in X++ (CoC)

Chain of Command (CoC) enables strongly typed extension capabilities of public and protected methods. It is an amazing piece of development capability that allows technical consultants to extend the application avoiding over-layering.

Microsoft has implemented Chain on command across Classes, Tables, Forms, form data source and data field methods.

Before we dive into the Chain of Command methods, remember that in order to use CoC you must declare your class as final, and your methods should always contain the next keyword.

The next keyword behaves like a super, and it will define when your extended logic executes. The next call after your code behaves like a Pre-event handler, your logic executes first, and later on, the logic residing in the original method gets executed. The next call before your code behaves like a Post event handler, your logic executes after the code residing in the original method gets executed.

How to use chain of command to extend the class method

In below screenshot i am using method wrapping or class extension of standard class:

1.We need to se if the method that we want to extend is public or protected, in our exemple modifyVoucherDate is public.

2. Create a final class that extends PurchFormLetter_ApproveJournal class.

3. If we want to costumize the process before the modifyVoucherDate method is executed, write our code before next keyword otherwise after next keyword.

We can use chain of command in tables, forms, form datasource etc in the same way as we use it for class method, the only thing that change is keyword inside ExtensionOf.

  • Ex:
  • [ExtensionOf(classStr(PurchFormLetter_ApproveJournal))] ,
  • [ExtensionOf(tableStr(tableName))]
  • [ExtensionOf(formStr(FormName)]
  • [ExtensionOf(formdatasourceStr(FormName,dataSourceName)]
  • etc…

Benefits Of Using Change Of Commands instead of Old Overlayering approach in Microsoft Dynamics 365 finance and operations

  1. Easy Future upgrades and version enhancements as you are not doing overlayering in standard classes or methods or objects & keeping you separate extension classes.
  2. Neat & Clean development as no need to compile whole code librarary.

I hope this article provided some light about the upcoming changes on Chain of Command for D365 for Finance and Operations Fall Release.

To wrap up, let’s review some of the requirements and considerations while writing CoC methods on form nested concepts extensions:

  1. As any other CoC method, these ones need to call always next to invoke the next in the chain, so it can go all the way to the kernel / native implementation in the runtime behavior. This is equivalent as calling super( ) from the form itself to guarantee the base behavior in the runtime is always executed as expected.
  2. It is NOT possible to add CoC to wrap methods that are not defined in the original base behavior of the nested control type. However, it is possible from the control extension to make a call into this method if it has been defined as public or protected.
  3. It is NOT needed to recompile the module where the original form is defined to have support for CoC methods on nested concepts on that form from an extension.

9 thoughts on “Dynamics 365 Finance & Operations – How to use chain of command in X++ (CoC)

  1. You are so awesome! I don’t think I have read through anything like this before. So nice to discover somebody with some original thoughts on this issue. Seriously.. many thanks for starting this up. This website is one thing that is needed on the web, someone with a bit of originality!

    Liked by 1 person

  2. This design is incredible! You most certainly know how to keep a reader entertained. Between your wit and your videos, I was almost moved to start my own blog (well, almost…HaHa!) Wonderful job. I really loved what you had to say, and more than that, how you presented it. Too cool!

    Like

  3. I know this if off topic but I’m looking into starting my own blog and was curious what all is required to get setup? I’m assuming having a blog like yours would cost a pretty penny? I’m not very web smart so I’m not 100 certain. Any tips or advice would be greatly appreciated. Cheers

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s