有没有办法防止将方括号插入到我的字符串中?

Is there a way to prevent square brackets being inserted into my string?

我似乎将一些方括号插入到我用于动态 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('[\[\]]','');

当只选择一个选项时,它的格式非常好,没有任何括号,但是一旦选择了多个选项,就会发生这种情况。 对此,我们将不胜感激任何和所有帮助。正如我上面提到的,当 运行 在不同的组织中时,这个完全相同的代码(授予不同的对象等)给了我正确的结果,所以我很困惑。提前致谢!

通过将“[”和“]”添加到您的数组 "orderStatuses",我能够重现您的问题。如果我是你,我会查看那些方括号以查找你的错误。您看到的方括号很可能实际上是您传递的字符串的一部分。在 orderStatuses[1] 中还有一个额外的 space 进一步告诉我你在 code/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)