Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Axapta 保存后的财务维度为空_Axapta_X++_Dynamics 365 Operations - Fatal编程技术网

Axapta 保存后的财务维度为空

Axapta 保存后的财务维度为空,axapta,x++,dynamics-365-operations,Axapta,X++,Dynamics 365 Operations,我有财务方面的联系价值观,如BuildingID和ContractID。 创建新建筑时,尺寸标注将正确填充数据。但是,在这之后就需要创建合同。 创建合同时,Contractd的财务维度字段中存在值。 但是,当保存合同时,合同id的财务维度将消失。当我签入该压缩维度的DIMENSIONATTRIBUTEVALUESET表值为null时,BuildingID只有一个值。 对于初始维度,我有以下方法: void initDimensions() { Dimens

我有财务方面的联系价值观,如BuildingID和ContractID。 创建新建筑时,尺寸标注将正确填充数据。但是,在这之后就需要创建合同。 创建合同时,Contractd的财务维度字段中存在值。 但是,当保存合同时,合同id的财务维度将消失。当我签入该压缩维度的DIMENSIONATTRIBUTEVALUESET表值为null时,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;

    } 

我有什么遗漏吗

尝试更改此行:

pmcContract.DefaultDimension=维度

为此:

pmcContract.DefaultDimension=维度DefaultingService::serviceMergeDefaultDimensions(pmcContract.DefaultDimension,维度)


尝试更改此行:

pmcContract.DefaultDimension=维度

为此:

pmcContract.DefaultDimension=维度DefaultingService::serviceMergeDefaultDimensions(pmcContract.DefaultDimension,维度)


问题在于这种方法:

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的值。不合并它们

问题在于此方法:

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的值。不合并它们

我试过了。不起作用,在D365中,没有DimensionDefaultingService,我使用了LedgerDimensionDefaultFacade。但是非常感谢你。看起来它不是关于initDimension方法,而是关于调用它的地方。一般来说,关于维度,如果已经设置了维度,它将获得一个存储在
DefaultDimension
中的
RecId
,如果要设置另一个维度,则需要合并它们。类似于将
InventDimId
设置为只有
站点
…如果要指定仓库,则需要
查找或创建
或有效合并站点/仓库以获得新的
InventDimId
。希望这是有意义的。我想您需要检查
pmcContract.DefaultDimension
是否已经存储了值。问题可能不在方法声明中。它就在一个被称为的地方。整个表单后面都有代码。另外,helper类,每个调用只能处理一个值。。。我试过了。不起作用,在D365中,没有DimensionDefaultingService,我使用了LedgerDimensionDefaultFacade。但是非常感谢你。看起来它不是关于initDimension方法,而是关于调用它的地方。一般来说,关于维度,如果已经设置了维度,它将获得一个存储在
DefaultDimension
中的
RecId
,如果要设置另一个维度,则需要合并它们。类似于将
InventDimId
设置为只有
站点
…如果要指定仓库,则需要
查找或创建
或有效合并站点/仓库以获得新的
InventDimId
。希望这是有意义的。我想您需要检查
pmcContract.DefaultDimension
是否已经存储了值。问题可能不在方法声明中。它就在一个被称为的地方。整个表单后面都有代码。另外,helper类,每个调用只能处理一个值。。。