Python脚本实现保存自动提交审核原创
金蝶云社区-CQ周玉立
CQ周玉立
114人赞赏了该文章 16453次浏览 未经作者许可,禁止转载编辑于2022年08月09日 15:37:11

在系统实施过程中,我们经常会遇到这样的需求:单据A审核通过之后,自动生成单据B,并自动审核,在没有开发资源支持的情况下,通过BOS平台预置的【服务端服务】里面的【自动下推】可以很方便的实现这一功能,并且可以实现单据间的关联及反写,但是却无法实现单据自动审核,现在可以通过Python脚本来补充这一功能:

实现方法:

1.在BOS中打开需要自动生成的下游单据。

2.增加【复选框】字段(字段标识:F_IsAutoAudit),自动审核,这个字段勾选的单据才执行自动提交审核,以达到不对所有单据进行自动审核的控制。(该字段 为后台逻辑判断字段,建议加到【其他】页签,避免干扰用户!!!)

2.在【操作列表】中找到【保存】,点击【编辑】

3.在【其他控制】-【服务插件】中注册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.Orm 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
from Kingdee.BOS.ServiceHelper import *

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;

    subResult =BusinessDataServiceHelper.Submit(this.Context,meta.BusinessInfo,pkArray,"Submit",submitOption);
    if (subResult .IsSuccess == True):
        auditOption = None;
        auditResult = BusinessDataServiceHelper.Audit(this.Context,meta.BusinessInfo,pkArray,auditOption);


网页复制代码,会有格式问题,如需代码,请下载附件!

赞 114