本文介绍了苍穹平台中常用的两个查询工具类:BusinessDataServiceHelper和QueryServiceHelper,在单据查询中的不同使用场景和区别。文章通过六个具体场景,详细说明了在不同查询需求下(如是否查询关联单据、单据体等),两种工具类的实现方式和注意事项,帮助开发者更好地理解和灵活使用这两个工具类。
标签:
BusinessDataServiceHelper,QueryServiceHelper,单据查询
引言:
BusinessDataServiceHelper和QueryServiceHelper这两个是苍穹常用的查询工具类。
初学苍穹的开发者对于它们的认知,可能只限于BusinessDataServiceHelper查出来的数据可以进行update,QueryServiceHelper查出来的数据不可以进行update。
那么对于只有查询的场景,这两种工具在使用和格式上其实都是有区别的,接下来通过本篇文章,可以帮助大家更好的理解BusinessDataServiceHelper和QueryServiceHelper,并在项目中灵活使用
备注:本篇文章旨在讲述BusinessDataServiceHelper和QueryServiceHelper在单据查询中的使用。更多api的介绍,参数说明或者底层实现原理等,可以去开发者门户上搜索相关课程或资料,本文不做赘述
场景一:查询单据,不查询关联单据
举例:在请假申请单中,当请假类型修改之后,根据请假类型和请假人去员工假期系统中获取该请假类型对应的剩余请假天数,不需要关联的人员等其他信息。
实现方式:
1:
使用QueryServiceHelper.queryOne查询单条数据,根据查询条件去另外的单据员工假期管理查询
2:
使用BusinessDataServiceHelper.loadSingle获取单条数据,根据查询条件去另外的单据员工假期管理查询
结论:
该场景下指定需返回的字段即可,类似于sql里的select后接的查询字段,用BusinessDataServiceHelper和QueryServiceHelper都可以。
场景二:查询单据,查询关联单据部分信息
举例:在请假申请单中,去员工假期单据中查询剩余请假天数,返回剩余请假天数和请假人名称等信息。
实现方式
1:
请假天数和用户通过user字段关联,用QueryServiceHelper查询user返回的是该用户的主键id。其他属性需用user.属性名获取。
2:
BusinessDataServiceHelper查询user返回的是DynamicObject对象,其中默认返回的属性包括id,number,name, masterid。
其他没有返回的属性可通过user.属性名获取(!!!前提:必须先在页面的关联控件中的引用属性中勾选需要返回的属性才能查询,否则会报没有该属性的错)。
结论:
QueryServiceHelper需指定关联表的属性,否则不返回
BusinessDataServiceHelper默认返回关联表的部分属性,其他属性需要指定
场景三:查询单据,查询关联单据所有信息
举例:在请假申请单中,去员工假期单据中查询剩余请假天数,返回员工假期的所有属性并返回请假人相关的所有属性。
实现方式
1:
QueryServiceHelper,使用*可查出所有数据
2:
BusinessDataServiceHelper,第一级不支持*,第二级的user.*可查出所有属性
结论:
1. BusinessDataServiceHelper的第一级不支持*查询,第二级支持。比如查询条件为“*,user.*”时,第一级的*不起作用,user会查出来所有的属性。
2. QueryServiceHelper支持*查询,前提也是需要选中引用属性,没有选中的无法获取。
(所有的关联表需要返回的属性都需要在关联字段的引用属性上勾选才能返回)
场景四:查询单据,不查询单据体
在请假申请单中,我们可能需要填写工作交接安排相关的详细信息,这里我们把它做成一个请假申请单的单据体分录,便于具体展示。
例如:获取请假申请单单据头信息,不需要返回工作安排的单据体的信息。
实现方式
1:
BusinessDataServiceHelper不支持*查询,可指定查询单据头中的信息,就不会返回单据体信息
2:
QueryServiceHelper,指定*查询就不会返回单据体信息
结论:
不指定单据体字段,就不会查询单据体,*也无效
场景五:查询单据,查询单据体
举例:在请假申请单中,返回数据是单据头信息+工作安排的单据体信息。
实现方式:
1:
BusinessDataServiceHelper不支持*查询,需要什么属性去查什么属性即可,单据体的属性获取方式为“entryentity.标识”
2:
QueryServiceHelper,这里有queryOne()方法和query()方法,queryOne可查询单条数据,query可查单据体的所有数据,返回值用DynamicObjectCollection接收,返回数据为单据头数据+单条单据体数据。
结论:
单据体标识默认为entryentity,皆可通过“entryentity.标识”方式取值,但BusinessDataServiceHelper不支持*查询
场景六:查询单据,查询单据体,查询子单据体
在单据信息查询中,单据体可以关联子单据体,我们也可以获取到单据体关联的子单据体的信息。
举例:在请假申请单中,我们有了工作交接安排的单据体,然后对应于每一条工作交接安排,都可以细分为具体的几个步骤,我们用一个子单据体来保存这部分数据。获取数据的时候也可以查询到这部分数据。
实现方式
1:
QueryServiceHelper. query()可获取到所有子单据体数据
格式为:entryentity.subentryentity.*
2:
BusinessDataServiceHelper不支持子单据体查询。(涉及到子单据体修改等操作可使用单据体操作接口IEntryOperate)
结论:
QueryServiceHelper获取子单据体数据一般为entryentity.subentryentity.*。
BusinessDataServiceHelper不支持获取子单据体数据,而操作子单据体数据可以用IEntryOperate接口
BusinessDataServiceHelper与Quer …(862.57KB)
推荐阅读