In short Ledger dimension it is Main account + default dimension.
So, if you need to replace any attribute
value in a given Ledger dimension, do not forget to get a Default dimension
first.
LedgerDimensionFacade::getDefaultDimensionFromLedgerDimension(ledgerjournalTrans.LedgerDimension);
Then you can use this old good way.
DimensionDefault newDim = DimensionHelper::setValueToDefaultDimension(hcmEmployment.DefaultDimension, DimensionAttribute::findByName(_dimensionName).RecId, _dimensionValue);BTW, the opposite thing works like that:
LedgerDimensionFacade::serviceCreateLedgerDimension(ledgerDimensionMainAccount, inventTrans.defaultDimension);
Supporting
method
public static DimensionDefault setValueToDefaultDimension(DimensionDefault _dimensionDefault, RefRecId _dimensionAttributeRecId, DimensionValue _newDimensionValue) { DimensionAttributeValueSetStorage dimStorage; DimensionDefault newDimensionDefault = _dimensionDefault; DimensionAttributeValue dimensionAttributeValue; if (_dimensionAttributeRecId) { dimStorage = DimensionAttributeValueSetStorage::find(_dimensionDefault); if (_newDimensionValue) { dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute::find(_dimensionAttributeRecId), _newDimensionValue, false, true); dimStorage.addItem(dimensionAttributeValue); } else { dimStorage.removeDimensionAttribute(_dimensionAttributeRecId); } newDimensionDefault = dimStorage.save(); } return newDimensionDefault; }
Bigger usage example
// replace TransactionType to the one from parameters // first we need to get main account and default dimension from the originl transaction ledger dimension mainAccountRecId = LedgerDimensionFacade::getMainAccountRecIdFromLedgerDimension(_ledgerJournalTransOrig.LedgerDimension); dimensionDefault = LedgerDimensionFacade::getDefaultDimensionFromLedgerDimension(_ledgerJournalTransOrig.LedgerDimension); // then replace this attribute with a new value dimensionDefault = mgcDimValueHelper::setDefaultDimensionValue(dimensionDefault, mgcDimensionConstants::TransactionType, LedgerParameters::find().mgcGLDimInvTransSale); // get default dimension for main account ledgerDimensionMainAccount = LedgerDefaultAccountHelper::getDefaultAccountFromMainAccountRecId(mainAccountRecId); // finally combine it with original main account to get a new ledger dimension ledgerJournalTrans.OffsetLedgerDimension = LedgerDimensionFacade::serviceCreateLedgerDimension(ledgerDimensionMainAccount, dimensionDefault); ledgerJournalTrans.modifiedField(fieldNum(LedgerJournalTrans, OffsetLedgerDimension));