我有一个调用另一个函数的函数 - 骨骼如下所示。
当第二个函数运行并到达设置doc = view.getNextDocument(doc)' line,完全不相关的NotesDocument doc1上的parentView属性也会更新,从而打破原始循环。
有什么想法吗?
function getDept(){
dim doc1 as NotesDocument
dim view1 as NotesView
.
.
.
set doc1 = view1.getFirstDocument
while not(doc1 is nothing)
.
.
.
call getDeptNumber()
.
.
.
set doc1 = view1.getNextDocument(doc1)
}
function getDeptNumber(){
dim doc as NotesDocument
dim view as NotesView
.
.
.
set doc = view.getFirstDocument
while not(doc is nothing)
.
.
.
set doc = view.getNextDocument(doc)
}
它让我疯了!
由于
格雷姆
答案 0 :(得分:1)
如果您在视图上运行并且文档上有更改(已对视图产生影响),则第一个函数可能会出现问题。
您最好使用集合来运行文档。
function getDept(){
dim doc1 as NotesDocument
dim view1 as NotesView
dim collEntries as NotesViewEntryCollection
dim viewEntry as NotesViewEntry
.
.
.
set collEntries = view1.getAllEntries()
set viewEntry = collentries.getFirstEntry
while not(viewEntry is nothing)
set doc1 = viewEntry.Document
.
.
call getDeptNumber()
.
.
.
set viewEntry = collEntries.getNextEntry(viewEntry)
}
}
将其用于其他功能。 但要小心删除集合中的文档
答案 1 :(得分:1)
如果没有看到更多代码,有点不清楚,但我怀疑你的问题可能与缓存有关。如果从不同的视图访问相同的NotesDocument,则第二次和后续访问可能最终使用您在代码的另一部分内存中已有的相同文档。使用其他答案中显示的视图条目集合可能会有所帮助。将视图的autoupdate属性也设置为False。
但我无法帮助,但请注意您的代码组织不当或效率不高。它看起来像你的子程序(没有参数,所以我假设使用全局变量 - 当你可以避免它时的坏主意)每次调用时都会创建一个新的View对象。这很贵。此外,它似乎是为了查找值而迭代视图,这是低效的。使用排序视图并使用View方法搜索值。
当您需要视图对象时,我建议您创建一个方法来获取它并将其存储在类属性中,这样您就不必多次搜索数据库中的视图。