1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

проблемы с документами

Тема в разделе "Lotus - Программирование", создана пользователем nadezdaMP, 2 сен 2009.

  1. nadezdaMP

    nadezdaMP Гость

    Репутация:
    0
    Добрый день всем!
    с виду очень простой вопрос, но на практике не работает! не пойму в чем дело!
    вот пример кода:
    Set indoc = inview.GetFirstDocument
    ....
    While Not indoc Is Nothing
    ' выполняются необходимые вычисления
    If act_removedoc = True Then ' если установлен флаг, то удаляем документ, удовлетворяющий условию вычислений, из папки
    Call indoc.RemoveFromFolder("($myfolder)")
    End If

    Set indoc = inview.GetNextDocument(indoc)
    Wend

    пробовала сделать следующее:
    Set indoc = inview.GetFirstDocument
    ....
    While Not indoc Is Nothing
    ' выполняются необходимые вычисления
    set tempdoc = indoc
    If act_removedoc = True Then ' если установлен флаг, то удаляем документ, удовлетворяющий условию вычислений, из папки
    Call tempdoc.RemoveFromFolder("($myfolder)")
    End If

    Set indoc = inview.GetNextDocument(indoc)
    Wend

    но все равно возникает следующая проблема: не перемещает все документы, удовлетворяющие условиям (тут точно все условия верно вычисляются), а перемещает, только через раз, через один, и тд
    несколько раз приходится обрабатывать документы в представлении, вот и не пойму как правильно цикл организовать, чтобы точно можно было пройти по всем документам, подскажите пожалуйста кто знает =)
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Проходи с конца.
    Set indoc = inview.GetLastDocument()
    ...
    Set indoc = inview.GetPrevDocument(indoc)
     
  3. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Для улучшения перфоманса:
    перед
    Код:
    Set indoc = inview.GetFirstDocument
    сделай
    Код:
    inview.AutoUpdate = False
    После цикла -
    Код:
    inview.AutoUpdate = True
    А по проблеме - фик знает...

    Не хочешь заменить на db.search с такой же формулой как у view?
    Вообще, идти по view с включенным AutoUpdate - ресурсоёмкая операция.
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Но быстрее будет так.
    Получаем коллекцию - NotesView.AllEntries.
    Удаляем из неё документы, которые нужно оставить в папке - NotesViewEntryCollection.DeleteEntry.
    Удаляем из папки оставшуюся коллекцию - NotesViewEntryCollection.RemoveAllFromFolder.
     
  5. nadezdaMP

    nadezdaMP Гость

    Репутация:
    0
    сделала так, документы все нашлись и переместились как надо по условию, но куда то делись и все остальные документы из папки, там осталось пусто (хорошо что база тестовая) ;)
     
  6. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Код в студию! ;)
     
  7. divankin

    divankin Senjor developer

    Репутация:
    0
    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    Ваша проблема возникает, потому что вы меняете содержимое папки во время прохода в цикле по ней
    Отключите обновление индекса в скрипте inview.AutoUpdate = false
     
  8. nadezdaMP

    nadezdaMP Гость

    Репутация:
    0
    Sub Initialize

    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim indoc As NotesDocument, note As NotesDocument
    Dim inview As NotesView

    Set db = session.CurrentDatabase
    Set inview = db.GetView("($Inbox)")
    Set indoc = inview.GetFirstDocument

    s_MAINFORMULA = ...

    While Not indoc Is Nothing
    Result = Evaluate(s_MAINFORMULA, indoc)
    If Cstr(Result(0)) = "1" Then
    Call DoAction(note, indoc)
    End If

    If act_removedoc = True Then
    Call indoc.RemoveFromFolder("($Inbox)")
    End If

    Set indoc = inview.GetNextDocument(indoc)
    Wend

    End Sub

    в вызываемой функции происходит
    Function DoAction(note As NotesDocument, indoc As NotesDocument)
    ....
    Call DoActionParser(indoc)
    ....
    End Function

    и уже в DoActionParser устанавливается флаг
    Sub DoActionParser (indoc As NotesDocument)
    Select Case ACT_sAction
    '// Move to Folder
    Case "1"
    Call indoc.PutInFolder _
    ( ACT_sString, False)
    act_removedoc = True
    .....
    End Select

    End Sub
     
  9. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Нету моего предложения обходить с конца.
    И act_removedoc на False нигде не меняется.
     
  10. nadezdaMP

    nadezdaMP Гость

    Репутация:
    0
    исправила:
    While Not indoc Is Nothing
    Result = Evaluate(s_MAINFORMULA, indoc)
    If Cstr(Result(0)) = "1" Then
    Call DoAction(note, indoc)
    If act_removedoc = True Then
    Call indoc.RemoveFromFolder("($Inbox)")
    act_removedoc = False
    End If
    End If

    Set indoc = inview.GetPrevDocument(indoc)
    Wend

    вроде так пока сработало =) СПАСИБО!)))

    точно не знаю почему, но с командами
    inview.AutoUpdate = False
    и
    inview.AutoUpdate = True
    у меня вообще сортировки никакой не поизошло....
     
  11. TIA

    TIA :-)
    Lotus team

    Репутация:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    1
    Попробуйте так
    Код:
    Set indoc = inview.GetFirstDocument
    While Not indoc Is Nothing
    Set tempdoc = inview.GetNextDocument(indoc)
    If act_removedoc = True Then ' если установлен флаг, то удаляем документ, удовлетворяющий условию вычислений, из папки
    Call indoc.RemoveFromFolder("($myfolder)")
    End If
    Set indoc = tempdoc
    Wend
    Т.е. сразу получить следующий документ, который не будет удалён в текущей итерации цикла.
     
  12. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Что за сортировка?
     
  13. nadezdaMP

    nadezdaMP Гость

    Репутация:
    0
    в результате экспериментов часть документов удаляется из папки входящие и никуда неперемещается. видны только из представления - все документы.
    сейчас попробую остальные варианты (TIA)


    очень нужен агент, который все документы, которые не относятся ни к какой папке были скопированы в Входящие, может есть у кого скрипт готовый уже?
     
  14. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Создать представление Shared, contains documents not in any folders и скопировать все документы из него в папку?
     
  15. nadezdaMP

    nadezdaMP Гость

    Репутация:
    0
    создала, но у меня в этом представлении не отобразилось ни одного документа, хотя документов нет в папке входящие, но в представлении Всек документы они отображаются
     
  16. TIA

    TIA :-)
    Lotus team

    Репутация:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    1
    Ну, если удалось перебрать все документы в папке, то предложенный мной способ ничего нового не даст. Он только для перебора документов представления.
     
  17. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Может они в какой-то другой папке?
     
  18. nadezdaMP

    nadezdaMP Гость

    Репутация:
    0
    сработало, документы восстановила, думаю дальше над перебором документов в представлении, почему так происходит при перемещении документов...
     
  19. nadezdaMP

    nadezdaMP Гость

    Репутация:
    0
    вообщем, я исправила цикл,
    ошибка была в том, что при удалении документа индекс следующего уменьшался на количество удаленных документов, то есть если мы переместили второй документ, то третий становился вторым, и так далее,
    если мы переместили второй, третий и четвертый документ, то пятыйй становился вторым, и так далее.

    я просто сделала в цикле переход не к следующему документу, а к докуменут
    номер = номер итерации цикла - количество удаленных документов

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

    вот код
    Код:
    Dim x As Integer, count As Integer, index As Integer
    Set indoc = inview.GetFirstDocument
    x% = 1
    count% = 0
    
    While Not indoc Is Nothing
    .......	
    If act_removedoc = True Then
    Call indoc.RemoveFromFolder("($Inbox)")
    act_removedoc = False
    count% = count% + 1
    End If	
    
    
    x% = x% +1
    index% = x% - count%
    Set indoc = inview.GetNthDocument(index%)
    Wend
     
  20. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Контекстный вопрос:
    в чём соль использования суффиксов, типа
    Код:
    x%, index%
    ?
     
Загрузка...
Похожие Темы - проблемы документами
  1. CHEATER
    Ответов:
    1
    Просмотров:
    93
  2. Define

    Проблема Проблемы с шеллом

    Define, 18 июн 2017, в разделе: Kali Linux
    Ответов:
    2
    Просмотров:
    204
  3. Oksy
    Ответов:
    37
    Просмотров:
    1.815
  4. nikos
    Ответов:
    31
    Просмотров:
    1.384
  5. lmike
    Ответов:
    18
    Просмотров:
    809

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