BusinessDataServiceHelper与QueryServiceHelper有什么区别原创
金蝶云社区-云社区用户n0uK7566
云社区用户n0uK7566
30人赞赏了该文章 7,973次浏览 未经作者许可,禁止转载编辑于2021年07月21日 14:14:38
summary-icon摘要由AI智能服务提供

本文主要介绍了在苍穹系统中,两种查询类BusinessDataServiceHelper和QueryServiceHelper的区别。前者查询结果以单据为单位,后者以数据条为单位;前者查询单据体字段无需加标识,后者需加;前者查询基础资料默认包含部分属性,不直接支持非引用属性查询,且需转换才能成DataSet,后者则支持更广泛的属性查询并直接返回DataSet。

BusinessDataServiceHelper与QueryServiceHelper有什么区别

 

在日常的开发中,查询是最常用的业务场景,在苍穹系统,常用的查询类有:

1.        kd.bos.servicehelper.BusinessDataServiceHelper

2.        kd.bos.servicehelper.QueryServiceHelper

3.        那么这两种查询方式有什么区别呢,本文主要以kd.bos.servicehelper.BusinessDataServiceHelper#load和kd.bos.servicehelper.QueryServiceHelper#query这两个方法的区别为例进行说明

我们做个例子来看一下:

1.        首先比较下查询结果

随便创建一个用于测试的简单单据:

image.png

 

列表加两个按钮,注册插件:

image.png

image.png

点击按钮测试:

image.png

image.png

可以看到BusinessDataServiceHelper的查询结果是以“张”为纬度,QueryServiceHelper的查询结果是以“条”为纬度,也就是说:BusinessDataServiceHelper将一张单据总体视为1个独体,而QueryServiceHelper是将每一行分录数据和单据头总体拉平当做一条数据

我们来看一下查询到的结果:

BusinessDataServiceHelper:

image.png

QueryServiceHelper:

image.png

报错了,我们取消查询单据体的字段

 image.png

可以看到:

BusinessDataServiceHelper可以查询出单据头,单据体字段的值,而QueryServiceHelper只能查到单据头字段的值和单据体id,BusinessDataServiceHelper查询出来的基础资料是一个包含masterid,name,number的对象,而QueryServiceHelper查询出来的是基础资料的id

如果你在这里得出结论:QueryServiceHelper只能查到单据头字段的值和单据体id,不能查单据体字段值,那就大错特错

image.png

可以看到,我们在单据体字段前面加上单据体标识,就可以查出来了,在这里,我们看出它们的又一个差别:BusinessDataServiceHelper可以直接查询单据体字段,而QueryServiceHelper查询需要加上单据体标识,为了避免这种兼容性错误,强烈建议大家在写查询字段的时候,单据体字段前面统一加单据体标识

 

在这里告诉大家一个小技巧:

在写过滤条件的时候,基础资料字段可以直接这样写

image.png

当然单据体过滤的时候也可以这样,但是要格外注意的是:

BusinessDataServiceHelper过滤出来的只到单据这一层,具体单据体行还要再次匹配

image.png

而QueryServiceHelper就不会这样

image.png

我们再看下查询引用属性的差别

我们给结算方式的引用属性加上类别、对私支付、描述属性

image.png

执行操作

image.png

可以看到查询出来的 基础资料字段已经附上了引用属性

我们再查一下非引用属性

image.png

当然也查不出来相关属性:

 image.png

但是跟先前说的一样,过滤条件里面是可以用其他属性的:

image.png

QueryServiceHelper是可以正常查询出来非引用属性的

 image.png

还有个区别,做过报表的同事知道:

QueryServiceHelper.queryDataSet结果直接为DataSet

而BusinessDataServiceHelper.load查询出来还要进行下列的转换成为DataSet

image.png

 

总结:

1.        BusinessDataServiceHelper查询结果是以“张”为单位,QueryServiceHelper的查询结果是以“条”为单位,BusinessDataServiceHelper的查询结果和单据结构一致,QueryServiceHelper则是将表头和单据体右关联进行拉平处理

2.        BusinessDataServiceHelper查询基础资料或者单据体属性字段前面可以不写单据体标识,QueryServiceHelper则必须写,未防止这种兼容性错误,强烈建议大家在写查询字段的时候,单据体字段前面统一加单据体标识

3.        BusinessDataServiceHelper查询出的基础资料属性默认只包含masterid,name,number属性,假如有引用属性的话,则也会查询出引用属性,查询不出非引用属性,QueryServiceHelper只要查询字段有的属性都可以查出

4.        BusinessDataServiceHelper需要进行转换才能成为报表所需要的的DataSet,而QueryServiceHelper则提供了结果为DataSet的方法

 

这里列举下其他区别:

 image.png


赞 30