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

Тема в разделе "Lotus - Программирование", создана пользователем Baneslaer, 20 сен 2013.

  1. Baneslaer

    Baneslaer Well-Known Member

    Регистрация:
    25 янв 2011
    Сообщения:
    121
    Симпатии:
    0
    Ребят, сильно не пинайте, подскажите как правильно сделать.
    Нужно пройтись по определенному документу и всем его респонсам и внести определенные правки.
    Вложенность респоносов "до 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 уровень респонсов. Для остальных уровней, как-то смущает писать аналогичную конструкцию.
    Подскажите, как сделать правильно.
     
  2. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Нечего смущаться) Рекурсия. Делаем тоже самое для каждого документа и так далее.
    Можно(Нужно) просто функцию написать, в которую параметром передаем документ, а внутри функции обрабатываем каждый документ в цикле.
    И там же в цикле вызываем эту же функцию.
    Код (LotusScript):
    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
    Но, если у всех уровней есть один общий признак, скажем какое-то поле, которое прописано в основном документе и транслируется во все ответные и в ответные ответных и в ответные в ответных, которые к ответным... Но с другим именем поля(это важно)
    То можно построить представление, в котором отобразить все документы, без уровней, которые отсортированы по этому наследуемому полю.
    И брать сразу все документы из этого представления по ключу, а ключ - поле из основного документа.
    И потом один цикл для всей этой коллекции.
    Но этот метод подходит, только если архитектура позволяет.
     
  3. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    как вариант - получить родителя а от него нафигатор CreateViewNavFromDescedants
    и перебирайте в одном цикле всю коллекцию
     
  4. Baneslaer

    Baneslaer Well-Known Member

    Регистрация:
    25 янв 2011
    Сообщения:
    121
    Симпатии:
    0
    сделал и через коллекцию и через вьюху.
    Пробегает удачно по всем докам и делает с ними то что надо.
    Но в конце вылетает ошибка- "expression out of range"
    Как от нее избавиться, подскажите.
     
  5. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    По коду надо смотреть, вставте это в код (пример для PostOpen) :
    Код (LotusScript):
    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
     
  6. Baneslaer

    Baneslaer Well-Known Member

    Регистрация:
    25 янв 2011
    Сообщения:
    121
    Симпатии:
    0
    >savl

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

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    :) Может я что не так написал)
    Он строку с ошибкой выдал? что в этой строке?
    Если в коде тайны нет, можно глянуть?
     
  8. Baneslaer

    Baneslaer Well-Known Member

    Регистрация:
    25 янв 2011
    Сообщения:
    121
    Симпатии:
    0
    Но в конце вылетает ошибка- "expression out of range"
     
  9. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    ок... В конце, так в конце... И строки нет...
    в Debug'ере смотрели когда?
    Можно код увидеть?
     
  10. Baneslaer

    Baneslaer Well-Known Member

    Регистрация:
    25 янв 2011
    Сообщения:
    121
    Симпатии:
    0
    savl

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

Поделиться этой страницей