Generate Ledger Dimension Code X++ D365fo

 How To Generate Ledger Dimension Code X++ D365fo


static RefRecId generateLedgerDimension(MainAccountNum _mainAccountId, DimensionValue _purpose, DimensionValue _sector, DimensionValue _department, DimensionValue _worker) { container conData; int hierarchyCount; int hierarchyIdx; LedgerRecId ledgerRecId; MainAccount mainAccount; RefRecId recordvalue; DimensionAttribute dimensionAttribute; DimensionAttributeValue dimensionAttributeValue; DimensionSetSegmentName DimensionSet; DimensionStorage dimStorage; DimensionAttributeValueContract ValueContract; LedgerAccountContract LedgerAccountContract; DimensionAttributeValueCombination dimensionAttributeValueCombination; List valueContracts; #define.MainAccount('MainAccount') #define.Purpose('Purpose') #define.Sector('Sector') #define.Department('Department') #define.Worker('Worker') #define.Language('en-gb') LedgerAccountContract = new LedgerAccountContract(); valueContracts = new List(Types::Class); conData =[_mainAccountId]; mainAccount = MainAccount::findByMainAccountId(_mainAccountId); if(!mainAccount) { throw error("Please check worker dimension :- "+_worker); } recordvalue = DimensionHierarchy::getAccountStructure(mainAccount.RecId,Ledger::current()); hierarchyCount = DimensionHierarchy::getLevelCount(recordvalue); DimensionSet = DimensionHierarchyLevel::getDimensionHierarchyLevelNames(recordvalue); if (recordvalue) { for(hierarchyIdx = 1;hierarchyIdx<=hierarchyCount;hierarchyIdx++) { if(hierarchyIdx == 1) continue; dimensionAttribute = DimensionAttribute::findByLocalizedName(DimensionSet[hierarchyIdx],false,#Language); if (dimensionAttribute.Name == #MainAccount) { conData += [_mainAccountId]; } if (dimensionAttribute.Name == #Purpose) { conData += [_purpose]; } if (dimensionAttribute.Name == #Sector) { conData += [_sector]; } if (dimensionAttribute.Name == #Department) { conData += [_department]; } if (dimensionAttribute.Name == #Worker) { conData += [_worker]; } if(dimensionAttribute) { dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,conPeek(conData,hierarchyIdx)); if(dimensionAttributeValue) { ValueContract = new DimensionAttributeValueContract(); ValueContract.parmName(dimensionAttribute.Name) ; ValueContract.parmValue(dimensionAttributeValue.CachedDisplayValue); valueContracts.addEnd(ValueContract); } } } LedgerAccountContract.parmMainAccount(_mainAccountId); LedgerAccountContract.parmValues(valueContracts); dimStorage = DimensionServiceProvider::buildDimensionStorageForLedgerAccount(LedgerAccountContract); dimensionAttributeValueCombination = DimensionAttributeValueCombination::find(dimStorage.save()); ledgerRecId = dimensionAttributeValueCombination.RecId; } else { warning(strfmt("Ledger dimension Issue for main account %1", _mainAccountId)); } return ledgerRecId; }

 This Code Written By Mohamed Elsagher

Comments