首页 > 解决方案 > 有没有办法防止方括号被插入到我的字符串中?

问题描述

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

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

标签: apex

解决方案


通过将“[”和“]”添加到您的数组“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)

推荐阅读