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));
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));
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; }