Python实现列表对暂存的单据批量保存原创
金蝶云社区-CQ周玉立
CQ周玉立
41人赞赏了该文章 5987次浏览 未经作者许可,禁止转载编辑于2023年05月24日 17:12:16

场景一:在配置了自动下推之后,由于下游单据校验规则不通过,上游单据可能会审核不通过,这个时候可以在设置【自动下推】的时候,勾选【保存失败自动暂存】,如果批量审核或者由于分单可能会生成多暂存的下游单据,那么数据修复之后,就需要一张一张单据点开去保存,非常耗费时间。

场景二:列表批量下推单据时,点击【生成全部】之后,校验不通过的单据也会自动暂存。

类似于以上2个场景,可以通过这个Python脚本实现列表批量保存单据。

实现方法:

  1. 在BOS打开需要批量保存的单据。

  2. 在【操作列表】中,新增一个空操作(操作代码:DoNothing-BatchSave,操作名称:空操作-批量保存),一定要修改操作代码和操作名称,便于后面查询,养成良好的习惯。

  3. 点开【其他控制】-【服务插件】,注册Python脚本。

  4. 在【列表菜单】中增加按钮【批量保存】,然后在按钮的【点击事件】中【调用表单操作】:空操作-批量保存。



#参考代码:
##****************************保存服务插件*******************
#引入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.DataEntity')
clr.AddReference('Kingdee.BOS.Contracts')
clr.AddReference('Kingdee.BOS.ServiceHelper')
#导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Contracts import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.DataEntity 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 *
def EndOperationTransaction(e):
    pkIds = List[object]();
    for billObj in e.DataEntitys:
        billId=billObj["Id"];
        pkIds.Add(billId);
    formID=this.BusinessInfo.GetForm().Id;
    meta = MetaDataServiceHelper.Load(this.Context, formID);
    billObjects=BusinessDataServiceHelper.Load(this.Context, pkIds.ToArray(), meta.BusinessInfo.GetDynamicObjectType());
    saveRslt=BusinessDataServiceHelper.Save(this.Context, meta.BusinessInfo,billObjects , None, "Save");
    if (saveRslt.IsSuccess == False):
        ss=saveRslt.ValidationErrors[0].Message;
        raise Exception(("保存出错:{0}").format(ss));


赞 41