Про папки.

  • Автор темы Grrr
  • Дата начала
G

Grrr

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#2
Метод NotesDatabase.Search. На форуме много раз было.
Если нужно сделать только вывод в эксель, то папки не нужны.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#3
можно и без них, но почему не нужны? :rolleyes: папка может послужить буфером перед экспортом, т.е. можно увидеть какие доки туда попали, выделить только нужные, к примеру... но это так, размышления :)
 
G

Grrr

#4
можно и без них, но почему не нужны? :) папка может послужить буфером перед экспортом, т.е. можно увидеть какие доки туда попали, выделить только нужные, к примеру... но это так, размышления ;)
Именно для этой цели и хочу использовать папки. Некий промежуточный этап между самим экспортом. Прошу тему не закрывать, завтра попробую задать конкретные вопросы, с примерным кодом.
 
G

Grrr

#5
Правильно ли я делаю (взял из разных тем форума) и доработал:
--
На открытие в папке (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)". Почему скрипт не отработал без указания формы главного документа? Как я понял надо перенести самый верхний уровень документов, чтобы перенеслись и респонсы? Есть ли формула для переноса сразу всех документов включая респонсы?
 

morpheus

скриптописец
07.08.2006
3 915
1
#6
Grrr
неа, лучше удалять не все документы базы из папки, а только те которые в этой папке есть

Set collection=db.GetAllDocumentsByKey ...

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

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

Grrr

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

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

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

morpheus

скриптописец
07.08.2006
3 915
1
#8
Grrr
Пожалуйста объясните в чём разница, скорость работы или какие то нюансы?
разница в том с каким кол-м документов работать. Юрать ВСЕ документы базы или только нужные. Можете поэксперементировать по скорости. Что быстрее не скажу сразу. Моё имхо работать только с нужными нам документами.

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

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