一、返回類型為QueryTemplate
QueryTemplate作為關(guān)聯(lián)查詢的條件的返回結(jié)果,更加高效。
除非QueryTemplate的查詢方式不能滿足需求,否則優(yōu)先推薦用使用QueryTemplate返回類型函數(shù),用此方法返回的范圍數(shù)據(jù)沒有上限,并且執(zhí)行效率高。
#1.1 函數(shù)編寫模板:
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條件需要單獨(dú)開通,請聯(lián)系銷售人員下訂單開通產(chǎn)品:【對(duì)象列表篩選支持或者】 QueryTemplate template3 = QueryTemplate.OR(template1,template2) return template3 //查詢條件支持 // product_id 為查找關(guān)聯(lián)字段,查詢模版支持篩選查找關(guān)聯(lián)對(duì)象下的name字段符合某種條件的結(jié)果 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 { /** * 范圍規(guī)則函數(shù)(QueryTemplate)的運(yùn)行方法 */ @Override public QueryTemplate execute(FunctionContext context, Mapargs) { //構(gòu)造查詢條件 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條件需要單獨(dú)開通,請聯(lián)系銷售人員下訂單開通產(chǎn)品:【對(duì)象列表篩選支持或者】 QueryTemplate template3 = QueryTemplate.OR(template1,template2); return template3; } }
二、返回類型為集合(List)
不推薦使用List返回類型函數(shù),用此方法返回的數(shù)據(jù)有上限500條,并且查詢和使用id作為返回值的執(zhí)行效率較低。
2.1 函數(shù)編寫模板:
//定義id List List objectIds = [] ... //寫函數(shù)邏輯,并將可選擇數(shù)據(jù)Id添加到objectIds里 objectIds.add() //最后返回的數(shù)據(jù)結(jié)果為 List<String> 里面包含滿足條件的數(shù)據(jù)id return objectIds
實(shí)際場景:報(bào)價(jià)單明細(xì)按產(chǎn)品分類限制可選擇產(chǎn)品范圍,不同業(yè)務(wù)類型的報(bào)價(jià)單明細(xì)選擇不同分類的產(chǎn)品數(shù)據(jù)。
根據(jù)以上實(shí)際場景的模板案例:
Groovy:
//獲取當(dāng)前操作對(duì)象實(shí)例的字段值 String product = context.data.field_wPnHu__c //根據(jù)條件查找數(shù)據(jù),根據(jù)需要的業(yè)務(wù)邏輯查詢出需要的數(shù)據(jù) def ret = Fx.object.find("查找關(guān)聯(lián)字段所對(duì)應(yīng)的對(duì)象ApiName",[["field_1tG48__c":product]],100,0) //如果查詢錯(cuò)誤直接return返回 if( ret[0] ){ Fx.log.info("查詢異常") return [] } //定義id List List objectIds = [] QueryResult result = ret[1] as QueryResult //遍歷查詢結(jié)果,將所有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 { /** * 范圍規(guī)則函數(shù)(List)的運(yùn)行方法 */ @Override public List execute(FunctionContext context, Map<String, Object> args) { //獲取當(dāng)前操作對(duì)象實(shí)例的字段值 String name = context.getData().get("name").toString(); Fx.log.info(name); List<Object> list = Lists.newArrayList(); list.add(Maps.of("name", QueryOperator.EQ(name))); //根據(jù)條件查找數(shù)據(jù),根據(jù)需要的業(yè)務(wù)邏輯查詢出需要的數(shù)據(jù) 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(); //遍歷查詢結(jié)果,將所有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; } /** * 函數(shù)的調(diào)試方法 * @param context 函數(shù)上下文 * @param args 函數(shù)參數(shù) */ public void debug(FunctionContext context, Map<String, Object> args) { execute(context, args); } }
#三、返回類型為RangeRule
選擇和新建查找關(guān)聯(lián)字段時(shí)指定默認(rèn)業(yè)務(wù)類型。
#3.1 函數(shù)編寫模板:
Groovy:
QueryTemplate template = QueryTemplate.AND( ["name":Operator.LIKE("測試")] ) RangeRule rangeRule = RangeRule.builder() .queryTemplate(template) .recordType("record_cbxZ8__c") // 查找關(guān)聯(lián)新建時(shí)默認(rèn)用該業(yè)務(wù)類型 .build() return rangeRule
Java:
import java.util.List; import java.util.Map; public class RangeRuleCode implements IRangeRuleAction { /** * 范圍規(guī)則函數(shù)(rangeRule)函數(shù)的運(yùn)行方法 */ @Override public RangeRule execute(FunctionContext context, Map<String, Object> args) { //構(gòu)造QueryTemplate QueryTemplate template1 = QueryTemplate.AND( Maps.of("name", QueryOperator.EQ("測試")), Maps.of("field_g7Zeh__c", QueryOperator.EQ("測試單行文本")) ); //構(gòu)造RangeRule RangeRule rangeRule = RangeRule.builder() .queryTemplate(template1) .recordType("record_cbxZ8__c") // 查找關(guān)聯(lián)新建時(shí)默認(rèn)用該業(yè)務(wù)類型 .build(); return rangeRule; } }部分內(nèi)容來源于互聯(lián)網(wǎng),如有侵權(quán),請聯(lián)系客服刪除處理。