多选选项列表与顶点文本格式字段的比较

时间:2014-08-26 07:08:03

标签: salesforce apex soql

我有一个具有此格式记录数的对象,其中包含文本格式的名称 -

Id  Name
 1  A,B,C
 2  A,B
 3  A
 4  B
 5  A,C
 6  A,D

我有一个多选选项列表,其值为:

A
B
C
D

因此,如果我在我的选项列表中选择B和C,那么我必须拥有表格中包含B或C或(B和C)的记录,即在这种情况下,它应该显示4条记录:

1 A,B,C
2 A,B
4 B
5 A,C

我正在使用带有IN和INCLUDES关键字的SQL查询,但我无法实现此功能。

1 个答案:

答案 0 :(得分:0)

这取决于您使用soql的选项有多少。我能看到的一种方式是:

Object__c myObject = new Object__c();
object.Name = 'A,B,D';
object.Multi_Select_Name__c = 'A;E';
insert object;
String query = 'select Id from Object__c';

//now we want to do a multi picklist, which is a String separated by ';'
List<String> nameSelections = object.Multi_Select_Name__c.split(';');
if(nameSelections.size() > 0) {
    query += ' where ';
    for(Integer i = 0; i < nameSelections.size(); i++) {
        nameSelections[i] = 'Name like \'%' + nameSelections[i] + '%\'';
    }
    query += String.join(nameSelections, ' or ');
}
List<Object__c> objects = (List<Object__c)database.query(query);

这将创建一个类似的查询:

'select Id from Object__c where Name like '%A%' or Name like '%E%'

选择所有Object__c,其中Name包含A或E,从多选中生成。

语法错误可能适用,我只是写了这个真正的快:)我仔细检查自己。

编辑: 此代码用于构建查询

String query = 'select Id from Object__c';
String multiSelect = 'A;E';
List<String> nameSelections = multiSelect.split(';');
if(nameSelections.size() > 0 ){
    query += ' where ';
    for(Integer i = 0; i < nameSelections.size(); i++) {
        nameSelections[i] = 'Name like \'%' + nameSelections[i] + '%\'';
    }
    query += String.join(nameSelections, ' or ');
}
system.debug(LoggingLevel.INFO, query);