Licensing Framework for ISVs of Microsoft Dynamics AX

Applies To: Microsoft Dynamics AX 2012 R3, Microsoft Dynamics AX 2012 R2

Independent software vendors (ISVs) can use the SysDictLicenseCode class to manage their licensing requirements for custom modules that they sell.

In versions after Microsoft Dynamics AX 2009, the system no longer enables ISVs to enforce licensing requirements based on the number of concurrent users.


In Microsoft Dynamics AX, discussions of ISV license tracking or enforcement can involve the following three kinds of comparisons:

  • The maximum number of users specified in a Microsoft license compared to the maximum number specified in an ISV license.

  • The number of concurrent users presently logged on to Microsoft Dynamics AX compared to the maximum number of users specified in a license.

  • The current date compared to the expiration date specified in licenses.

The following table discusses the license tracking and enforcement models that are available in various versions of Microsoft Dynamics AX.



Microsoft Dynamics AX 2009

The system tracks concurrent users. The counts are compared to maximum values that are stored in the license files that are issued by Microsoft. If the count of concurrent users exceeds the maximum, warnings are shown or other actions are taken by the system.

The system also takes action if a necessary license has expired.

The system relies on this concurrent users model, and ISVs can also rely on this model.

Microsoft Dynamics AX 2012,
 Microsoft Dynamics AX 2012 Feature Pack

The system no longer uses the concurrent users license count model. Microsoft licenses now have their maximum user count set to 30,000. Any ISV licenses that have a lower value cause warnings to show.

Instead of testing concurrent users, the system now uses the named-user licensing model. The system has access to the list of named users, but ISVs do not.

Licenses can still expire.

Microsoft Dynamics AX 2012 R2

The system uses the named-user licensing model. The ISV licensing model no longer relies on the concurrent user model, and no enforcement is done based on concurrent user counts. Instead the system now makes it possible for ISVs to leverage information from named-user licensing model.

New methods are available on the SysDictLicenseCode class that read the latest calculated counts of user licenses. The information enables ISVs to use the named-user licensing model.

ISVs can use information from the named-user licenses to implement any licensing algorithm they prefer.

Licenses can still expire.

Methods on the SysDictLicenseCode Class

The following table describes the methods on the SysDictLicenseCode class that ISVs can use to enforce licensing.



public server static container 
 (UserLicenseType _userLicenseType)

For the input type of user license, returns a container that has the following information:

  • The count of users that are associated with the license type.

  • The latest date when the count of users was recalculated by the batch job.

public static int 
 (LicenseCodeId _licenseCodeId)

For the input ISV license code, returns the count that are specified in the ISV license file.

Batch Job Mechanisms

Every week the system runs the batch job named Named user license count report. The job might be visible only when it is running. The batch job recalculates the named-user license counts. The job maintains historical data for each run.

For the latest run of the batch job, the data includes the user names. But for historical data only the counts are kept.

The SysUserLicenseMinor class contains the logic that calculates the license counts.

If the batch job has never run, the getCurrentUserLicenseCount method on the SysDictLicenseCode class would return 0 for the count and null for the date of latest recalculation. ISVs can decide how they want their custom modules to react in that situation.

Suppose the batch job runs every week but then skips one or more weeks. The getCurrentUserLicenseCount would return a date that is older than one week. ISVs can decide how they want their custom modules to react in that situation.

You can view the historical data from the batch job at
 System administration > Reports > Licensing > Named User License Counts.

Trust and Verification

Microsoft relies on the named-user licensing model, but does not disable any modules when licensing requirements are not being met. Instead, Microsoft trusts customers to buy new user licenses when the usage exceeds the purchased allotment. You can see the usage report by running the Named User License Counts report.

ISVs can choose how their custom modules react when an insufficient number of user licenses have been purchased. One ISV might decide to show a warning message. Another ISV might have the logic branch around major functionality in its custom code.

JJ677284.collapse_all(en-us,AX.60).gifWhite Papers about Licensing

For more information about licensing, see the following white papers:

See also

Define or edit entry point permissions

License code and configuration key reference

Naming Conventions: License Codes


UserLicenseType Enumeration

LicenseCodeId Extended Data Type

Announcements: New book: "Inside Microsoft Dynamics AX 2012 R3" now available. Get your copy at the MS Press Store.