Python实现列表对暂存的单据批量保存原创
46人赞赏了该文章
7,889次浏览
未经作者许可,禁止转载编辑于2023年05月24日 17:12:16
场景一:在配置了自动下推之后,由于下游单据校验规则不通过,上游单据可能会审核不通过,这个时候可以在设置【自动下推】的时候,勾选【保存失败自动暂存】,如果批量审核或者由于分单可能会生成多暂存的下游单据,那么数据修复之后,就需要一张一张单据点开去保存,非常耗费时间。
场景二:列表批量下推单据时,点击【生成全部】之后,校验不通过的单据也会自动暂存。
类似于以上2个场景,可以通过这个Python脚本实现列表批量保存单据。
实现方法:
在BOS打开需要批量保存的单据。
在【操作列表】中,新增一个空操作(操作代码:DoNothing-BatchSave,操作名称:空操作-批量保存),一定要修改操作代码和操作名称,便于后面查询,养成良好的习惯。
点开【其他控制】-【服务插件】,注册Python脚本。
在【列表菜单】中增加按钮【批量保存】,然后在按钮的【点击事件】中【调用表单操作】:空操作-批量保存。
#参考代码: ##****************************保存服务插件******************* #引入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));
赞 46
46人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读