Wednesday 9 March 2016

Merging financial dimensions

Merging financial dimensions:


we can merge up to four differ dimension in to one fin dimension.
we need to give priority as per priprity it will merge.

for merging we can use the below class :

DimensionDefaultingService.serviceMergeDefaultDimensions(findim1,findim2,findim3,findim4)



example:

static void Update_FinDimId_PurchaseOrders(Args _args)
{
    PurchLine              PurchLine;
    //int                    length,counter = 0;
    DimensionDefault       defauleDimensionNew,defauleDimensionPurch,defauleDimensionItem,defauleDimensionVend;
    ItemId                 ItemId;
    InventTable            InventTable;

    ttsBegin;
    While select forUpdate PurchLine //where PurchLine.PurchId == "0070027820"
    {
        defauleDimensionPurch = PurchLine.DefaultDimension;
        defauleDimensionItem  = InventTable::find(PurchLine.ItemId).DefaultDimension;
        defauleDimensionVend  = vendtable::find(PurchLine.VendAccount).DefaultDimension;

        //length = strLen(PurchLine.PurchId);
        //If (Length == 8)
        //{
            defauleDimensionNew = DimensionDefaultingService::serviceMergeDefaultDimensions(defauleDimensionPurch,defauleDimensionItem,defauleDimensionVend);
            PurchLine.DefaultDimension = defauleDimensionNew;
            PurchLine.update();
            //counter++;

        //}
    }
    ttsCommit;
    //info(strFmt("%1", counter));

Tuesday 8 March 2016

create financial dimension combination create

Get combination method:


/// <summary>
/// for getting dimension id
/// </summary>
/// <param name="_dataRecord">
/// 2009 data record
/// </param>
/// <returns>
/// returns financial dimension
/// </returns>

public DimensionDefault findDefaultDimId(AxeDataRecord _dataRecord)
{

    DimensionAttributeValue             dimCostcenterVal,dimDepartmentVal,dimInternalOrderVal;
    DimensionAttribute                  dimAttrCostcenter,dimAttrDepartment,dimAttrInternalOrder;
    DimensionAttributeValueSetStorage   davss;
    boolean                             isValidDimension = true;
    DimensionDefault                    DefaultDimension;
    OMOperatingUnitNumber               omDepatmentvalue,omCostcentervalue;
    DimensionValue                      omInternalOrdervalue;
    MSDimensions                        MSDimensions;// checking the Dimension2_ value is internal order or costcenter
    NoYes                               isinternalOrder;

    davss                = DimensionAttributeValueSetStorage::find(DefaultDimension);
    dimAttrCostcenter    = DimensionAttribute::findByName('CostCenter');
    dimAttrDepartment    = DimensionAttribute::findByName('Department');
    dimAttrInternalOrder = DimensionAttribute::findByName('InternalOrder');

    select firstonly Num,mprInternal,Description,RecId from MSDimensions
       where MSDimensions.Num == _dataRecord.value('Dimension2_');
    isinternalOrder =  MSDimensions.mprInternal;

    if(_dataRecord.value('Dimension2_'))
    {
        if(isinternalOrder == NoYes::Yes)
        {
            omInternalOrdervalue = this.findorcreateInternalOrder(_dataRecord.value('Dimension2_'),MSDimensions.Description);
            dimInternalOrderVal  = DimensionAttributeValue::findByDimensionAttributeAndValueNoError(dimAttrInternalOrder, omInternalOrdervalue, false , true);
        }
        else
        {
            omCostcentervalue    = this.findorcreateCostcenter(_dataRecord.value('Dimension2_'));
            dimCostcenterVal     = DimensionAttributeValue::findByDimensionAttributeAndValueNoError(dimAttrCostcenter   , omCostcentervalue   , false , true);
        }

    }

    if(_dataRecord.value('Dimension'))
    {
        omDepatmentvalue     = this.findorcreatedepartment(_dataRecord.value('Dimension'));
        dimDepartmentVal     = DimensionAttributeValue::findByDimensionAttributeAndValueNoError(dimAttrDepartment   , omDepatmentvalue    , false , true);
    }



    if(dimInternalOrderVal )
    {
        davss.addItem(dimInternalOrderVal);
    }
    if(dimCostcenterVal )
    {
        davss.addItem(dimCostcenterVal);
    }

    if (dimDepartmentVal)
    {
        davss.addItem(dimDepartmentVal);
    }

    if(dimCostcenterVal || dimDepartmentVal || dimInternalOrderVal)
    {
        DefaultDimension =   davss.save();
        return DefaultDimension;
    }
    else
        return 0;

}



createorget inernal order , costcenter and department methods:

////////////////////////////////////////// to get or create  internal order method \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
/// <summary>
/// get the internal order value
/// </summary>
/// <param name="_DimensionValue">
/// passing internal order dimension value
/// </param>
/// <param name="_Description">
/// passing description
/// </param>
/// <returns>
/// returns internal dimesion value
/// </returns>

private DimensionValue findorcreateInternalOrder(DimensionValue  _DimensionValue,Description _Description)
{
    DimensionFinancialTag   dimensionFinancialTag;
    RefRecId                dimensionAttribute = DimensionAttribute::findByName("InternalOrder").financialTagCategory();

    ttsBegin;
    select firstOnly dimensionFinancialTag where dimensionFinancialTag.Value == _DimensionValue
    && dimensionFinancialTag.FinancialTagCategory == dimensionAttribute;
    if(!dimensionFinancialTag.RecId)
    {
        dimensionFinancialTag.initValue();
        dimensionFinancialTag.FinancialTagCategory = dimensionAttribute;
        dimensionFinancialTag.Value                = _DimensionValue;
        dimensionFinancialTag.Description          = _Description;//_DimensionValue;
        dimensionFinancialTag.insert();

    }
    ttsCommit;


    return _DimensionValue;


}



////////////////////////////////////////// to get or create  cost center method \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

private OMOperatingUnitNumber findorcreateCostcenter(OMOperatingUnitNumber               _omCostcentervalue)
{
    OMOperatingUnit OMOperatingUnit;

    select OMOperatingUnit
        where OMOperatingUnit.OMOperatingUnitNumber == _omCostcentervalue
        && OMOperatingUnit.OMOperatingUnitType == OMOperatingUnitType::OMCostCenter;
        if(!OMOperatingUnit.OMOperatingUnitNumber)
        {
            ttsBegin;
            OMOperatingUnit.OMOperatingUnitNumber = _omCostcentervalue;
            OMOperatingUnit.OMOperatingUnitType   = OMOperatingUnitType::OMCostCenter;//"Department";//
            OMOperatingUnit.Name                  = _omCostcentervalue;
            OMOperatingUnit.LanguageId            = "en-us";
            OMOperatingUnit.insert();
            ttsCommit;
            return OMOperatingUnit.OMOperatingUnitNumber;
        }
        else
        {
            return OMOperatingUnit.OMOperatingUnitNumber;
        }

}



////////////////////////////////////////// to get or create  department method \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

private OMOperatingUnitNumber findorcreatedepartment(OMOperatingUnitNumber               _omDepatmentvalue)
{
    OMOperatingUnit OMOperatingUnit;

    select OMOperatingUnit
        where OMOperatingUnit.OMOperatingUnitNumber == _omDepatmentvalue
        && OMOperatingUnit.OMOperatingUnitType == OMOperatingUnitType::OMDepartment;
        if(!OMOperatingUnit.OMOperatingUnitNumber)
        {
            ttsBegin;
            OMOperatingUnit.OMOperatingUnitNumber = _omDepatmentvalue;
            OMOperatingUnit.OMOperatingUnitType   = OMOperatingUnitType::OMDepartment;//"Department";//
            OMOperatingUnit.Name                  = _omDepatmentvalue;
            OMOperatingUnit.LanguageId            = "en-us";
            OMOperatingUnit.insert();
            ttsCommit;
            return OMOperatingUnit.OMOperatingUnitNumber;
        }
        else
        {
            return OMOperatingUnit.OMOperatingUnitNumber;
        }

}