审批流程二开:二叉树(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)
最后附上我的代码.注(代码需要修改相应的值才可以运行)
审批流做得越来越好,建议还是参考一下主流的OA审批流,比如说泛微的审批流架构,多做一些优化。
能否介绍一下您这个二开的需求场景和应用大纲呢?
审批流程二开:二叉树(python,感谢周老师)
#需求: 审批流程大多数是:发起人->部门领导->票据审核1->票据审核2->财务总监->总经理->出纳 k3cloud里面不断的新增公...
点击下载文档
本文2024-09-16 17:16:55发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14696.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章