销售订单变更单审核后有条件地自动生效二开案例
销售订单的变更目前主推是使用销售订单新变更单方式,而老变更方式是通过销售订单下推销售订单变更单方式实现的,两者各有优缺点,新变更单方式支持自定义字段的变更,且一些后面版本添加的新功能只会考虑新变更方式,比如受托加工类的销售订单变更保存时校验一些上下游数据时只会考虑新变更单方式,老变更方式不会考虑了,而且老变更单方式基本上也不会维护,只非有比较严重的Bug才会改进,因此建议能用新变更单方式就不要用老变更单方式。老变更单只支持特定字段的变更,不支持自定义字段变更,但它有个优势就是一张多条明细的销售订单能一条一条明细分别下推并生成多张销售订单变更单(即一张销售订单可以同时存在多张未生效的销售订单变更单),而新变更单方式目前不能维持一个销售订单对应多个未生效的销售新变更单。
审核自动生效默认是通过销售管理系统参数控制,它只能根据组织来隔离参数配置,如果想实现按销售订单变更单上的字段动态决定审核后是否生效,标准默认就不能实现。通过销售订单变更单的工作流程配置审核后动态根据条件调用生效操作其实也是不行的,因为销售订单变更单生效功能写在表单插件里而不是服务端插件,但审核时服务端插件会根据参数决定是否生效,审核服务端插件会通过代码 this.Option.TryGetVariableValue("EffectiveAfterAudit", out effectiveAfterAuditOption); 读取变量 EffectiveAfterAudit 的值,如果此值为1或者销售管理系统参数里勾选了'订单变更单审核后即生效',则审核时自动生效。如标题所示,如果要条件地控制审核自动生效,只需要动态地在服务端插件中设置变量 EffectiveAfterAudit 即可,下面使用Python插件简单地说明下如何根据销售订单变更单的单据类型决定是否要审核自动生效,首先将销售管理系统参数中的'订单变更单审核后即生效'去掉勾选,然后扩展销售订单变更单,在审核操作上挂个Python插件,如下图1-1所示:
图1-1
下面为Python带注释的代码文本(因为网页文本复制会转义空格字符,所以不要直接复制以下文件到BOS IDE里面,请使用文章后面附件里的文本):
import clr 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') from System import * from System.Collections.Generic import * from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * from Kingdee.BOS.App.Data import * from System.Data import * from Kingdee.BOS.Orm import * def OnPreparePropertys(e): e.FieldKeys.Add("FBillTypeID"); #这里要追加下面的条件里面用到的字段Key, def BeginOperationTransaction(e): if e.DataEntitys is not None and e.DataEntitys.Length == 1: data = e.DataEntitys[0]; if data["FBillTypeID_Id"] == "6e4b730a35eb4d0da8298ec1e5cc63f1": #这里模拟如果是标准销售订单变更单,就审核自动生效,其它类型(比如退货订单变更单)审核不生效 this.Option.SetVariableValue("EffectiveAfterAudit", "1"); #上面的条件可以改为客户想要的结果,比如销售订单变更单据上的有个二开字段F_ORA_NeedAutoEffect,如果此值为1则自动生效,否则不生效 #就可以写成 if data["F_ORA_NeedAutoEffect"] == "1": #同时要确保OnPreparePropertys方法里面追加了e.FieldKeys.Add("F_ORA_NeedAutoEffect");
上面的表达式片段 and e.DataEntitys.Length == 1: 作个解析,如果是在销售订单变更单列表里选择多个单据去审核时,表达式 e.DataEntitys 是有多个的,这个地方并不能干预第一个单要审核自动生效,但第二个单不要审核自动生效(如果反编译销售订单变更单审核服务端插件 Kingdee.K3.SCM.App.Sal.ServicePlugIn.SaleOrderChange.Audit 就能明白为何干预不了),所以批量审核多张单时不启作用,只能每次审核一个单。
以下为Python插件源代码附件:
销售订单变更单审核后有条件地自动生效二开案例
本文2024-09-23 02:47:18发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-154704.html