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. C# 数据库并发的解决方案(通用版、EF版)

    自ASP.NET诞生以来,微软提供了不少控制并发的方法,在了解这些控制并发的方法前,我们先来简单介绍下并发! 并发:同一时间或者同一时刻多个访问者同时访问某一更新操作时,会产生并发! 针对并发的处理, ...

  3. excel的导入与导出---通用版

    excel的导入与导出---通用版 web项目关于导入导出的业务场景很常见,最近我就又遇到了这个业务场景.这次将最近半个月做的导入导出总结一下 使用的pom如下,主要还是阿里巴巴的easyexcel依 ...

  4. AES加密解密通用版Object-C / C# / JAVA

    1.无向量 128位 /// <summary> /// AES加密(无向量) /// </summary> /// <param name="plainByt ...

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

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

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

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

  7. 在Salesforce中创建Approval Process

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

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

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

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

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

随机推荐

  1. AIOps背景/所应具备技术能力分析(上)

    本文篇幅较长,分为上,中,下,三个部分进行连载.内容分别为:AIOps 背景/所应具备技术能力分析(上),AIOps 常见的误解(中),挑战及建议(下). 前言 我大概是 5,6 年前开始接触 ITO ...

  2. Python自定义异常及抛出异常

    """ 自定义异常 """ class MyException(Exception): # 继承异常类 def __init__(self, ...

  3. c# .Net随机生成字符串代码

    /// <summary> /// 随机生成字符串 /// </summary> /// <param name="OperationType"> ...

  4. AFURLSessionManager 上传下载使用

    1.下载 Creating a Download Task NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ...

  5. Python:decorator [转]

    Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数. def sa ...

  6. 排序算法之选择排序的思想以及Java实现

    1 基本思想 选择排序的思想是,每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 2,算法的实现(Java) package Algorit ...

  7. SAP事物代码

    事物代码是SAP进入特定功能的快捷命令,如事物代码VA01能快速进入创建销售订单的页面,要浏览当前页面的事物代码,在状态栏右下角可以查看 快速导航事物代码 这类事物代码将功能相似的事物代码组合在一起, ...

  8. tape ——cf

    B. Tape time limit per test 1 second memory limit per test 256 megabytes input standard input output ...

  9. IOS解析XML文件

    这里使用NSXMLParser来解析,这个是apple自带的xml解析库,有个參考文章:http://www.raywenderlich.com/553/xml-tutorial-for-ios-ho ...

  10. 利用os.system 截取终端日志输出 存为txt

    # -*- coding: utf- -*- import os os.system(r"python %s/add_test.py > terminal_record.txt&quo ...