Friday, 20 October 2023

How to generate LedgerDimension in D365 FO X++

    public RefRecId  generateLedgerDimension(MainAccountNum _mainAccountId, str _A, Str _B)

    {

        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;

        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,CompanyInfo::find().LanguageId);

              

                if (dimensionAttribute.Name ==  ULT_AllocationTradeConstants::AConst)

                {

                    conData += [_A];//AllocationAccount

                }

                else if (dimensionAttribute.Name == ULT_AllocationTradeConstants::BConst)

                {

                    conData += [_B];

                }

               

                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(ULT_Constants::ErrorTypeLedgerDimIssue, _mainAccountId));

        }

        return  ledgerRecId;

    }

No comments:

Post a Comment

validate offsetLedgerDimension in d365 FO

 /// <summary> /// This class is used to validate offsetLedgerDimension /// </summary> class PNG_InventMovValidateOffsetLedgerDi...