Pages

Banner 468 x 60px

 

Wednesday, November 22, 2017

Create default dimension using x++

0 comments
Create default dimension using x++ :

Creating default dimensions for vendor or customer through X++:

Created a class called “FindOrCreateDefaultDimension” and then utilizing its method “findDefaultDimension” whenever default dimension is required.

Suppose I’ve 6 dimension out of which 3 are custom dimension and rest are standard ones. For custom dimension am including ‘FinancialDimensionTag’ Table in to the while loop. As shown below


Static DimensionDefault findDefaultDimension(str _Department, Str _BusinessType,str _AnchorTenant, Str _Category,str _SiteId, str _costcenter, str _purpose)
{

    Struct                          struct = new Struct();
    container                       defDimensionCon;
    DimensionDefault                dimensionDefault;
    DimensionAttributeSetItem       dimAttrSetItem;
    DimensionAttribute              dimAttribute;
    int i;

    //Loop for required dimensions
    while select Name, BackingEntityType from dimAttribute
        where dimAttribute.BackingEntityType == tableNum(DimAttributeOMBusinessUnit) ||
              dimAttribute.BackingEntityType == tableNum(DimAttributeOMDepartment) ||
              dimAttribute.BackingEntityType == tableNum(DimAttributeOMCostCenter) ||
              dimAttribute.BackingEntityType == tableNum(DimensionFinancialTag) &&
              dimAttribute.Type              != DimensionAttributeType::DynamicAccount
              join dimAttrSetItem
                where dimAttrSetItem.DimensionAttribute == dimAttribute.RecId &&
                      dimAttrSetItem.DimensionAttributeSet == DimensionCache::getDimensionAttributeSetForLedger()
    {
        //Add the Dimension name and display value to struct

        if (dimAttribute.BackingEntityType == tableNum(DimAttributeOMDepartment))
        {
            struct.add(dimAttribute.Name, _Department);
        }
       if (dimAttribute.BackingEntityType == tableNum(DimensionFinancialTag) && dimAttribute.Name == 'BusinessType')
        {
            struct.add(dimAttribute.Name, _BusinessType);
        }
        if (dimAttribute.BackingEntityType == tableNum(DimensionFinancialTag) && dimAttribute.Name == 'AnchorTenant')
        {
            struct.add(dimAttribute.Name, _AnchorTenant);
        }
        if (dimAttribute.BackingEntityType == tableNum(DimensionFinancialTag) && dimAttribute.Name == 'Category')
        {
            struct.add(dimAttribute.Name, _Category);
        }
        if (dimAttribute.BackingEntityType == tableNum(DimensionFinancialTag) && dimAttribute.Name == 'SiteId')
        {
            struct.add(dimAttribute.Name, _SiteId);
        }
        if (dimAttribute.BackingEntityType == tableNum(DimAttributeOMCostCenter))
        {
            struct.add(dimAttribute.Name, _costcenter);
        }

    }

    defDimensionCon += struct.fields();

    for (i = 1; i <= struct.fields(); i++)
    {
        defDimensionCon += struct.fieldName(i);
        defDimensionCon += struct.valueIndex(i);
    }

        if (struct.fields())
    {
        //Get the DimensionAttributeValueSet table’s Record ID
        dimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId(defDimensionCon);

    }
    return dimensionDefault;


}



And now am going to use the above created class to update the vendor financial dimensions.



static void Updating_VendorDefaultDimension(Args _args)
{
    VendTable       vt;
    ;

    vt = VendTable::find("VT-1003", true);

    vt.DefaultDimension = FindOrCreateDefaultDimension::findDefaultDimension("00000063", "", "", "", "", "OU_4612", "");

    vt.update();
}
   
Running the above job will results in to:



0 comments:

A financial dimension value is based on the record and has been used on a transaction. You cannot delete the record

  SOLUTION delete in table DimensionAttributeLevelValue base on Bank Account  :  and Delete the Bank Account FINISH