利用Python脚本实现金蝶ERP单据自动审核功能

  • 系统对接顾问

在系统实施过程中,常常需要在单据A审核通过后自动生成并审核单据B。通过BOS平台预置的【服务端服务】中的【自动下推】,可以实现单据间的关联及反写,但无法实现单据自动审核。现在可以通过Python脚本来补充这一功能:

实现方法

  1. 在BOS中打开需要自动生成的下游单据。
  2. 增加【复选框】字段(字段标识:F_IsAutoAudit),只有勾选了这个字段的单据才会执行自动提交审核,以避免对所有单据进行自动审核。(该字段为后台逻辑判断字段,建议加到【其他】页签,避免干扰用户)
  3. 在【操作列表】中找到【保存】,点击【编辑】。
  4. 在【其他控制】-【服务插件】中注册Python脚本。

注意事项

  1. 如果单据启用了审批流,执行该脚本时,会自动跳过审批流直接审核。
  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.Contracts')
clr.AddReference('Kingdee.BOS.ServiceHelper')

# 导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Contracts import *
from Kingdee.BOS.App import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from System import *
from System.Data import *
from System.Text import *
from System.Collections import *
from Kingdee.BOS.App.Data import *

# 引入泛型列表
from System.Collections.Generic import List

def OnPreparePropertys(e):
    e.FieldKeys.Add("F_IsAutoAudit")

def EndOperationTransaction(e):
    idList = List[object]()

    for billObj in e.DataEntitys:
        BillId = str(billObj["Id"])
        F_IsAutoAudit = str(billObj["F_IsAutoAudit"])

        if F_IsAutoAudit == "1" or F_IsAutoAudit == "True":
            idList.Add(BillId)

    if idList.Count <= 0:
        return

    pkArray = idList.ToArray()
    formID = this.BusinessInfo.GetForm().Id
    meta = MetaDataServiceHelper.Load(this.Context, formID)

    submitOption = None # OperateOption.Create()
    submitResult = BusinessDataServiceHelper.Submit(this.Context, meta.BusinessInfo, pkArray, "Submit", submitOption)

    if submitResult.IsSuccess == True:
        auditOption = None # OperateOption.Create()
        auditResult = BusinessDataServiceHelper.Audit(this.Context, meta.BusinessInfo, pkArray, auditOption)

上述代码展示了如何通过Python脚本实现单据A审核后自动生成并审核单据B的功能。