Как Пройтись По Всем Респонсам

Baneslaer

Well-known member
25.01.2011
123
0
#1
Ребят, сильно не пинайте, подскажите как правильно сделать.
Нужно пройтись по определенному документу и всем его респонсам и внести определенные правки.
Вложенность респоносов "до 5 уровней вниз".

начал писать так:

...
Set curdoc = curdb.Getdocumentbyunid("...")

If Not curdoc Is nothing Then
.....
Set respcol = curdoc.Responses
Set respdoc = respcol.Getfirstdocument()

While Not respdoc Is Nothing
.....
Set respdoc = respcol.Getnextdocument(respdoc)
Wend

End If

но так мы захватываем только 1 уровень респонсов. Для остальных уровней, как-то смущает писать аналогичную конструкцию.
Подскажите, как сделать правильно.
 

savl

Lotus team
28.10.2011
2 136
105
#2
Для остальных уровней, как-то смущает писать аналогичную конструкцию.
Нечего смущаться) Рекурсия. Делаем тоже самое для каждого документа и так далее.
Можно(Нужно) просто функцию написать, в которую параметром передаем документ, а внутри функции обрабатываем каждый документ в цикле.
И там же в цикле вызываем эту же функцию.
Код:
Sub Perebor(param as notesDocument)
Set respcol = param.Responses
if respCol.Count < 1 then Exit Sub
Set respdoc = respcol.Getfirstdocument()

While Not respdoc Is Nothing
.....
Call Perebor(respdoc)
Set respdoc = respcol.Getnextdocument(respdoc)
Wend
End Sub
Но, если у всех уровней есть один общий признак, скажем какое-то поле, которое прописано в основном документе и транслируется во все ответные и в ответные ответных и в ответные в ответных, которые к ответным... Но с другим именем поля(это важно)
То можно построить представление, в котором отобразить все документы, без уровней, которые отсортированы по этому наследуемому полю.
И брать сразу все документы из этого представления по ключу, а ключ - поле из основного документа.
И потом один цикл для всей этой коллекции.
Но этот метод подходит, только если архитектура позволяет.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#3
как вариант - получить родителя а от него нафигатор CreateViewNavFromDescedants
и перебирайте в одном цикле всю коллекцию
 

Baneslaer

Well-known member
25.01.2011
123
0
#4
сделал и через коллекцию и через вьюху.
Пробегает удачно по всем докам и делает с ними то что надо.
Но в конце вылетает ошибка- "expression out of range"
Как от нее избавиться, подскажите.
 

savl

Lotus team
28.10.2011
2 136
105
#5
По коду надо смотреть, вставте это в код (пример для PostOpen) :
Код:
Sub Postopen
On Error Goto handler
Const FuncName = {Sub "Postopen" }
Dim ErrStr As String

' Весь ваш код

Exit sub
handler:
ErrStr = FuncName & ": " & Err &", в строке " & Erl & chr(10) & chr(13)& Error$
msgbox ErrStr,16
Exit sub
End sub
 

Baneslaer

Well-known member
25.01.2011
123
0
#6
>savl

сделал по примеру приведенному в самом начале.
Проходит по всем докам и когда респонсов не остается, тогда и вылетает ошибка.
 

savl

Lotus team
28.10.2011
2 136
105
#7
:) Может я что не так написал)
Он строку с ошибкой выдал? что в этой строке?
Если в коде тайны нет, можно глянуть?
 

savl

Lotus team
28.10.2011
2 136
105
#9
ок... В конце, так в конце... И строки нет...
в Debug'ере смотрели когда?
Можно код увидеть?
 

Baneslaer

Well-known member
25.01.2011
123
0
#10
savl

разобрался в тот же день, просто стыдно признаться - забыл написать в конце Exit sub
Спасибо за помощь =)