Continued from Part 1 

Sharing some X++ code which is going to be useful  while working with financial dimensions.

If you have ledger dimensoin  Recid and  want to get default dimension from ledger dimensoin , following code would help you.

        DimensionDefault  defaultDim;

        defaultDim = LedgerDimensionFacade::getDefaultDimensionFromLedgerDimension(ledgerddimensoin);

        Info(strFmt("Default dimension from Ledger dimension %1", defaultDim));
image

Following code  Replaces the value of the specified dimension attribute in the target set with the value from the source set. This is useful if you ever want to replace specific attribute value in target default dimension

LedgerDimensionDefaultFacade::serviceReplaceAttributeValue(targetDimension,
                                            sourceDimension,
                                            DimensionAttribute::findByName('SubDepartment').RecId);

If you want to find particular attribute from default dimension , use following piece of code.

        DimensionAttribute  attribute = DimensionAttribute::findByName('Purpose');
        DimensionAttributeValueSetItemView valueSetItemView;
        ;
        select DisplayValue from valueSetItemView
        where valueSetItemView.DimensionAttributeValueSet == defaultDim
            && valueSetItemView.DimensionAttribute == attribute.RecId;
        
        Info(strFmt("Purpose: %1", valueSetItemView.DisplayValue));
image

Getting  the RecId for LedgerDiemnsion of anytype (bank , Ledger etc..)

        DimensionDynamicAccount DimensionDynamicAccount;
        DimensionDynamicAccount = LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber("000103",LedgerJournalACType::Ledger);

        info(strFmt("%1",DimensionDynamicAccount));

Another way of Getting  the RecId for LedgerDiemnsion of anytype (bank , Ledger etc..)

public static RecId getMultiTypeLedgerDimensionRecId(LedgerJournalACType _accountType, DimensionValue _accountId, SelectableDataArea _dataAreaId = curExt())
        {
            RecId                                   recId;
            DictEnum                                dictEnum = new DictEnum(enumNum(LedgerJournalACType));
            DimensionDynamicAccountServiceProvider  dimensionDynamicAccountServiceProvider;
            DimensionDynamicAccountContract         dimensionDynamicAccountContract = new DimensionDynamicAccountContract();
        
            if(_accountType == LedgerJournalACType::Ledger)
                throw error(Error::wrongUseOfFunction(funcName()));

            dimensionDynamicAccountContract.parmCompany(_dataAreaId);
            dimensionDynamicAccountContract.parmAccountType(_accountType);
        
            DimensionAttributeValueContract ledgerContract = DimensionAttributeValueContract::construct(dictEnum.value2Label(_accountType), _accountId);
            dimensionDynamicAccountContract.parmPrimaryDimensionAttributeValue(ledgerContract);
                
            dimensionDynamicAccountServiceProvider        = DimensionDynamicAccountServiceProvider::newForDynamicAccountContract(dimensionDynamicAccountContract);
            DimensionStorageResult dimensionStorageResult = dimensionDynamicAccountServiceProvider.resolve();
        
            switch(dimensionStorageResult.parmStatus())
            {
                case DimensionStorageResultStatus::Valid:
                    recId = dimensionStorageResult.parmSavedRecId();
                    break;

                default:
                    error(strFmt("Validation Status: %1", dimensionStorageResult.parmStatus()));
                    break;
            }

        return recId;
        }