【二开指导】编辑核算维度组合对象
二开生成凭证时,经常会遇到的一个难题是如何生成自己的核算维度对象。在星空系统中,核算维度对象不是一个直接由基础资料构成的对象,而是一个弹性域对象,它是由多个核算维度项组合而成的。
编辑核算维度组合对象的一般思路是:首先,得到一个核算维度对象,然后给对象中指定的维度项赋值,接着保存编辑好的核算维度对象,最后,将这个对象赋值给当前凭证。
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---这个需要引用哪个类?
【二开指导】编辑核算维度组合对象
二开生成凭证时,经常会遇到的一个难题是如何生成自己的核算维度对象。在星空系统中,核算维度对象不是一个直接由基础资料构成的对象,而是...
点击下载文档
本文2024-09-16 18:16:42发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-21097.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章