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