一、返回类型为QueryTemplate
QueryTemplate作为关联查询的条件的返回结果,更加高效。
除非QueryTemplate的查询方式不能满足需求,否则优先推荐用使用QueryTemplate返回类型函数,用此方法返回的范围数据没有上限,并且执行效率高。
#1.1 函数编写模板:
Groovy:
QueryTemplate template1 = QueryTemplate.AND( ["name":Operator.LIKE("测试")], ["field_g7Zeh__c":Operator.LTE("测试单行文本")] ) QueryTemplate template2 = QueryTemplate.AND( ["owner":Operator.LIKE("1000")], ["record_type":Operator.EQ("default__c")] ) //QueryTemplate使用OR条件需要单独开通,请联系销售人员下订单开通产品:【对象列表筛选支持或者】 QueryTemplate template3 = QueryTemplate.OR(template1,template2) return template3 //查询条件支持 // product_id 为查找关联字段,查询模版支持筛选查找关联对象下的name字段符合某种条件的结果 QueryTemplate template = QueryTemplate.AND( ["product_id.name":Operator.EQ("测试")] ) return template
Java:
import java.util.List; import java.util.Map; public class RangeTemplate implements IQueryTemplateAction { /** * 范围规则函数(QueryTemplate)的运行方法 */ @Override public QueryTemplate execute(FunctionContext context, Mapargs) { //构造查询条件 QueryTemplate template1 = QueryTemplate.AND( Maps.of("name", QueryOperator.EQ("测试")), Maps.of("field_g7Zeh__c", QueryOperator.EQ("测试单行文本")) ); QueryTemplate template2 = QueryTemplate.AND( Maps.of("owner", QueryOperator.LIKE("1000")), Maps.of("record_type", QueryOperator.EQ("default__c")) ); //QueryTemplate使用OR条件需要单独开通,请联系销售人员下订单开通产品:【对象列表筛选支持或者】 QueryTemplate template3 = QueryTemplate.OR(template1,template2); return template3; } }
二、返回类型为集合(List)
不推荐使用List返回类型函数,用此方法返回的数据有上限500条,并且查询和使用id作为返回值的执行效率较低。
2.1 函数编写模板:
//定义id List List objectIds = [] ... //写函数逻辑,并将可选择数据Id添加到objectIds里 objectIds.add() //最后返回的数据结果为 List<String> 里面包含满足条件的数据id return objectIds
实际场景:报价单明细按产品分类限制可选择产品范围,不同业务类型的报价单明细选择不同分类的产品数据。
根据以上实际场景的模板案例:
Groovy:
//获取当前操作对象实例的字段值 String product = context.data.field_wPnHu__c //根据条件查找数据,根据需要的业务逻辑查询出需要的数据 def ret = Fx.object.find("查找关联字段所对应的对象ApiName",[["field_1tG48__c":product]],100,0) //如果查询错误直接return返回 if( ret[0] ){ Fx.log.info("查询异常") return [] } //定义id List List objectIds = [] QueryResult result = ret[1] as QueryResult //遍历查询结果,将所有Id添加到objectIds中 result.dataList.each{ item -> Map map = item as Map objectIds.add(map._id) } //最后返回objectIds return objectIds
Java:
import java.util.List; import java.util.Map; public class RangeList implements IQueryListAction { /** * 范围规则函数(List)的运行方法 */ @Override public List execute(FunctionContext context, Map<String, Object> args) { //获取当前操作对象实例的字段值 String name = context.getData().get("name").toString(); Fx.log.info(name); List<Object> list = Lists.newArrayList(); list.add(Maps.of("name", QueryOperator.EQ(name))); //根据条件查找数据,根据需要的业务逻辑查询出需要的数据 APIResult ret = Fx.object.find("AccountObj",list,100,0); QueryResult result = (QueryResult)ret.getData(); List dataList = (List) result.getDataList(); if(dataList==null) { Fx.log.info("查询异常"); } List idList = Lists.newArrayList(); //遍历查询结果,将所有Id添加到objectIds中 for (int i=0;i<dataList.size();i++) { Map map =(Map<String, Object>)(dataList.get(i)); Fx.log.info(map.get("name").toString()); idList.add(map.get("_id").toString()); } Fx.log.info(idList); //返回id return idList; } /** * 函数的调试方法 * @param context 函数上下文 * @param args 函数参数 */ public void debug(FunctionContext context, Map<String, Object> args) { execute(context, args); } }
#三、返回类型为RangeRule
选择和新建查找关联字段时指定默认业务类型。
#3.1 函数编写模板:
Groovy:
QueryTemplate template = QueryTemplate.AND( ["name":Operator.LIKE("测试")] ) RangeRule rangeRule = RangeRule.builder() .queryTemplate(template) .recordType("record_cbxZ8__c") // 查找关联新建时默认用该业务类型 .build() return rangeRule
Java:
import java.util.List; import java.util.Map; public class RangeRuleCode implements IRangeRuleAction { /** * 范围规则函数(rangeRule)函数的运行方法 */ @Override public RangeRule execute(FunctionContext context, Map<String, Object> args) { //构造QueryTemplate QueryTemplate template1 = QueryTemplate.AND( Maps.of("name", QueryOperator.EQ("测试")), Maps.of("field_g7Zeh__c", QueryOperator.EQ("测试单行文本")) ); //构造RangeRule RangeRule rangeRule = RangeRule.builder() .queryTemplate(template1) .recordType("record_cbxZ8__c") // 查找关联新建时默认用该业务类型 .build(); return rangeRule; } }部分内容来源于互联网,如有侵权,请联系客服删除处理。