【问题标题】:I am receiving the error "Bind variables only allowed in Apex Code [MALFORMED QUERY]" when testing a SOQL statement called from Jitterbit测试从 Jitterbit 调用的 SOQL 语句时,我收到错误“仅在 Apex 代码 [MALFORMED QUERY] 中允许绑定变量”
【发布时间】:2014-07-25 15:45:47
【问题描述】:

我们正在使用 Jitterbit 从 Salesforce 查询记录,但遇到了问题。在查询条件语句中,我比较了 Salesforce 表中的两个字段。当我去测试查询时,它给了我错误“仅在 Apex 代码 [MALFORMED QUERY] 中允许绑定变量”。

这是一个查询示例:

SELECT Id FROM Price_Agreement_Item__c WHERE Approved_Date__c > Last_Upload_Date__c

字段Approved_Date__cLast_Upload_Date__c 都包含在Salesforce 表Price_Agreement_Item__c 中。如何创建一个 SOQL 语句来调整比较表中两个字段的 select 语句?

感谢任何帮助。

提前谢谢你。

【问题讨论】:

    标签: salesforce soql jitterbit


    【解决方案1】:

    除了 Daniel Ballinger 所说的之外,Soap API 也不允许在 SOQL 查询中使用“IN”子句。 这很愚蠢,但话又说回来,这是 Salesforce 的 95%。

    【讨论】:

    • 最后一句话。加油!
    【解决方案2】:

    SOQL 目前不支持 WHERE 子句中的直接字段到字段比较。来自Field to field comparison in WHERE clause of SOQL

    SOQL 的 WHERE 子句中的字段到字段比较

    知识文章编号:000187460

    说明
    我想通过比较 WHERE 子句中同一对象的两个字段来执行查询,但我无法在 WHERE 子句中条件的右侧:

    List<user> users = [SELECT Id,name FROM User WHERE (FirstName != Lastname)];
    

    以上查询返回:“System.QueryException:意外令牌: '姓氏' "

    分辨率
    Salesforce 不允许在 SOQL 查询中直接进行字段到字段比较。

    要实现这一点,您可以创建一个公式字段来比较 字段并返回一个值(如真或假),您可以在 WHERE 子句。

    因此,对于上述查询,您可以在 User 上创建一个公式字段 返回类型为 Text 的对象,例如NameCompare,用公式 IF(User.FirstName != User.LastName, 'true', 'false')

    现在我们的查询将是:

    List<User> Users = [SELECT id, name FROM User where NameCompare= 'true'];
    

    以下想法已发布在ideaexchange 门户上,以允许 SOQL 中的字段间比较:

    https://success.salesforce.com/ideaView?id=08730000000BrHAAA0

    你可以创建一个 Checkbox 类型的 formula field 来返回一个布尔值:

    Approved_Date__c > Last_Upload_Date__c
    

    然后用您的 WHERE 子句重写您的查询,例如:

    SELECT Id  
    FROM Price_Agreement_Item__c 
    WHERE Approved_Date_Greater_Than_Last_Upload_Date__c = true
    

    注意这需要扫描多少行。它不能使用索引,所以会导致全表扫描。如果行数太大,您可能会遇到其他错误。

    顺便说一下,Salesforce Stack Exchange 是询问 Salesforce 特定问题的好地方。这个答案引用了 Jesse Altman 用 Keith C 和 sfdcfox 的 cmets 回答的问题。

    【讨论】:

    • 如何比较多个自定义对象?我有两个要按 ID 加入的表,但出现错误:Error: Field Commission__c does not exist. Check spelling.
    • @BigMoney 我建议在Salesforce Stack Exchange 上提出一个专门的问题。包括有关您想要做什么以及到目前为止您已经尝试过什么的详细信息。您可能需要两个 sObjects/表之间的查找或主详细信息关系来执行 SOQL 中的连接。
    【解决方案3】:

    另一种可能发生这种情况的方法是,如果您将查询复制到命令行并运行它而不转义任何字符串常量周围的引号。

    例如,这个:

    curl -X GET https://x.salesforce.com/services/data/v31.0/query?q=SELECT%20COUNT\(\)%20FROM%20YourObj%20WHERE%20field%20!=%20'Good'
    

    应该是这样的:

    curl -X GET https://x.salesforce.com/services/data/v31.0/query?q=SELECT%20COUNT\(\)%20FROM%20YourObj%20WHERE%20field%20!=%20%27Good%27
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多