在项目页签上扩展的单据并进行数据操作的示例原创
金蝶云社区-Tick
Tick
18人赞赏了该文章 2,010次浏览 未经作者许可,禁止转载编辑于2021年11月19日 15:51:11

   本示例旨在说明如何对嵌入单据的单据与PLM业务对象进行关联性扩展的方法; 同时通过脚本插件来进行业务处理的方式。脚本演示了获取当前PLM业务对象的生命周期阶段与创建的扩展字段值的方法,演示了如何获取PLM业务对象的字段值来对单据体选单数据进行过滤的方法。



Step 1创建新单据用于业务扩展

Step 2: 与PLM系统业务对角进行关联性(项目)

Step 3: 通过子单据头分离单据中的字段数据表存储

Step 4单据绑定到标准业务对象中(项目)

Step 5: 用脚本插件来编写单据中业务



Step 1、创建一个单据来显示并维护新业务维度数据:


image.png

注意:单据标识(标识4位置)使用开发项目标识字符开头,如“EPX_”



Step2: 设置好与PLM系统的数据关联性:

在单据的主单据头中,设置表名为 "T_PLM_PDM_BASE"

image.png

注意:这里用T_PLM_PDM_BASE表,但并不用于数据表存储,一定不要把字段设置到单据头上(也就是保存到这个表中),以免二开数据串到标准PLM系统中,这里这样设置只是为了作数据关联。


Step 3: 添加子单据头,用于存储这个单据的所有字段数据

   a) 添子单据头

image.png


    b) 确保单据上的每一个字段,都设置“实体”为上面创建的子单据头

image.png

  c) 添加相关的操作菜单与操作

image.png


***特别注意***: 不要在单据菜单中作删除操作,否则关联表 T_PLM_PDM_BASE 的数据会导致删除,从而会影响PLM标准的业务。



Step 4:将该单据绑定到标准业务系统中界面中


将上面创建的单据关联到项目的页签中 ,具体可参考: 在业务对象中关联另一类业务对象的方法

项目页签表单单据  名称:  项目对象    标识:PLM_STD_PROJECTOBJECT

任务页签表单单据  名称任务对象   标识:PLM_STD_TASKOBJECT

物料页签表单单据  名称:物料平台   标识:PLM_CFG_MATERIALPLATFORM



image.png

设置单据绑定的协议性参数(位置5),具体参数参考上面引用帖


下图为运行的效果:


image.png


Step 5: 用脚本插件来干预单据中的业务示例


  a)在PLM扩展字段单据中给项目添加一个扩展字段模板

image.png


  b)在项目业务类型上绑定这个扩展字段

image.png


   c)这样,项目的基本属性中就会有这个扩展字段

image.png


d)在新建的单据中,添加业务插件

  业务干预示例1:通过获取当前PLM业务对象的ID标识,查询了扩展字段中项目新加的字段值,并应用于单据体制造BOM选单的过滤,如:当前项目的扩展字段值(研发用途)为“通用”时,在上面创建的单据的单据体选制造BOM("物料清单")时,会只可以选制造系统的BOM 用途字段为“通用”的BOM。

   业务干预示例2:在数据绑定事件中,通过判断项目的状态是否“完成",如果完成则锁定界面不可编辑。


image.png


脚本代码示例说明:


import clr;

clr.AddReference("Kingdee.BOS.App") #添加引用的程序集

from Kingdee.BOS.App.Data import DBUtils #导入BOS平台的数据操作组件



global usefor #设置一个全局变量

usefor="" #初始值为空串


def OnLoad(e):

    global usefor #使用全局变量

    #获取当前的PLM业务对象标识

    plmId=this.View.OpenParameter.GetCustomParameter("plm_param_SourceId").ToString()

    #在扩展字段表:T_PLM_PDM_BASE_0 查找业务对象的扩展字段值

    sql="SELECT F_EPX_EX1_USERFOR FROM T_PLM_PDM_BASE_0 WHERE FID="+plmId.ToString()  

    r=DBUtils.ExecuteDynamicObject(this.View.Context,sql)[0]

    usefor=r.F_EPX_EX1_USERFOR.ToString()#把业务对象值,保存到全局变量,以在过滤时使用


def AfterBindData(e):

    plmId=this.View.OpenParameter.GetCustomParameter("plm_param_SourceId").ToString()

    #查询当前业务对象的名称(多语言),编码,与生命阶段标识

    sql="SELECT b.FNAME,a.FCODE,a.FLIFECIRCLESTAGE FROM T_PLM_PDM_BASE a INNER JOIN T_PLM_PDM_BASE_L b ON(a.FID=b.FID AND b.FLOCALEID="+this.View.Context.UserLocale.LCID.ToString()+") WHERE a.FID="+plmId

    r=DBUtils.ExecuteDynamicObject(this.View.Context,sql)[0]

    #将当前的项目显示在单据的提示标签中

    this.View.GetControl("F_EXP_Notice").Text = r.FNAME.ToString()+":"+r.FCODE.ToString()

    status=r.FLIFECIRCLESTAGE.ToString()

    if status=="AI": #项目除非为完成,AI表示完成,参考 T_PLM_CFG_STAGE表

        this.View.ShowMessage(r.FNAME.ToString()+"已经完成,不能编辑!");

        this.View.LockBill() #锁定单据


def BeforeF7Select(e):#选单前事件

    global usefor #使用全局变量

    if usefor!="" and e.FieldKey.ToUpper()=="F_EPX_BOMS":#由单据体中的基础资料字段选单

        e.ListFilterParameter.Filter="FBOMUSE="+usefor#传到制造的物料清单的用途字段以过滤






----END---

赞 18