我似乎在要用于动态SOQL查询的字符串中插入了一些方括号。我正在尝试检查订单的状态是否是用户选择的选项之一。通常,我只能在IN子句后抛出一个列表,但是因为这是一个字符串,所以我不能这样做。相反,我有一个循环,循环遍历选定状态的列表,并根据需要添加到查询字符串中。
我在另一个组织中使用了完全相同的语法,没有任何问题,所以我很好奇为什么在另一个组织中会发生这种情况。我已经发布了存在该问题的版本。希望这并不太难消除。
if(orderStatuses.size() > 0){
query += ' AND ccrz__OrderStatus__c IN (\''+orderStatuses[0]+'\'';
for(Integer i = 1; i < orderStatuses.size(); i++){
query += ', \''+orderStatuses[i]+'\'';
}
query += ')';
}
我想要的是一个看起来像
的字符串'AND ccrz__OrderStatus__c IN ('Completed', 'Order Submitted')'
但是我得到了
'AND ccrz__OrderStatus__c IN ('[Completed', ' Order Submitted]')'
我也尝试过使用'replaceAll()'方法在运行查询之前强行删除它们,但是无论如何它们仍然会出现。
query.replaceAll('[\\[\\]]','');
仅选择一个选项时,它的格式就很好,没有括号,但是一旦选择了一个以上,就会发生这种情况。 任何和所有帮助将不胜感激这一点。正如我上面提到的,当在不同的组织中运行时,相同的确切代码(授予不同的对象等)为我提供了正确的结果,因此我很困惑。预先感谢!
答案 0 :(得分:0)
我可以通过将“ [”和“]”添加到数组“ orderStatuses”来重现您的问题。如果我是你,我会在这里寻找你的错误。您看到的方括号可能实际上是您传递的字符串的一部分。在orderStatuses [1]中还有一个额外的空间,该空间进一步告诉我您在代码/ SQL中早些时候将不需要的东西添加到了数组中。
var orderStatuses = [];
orderStatuses.push("[Completed");
orderStatuses.push(" Order Submitted]");
var query = ' AND ccrz__OrderStatus__c IN (\'' + orderStatuses[0] + '\'';
for (var i = 1; i < orderStatuses.length; i++) {
query += ', \'' + orderStatuses[i] + '\'';
}
query += ')';
alert(query)