Edit

Share via


What's new or changed in Dynamics 365 for Finance and Operations, Enterprise edition platform update 9 (July 2017)

Note

Community interest groups have now moved from Yammer to Microsoft Viva Engage. To join a Viva Engage community and take part in the latest discussions, fill out the Request access to Finance and Operations Viva Engage Community form and choose the community you want to join.

This article describes features that are new or changed in Dynamics 365 for Finance and Operations, Enterprise edition platform update 9. This version was released in July 2017 and has a build number of 7.0.4612.35162.

Go to the Dynamics 365 Roadmap to find supplemental information about new features and learn more about what new features are in development. For information about the bug fixes included in Platform update 9, sign in to Lifecycle Services and view this KB article.

Batch job history clean-up

You can now clean up the history of batch jobs (this functionality was available in Dynamics AX 2012). This feature allows you to delete all or any subset of batch job history by clicking a button. Using a specific form, you can filter the batch job history by different criteria, such as batch job name, company, status, or finished time, and then delete the filtered subset. In addition to keeping the history notes clean and relevant, this feature also provides performance enhancements by eliminating the negative performance impact of having a large volume of entries in history tables, if left unmonitored for long periods of time. Before Platform update 9, you needed to delete the history on a job-by-job basis, which required extra time to cover all the wanted jobs.

Two new forms are added to the System Administration workspace – Batch job history clean-up (regular and custom version).

The regular version of batch job history clean-up allows you to quickly clean all history entries older than a specified timeframe (in days). Any entry that you created prior to <Today> - <History limit> is deleted from the BatchJobHistory table, and from linked tables with related records (BatchHistory and BatchConstraintsHistory). This form has improved performance optimization because it doesn't have to execute any filtering.

Use the custom batch job clean-up form only when you need to delete specific entries. This form allows you to clean up selected types of batch job history records, based on criteria such as status, job description, company, or user. You can add other criteria by using the Filter button.

Change of usage data serialization format

The usage data that is typically stored in the SysLastValue table is no longer serialized in binary format, and instead is serialized in string format. This format change increases the scale, ability to debug the code, and overall reliability of the system, which allows for changes from the application layer to not affect caches. However, due to technical reasons, the upgrade process can't ensure the integrity of the data and system integrity and reliability.

Usage data is automatically reset when you move to Platform update 9. Users lose their usage data as part of this platform update process. This change mostly affects data used for custom queries and saved dialog posting selections. Personalization isn't affected.

The new data format is versioned, backward compatible, and always preserved from Platform update 9 onward for future application and platform releases.

Method wrapping and chain of command

Overview

The functionality of extension classes (also known as class augmentation) has been improved to allow developers to wrap logic around methods defined in a base class. This allows extending the logic of public and protected methods without the need to use event handlers. When you wrap a method, you can also access other public and protected methods and variables of the class. This way, you can start transactions and easily manage state variables associated with your class.

Consider the following situation. A model contains the following code.

class BaseClass1
{
    str method1(int arg) {
        …
    }
}

It's now possible to extend the functionality of method1 using an extension class by reusing the same name to add pre-and post-logic to it.

[ExtensionOf(ClassStr(BaseClass1))]
class BaseClass1_Extension
{
    str method1(int arg) {
        // Part 1
        var s = next method1(arg + 4);
        // Part 2
        return s;
    }
}

Wrapping method1 and the required use of the next keyword creates a Chain of Command (CoC) for the method. Here's what happens when the following code executes.

BaseClass1 c = new BaseClass1();
Print c.method1(33);

The system finds any method that wraps method1. It randomly runs one of these methods, such as method1 of the BaseClass1_Extension class. When the call to next method1() occurs, the system will randomly pick another method in the CoC or call the original implementation if none exists.

Supported versions

The functionality described in this article is available as of Platform update 9 (CoC and access to protected methods and variables).

However, this functionality requires the class being augmented to be compiled on Platform update 9. Because the current releases of the Dynamics 365 for Finance and Operations, Enterprise edition applications have been compiled on Platform update 8 or earlier, you will need to recompile a base package (like Application Suite) on Platform update 9 or newer in order to wrap a method that is defined in that package.

OData batch request size configuration

The default OData batch request size is 1,000 records. Microsoft can now change the size of OData batch requests for customers. Customers must log a support request through Lifecycle Services to the Dynamics Service Engineering team (DSE) to increase the batch size up to a maximum value of 5,000 records. For more information, see Submit service requests to the Dynamics Service Engineering team

System startup performance for virtual machines

Performance issues with loading metadata are resolved, so you shouldn't experience a system freeze when a virtual machine starts.

Note

This issue still occurs on virtual machines that you use as build machines (VMs that have enlistments and compile code).