salesforce中soql及sosl的伪‘Like’模糊检索
salesforce里有soql、sosl两种查询语法,soql针对模糊搜索也有‘like’关键字,然而只能针对其自带字段如:Name、Id;对于自定义添加的字段如:Message__c、Note__c采用‘like’模糊检索则会报错。
然而,一般情况业务需求上更多的会对自定义字段有模糊检索的需求,因此对此作了一些调查,然而国内salesforce并不流行,论坛博客相关讨论也很少,参考了部分JP博客、官方的相关文档,总结出两种思路来应对自定义字段模糊检索问题。
一、通过sosl(salesforce object search language)的find关键字实现
FIND ‘sear*’ IN ALL FIELDS RETURNING Table__c
思路:通过find的search语句执行得到一个模糊检索的结果集,然后将结果集中的id取出放入集合内,再在主soql文中加入‘id in (模糊搜索记录的id集合)’的where条件从而达到模糊查询的目的。
if (note != null && note != '') {
String findQuery = 'FIND \'' + note + '*\' IN ALL FIELDS RETURNING Test__c';
List<List<sobject>> results = search.query(findQuery);
Set<Id> ids = new Set<Id>();
for(List<sobject> result: results){
for(sobject obj : result){
ids.add(obj.Id);
}
}
string strIds = '';
Integer i = ;
for (String str : ids) {
if(i != ids.size()-)
{
strIds += '\''+str+'\'';
strIds += ',';
}else{
strIds += '\''+str+'\'';
}
i++;
}
if(strIds != null && strIds != '')
{
soql += ' And id IN ('+strIds+')';
}else{
soql += ' And id = '+'\'\'';
}
}
通过文档说明和测试发现:
- Sosl的模糊检索‘find’只能完成单词、词组以及‘hap%’这种检索,对‘%hap%’这种无能为力;
- 示例代码是全字段检索(IN ALL FIELDS),按API的用法换成特定列字段检索(IN Note__c FIELDS)会报错,弄得人有点烦躁;
因此,综合考虑,还是第二种方案更为可靠。
二、通过对检索所得结果集的特定字段通过函数进行过滤实现
obj.col.contain(keyword)
思路:将soql执行得到的List集合遍历,对各个obj的Note__c字段进行关键字模糊搜索过滤(contain()函数),满足条件的添加到结果List中,最后返回结果List。
List<Test__c> temp = database.query(soql);
List<Test__c> resultList = new List<Test__c>();
if(strMemo!=null&&strMemo!=''){
for(Test__c dr:temp){
if(dr.Note__c!=null&&dr.Note__c!=''){
if(dr.Msg__c.contains(strMemo)){
resultList.add(dr);
}
}
}
}else{
resultList = temp;
}
return resultList;
最后说下自己的看法,这种两种方法初看起来都有点效率低下,毕竟比起sql文中like来确实费劲不少,但就实际的页面效果来看并没有多大时间损耗,数据量万条以内可行性还是挺高的。
salesforce中soql及sosl的伪‘Like’模糊检索的更多相关文章
- (通用版)salesforce中soql及sosl的伪‘Like’模糊检索
salesforce里有soql.sosl两种查询语法,soql针对模糊搜索也有‘like’关键字,然而只能针对其自带字段如:Name.Id:对于自定义添加的字段如:Message__c.Note__ ...
- 在Salesforce中向外公布Service去创建Lead,并且用Asp.Net去调用此Service
1):在Salesforce中如何配置,向外公布此Service,请看如下链接: http://www.shellblack.com/marketing/web-to-lead/ 2):如何在Asp. ...
- 在Salesforce中为Object创建Master-Detail(Child-Relationship)关联关系
在Salesforce中可以将两个Object建立起一对多的关联关系,本篇文章就简单的叙述一下将两个Object(EricSunObj & EricSunObjC)设置成Master-Deta ...
- 在Salesforce中创建Approval Process
在Salesforce中可以创建Approval Process来实现审批流程的功能,实际功能与我们常说的Workflow很相似,具体的设置步骤如下所示 1):选择对应的Object去创建对应的App ...
- salesforce 零基础开发入门学习(十四)salesforce中工厂模式的运用
提到工厂模式,想必大家都很熟悉,工厂模式作为一种设计模式,同样在salesforce中适用. 举一个例子,笔作为基类,可以有钢笔,铅笔,圆珠笔等等.有一个笔的工厂,当你向它要钢笔,它就会生产一支钢笔; ...
- 在Salesforce中对某一个Object添加自定义的Button和Link
在Salesforce中可以对某一个Object添加自定义的Button和Link,来完成特定的逻辑过程,接下来以一个简单的实例来描述整个处理流程,实现的基本功能和我另外一篇文章中描述的功能是一致的( ...
- 在Salesforce中可以对某一个Object的Standard Button或Link进行重写
在Salesforce中可以对某一个Object的Standard Button或Link进行重写,来实现我们特定的逻辑过程,比如:在删除某个Object之前要判断该Object的某个Field的状态 ...
- 在Salesforce中调用外部系统所提供的的Web Service
这里需要提供外部service所对应的WSDL文件(Salesforce只支持从本地上传),并且提供的WSDL文件有如下两点要求: 1):wsdl 文件只能有一个binding,Salesforce是 ...
- 在Salesforce中添加Workflow Rule
在Salesforce中可以添加Workflow Rule来执行特定的动作,比如说:当Object的某个字段发生变化时,根据变化的值去修改其他field,和Trigger的功能很类似,不过Trigge ...
随机推荐
- angular ng-repeat数组中的数组
//先定义一个数组anular代码: var app = angular.module('serApp', []); app.controller('indexCtrl', function($sco ...
- 一个技术汪的开源梦 —— 微信开发工具包(WeixinSDK)
由于春节的关系 WeixinSDK 这个开源项目的进展比预期推迟了大约一个月的时间,值得高兴的是到目前为止该项目的重要模块已经开发完毕. - 关于项目 该项目的背景是现在微信公众号.微信服务号乃至微 ...
- javase基础回顾(一)ArrayList深入解析 解读ArrayList源代码(JDK1.8.0_92)
我们在学习这一块内容时需要注意的一个问题是 集合中存放的依然是对象的引用而不是对象本身. List接口扩展了Collection并声明存储一系列元素的类集的特性.使用一个基于零的下标,元素可以通过它们 ...
- [bzoj1070][SCOI2007]修车——费用流
题目大意: 传送门 题解: 本题和(POJ3686)[http://poj.org/problem?id=3686]一题一模一样,而且还是数据缩小以后的弱化版QAQ,<挑战程序设计竞赛>一 ...
- [Hadoop] - Win7下提交job到集群上去
一般我们采用win开发+linux hadoop集群的方式进行开发,使用插件:hadoop-***-eclipse-plugin. 运行程序的时候,我们一般采用run as application或者 ...
- Java_HelloWorld
Java_HelloWorld 一.JDK安装与环境变量的设置 可以在甲骨文公司的主页上直接下载. 链接:http://www.oracle.com/technetwork/java/javase/d ...
- Webpack学习系列(二)
一: 安装: npm install webpack-dev-server -g npm install webpack-dev-server --save (下载到当前文件夹) npm instal ...
- SpringMVC 集成velocity
前言 没有美工的时代自然少不了对应的模板视图开发,jsp时代我们用起来也很爽,物极必反,项目大了,数据模型复杂了jsp则无法胜任. 开发环境 idea2016.jdk1.8.tomcat8.0.35 ...
- [编织消息框架][设计协议]优化long,int转换
理论部分 一个long占8byte,大多数应用业数值不超过int每次传输多4byte会很浪费 有没有什么办法可以压缩long或int呢? 答案是有的,原理好简单,如果数值不超过int.max_valu ...
- 关于label和input对齐的那些是秦
input文本和label对齐 默认状态下,也就是下面这样, 文字和input是居中的. <div> <label>我是中国人</label> <input ...