Extensibility home page
Dynamics 365 for Finance and Operations is now being licensed as Dynamics 365 Finance and Dynamics 365 Supply Chain Management. For more information about these licensing changes, see Dynamics 365 Licensing Update.
Dynamics 365 Finance, Supply Chain, and Commerce are extensively customized by partners, value added resellers (VARs), and even some customers. The ability to customize the product is a strength that has historically been supported through overlayering of the application code. The move to the cloud, together with more agile servicing and frequent updates, requires a less intrusive customization model, so that updates are less likely to affect custom solutions. This new model is called extensibility and has replaced customization through overlayering.
Extensibility is the only customization framework in Finance, Supply Chain, and Commerce. Overlayering isn't supported.
These introductory topics contain general information about customization. This information includes information about when the transition occurs from customization through overlayering to a purely extension-based model. These topics also explain how to log extensibility requests to Microsoft, and provide answers to frequently asked questions (FAQ).
Read What's new or changed for extensibility for extensibility-related updates that have been made since July 2017.
The topics in this section will help you start to build extensions. They will also help you migrate solutions that are currently based on overlayered code to extension-based solutions. This section includes hands-on labs that walk you through simple customizations.
- Migrate from overlayering to extensions
- Customize model elements through extension
- Customize through extension and overlayering
Fundamentals on extensions
This section includes fundamentals, principles, and practices for making extensions. The guiding principles in these topics discuss how customization must be approached through extensions. These principles include naming guidelines. Additionally, these topics discuss the foundation framework, such as extensions and chain of command.
- Intrusive customizations
- Class extension model in X++
- Class extension - Method wrapping and Chain of Command
- Naming guidelines for extensions
- Relax model restrictions to refactor overlayering into extensions
How do I create extensions?
This section includes "How do I?" topics that explain how to customize specific object types or code. Most of these topics are brief and to the point. Because there are many topics here, it might be practical to search for a specific topic.
- Register subclasses for factory methods
- Respond by using EventHandlerResult
- Extend the RunBase class
- Customize application startup by using delegates
- Modify existing fields in a table through extension
- Add fields to tables through extension
- Add indexes to tables through extension
- Add relations to tables through extension
- Modify table properties through extension
- Add methods to tables through extension
- Perform business actions throughout the lifecycle of table records
- Add a new data source to a form
- Change the captions of forms through extension
- Modify the properties of form controls through extension
- Extending decimal point precision for selected data types
- Add new inventory dimensions through extension
- Extend the list of Electronic reporting (ER) functions
- Customize App Suite reports by using extensions
Information about customization is also shared through blogs where various topics are discussed. This section includes reference to some of these blogs.
- Extending Dynamics 365 for Finance and Operations
- Extension methods
- Extensible base enumerations
- Static event subscription
- Subscribing to onValidatingWrite
- Embrace the extensions mindset with Dynamics 365 for Finance and Operations
- Extensible X++ - Method Signatures
How do I create an extensible solution?
This section includes some best practices on how to create/make your solution extensible, so that consumers of your code can extend your solution.
- Write extensible code
- Extended data types
- Extensible enums
- Attributes that make methods extensible
When you make your solution extensible, you also help guarantee that you won't break those extension points later. For pointers that can help you avoid breaking your consumers, see Breaking changes.