FQL

一、什么是FQL

  • FQL是能够在APL里使用的类SQL查询语句,开发人员能够在APL中使用FQL查询企业中的业务数据

二、FQL语法

  • 目前支持的语法:

    SELECT
        字段名1 [, 字段名2 ...]
        [FROM 对象apiName
        [WHERE where_condition]
        [ORDER BY {col_name | expr | position}
          [ASC | DESC], ...]
        [LIMIT {[offset,] row_count | row_count OFFSET offset}]
    

    注意项

    • 不支持select *查询所有字段,只能通过select field1, field2...按需查找相关字段
    • limit默认为10,最大值为100,offset默认为0
    • 使用OR条件需要单独开通,请联系销售人员下订单开通产品:【对象列表筛选支持或】

三、Where条件支持的操作符

  • 与查询:AND
select name from object_227xW__c where (field_rzv5M__c is null and field_rzv5M__c <= 100) order by last_modified_time desc limit 10 offset 0;
  • 或查询:OR(SQL中AND运算符的优先级高于OR运算符,想要优先执行OR运算符时,需要使用括号)
select name from object_227xW__c where (field_rzv5M__c is null or field_rzv5M__c <= 100) order by last_modified_time desc limit 10 offset 0;
  • 判断相等和不相等:=,!=
select _id, field_rzv5M__c, name from object_227xW__c where field_oc43W__c = '13988523405' limit 10 offset 0;
select _id, field_rzv5M__c, name from object_227xW__c where field_oc43W__c != '13988523405' limit 10 offset 0;
select _id, field_rzv5M__c, name from object_227xW__c where field_rzv5M__c = 100 limit 10 offset 0;
select _id, field_rzv5M__c, name from object_227xW__c where field_rzv5M__c != 100 limit 10 offset 0;
  • 大于:>,小于:<
select _id, field_rzv5M__c, name from object_227xW__c where field_rzv5M__c > 100 limit 10 offset 0;
select _id, field_rzv5M__c, name from object_227xW__c where field_rzv5M__c < 100 limit 10 offset 0;
  • 大于或等于:>=,小于或等于:=<
select _id, field_rzv5M__c, name from object_227xW__c where field_rzv5M__c >= 100 limit 10 offset 0;
select _id, field_rzv5M__c, name from object_227xW__c where field_rzv5M__c <= 100 limit 10 offset 0;
  • 模糊查询:like,not like,当 like 'xx' 没有放 %时相当于=
select _id, field_rzv5M__c, name from object_227xW__c where field_oc43W__c like '%88523%';
select _id, field_rzv5M__c, name from object_227xW__c where field_oc43W__c like '%88523';
select _id, field_rzv5M__c, name from object_227xW__c where field_oc43W__c like '88523%';
select _id, field_rzv5M__c, name from object_227xW__c where field_oc43W__c not like '%88523%';
  • null值判断:is null,is not null
select _id, field_rzv5M__c, name from object_227xW__c where field_rzv5M__c is null;
select _id, field_rzv5M__c, name from object_227xW__c where field_rzv5M__c is not null;
  • 数组包含:@>,适用于单元、多选、人员、部门等数据类型为List的字段
select _id, field_D8JyW__c, name from object_227xW__c where field_D8JyW__c @> ARRAY['option1', 'option2'];
  • in语句:IN,NOT IN
select _id, field_rzv5M__c, name from object_227xW__c where field_rzv5M__c IN (21, 100);
select _id, field_rzv5M__c, name from object_227xW__c where field_rzv5M__c not IN (21, 100);
  • between语句:BETWEEN AND,NOT BETWEEN AND
select _id, field_rzv5M__c, name from object_227xW__c where field_rzv5M__c BETWEEN 21 and 100;
select _id, field_rzv5M__c, name from object_227xW__c where field_rzv5M__c not BETWEEN 21 and 100;
  • 支持字段间的比较,不支持in,between,@>等操作符
select name from AccountObj where last_modified_time > create_time;
select name from AccountObj where name != firstName;
select name from AccountObj where name = firstName;
select name from AccountObj where name <= firstName;

四、代码案例

Groovy:

String sql = "select name from object_227xW__c"

SelectAttribute att = SelectAttribute.builder()
  .needCount(true)
  .build()

def (Boolean error, QueryResult queryResult, String message) = Fx.object.select(sql, att)
if (error) {
  log.info("select error: " + message)
} else {
  log.info(queryResult)
}
List dataList = queryResult.dataList;
dataList.each { it->
  Map map = (Map) it
  log.info(map['field_rzv5M__c'])
}
2022-08-08
0 3