SaveServiceHelper的save方法不触发数据校验,而saveOperate会。两者都不触发业务规则,但saveOperate会触发注册的操作插件。Save方法保存所有变量、增量和删量,Update方法仅改变变量,增量和删量除外。
SaveServiceHelper中saveOperate与save方法有什么区别
日常开发中,难免调用保存操作,苍穹的保存服务SaveServiceHelper类提供了两类方法:save方法和saveOperate方法,那么这两个方法有什么区别呢?
下面写个实例来验证下:
创建一个简单的单据体
打开:操作代码-选择save-修改-其他控制-校验规则-打开字段值合规性校验
编写列表插件:
点击save按钮:
看到已经返回保存对象,刷新下列表,正常生成了只有单据编号的一条单据:
点击saveOperate按钮:
发现保存不成功,必填项校验未通过
说明save方法没有触发数据校验,saveOperate触发了数据校验。
这里补充一个小知识:
saveOperate方法的最后一个变量可以按需设置保存的一些参数值,具体请自行通过其他途径学习。
那么,这是为什么呢?
我们选择保存按钮,打开操作代码-选择save-修改-其他控制-服务插件,看下保存操作只注册了kd.bos.business.plugin.CodeRuleOp这个插件(编码规则插件)
我们打个断点,执行save方法
直接返回了执行结果,并没有进入断点
换做saveOperate
进入了kd.bos.business.plugin.CodeRuleOp#onAddValidators方法,入参已经有6个校验器
,我们的保存操作就是被最后一个MustInputValidator拦截的
我们再来看下saveOperate操作会执行业务规则么,新建一个业务规则:
为了证明配置的无误,我们先截图为证:
我们给先前校验错误的值赋上数据,执行saveOperate保存
发现并没有执行业务规则计算,save方法同。
这里再扩展补充一下SaveServiceHelper.save和SaveServiceHelper.update的区别:
我们改造下代码:
代码很容易看懂,给查出来的单据备注字段赋值。
先执行save:
再执行update
发现我们并没有查询其他属性,但是save和update保留了其他属性,只改变了我们重新赋值的数据,在这里,我们看到save和update执行好像一样的效果
我们再次改造下代码:
代码也很简单,查出原来的单据,并增加一条分录,首先执行save操作:
成功增加设置的分录,再来执行下update
发现只改变了备注字段,并没有新加分录
再来看下删除分录:
也是得出同样的结论,save方法会删除分录,而update方法不会
这里我们得出一个结论:
Save方法会保存所有的变量、增量和删量
Update方法只会改变变量,这里的增量和删量不属于变量
总结:
1. SaveServiceHelper.save方法不会触发校验,SaveServiceHelper.saveOperate则会
2. SaveServiceHelper.save和SaveServiceHelper.saveOperate都不会触发业务规则,但是SaveServiceHelper.saveOperate会触发注册的操作插件
3. Save方法会保存所有的变量、增量和删量,Update方法只会改变变量,这里的增量和删量不属于变量
推荐阅读