Про папки.

Тема в разделе "Lotus - Программирование", создана пользователем Grrr, 14 авг 2008.

  1. Grrr

    Grrr Гость

    Хочу реализовать следующее: создавать приватные папки, в которые попадают документы из произвольных представлений и с произвольным отбором за период, для следующего импорта их в excel. Как лучше это реализовать? Пока что хочу сделать некоторую форму, в которой можно будет задать правила отбора, а потом обрабатывая отбор пихать документы, удовлетворяющие отбору в приватную папку. Поделитесь пожалуйста кодом, для отбора за период.
     
  2. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Метод NotesDatabase.Search. На форуме много раз было.
    Если нужно сделать только вывод в эксель, то папки не нужны.
     
  3. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    можно и без них, но почему не нужны? :rolleyes: папка может послужить буфером перед экспортом, т.е. можно увидеть какие доки туда попали, выделить только нужные, к примеру... но это так, размышления :)
     
  4. Grrr

    Grrr Гость

    Именно для этой цели и хочу использовать папки. Некий промежуточный этап между самим экспортом. Прошу тему не закрывать, завтра попробую задать конкретные вопросы, с примерным кодом.
     
  5. Grrr

    Grrr Гость

    Правильно ли я делаю (взял из разных тем форума) и доработал:
    --
    На открытие в папке (shared, private on first use):
    Sub Queryopen(Source As Notesuiview, Continue As Variant)
    Dim ws As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim collection As NotesDocumentCollection
    Set db = session.CurrentDatabase
    Set collection=db.AllDocuments
    Call collection.RemoveAllFromFolder( "myfolder")
    End Sub
    --
    В папке вызываю форму поиска "SeachForm", в которой есть поля выбора формы, автора, статуса, ну и интервал дат.:
    Sub Click(Source As Button)
    Dim ws As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim searchDoc As NotesDocument
    Dim dc As NotesDocumentCollection
    Dim find As String

    Set searchDoc = New NotesDocument(session.CurrentDatabase)
    If ws.DialogBox("SearchForm", True, True, False, False, False, False, "Search", searchDoc , True) Then
    find = {(Form = "} + Cstr(searchDoc.FormSelect(0)) + {")}
    find = find + {&(Author = "} + Cstr(searchDoc.cAuthor(0)) + {")}
    find = find + {&(Status = "} + Cstr(searchDoc.cStatus(0)) + {")}
    find = find + {&@Created >= @TextToTime("} + searchDoc.Date1(0) + {")}
    find = find + {&(@Created <= @TextToTime("} + searchDoc.Date2(0) + {"))}

    Set dc = session.CurrentDatabase.Search(find, Nothing, 0)
    Messagebox dc.count
    Call dc.PutAllInFolder("myfolder", False)
    Call ws.ViewRefresh
    End If
    End Sub
    --
    Когда только начинал писать скриптик без указания формы вылетело: "Notes error: To move a response document to a folder that shows response hierarchy you need to move the topmost parent of the response (asd)". Почему скрипт не отработал без указания формы главного документа? Как я понял надо перенести самый верхний уровень документов, чтобы перенеслись и респонсы? Есть ли формула для переноса сразу всех документов включая респонсы?
     
  6. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Grrr
    неа, лучше удалять не все документы базы из папки, а только те которые в этой папке есть

    Set collection=db.GetAllDocumentsByKey ...

    убрать у папки свойсто Show heararchy

    да и сюдя по коду вы исключаете возможность НЕ задать один из параметров поиска
     
  7. Grrr

    Grrr Гость

    "неа, лучше удалять не все документы базы из папки, а только те которые в этой папке есть". Пожалуйста объясните в чём разница, скорость работы или какие то нюансы?

    По поводу "да и сюдя по коду вы исключаете возможность НЕ задать один из параметров поиска", согласен и хотелось бы узнать поподробнее. Как я понимаю необходимо будет добавить возможность исключить некоторые критерии поиска путём задания условий, в виде булевых флажков (true,false), у каждого из полей? Как лучше всего это реализовать.?

    Как уже говорил выше, мне необходимо создать скрипт отбора документов(главных, респонсов, респонсов-респонсов), по данным полей(как в скрипте, включая интервал дат), которые будут помещены в папку и далее экспортированы в excel. Правильный ли способ поиска использую? Слышал про другие ft, bykey будут ли они служить лучшей альтернативой search в данном КОНКРЕТНОМ случае?
     
  8. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Grrr
    разница в том с каким кол-м документов работать. Юрать ВСЕ документы базы или только нужные. Можете поэксперементировать по скорости. Что быстрее не скажу сразу. Моё имхо работать только с нужными нам документами.

    У меня например реализовано просто добавление в формулу поиска тех параметров, поля для которых заданны
    Получиться чтото вроде :
    Код (Text):
    find = {(Form = "} + Cstr(searchDoc.FormSelect(0)) + {")}
    if Len( searchDoc.cAuthor(0) ) > 0 then find = find + {&(Author = "} + Cstr(searchDoc.cAuthor(0)) + {")}
    и т.д.
    Правда у меня вообще немного по другому.

    У вас нет заранее извесного набора параметров, поэтому search в данном случае будет лучше. С другой сторны я не могу понять зачем вообще использовать папки, если у Вас есть готовая колекция документов. Вот и экспортите сразу эту коллекцию. в эксель. Работа с папкой мне кажеться тут вообще лишней, имхо.
     
Загрузка...

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