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 = '+'\'\'';
}
}

  通过文档说明和测试发现:

  1. Sosl的模糊检索‘find’只能完成单词、词组以及‘hap%’这种检索,对‘%hap%’这种无能为力;
  2. 示例代码是全字段检索(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’模糊检索的更多相关文章

  1. (通用版)salesforce中soql及sosl的伪‘Like’模糊检索

    salesforce里有soql.sosl两种查询语法,soql针对模糊搜索也有‘like’关键字,然而只能针对其自带字段如:Name.Id:对于自定义添加的字段如:Message__c.Note__ ...

  2. 在Salesforce中向外公布Service去创建Lead,并且用Asp.Net去调用此Service

    1):在Salesforce中如何配置,向外公布此Service,请看如下链接: http://www.shellblack.com/marketing/web-to-lead/ 2):如何在Asp. ...

  3. 在Salesforce中为Object创建Master-Detail(Child-Relationship)关联关系

    在Salesforce中可以将两个Object建立起一对多的关联关系,本篇文章就简单的叙述一下将两个Object(EricSunObj & EricSunObjC)设置成Master-Deta ...

  4. 在Salesforce中创建Approval Process

    在Salesforce中可以创建Approval Process来实现审批流程的功能,实际功能与我们常说的Workflow很相似,具体的设置步骤如下所示 1):选择对应的Object去创建对应的App ...

  5. salesforce 零基础开发入门学习(十四)salesforce中工厂模式的运用

    提到工厂模式,想必大家都很熟悉,工厂模式作为一种设计模式,同样在salesforce中适用. 举一个例子,笔作为基类,可以有钢笔,铅笔,圆珠笔等等.有一个笔的工厂,当你向它要钢笔,它就会生产一支钢笔; ...

  6. 在Salesforce中对某一个Object添加自定义的Button和Link

    在Salesforce中可以对某一个Object添加自定义的Button和Link,来完成特定的逻辑过程,接下来以一个简单的实例来描述整个处理流程,实现的基本功能和我另外一篇文章中描述的功能是一致的( ...

  7. 在Salesforce中可以对某一个Object的Standard Button或Link进行重写

    在Salesforce中可以对某一个Object的Standard Button或Link进行重写,来实现我们特定的逻辑过程,比如:在删除某个Object之前要判断该Object的某个Field的状态 ...

  8. 在Salesforce中调用外部系统所提供的的Web Service

    这里需要提供外部service所对应的WSDL文件(Salesforce只支持从本地上传),并且提供的WSDL文件有如下两点要求: 1):wsdl 文件只能有一个binding,Salesforce是 ...

  9. 在Salesforce中添加Workflow Rule

    在Salesforce中可以添加Workflow Rule来执行特定的动作,比如说:当Object的某个字段发生变化时,根据变化的值去修改其他field,和Trigger的功能很类似,不过Trigge ...

随机推荐

  1. 安装第三方包web.py发生的错误

    今天新学到了python的模块方面的内容,我的版本是python2.7.13 想安装第三方包web.py的时候, 命令提示符 输入 pip install web.py 总是提示如下错误 You ar ...

  2. python解释器的安装;python2与python3同时在环境变量中时的解决方案

    新文档 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,addres ...

  3. 【android开发笔记】为Button的背景图片添加边框式样式效果

    现在做的项目遇到一个问题,设计给过来的图片只有一种状态,但是实现的需求是要求有两个状态,另一种选状态为图片背景加边框.如图: 刚开使用使用ImageView ,ImageViewButton 效果不是 ...

  4. .Net程序员学用Oracle系列(18):PLSQL Developer 攻略

    1.功能说明及使用技巧 1.1.对象浏览器 1.2.SQL 窗口 1.3.测试窗口 1.4.命令窗口 1.5.图表窗口 1.6.报告窗口 1.7.右键菜单 1.8.快速登录技巧 1.9.其它 2.总结 ...

  5. 在 Windows 上测试 Redis Cluster的集群填坑笔记

    redis 集群实现的原理请参考http://www.tuicool.com/articles/VvIZje       集群环境至少需要3个节点.推荐使用6个节点配置,即3个主节点,3个从节点. 新 ...

  6. 购物篮模型&Apriori算法

    一.频繁项集 若I是一个项集,I的支持度指包含I的购物篮数目,若I的支持度>=S,则称I是频繁项集.其中,S是支持度阈值. 1.应用 "尿布和啤酒" 关联概念:寻找多篇文章中 ...

  7. 微软MSBI商业智能视频

    第一讲:BI介质安装.BI基础知识讲解.BI方法论讲解.项目讲解                 1.BI基础知识讲解.BI方法论实施2.微软BI的介绍(数据仓库介绍.SSIS介绍.SSAS介绍.SS ...

  8. YoMail 邮箱客户端的社会化之路,起于邮箱,不止于邮件

    你还记不记得上一次用邮箱处理私人事务是什么时候?从什么时候开始邮箱于你而言,唯一功能沦为了收取各种网站的验证信息? 电子邮件实际上非常适合于工作上使用,比起其他通信工具,或者社会化媒体,电子邮件在工作 ...

  9. js:如何在循环异步请求的每次返回中添加想要的值

    先看一个场景 var arr = ["a","b","c"]; for (var i in arr) {         $.get(&qu ...

  10. css小技巧 :not 省时又省力

    比如,要实现下面的效果(例如:一个列表的最后一项没有边框): See the Pen gmrGOV by 杨友存 (@Gavin-YYC) on CodePen. 一般的文档结构如下: <!-- ...