In AX 2009, you might have a field that extends  SysDim  extended data type (EDT) that represents a single financial dimension value. Usually it goes together with dimension type, a field that extends  SysDimension  enum.

Such a configuration is helpful when you need a single dimension value of any type (Department, Cost Center and etc.). By selecting a type, you restrict dimensions to be filled in the  SysDim  field.  It’s done by writing a custom lookup.

However in AX 2012, the financial dimensions data model was completely rebuilt using a different approach, and this approach does not allow for such a configuration anymore. In AX 2009 the data model was simple and self-explanatory.

AX 2012 dimensions are referenced using  RecIds , which can be difficult to understand. It first references a dimension value set. This set links to one or more dimension value set items. It depends on how many dimension values are entered. For example, if only department and cost center are filled in then the set will contain only two set items. Set items link to dimension values. Dimension values link to dimension attributes (dimension types) and to actual values. Referencing actual values offers the possibility to use dimension values from many tables, like customers, items ant, etc. Values that were stored in  Dimensions table  in AX 2009 are moved to  DimensionFinancialTag  table in AX 2012.

SysDimension  field upgrade is not a problem in AX 2012 as you can create a  RecId  field referencing to  DimensionAttribute  table. It has a Replacement Key, which shows nice values to a user. The problem is what decision to make when upgrading  SysDim  fields.

There are a couple of options:

  1. Create  RecId  field referencing  DimensionAttributeValue  table.
  2. Create  DefaultDimension  field referencing standard set of financial dimension values and disable those that are not supposed to be entered.

The first option might look promising but when it comes to displaying values on a form or a report, there is a drawback.  DimensionAttributeValue  table does not have a replacement key and so values on the field referencing to this table would be record id values, which means nothing to a user. In this case you have to create a field that would represent a value and make it as a replacement key. You have to make sure that a value is updated any time it is modified.

The second option is much better as it most closely reuses standard functionality.  DefaultDimension  field is created to show all dimensions values that are set up for the legal entity.

The advantage of this that you can reuse the  DimensionDefaultingController  class for controlling the behavior of the field and values entered. Follow the steps described in our whitepaper. Moreover, you can reuse this class method  setEditability , which allows you to disable and enable dimension value fields at runtime. To  setEditability  method you have to pass a  RecId  of  DimentionAttributeSet  (not  DimensionAttributeValueSet !). Below is the code for creating such  DimensionAttributeSet  if it does not exist. You pass a dimension attribute  RecId  and return  RecId  of  DimensionAttributeSet

Here is an example of how to use the  setEditabilit y method. Overwrite your datasource’s (table that had SysDim method) method active on a form in AX 2012. This can be found in the dynamic editability setting. If you want it to be static, use  init  method on a form. Dynamic is handy when you have a dimension attribute field on a table as well.

Then on the form you should see something like the following:

Unfortunately, there is a small drawback; you can hide dimension value fields only at initialization and not at runtime. Despite that, it is still the best option so far.

These are the major steps for how to upgrade  SysDim  fields:

  • Create Default Dimension field as described in the whitepaper “ Implementing the Account and Financial Dimensions Framework for Microsoft Dynamics AX 2012 Applications ”;
  • Write data upgrade scripts for converting  SysDim  field value to  DefaultDimension  field;
  • In forms, use  DimensionDefaultingController  class and its methods  setEditability  to disable dimension value fields that are not supposed to be entered.

Good luck!

Author of the post: our former AX Upgrade Team Manager Evaldas Landauskas.

日博电竞入口数据 im中国电竞官方外围 蜂鸟电竞登录比赛网 电竞体育(武汉)观看全球网址 esg电竞现场查询 宝博电竞联赛v8.10 IOS版