source : http://kiwiaxguy.blogspot.com/2014/07/setting-ledgerdimension-field-on.html
i modify some code from the source because the dimension name is hardcoded,
on class global :
public static container getDimensionNameTID() { DimensionAttribute dimAttr; DimensionAttributeSetItem dimAttrSetItem; DimensionEnumeration dimensionSetId; DimensionAttributeValue dimAttributeValue; container DimensionName; dimensionSetId = DimensionCache::getDimensionAttributeSetForLedger(); while select dimAttr order by Name where dimAttr.Type != DimensionAttributeType::MainAccount join RecId from dimAttrSetItem where dimAttrSetItem.DimensionAttribute == dimAttr.RecId && dimAttrSetItem.DimensionAttributeSet == dimensionSetId { dimensionName += dimAttr.Name; } return DimensionName; }
getLedgerDimension example code :
public static RecId getLedgerDimensionCombination(MainAccountNum _ledgerAccount, container dimValue) { DimensionServiceProvider DimensionServiceProvider = new DimensionServiceProvider(); LedgerAccountContract LedgerAccountContract = new LedgerAccountContract(); DimensionAttributeValueContract ValueContract; List ListValueContract = new List(Types::Class); dimensionAttributeValueCombination dimensionAttributeValueCombination; DimensionStorage dimStorage; container dimensionName = Global::getDimensionNameTID(); int loopDimValue = 1; if(conLen(dimValue) > 0) { while(loopDimValue <= conLen(dimValue)) { ValueContract = new DimensionAttributeValueContract(); ValueContract.parmName(conPeek(dimensionName,loopDimValue)) ; ValueContract.parmValue(conPeek(dimValue,loopDimValue)); ListValueContract.addEnd(ValueContract); loopDimValue++; } LedgerAccountContract.parmMainAccount(_ledgerAccount); LedgerAccountContract.parmValues(ListValueContract); dimStorage = DimensionServiceProvider::buildDimensionStorageForLedgerAccount(LedgerAccountContract); dimensionAttributeValueCombination = DimensionAttributeValueCombination::find(dimStorage.save()); return dimensionAttributeValueCombination.RecId; } else { return 0; } }
example code on how to use it :
static void TIDF_getLedgerDim(Args _args) { DimensionValue dim1,dim2; container conDimValue; MainAccountNum mainAccountNum; mainAccountNum = "6100-1001"; dim1 = "5102"; dim2 = "OPERATIO"; conDimValue = [dim1,dim2]; info(strFmt("%1",getLedgerDimensionCombination(mainAccountNum,conDimValue))); }