通过表单进行跳转到其它单据,并扩展管理维度页签的实现方法原创
金蝶云社区-Tick
Tick
26人赞赏了该文章 2,053次浏览 未经作者许可,禁止转载编辑于2021年05月11日 19:13:48

我们例子的目标:

在项目页签中嵌入一个与项目相关的单据,来维护项目管理其它维度的信息。


Step1:创建一个管理维度的单据

Step2:创建一个用于跳转的普通动态表单

Step3:添加扩展页签



Step1:创建一个管理维度的单据


并关联项目的基础资料 如单据名为:PLM_PROJECT_RES_REPROT (这里PLM请使用二次开发代码缩写字符)


图片.png

添加一个关联的基础资料

图片.png设置单据头表名为:T_EX_PROJECTRES_REPORT   (EX为二开代码缩写字符)


图片.png图片.png


添加一个菜单按钮,绑定保存操作;


添加一个插件,把当前的对象加载到基础资料字段中。


图片.png

#-----Code Start-----


import clr
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.K3.PLM.CFG.Common.BusinessEntity")
clr.AddReference("Kingdee.K3.PLM.Common.Core")
from Kingdee.BOS.Core.Metadata import OperationStatus
from Kingdee.K3.PLM.CFG.Common.BusinessEntity.Manager import BaseObjectManager
from Kingdee.K3.PLM.Common.Core.BOSBridge import PLMContext
def AfterBindData(e):
    if this.View.OpenParameter.Status==OperationStatus.ADDNEW:  #如果是新增视图,需要初始化基础资料字段     
        projectId = this.View.OpenParameter.GetCustomParameter("SourceId");   

        plmctx=PLMContext(this.Context);    
        project=BaseObjectManager.Instance(plmctx).Get(plmctx,projectId);    #查找基础资料对象
        this.Model.SetValue("F_PLM_PROJECT",project);#设置该对象到基础资料字段


#-----Code End-----



Step2、创建用于跳转的动态表单


跳转单据的目的是根据项目id,查找上面的单据是否已经创建,如果已经创建,显示维护界面;如果没有创建显示新增界面


图片.png




图片.png

#----Code start----

import clr
clr.AddReference("Kingdee.K3.PLM.Common.BusinessEntity")
clr.AddReference("Kingdee.K3.PLM.Common.Core")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.Web.Core")
from Kingdee.BOS.Core.Metadata import OperationStatus
from Kingdee.BOS.Core.Metadata import CreateFrom
from Kingdee.BOS.Core.DynamicForm import ShowType
from Kingdee.BOS.Web.Core import CommonSession
from Kingdee.K3.PLM.Common.BusinessEntity.View import PageManager
from Kingdee.K3.PLM.Common.Core.BOSBridge import PLMView
from Kingdee.K3.PLM.Common.Core.BOSBridge import PLMContext
from Kingdee.K3.PLM.Common.Core.Utility import PLMDBUtils

def PreOpenForm(e):
    e.Cancel = True; #取消原有的打开方式,进行跳转到所需的单据(主要是为了进行相关业务转换)
    source=e.OpenParameter.GetCustomParameter("SourceId");#获了传过来的项目标识
    ctx=PLMContext(e.Context);#转PLM用的上下文
    parentView=PageManager.Instance.GetView(ctx, e.OpenParameter.ParentPageId);#还没有View,取父View
    toId=0;
    if source==None:
        source="0";
    oid=PLMDBUtils.Instance.ExecuteScalar(ctx, "SELECT FID FROM T_EX_PROJECTRES_REPORT WHERE FPLMPROJECT="+ source.ToString(),None,None);#通过基础资料字段查询单据的标识
    ed=OperationStatus.ADDNEW;#初始化创建单据视图
    if oid!=None:
        toId=oid;
        ed=OperationStatus.EDIT#数据存在,改为编辑维护单据视图

 PageManager.Instance.ShowBillPage(parentView,"PLM_PROJECT_RES_REPROT",toId,e.OpenParameter.GetCustomParameters(),ed, ShowType.InContainer,None,CreateFrom.Default,"FTab_ResReport")#跳转,注意显示的容器标识为相应页签的Key

#----Code end----

(注,请使用 2020年8月13日以后的补丁)




Step3 添加扩展页签


然后参考https://vip.kingdee.com/article/48864840634185728   帖中的 Step3 将这个跳转的动态表单,嵌入到项目页签中。


图片.png


注意这里的页签标识要与跳转代码中的目标容器标识一致,如这里的 : FTab_ResReport


附:运行的效果


图片.png




--------END----------

赞 26