审批流程二开:二叉树(python,感谢周老师)

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

审批流程二开:二叉树(python,感谢周老师)

#需求: 审批流程大多数是:发起人->部门领导->票据审核1->票据审核2->财务总监->总经理->出纳 k3cloud里面不断的新增公司和人员变更。 现在:公司1财务总监变更变了,需要修改公司1财务总监员工任刚明细 公司10总经理变更了,需要修改总经理10的员工任刚明细 公司70总经理变更了,需要修改总经理70的员工任刚明细 #应用场景: 通过试试一下代码。可以通过sql表格设置公司的人员,不在通过岗位任刚实现,还可以用sql表查询到所有公司的人员信息 ![134c678b6b418c8c5bc928d99379cb1.webp](/download/010053f11abdda8440c4bd893b8a2c9c665f.webp) 说明:通过数据库sql表更新审批人、审批岗位。对多组织修改流程非常方便 此程序sql表是通过其他数据库表获取,所有用了存储过程更新。 # 1.BOS->费用报销单->新建基础资料->关联基础资料类型:员工 F_PAEZ_BASECEO 总经理 F_PAEZ_Basecfo 财务总监 F_PAEZ_Basepiaoshen1 票据审核1 F_PAEZ_Basepiaoshen2 票据审核2 F_PAEZ_Basecashier 出纳 ![image.webp](/download/0100941c8d94b29046fe9a0359ddfa07e2b5.webp) ![image.webp](/download/0100b07efcabf1014e22a6c4392dad79178f.webp) # 2.上传代码 # 引入clr运行库 import clr # 添加对cloud插件开发的常用组件的引用 clr.AddReference('System') clr.AddReference('System.Data') clr.AddReference('Kingdee.BOS') clr.AddReference('Kingdee.BOS.Core') clr.AddReference('Kingdee.BOS.App') clr.AddReference('Kingdee.BOS.ServiceHelper') # 导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入) from Kingdee.BOS import * from Kingdee.BOS.Core import * from Kingdee.BOS.Core.Bill import * from Kingdee.BOS.Core.DynamicForm.PlugIn import * from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import * from System import * from System.Data import * from Kingdee.BOS.App.Data import * from System.Collections.Generic import List from Kingdee.BOS.ServiceHelper import * from Kingdee.BOS.Core.Metadata.EntityElement import * # 保存提交触发 def BeforeDoOperation(e): opCode = e.Operation.FormOperation.Operation.ToUpperInvariant(); # 触发操作代码大写,例如保存:SAVE SUBMIT Status=this.View.OpenParameter.Status;#0新增 1查看 2 修改 if (opCode == "SUBMIT"):#opCode == "SAVE" #if Status==0: init()#防止复制单据出错 #复制单据触发流程 def AfterCopyData(e): init() # 开始自动加载代码 def AfterCreateModelData(e): init() def init(): jichuziliao()#基础资料获取 lodeShenPi() # 赋值总经理财务总监 gangWeiXingMing() #更新岗位 #基础资料获取 def jichuziliao(): #全局函数定义 global billObj global orgName #组织名称内码 global orgNum #组织名称ID global gcxm global gcName #工程项目名称编码 billObj = this.View.Model.DataObject; # 单据头的数据包,即单据的数据包 orgObj = billObj["OrgID"]; # DynamicObject类型,基础资料、组织、辅助资料取值均是DynamicObject if (orgObj == None): # 如果是空系统会报错 orgName ="" orgNum ="" else: orgNum = ("{0}").format(orgObj["Number"]) orgName = ("{0}").format(orgObj["Name"]) gcxm = billObj["F_PAEZ_Assistant1"]; # DynamicObject类型,基础资料、组织、辅助资料取值均是DynamicObject if (gcxm == None): gcName = "无工程项目" else: gcName = ("{0}").format(gcxm["Fdatavalue"]) # 更新函数 def lodeShenPi(): jichuziliao()#基础资料获取 # 获取当前组织ID # ceo=str(emp(orgNum+"总经理")) # result = DBUtils.ExecuteScalar(this.Context,sql,None); ceo = str(ceocfo("ceo", orgName)) cfo = str(ceocfo("cfo", orgName)) piaoshen1 = str(ceocfo("piaoshen1", orgName)) piaoshen2 = str(ceocfo("piaoshen2", orgName)) cashier = str(ceocfo("cashier", orgName)) # this.View.ShowMessage(ceo+" "+cfo + " " +piaoshen1 + " "+ piaoshen2 + " "+cashier) if (ceo != None): this.Model.SetItemValueByID("F_PAEZ_BASEceo", ceo, 0); if (cfo !=None): this.Model.SetItemValueByID("F_PAEZ_BASEcfo", cfo, 0); if (piaoshen1 !=None): this.Model.SetItemValueByID("F_PAEZ_BASEpiaoshen1", piaoshen1, 0); if (piaoshen2 !=None): this.Model.SetItemValueByID("F_PAEZ_BASEpiaoshen2", piaoshen2, 0); if (cashier !=None): this.Model.SetItemValueByID("F_PAEZ_BASEcashier", cashier, 0); # 刷新单据 this.View.ParentFormView.Refresh(); # 获取员工FID def ygid(empName): # 员工ID sql = "select FID from T_HR_EMPINFO_L where FNAME='{0}'".format(empName); #raise Exception("问题SQL:"+sql);#SQL排错 result = DBUtils.ExecuteScalar(this.Context, sql, None); if (result == None): result = "" # result ="1658754"马保山 return result # 获取ceocfo def ceocfo(emptype, orgName): # emptype 员工类型 如总经理,财务总监 orgName 组织名称 sql = "select {0} from gongsiweihu2020 where NAME='{1}'".format(emptype, orgName); # raise Exception("问题SQL:"+sql);#SQL排错 empName = DBUtils.ExecuteScalar(this.Context, sql, None); if empName!=None: result = ygid(empName) else: result="" return result #岗位赋值 def gangWeiXingMing(): jichuziliao()#基础资料获取 if(gcName=="无工程项目"): gangwei = gangweiID(orgNum + "票据审核") ##无工程项目 else: gangwei = gangweiID(orgNum + "工程票据审核") this.Model.SetItemValueByID("F_PAEZ_BASEpiaoshengangwei", gangwei, 0); this.View.ParentFormView.Refresh(); # 岗位编码 def gangweiID(zhi): sql = "select FPOSTID from T_ORG_POST_L where FNAME='{0}'".format(zhi); # raise Exception("问题SQL:"+sql);#SQL排错 result = DBUtils.ExecuteScalar(this.Context, sql, None); return result # 执行存储过程 def proc(): # 执行MSSQL存储过程 DBUtils.Execute(this.Context, "/*dialect*/proc_gongsiweihu2020"); this.View.ParentFormView.Refresh(); # 值更新事件 def DataChanged(e): fldKey = e.Field.Key.ToUpperInvariant(); # 字段标识大写 # 根据工程项目字段更新值 if (fldKey == "F_PAEZ_ASSISTANT1"): gangWeiXingMing() # 把字段隐藏 def AfterBindData(e): name = this.Context.UserName # this.View.ShowMessage(name) if (name == "马保山"): proc() # 更新总经理财务总监存储过程 this.View.GetControl("F_PAEZ_BASEceo").Visible = True; # False:隐藏,True:显示 this.View.GetControl("F_PAEZ_BASEcfo").Visible = True; # False:隐藏,True:显示 this.View.GetControl("F_PAEZ_BASEpiaoshen1").Visible = True; # False:隐藏,True:显示 this.View.GetControl("F_PAEZ_BASEpiaoshen2").Visible = True; # False:隐藏,True:显示 this.View.GetControl("F_PAEZ_BASEcashier").Visible = True; # False:隐藏,True:显示 this.View.GetControl("F_PAEZ_BASEpiaoshengangwei").Visible = True; # False:隐藏,True:显示 this.View.GetControl("F_PAEZ_BASEceo").Enabled = True; else: this.View.GetControl("F_PAEZ_BASEceo").Visible = False; # False:隐藏,True:显示 this.View.GetControl("F_PAEZ_BASEcfo").Visible = False; # False:隐藏,True:显示 this.View.GetControl("F_PAEZ_BASEpiaoshen1").Visible = False; # False:隐藏,True:显示 this.View.GetControl("F_PAEZ_BASEpiaoshen2").Visible = False; # False:隐藏,True:显示 this.View.GetControl("F_PAEZ_BASEcashier").Visible = False; # False:隐藏,True:显示 this.View.GetControl("F_PAEZ_BASEpiaoshengangwei").Visible = False; # False:隐藏,True:显示 this.View.GetControl("F_PAEZ_BASEceo").Enabled = False; # 3.感谢周老师 此次二开学习到周老师的第三篇就可以了。使用过程经常报错如:换行问题、None值问题在文章2里都提到过。 [周玉立老师的课程](https://wenku.my7c.com/article/348928482073958912?fromAction=POST_ARTICLE&productLineId=1) 最后附上我的代码.注(代码需要修改相应的值才可以运行)

ceocfo8.27.zip


审批流做得越来越好,建议还是参考一下主流的OA审批流,比如说泛微的审批流架构,多做一些优化。


能否介绍一下您这个二开的需求场景和应用大纲呢?


审批流程二开:二叉树(python,感谢周老师)

#需求: 审批流程大多数是:发起人->部门领导->票据审核1->票据审核2->财务总监->总经理->出纳 k3cloud里面不断的新增公...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息