The code below will help out to generate Ledger Dimension using x++ in D365 FO
public RefRecId generateLedgerDimension(MainAccountNum _mainAccountId,
DimensionValue _businessUnit,
DimensionValue _department,
DimensionValue _branchCode,
DimensionValue _employeeCode)
{
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.Department('Department')
#define.BusinessUnit('BusinessUnit')
#define.BranchCode('BranchCode')
#define.EmployeeCode('EmployeeCode')
LedgerAccountContract = new LedgerAccountContract();
valueContracts = new List(Types::Class);
conData = [_mainAccountId];
mainAccount = MainAccount::findByMainAccountId(_mainAccountId);
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);
if (dimensionAttribute.Name == #Department)
{
conData += [_department];
}
else if (dimensionAttribute.Name == #BusinessUnit)
{
conData += [_businessUnit];
}
else if (dimensionAttribute.Name == #BranchCode)
{
conData += [_branchCode];
}
else if (dimensionAttribute.Name == #EmployeeCode)
{
conData += [_employeeCode];
}
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;
}
No comments:
Post a Comment