【发布时间】:2016-11-29 23:43:24
【问题描述】:
我正在编写一个业务服务,它需要迭代 BC 中的所有记录,并删除其中一些:
bc.ExecuteQuery(ForwardBackward);
var isRecord = bc.FirstRecord();
while (isRecord) {
if (...) {
bc.DeleteRecord();
}
isRecord = bc.NextRecord();
}
但是,DeleteRecord moves the cursor to the next one,所以我会为每个被删除的记录跳过一条记录,这不是我想要的。是否有任何标准的ish 方法来解决这个问题?
我想我可以只做两个循环,一个用于检查,另一个用于删除......它会起作用,但是对记录进行两次迭代感觉很愚蠢,必须有比这更好的方法:
bc.ExecuteQuery(ForwardBackward);
var isRecord = bc.FirstRecord();
var list = [];
while (isRecord) {
if (...) {
list.push(bc.GetFieldValue("Id"));
}
isRecord = bc.NextRecord();
}
bc.ClearToQuery();
bc.SetSearchSpec("Id", "='" + list.join("' OR ='") + "'"); // "='1-ABCD' OR ='1-1234'"
bc.ExecuteQuery(ForwardBackward);
while (bc.FirstRecord()) {
bc.DeleteRecord();
}
【问题讨论】:
-
问题是 DeleteRecord 没有返回任何东西。否则,可以使用 if 循环轻松地重新安排逻辑。您推送到列表并有选择地删除的逻辑看起来已优化。
标签: siebel