Engineering

X++ and custom software development for Dynamics 365 F&O

We build the capabilities standard Dynamics 365 Finance & Operations does not cover — as clean, upgrade-safe X++ extensions and connected .NET or Power Platform components that your team can maintain.

Custom Software Development
SalesFormLetter_CF_Extension.xpp 1 [ExtensionOf(classStr(SalesFormLetter))] 2 final class SalesFormLetter_CF_Extension 3 { 4 public void run() 5 { 6 + next run(); 7 + CFInvoiceEvents::publish(this); 8 } 9 }

The challenge

Customisation is a long-term commitment

Every line of custom code in D365 F&O runs through every Microsoft service update for as long as you use the system. Code that ignores the extension model, duplicates standard logic or hides business rules in forms becomes the reason updates are feared and performance degrades.

Codefine writes X++ the way the platform expects — extensions instead of overlayering, Chain of Command at well-chosen points, set-based data access, SysOperation for batch, and clear models — and we write it so the next developer can understand it.

Capabilities

What we cover in Custom Software Development

  • 01

    Extensions & Chain of Command

    Class, table and form extensions with Chain of Command and event handlers placed where they are stable across updates.

  • 02

    Data entities & services

    Custom and extended data entities, OData exposure and custom JSON services for logic-heavy integrations.

  • 03

    Batch & SysOperation

    Long-running processes as SysOperation services with controllers, contracts and task bundling for parallel processing.

  • 04

    Workflows & business events

    Custom workflow types, approvals and business events that notify other systems without polling.

  • 05

    Reports & documents

    SSRS report extensions, report data providers and electronic reporting configurations where they fit better.

  • 06

    .NET & Power Platform

    C# libraries used from X++, Azure Functions and Power Platform components when logic belongs outside the ERP.

How the engagement works

A clear sequence, agreed up front

  1. Technical design

    Agree the requirement, the standard behaviour it touches and the extension points we will use.

  2. Build

    Develop in short iterations with code reviews and best-practice checks on every change.

  3. Test

    Developer testing, automated checks where practical, and support for functional acceptance testing.

  4. Release

    Package, deploy through your pipeline and document what changed and why.

Technical approach

Our approach to Custom Software Development

Extend at the right seam

Chain of Command lets us wrap public and protected methods, and event handlers let us react to platform events. The skill is choosing seams that Microsoft keeps stable and that express intent clearly. We prefer a small number of well-placed extensions over many fragile ones.

Set-based by default

// Prefer one set-based statement over a loop of single-record updates.
update_recordset salesLine
    setting CFRequiresReview = NoYes::Yes
    where salesLine.SalesStatus == SalesStatus::Backorder
       && salesLine.ShippingDateRequested < today();

Row-by-row logic is sometimes required — for example when business logic must run per record — but it should be a decision, not a habit. We check which methods are overridden, because they can turn set-based statements back into row-by-row operations.

Batch work that scales

Processes that handle thousands of records run as SysOperation services. Where the work can be split, we bundle it into tasks that the batch framework can execute in parallel across batch threads, and we keep each task’s transactions short to avoid blocking.

Benefits

What changes for your organisation

  • Updates without fear

    Extension-based code keeps compatibility with Microsoft's continuous service updates.

  • Maintainable logic

    Business rules live in classes with clear responsibilities, not scattered across forms.

  • Performance by design

    Set-based data access and parallel batch design are the default, not an afterthought.

  • Code you own

    Source, documentation and knowledge stay with you.

FAQ

Questions about Custom Software Development

What kind of D365 F&O customisations do you build?

X++ extensions to tables, classes and forms, new modules of functionality, custom data entities and services, SysOperation batch processes, workflows, business events, reports and connected .NET or Power Platform components.

How do you keep custom code maintainable?

We follow Microsoft's extension model, keep business logic in classes, use clear naming and model structure, review every change and document the reasoning behind non-obvious decisions.

Can you review existing X++ code?

Yes. A code review covers maintainability, upgrade safety, performance patterns and alignment with D365 F&O development practices, with prioritised recommendations.

Do you also migrate Dynamics AX customisations?

Yes. Overlayered AX code has to be re-implemented as extensions in D365 F&O. We analyse which customisations are still needed, which standard features now replace them and how to rebuild the rest.

Related services

Discuss Custom Software Development with Codefine

Describe the situation in a few lines — what you run, what is not working and what has to happen next. We reply with concrete questions and a suggested first step.