【问题标题】:Salesforce, Apex, SOQL, SELECT with INCLUDESSalesforce、Apex、SOQL、SELECT with INCLUDES
【发布时间】:2021-03-24 14:47:45
【问题描述】:

Apex 中的这段代码有什么问题?

String states = 'California,New York';
List<Account> lstACC = [SELECT Id, Name, BillingState FROM Account WHERE BillingState INCLUDES (:states) LIMIT 10];

在开发者控制台中出现错误:“BillingState FROM Account WHERE BillingState INCLUDES (:states)^ERROR at Row:1:Column:50 includes or excludes operator only valid on multipicklist field”

【问题讨论】:

    标签: salesforce apex soql


    【解决方案1】:

    错误的文字说明了问题:

    包含或排除运算符仅在 multipicklist 字段中有效

    BillingState 不是多选选项列表。使用IN 而不是INCLUDES 来匹配集合。

    另外请注意,逗号分隔的字符串不是要匹配的有效集合。创建 List&lt;String&gt;Set&lt;String&gt; 以用于匹配条件。

    【讨论】:

    • 好的,谢谢。使用 IN 是没有错误的。但它什么也没返回。变量状态应该是什么形状? String states = 'California,New York'; String states = '(California,New York)'; String states = '\'California\',\'New York\''; String states = '(\'California\',\'New York\')'; 或者别的什么?因为它什么也不返回。
    • 字符串列表 this:List&lt;String&gt; states = new List&lt;String&gt;{'California','New York'}; 和 this:List&lt;String&gt; states = new String[]{'California','New York'}; 在 SELECT 中有错误:String 类型列的 List 的绑定表达式类型无效 //----------------------------------------------------------------------- 对于 set Set&lt;String&gt; states = new Set&lt;String&gt;{'California','New York'}; 是类似的错误:String 类型的列的 Set 的无效绑定表达式类型 SELECT with IN nothing return。有什么想法吗?
    • 这没关系,返回结果:SELECT Id, Name, BillingState FROM Account WHERE BillingState IN ('California','New York') //------------------------------------------------------------------------------------- 但这没有返回:String states = '/'California/',/'New York/''; SELECT Id, Name, BillingState FROM Account WHERE BillingState IN (:states) 为什么?我不明白。
    【解决方案2】:

    正确的解决方案:

    Set<String> setStates = new Set<String>();
    setStates.add('California');
    setStates.add('New York');
    List<Account> lstACC = [SELECT Id, Name, BillingState 
                            FROM Account 
                            WHERE BillingState IN :setStates 
                            LIMIT 10];
    

    错误:

    setStates: {'California','New York'}
    

    对:

    setStates: {California,New York}
    

    另外还有撇号。

    String states = 'California,New York';
    List<String> listStates = states.split(',');
    List<Account> lstACC = [SELECT Id, Name, BillingState 
                            FROM Account 
                            WHERE BillingState IN :listStates 
                            LIMIT 10];
    

    错误:

    String states = '\'California\',\'New York\'';
    

    对:

    String states = 'California,New York';
    

    另外还有SOQL注入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多