Entry Is No Longer In View

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

  1. Erlan

    Erlan Member

    Регистрация:
    9 апр 2012
    Сообщения:
    11
    Симпатии:
    0
    Всем добрый день!
    Прошу помочь разобраться с ошибкой.

    Скрипт пробегается по документам и по выбранным критериям (ищутся документы в определенном периоде) идет выгрузка данных в Excel.
    Раньше скрипт работал, а теперь при переборе документов выходит ошибка entry is no longer in view и лотус полностью закрывается.
    весь скрипт не вставляю так как он очень длинный.
    смысл скрипта такой

    Код (LotusScript):
    'выше перебираются Имена_категории и циклом подставляются в CreateViewNavFromCategory("Имя_категории")
    Set nav =view.CreateViewNavFromCategory("Имя_категории")
    If nav Is Nothing Then Goto nexti
    Set entry = nav.GetFirstDocument   
    If Not entry Is Nothing Then
    While Not(entry Is Nothing)
    Set doc_a= entry.Document
    'далее работа с полученным документом, вставляются определенные значения в Excel
    Set entry = nav.Getnextdocument(entry) ' переход на след.документ
    Wend
    End If
    nexti:  Call CloseExcelDoc
    Msgbox {Нет документов, удовлетворяющие Ваши условия.Попробуйте еще раз задать период.}, 64,{Стоп!}
    Exit Function
    End If
     
  2. oshmianski

    oshmianski Достойный программист
    Lotus team

    Регистрация:
    25 апр 2012
    Сообщения:
    512
    Симпатии:
    13
    известная штука.
    view.autoupdate = false
     
    anna нравится это.
  3. Erlan

    Erlan Member

    Регистрация:
    9 апр 2012
    Сообщения:
    11
    Симпатии:
    0
    Извините выходила ошибка
    Fatal error: Call to a member function register_class() on a non-object in /var/www/codeby/data/www/codeby.net/sources/classes/post/class_post.php on line 2119
    при попытке опубликовать пост , ПОЭТОМУ так много раз нажимал опубликовать.
    Не знал что уже опубликовался мой пост.
    А за оперативный ответ спасибо сейчас проверю.
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Erlan
    не забудте после перебора в цикле и в обработчике ошибки сделать view.autoupdate = True
    Чтобы вернуть как было.
     
  5. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    это хорошо, только стоит исправить цикл
    Код (LotusScript):
    While Not(entry Is Nothing)
    Set tmpEntry = nav.Getnextdocument(entry)
    Set doc_a= entry.Document
    'далее работа с полученным документом, вставляются определенные значения в Excel
    Set entry = tmpEntry ' переход на след.документ
    Wend
    а это необязательно, т.к. autoupdate работает только для объектов, полученных от view
     
  6. Erlan

    Erlan Member

    Регистрация:
    9 апр 2012
    Сообщения:
    11
    Симпатии:
    0
    вставил view.AutoUpdate = False и в конце перебора вставил view.AutoUpdate = true
    все равно та же ошибка и лотус закрывается.
    Главное в дебагере не могу посмотреть на каком именно документе падает лотус.
     
  7. Erlan

    Erlan Member

    Регистрация:
    9 апр 2012
    Сообщения:
    11
    Симпатии:
    0
    да я видел пример такой на сайте www-10.lotus.com
    Set docCurr = vwWhatever.GetFirstDocument
    Do Until DocCurr Is Nothing
    Set docNext = vwWhatever.GetNextDocument(docCurr)
    'Processing here, with option on deleting docCurr or otherwise changing it such that it no longer appears in vwWhatever
    Set docCurr = docNext
    Loop

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

    ОШИБКА осталась.
    А в чем именно ошибка? в том что представление обновляется пока скрипт работает или в навигаторе по категориям один документ попал в несколько разных категории?
     
  8. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Erlan
    А обработчик ошибок есть?
    Если нет вставте этот, только то что между Sub Initialize() и End Sub
    Код (LotusScript):
        Sub Initialize()
    On Error Goto handler
    Const FuncName = {Agent"AgentName" }
    Dim ErrStr As String

    ' ваш код

    Goto endh
    handler:
    ErrStr = FuncName & ": " & Err &", в стр " & Erl & chr(10) & chr(13) & Error$
    if not doc_a is nothing then ErrStr = ErrStr & chr(10) & chr(13) & doc_a.UniversalID
    msgbox ErrStr,16
    Resume endh
    endh:
    End Sub
     
  9. oshmianski

    oshmianski Достойный программист
    Lotus team

    Регистрация:
    25 апр 2012
    Сообщения:
    512
    Симпатии:
    13
    была еще беда на 8.5 что ль, notes замертво валился при обработке записей навигатора.
    помогает только смена версии.
     
  10. Erlan

    Erlan Member

    Регистрация:
    9 апр 2012
    Сообщения:
    11
    Симпатии:
    0
    savl
    вставил обработчик как Вы посоветовали. Лотус клиент и дизайнер отрубается.

    Если oshmianski2 прав, то у меня действительно стоит 8,5 лотус.
    Но почему тогда раньше работал?
     
  11. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Если вкратце: что-то изменилось... Стало больше документов, стало больше кода обработки.
    А по версионности клиентов да, 8.5.2 в свое время исправлял кучу багов относительно 8ки и 8.5
    Мой текущий сейчас: Release 8.5.3FP2
     
  12. oshmianski

    oshmianski Достойный программист
    Lotus team

    Регистрация:
    25 апр 2012
    Сообщения:
    512
    Симпатии:
    13
    такое поведение (падение) наблюдается не всегда.
    походу, зависит от сложности навигатора или количества и сложности категорий или данных в колонках или... только индусы знают.
     
  13. Erlan

    Erlan Member

    Регистрация:
    9 апр 2012
    Сообщения:
    11
    Симпатии:
    0
    Всем БОЛЬШОЕ СПАСИБО за то что отозвались помочь мне.
    Обновили лотус до версии 8,5,3 и перестал отваливаться , нашел документ на котором была ошибка и понял в чем было дело.
    Проблема решена.

    Но появился другой вопрос. И хочется знать ответ на будущее.
    Писал скрипт где не используется навигатор, и столкнулся с такими вопросами

    Код (LotusScript):
    'DateB - передается из формы поле даты
    Dim dateBegin As New NotesDateTime(DateB)
    searchFormula$={Form="PrintDoc" & DocType="}+doc_d.DocName(0)+{" & FlagReg=1 & !@IsAvailable($Conflict)}
    Set colldocs=db.Search(searchFormula$,dateBegin,0)
    допустим дата поиска ( dateBegin ) равна 24,07,2013
    И вот в коллекцию не попадают документы созданные 24,05,2013
    А попадают либо созданные либо модифицированные число 25,072013 и более
    Почему?

    и можно ли сохранять документы в массив а потом передавать этот массив с документами для обработки другой функции.
    Это чтобы не повторять поиск нужных документов 2 раза.
     
  14. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Вот тут обсуждалось: http://codeby.net/forum/threads/50138.html?hl=Search
    Эта дата отсечки меня всегда бесила, лучше даты в запросе поиска задавать.

    Добавлено:
    Можно, но так же в этом массиве должна быть база из которой документы, а то потеряются.
    Но зачем? Если можно в функцию передать коллекцию документов полученную при поиске.
    Сделать скажем OriginalCol - результат поиска
    RessCol1 - копия OriginalCol для обработки 1
    RessCol2 - копия OriginalCol для обработки 2
     
  15. Erlan

    Erlan Member

    Регистрация:
    9 апр 2012
    Сообщения:
    11
    Симпатии:
    0
    возможно ли в строке поиска указать сравнение дат ?
    searchFormula$={Form="PrintDoc"}
    у меня не получилось. как Вы имели в виду дату в запросе указывать?

    А по коллекциям
    ситуация такая
    Нужны документы с 01,07,2013 по 02,07,2013
    методом db.Search нахожу документы старше или равно 01,07,2013
    затем пробегаюсь по этой коллекции и нахожу только нужные мне документы в периоде.
    И вот чтобы второй раз такое действие не проводить можно ли как то сохранить коллекцию по отобранным документам в периоде от 01 -02 числа ?
     
  16. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    *Имя Поля с датой* - тип DateTime
    dtPeroidStart - NotesDateTime
    dtPeroidEnd - NotesDateTime
    хм, обычное сравнение дат на собаке... я обычно так делаю:
    searchFormula$={Form="PrintDoc" & *Имя Поля с датой* >=@TextToTime(@text(} & dtPeroidStart.DateOnly & {)) & *Имя Поля с датой* <=@TextToTime(@text(} & dtPeroidEnd.DateOnly & {))}

    Если нигде не ошибся со скобочками...
    dateOnly и так возвращает текст, но я использую дополнительное @-преобразование в текст и потом от этого текста делаю datatime данные.
    Более подробно написано тут: http://codeby.net/forum/threads/32749s0.html?...mp;#entry152077
    Советую почитать.
     
  17. Erlan

    Erlan Member

    Регистрация:
    9 апр 2012
    Сообщения:
    11
    Симпатии:
    0
    Спасибо большое за помощь и советы.
    Тему можно закрывать.
     
Загрузка...

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