【二开指导】编辑核算维度组合对象

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

【二开指导】编辑核算维度组合对象

二开生成凭证时,经常会遇到的一个难题是如何生成自己的核算维度对象。在星空系统中,核算维度对象不是一个直接由基础资料构成的对象,而是一个弹性域对象,它是由多个核算维度项组合而成的。

编辑核算维度组合对象的一般思路是:首先,得到一个核算维度对象,然后给对象中指定的维度项赋值,接着保存编辑好的核算维度对象,最后,将这个对象赋值给当前凭证。

1,生成一个全新的核算维度对象:

var detailvObjtype = FormMetaDataCache.GetCachedFormMetaData(this.Context, "BD_FLEXITEMDETAILV").BusinessInfo.GetDynamicObjectType();
var flexDynamicObject  = detailvObjtype.CreateInstance() as DynamicObject;

或根据原有的FDETAILID加载出核算维度对象:

var flexDynamicObject = Kingdee.K3.FIN.GL.App.Core.GLCommonService.LoadObject(this.Context,"BD_FLEXITEMDETAILV",lDetailID);


2,编辑指定维度项的值,如FLEX4(供应商)FLEX5(部门),注意,这里维度项ID值是对应维度物理表中FMASTERID字段的值,因此,通过GetFLEX4MasterIDByNumber()方法获得到的ID值也必须是FMASTERID,而不是FID之类的主键,对于分配型基础资料,通常需要经过去重,取创建组织对应的那条记录

if (flexDynamicObject != null)
{
    //获得新的维度值,二开自行完成方法内容
    flexDynamicObject["Flex4_Id"] = GetFLEX4MasterIDByNumber(strSupplierNumber);
    flexDynamicObject["Flex5_Id"] = 101015;
}


3,各维度项都赋值完成后,需要保存新的核算维度对象并得到真正的新的核算维度组合ID(重要),以备后面使用:

long lNewDetailidID = GLFlexServiceHelper.SaveFlexItemDetailID(this.Context, flexDynamicObject );


4,将这个新的核算维度组合ID赋值给需要用的对象,如单据体中某行数据的核算维度字段:

/// <summary>
/// 获取单据体的dynamicObject
/// </summary>
/// <returns></returns>
private DynamicObjectCollection GetEntityDynamicObject()
{
	Entity entity = this.View.Model.BusinessInfo.GetEntryEntity(SFlexItemEntity);
	return this.View.Model.GetEntityDataObject(entity);
}

//获得单据体指定行号记录
DynamicObjectCollection dyCol = GetEntityDynamicObject("FENTITY");//获取单据体数据集
DynamicObject dy = dyCol.Where<DynamicObject>(p => Convert.ToInt32(p["Seq"]) == iRow + 1).SingleOrDefault();//单据体行数据
if (dy != null)
{
	//给指定行上的核算维度赋值,需要同时指定ID或对象
	dy["DetailID_Id"] = lNewDetailidID ;
	dy["DetailID"] = flexDynamicObject ;
}



上述代码需要添加以下引用:

Kingdee.BOS.Servicehelper.dll

Kingdee.K3.FIN.GL.ServiceHelper.dll


GLFlexServiceHelper---这个需要引用哪个类?

【二开指导】编辑核算维度组合对象

二开生成凭证时,经常会遇到的一个难题是如何生成自己的核算维度对象。在星空系统中,核算维度对象不是一个直接由基础资料构成的对象,而是...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息