0

我有财务维度,它联系诸如 BuildingID 和 ContractID 之类的值。创建新建筑物时,维度会正确填充数据。但是,之后需要创建合同。创建合同时,合同ID 的财务维度字段中有值。但是,当保存合同时,合同 ID 的财务维度会消失。当我签入该 ContractID 维度的 DIMENSIONATTRIBUTEVALUESET 表值为空时,只有 BuildingID 的值。我有这种初始化尺寸的方法:

void initDimensions()
    {        
        DimensionDefault dimension;
        PMGOrgDimension orgDimension;
        CompanyId       companyId;        
        PMEGround ground;
        PMEBuilding building;

        switch(pmcContract.EstateType)
        {            
            case PMCEstateType::Ground :
                ground = PMEGround::find(pmcContract.EstateId);
                dimension    = PMEObjectLegalEntity::find(ground.TableId, ground.RecId).DefaultDimension;
                orgDimension = ground.OrgDimension;
                companyId    = ground.CompanyId;
                break;
            case PMCEstateType::Building :
                building = PMEBuilding::find(pmcContract.EstateId);
                dimension    = PMEObjectLegalEntity::find(building.TableId, building.RecId).DefaultDimension;
                orgDimension = building.OrgDimension;
                companyId    = building.CompanyId;
                break;
            default :
                dimension = pmcContract.DefaultDimension;
                orgDimension = pmcContract.OrgDimension;
                companyId = pmcContract.CompanyId;
                break;
        }

        pmcContract.DefaultDimension    = dimension;
        pmcContract.OrgDimension = orgDimension;
        pmcContract.CompanyId    = companyId;

    } 

有什么我想念的吗?

4

2 回答 2

2

尝试更改此行:

pmcContract.DefaultDimension = dimension;

对此:

pmcContract.DefaultDimension = DimensionDefaultingService::serviceMergeDefaultDimensions(pmcContract.DefaultDimension, dimension);

于 2019-06-20T16:32:38.387 回答
0

问题在于这种方法:

static server public DimensionDefault tableDimension(Common _c, DimensionDefault _d)
    {
        DimensionAttribute dimensionAttribute;
        DimensionAttributeValue dimensionAttributeValue;
        DimensionAttributeSetItem dimensionAttributeSetItem;
        DimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;
        DimensionDefault cDimensionDefault;
        DimensionDefault ret;
        ;

        ret = _d;

        select firstonly RecId from dimensionAttribute
            where dimensionAttribute.BackingEntityTableId == _c.TableId
            join firstonly RecId from dimensionAttributeSetItem
                where dimensionAttributeSetItem.DimensionAttributeSet == DimensionCache::getDimensionAttributeSetForLedger()
                   && dimensionAttributeSetItem.DimensionAttribute == dimensionAttribute.RecId;
        if (dimensionAttributeSetItem.RecId != 0)
        {
            dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndEntityInst(dimensionAttribute.RecId, _c.RecId, false, true);
            if (dimensionAttributeValue.RecId != 0)
            {
                dimensionAttributeValueSetStorage = new DimensionAttributeValueSetStorage();
                dimensionAttributeValueSetStorage.addItemValues(dimensionAttributeValue.DimensionAttribute, dimensionAttributeValue.RecId, dimensionAttributeValue.HashKey);
                cDimensionDefault = dimensionAttributeValueSetStorage.save();
                if (cDimensionDefault != 0)
                {
                    ret = LedgerDimensionDefaultFacade::serviceMergeDefaultDimensions(cDimensionDefault, _d);
                }
            }
        }

        return ret;
    }

合并不起作用。它只需要 _d 的值。不合并它们。

于 2019-06-24T09:51:04.113 回答