SaveServiceHelper中saveOperate与save方法有什么区别原创
金蝶云社区-云社区用户n0uK7566
云社区用户n0uK7566
14人赞赏了该文章 5,522次浏览 未经作者许可,禁止转载编辑于2021年07月21日 14:41:02
summary-icon摘要由AI智能服务提供

SaveServiceHelper的save方法不触发数据校验,而saveOperate会。两者都不触发业务规则,但saveOperate会触发注册的操作插件。Save方法保存所有变量、增量和删量,Update方法仅改变变量,增量和删量除外。

SaveServiceHelper中saveOperate与save方法有什么区别

 

日常开发中,难免调用保存操作,苍穹的保存服务SaveServiceHelper类提供了两类方法:save方法和saveOperate方法,那么这两个方法有什么区别呢?

下面写个实例来验证下:

创建一个简单的单据体

image.png

打开:操作代码-选择save-修改-其他控制-校验规则-打开字段值合规性校验

image.png

编写列表插件:

image.png

点击save按钮:

image.png

看到已经返回保存对象,刷新下列表,正常生成了只有单据编号的一条单据:

image.png

点击saveOperate按钮:

image.png

发现保存不成功,必填项校验未通过

说明save方法没有触发数据校验,saveOperate触发了数据校验。

这里补充一个小知识:

saveOperate方法的最后一个变量可以按需设置保存的一些参数值,具体请自行通过其他途径学习。

image.png

那么,这是为什么呢?

 

我们选择保存按钮,打开操作代码-选择save-修改-其他控制-服务插件,看下保存操作只注册了kd.bos.business.plugin.CodeRuleOp这个插件(编码规则插件)

image.png

我们打个断点,执行save方法

image.png

直接返回了执行结果,并没有进入断点

换做saveOperate

image.png

进入了kd.bos.business.plugin.CodeRuleOp#onAddValidators方法,入参已经有6个校验器

,我们的保存操作就是被最后一个MustInputValidator拦截的

 

我们再来看下saveOperate操作会执行业务规则么,新建一个业务规则:

image.png

为了证明配置的无误,我们先截图为证:

image.png

我们给先前校验错误的值赋上数据,执行saveOperate保存

image.png

发现并没有执行业务规则计算,save方法同。

 

这里再扩展补充一下SaveServiceHelper.save和SaveServiceHelper.update的区别

我们改造下代码:

image.png

代码很容易看懂,给查出来的单据备注字段赋值。

先执行save:

image.png

再执行update

image.png

 

发现我们并没有查询其他属性,但是save和update保留了其他属性,只改变了我们重新赋值的数据,在这里,我们看到save和update执行好像一样的效果

我们再次改造下代码:

image.png

代码也很简单,查出原来的单据,并增加一条分录,首先执行save操作:

image.png

成功增加设置的分录,再来执行下update

image.png

发现只改变了备注字段,并没有新加分录

再来看下删除分录:

image.png

也是得出同样的结论,save方法会删除分录,而update方法不会

这里我们得出一个结论:

Save方法会保存所有的变量、增量和删量

Update方法只会改变变量,这里的增量和删量不属于变量

 

总结:

1.        SaveServiceHelper.save方法不会触发校验,SaveServiceHelper.saveOperate则会

2.        SaveServiceHelper.save和SaveServiceHelper.saveOperate都不会触发业务规则,但是SaveServiceHelper.saveOperate会触发注册的操作插件

3.        Save方法会保存所有的变量、增量和删量,Update方法只会改变变量,这里的增量和删量不属于变量

 


图标赞 14
14人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!