YonQL使用指南

注:YonQL的语法类似mysql,本文主要讲解差异及常见操作

一、注意事项

  • 主元数据不允许有别名, ⼦元数据必须有别名
  • 1, 单表查询, 元数据不允许有别名
  • 2, 多表查询, 主元数据不允许有别名, ⼦元数据必须有别名
  • 3, ⽬前⽀持left join, inner join, 暂不⽀持right join 示

二、单表查询

2.1、简单查询

注:YonQL简单查询,除了like模糊查询,语法和mysql的基本一致

释义 关键字 语句(from 后边为数据建模下的实体的URI) 备注
全模糊查询 like select new1,new2,new3 from GT22161AT175.GT22161AT175.province where provinceName like '山' like 不需要加%,会自动转换成 like %山%,如果加上%,会被转义成 %\%山\%%
左模糊查询 leftlike select new1,new2,new3 from GT22161AT175.GT22161AT175.province where provinceName leftlike '河' like '河%',不需要加%
右模糊查询 rightlike select new1,new2,new3 from GT22161AT175.GT22161AT175.province where provinceName rightlike '东' like '%东',不需要加%

2.2、分页查询

注:与mysql的区别:mysql的limit的第一参数是开始获取数据的下标,第二个参数是该下标后要返回数据的条数。没有自动计算分页

分页 语法 备注
select new1,new2,new3 from GT22161AT175.GT22161AT175.province where dr = 0 order by cityCode asc limit 2,6 limit page,size (例:8条数据、size是每页6条数、即:一共两页数据。返回page=2 的内容 (dr=0 未删除的数据))

三、 多表查询

3.1、前提条件

注:与mysql的区别:它使用的前提是实体之间要有 关联关系,比如主子表或两个元数据之间有单选引用关系 才可以使用

3.2、基于关联关系(主子表)

对主子元数据接口的关联查询

图

关键字 语法 备注 其他关键字
left join select son_id.main_id.mainCode as mainCode,
son_id.main_id.mainName as mainName,
son_id.sonCode,son_id.sonName,
grandsonCode,grandsonName
from GT22161AT175.GT22161AT175.grandson
left join son_id son on son_id=son.id
left join son_id.main_id main
1)结果集不能使用t.*,必须写清楚属性名。运行时会报错
2)如果关联关系在元数据中存在,不需要写关联条件
left join、left alone join、 inner join、inner alone join、alone join、等

var sql = "select son_id.sonCode,son_id.sonName,grandsonCode,grandsonName,son_id.main_id.mainCode as mainCode,son_id.main_id.mainName as mainName from GT22161AT175.GT22161AT175.grandson left join son_id son on son_id=son.id left join son_id.main_id main on son_id.main_id.id =main.id";
var res = ObjectStore.queryByYonQL(sql);

3.3、基于引用关系(引用参照)

实体1:党组织

图

实体2:党员

图

党员中的一个字段 单选引用 党组织。


// 入参:党组织名称 
var mecName = request.mecName;

// 根据入参党组织查询该党组织下所有党员数据
var sql = "select dangzuzhiid.jianchen,xingming,rudangriqi,xueli from GT27287AT208.GT27287AT208.zs_Members  left join dangzuzhiid d on dangzuzhiid = d.id where dangzuzhiid.jianchen = '"+ mecName + "' " //+ mecName ;
var res = ObjectStore.queryByYonQL(sql)

四、常见问题

4.1.自建表和系统表是否支持关联查询?

自建和系统表 不支持 关联查询; 因为YonQL查询时,其实是需要传domainKey参数的,比如:
ObjectStore.queryByYonQL(sql,"developplatform")
只不过,标准版自建表的查询第二个参数是“developplatform”可以省略;但原厂表查询时,必须传第二个参数(领域的domainKey) 。
如果业务上有这种场景,系统表和自建表可以分开查询

4.2.跨领域原厂表是否支持关联查询?

不同领域domainKey不一致,ObjectStore.queryByYonQL(sql,"developplatform") 只支持传一个领域, 不同领域的表也不在一个库中所以不支持。

4.3.原厂单据domainKey如何获取?

举例:F12查看请求,从header中可以找到对应单据所在领域的domainkey

图

4.4.YonQL是否支持增删改原厂数据?

不支持,原厂数据的增删改操作请使用开放平台接口,YonQL只能用于查询。

4.5.YonQL如何查询特征字段

  • 第一步:业务对象节点,找到对应实体,以销售订单为例

图

  • 第二步:点击查看,进入实体详情,搜索特征即可看到所有特征字段(注意关注:实体URI、服务域、属性,后续编写YonQL需要用到)

主表

图

子表

图

  • 第三步:拼写YonQL

主表(查询主表数据,主表特征)


var sql = "select agentId.name,code,orderDefineCharacter.voucherorder_zdy,orderDefineCharacter.Cus_type_tez from voucher.order.Order";
var res = ObjectStore.queryByYonQL(sql,"udinghuo");

子表 (查询主表数据,主表特征,子表数据,子表特征等)


var sql = "select productId,productId.code,productId.name,qty,"+
" orderId.code,orderId.agentId.name,orderId.orderDefineCharacter.voucherorder_zdy,orderId.orderDefineCharacter.Cus_type_tez," +
" orderDetailCharacteristics.LL01,orderDetailCharacteristics.LI02 " +
" from voucher.order.OrderDetail";
var res = ObjectStore.queryByYonQL(sql,"udinghuo");

查询结果

图

Copyright © 用友 -【生态技术部】 2022-2023 all right reserved,powered by Gitbook修订时间: 2023-12-14 10:31:37

results matching ""

    No results matching ""