X++:
journalTrans.initValue();
journalTrans.JournalNum = journalNum;
...
journalTrans.AccountType = LedgerJournalACType::Project;
journalTrans.LedgerDimension = this.getLedgerDim(LedgerJournalACType::Project, curExt(), projId);
journalTrans.AmountCurDebit = costAmount;
journalTrans.DefaultDimension = LedgerJournalEngine::initDefaultDimensionServer(journalTrans);
...
public RefRecId getLedgerDim(LedgerJournalACType _accountType,
DataAreaId _dataAreaId,
DimensionValue _accountId)
{
RefRecId ledgerDimension;
DictEnum dictEnum = new DictEnum(enumNum(LedgerJournalACType));
DimensionDynamicAccountServiceProvider dimensionDynamicAccountServiceProvider;
DimensionDynamicAccountContract dimensionDynamicAccountContract = new DimensionDynamicAccountContract();
dimensionDynamicAccountContract.parmCompany(_dataAreaId);
dimensionDynamicAccountContract.parmAccountType(_accountType);
DimensionAttributeValueContract ledgerContract = DimensionAttributeValueContract::construct(dictEnum.value2Label(_accountType), _accountId);
dimensionDynamicAccountContract.parmPrimaryDimensionAttributeValue(ledgerContract);
dimensionDynamicAccountServiceProvider = DimensionDynamicAccountServiceProvider::newForDynamicAccountContract(dimensionDynamicAccountContract);
DimensionStorageResult dimensionStorageResult = dimensionDynamicAccountServiceProvider.resolve();
switch(dimensionStorageResult.parmStatus())
{
case DimensionStorageResultStatus::Valid:
ledgerDimension = dimensionStorageResult.parmSavedRecId();
break;
default:
error(strFmt("blah-blah-blah-blah-bla", dimensionStorageResult.parmStatus()));
break;
}
return ledgerDimension;
}