zoukankan      html  css  js  c++  java
  • Manage Financial Dimensions in MSDyn365FO with X++

     

    With the arrival of the version 2012 of Microsoft Dynamics AX there was an important change in the way in which the ERP manages the Financial Dimensions. The data model changed significantly and with it, the way we, as developers, managed and worked with them through X++Dynamics 365 for Finance and Operations has been a continuist in this topic, and the way we work with them is practically the same.

    The main difference we found whit this change was that, while in the 2009 or earlier version we had limited the number of dimensions we could use in 10, in AX 2012 and MSDyn365FO that limit disappears. At a technical level, we used to work with an enum (SysDimension) to control the different dimensions, and an array EDT to store them, so if we wanted to access them, we have just to access to the array elements to get their values. Now, these dimensions are created directly in database, and the way they are created could remind us the way that inventory dimensions have been used historically on the ERP. What we do is store possible combinations of the different dimension values, and use a unique value (RecId) of this combination to assing the dimensions to the corresponding record.

    This change obviously opens up a wide range of possibilities to exploit financial information through dimensions, but for technicians, it was a bit of a headache to learn to manage this new dimensions structure, which is why I want share with you a few methods that I use in all the projects in which I participate, and that make me forget about this management, greatly facilitating the use of these dimensions. You can download this class directly from my GitHub account and then I will explain how it works.

    As I said, we used to manage the dimensions throug the SysDimensions enum, but now, we work with these dimensions through their name, which is given by the person who creates or modifies them, so the first thing we do is create an series of static constant variables that allow us to use the dimension names in any point of the application.
    Important: If a dimension is added or modified at any time, it is mandatory to change its name in this class. The good point is that it will be centralized and the change will be minimal. Please, don’t use the name literal everywhere!!!

    JATDimensionUtils

    Thus, every time I want to use the name of a dimension, I will only have to use the following syntax:

    Now I am going to show you the different methods I have whithin this same class and that make my life easier.

    GetDimensionAttributeValueSetId

    This method will allow us to obtaine the DefaultDimension from a container with the dimensions that we want to associate to the record. It serves for example to associate dimensions to the account or the offset account in a journal line when the type of them are Vend, Cust, Bank…
    Parameter: Container with the total number of dimensions, followed by the name and value of each one.
    Return: RecId associated to the dimension combinaiton obtained by parameters.

    GetLedgerDimensionId

    This method will allow us to obtain the LedgerDimension from a container with the accounting account (MainAccount) and the dimensions that we want to associate with the record. For example, it is used to associate dimensions to the account or offset account of a journal line when they are Ledger type.
    Parameter: Container with the MainAccount, followed by the name and value of the dimension.
    Return: RecId associated to the combination of account and dimensions obtained by parameters.

    ChangeDimensionValue

    This method will allow us to modify the values of some of the dimensions that are already associated to the record.
    Parameter: RecId of the dimensions that the record has already associated and Container with the Name and Value pairs of the dimensions that you want to modify.
    Return: RecId of the combination of old dimensions with the new values associated to the record.

    GetDimensionValue

    This method will allow us to obtain the value of an specific dimension associated to the record.
    Parameter: RecId of the combination of dimensions associated to the record and name of the dimension we want to obtain.
    Return: Value of the required dimension.

    CheckDimensionValue

    With this method we can validate if a specific value exists in a specific dimension, no matters if the dimension is standard or custom.
    Parameter: Name and value of the dimension we want to validate.
    Return: Boolean that indicates if the value exists or not in the given dimension.

    And so far my little help for working with dimensions. Any correction, contribution, idea or comment will be more than welcome

  • 相关阅读:
    当今手机和互联网故事
    回忆手机和互联网故事
    FAQ2010-2019
    LTM在服务器负载均衡中的运行模式
    如何让集团型企业进行IT集中管控,实现分支零IT运维
    两个优化Oracle数据库性能的方法解析
    简单描述Oracle数据库性能优化的几个要点
    A10 Thunder CFW融合防火墙保护企业应用安全
    全球甄选Azure云解决方案,直击云上核心痛点
    微软物联网开创”万物互联“新时代
  • 原文地址:https://www.cnblogs.com/lingdanglfw/p/15533015.html
Copyright © 2011-2022 走看看