Организация поиска (фильтра)

  • Автор темы Автор темы lepa
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Для: НБРК
Код кнопки давай.
Имхо, самое лучшее решение - отбор в папку (folder - shared, private on first use).
Если у тебя надо искать по одному полю и условие на равенство, то лучше использовать стандартный поиск.
 
Для 3-ки когда делал такое.
1. Кнопка - открывает новый документ
2. В форме задаються условия поиска формируется общий запрос
3. Пользователь нажимает "найти".
- Копируется в буфер обмена запрос.
- Закрывается форма
- В виде командой показываем панель поиска(курсор сразу туда позиционирует)
- Вставляем из буфера

Пользователю остается только нажать Ентер
 
Нет у меня поиск не по одному полю, а по нескольким, также поиск должен быть по дате, причем в некоторых случаях это будет интервал времени. В папку пробовала, но у меня отбор по ответным документам и при перемещении в папку требуется так же перемещать родительские документы, а мне они не нужны.
Очень прошу Domino6 пункт 3 подробней.
 
<!--QuoteBegin-НБРК+25:07:2005, 06:06 -->
<span class="vbquote">(НБРК @ 25:07:2005, 06:06 )</span><!--QuoteEBegin-->В папку пробовала, но у меня отбор по ответным документам и при перемещении в папку требуется так же перемещать родительские документы, а мне они не нужны.
[snapback]22509" rel="nofollow" target="_blank[/snapback]​
[/quote]
Не обязательно. Убери в свойствах папки "Show response documents in a hierarchy" на второй закладке.
 
Спасибо, вообще я как-то смотрела это свойство по аналогии как в представлении но почему-то не нашла, как говорится "Смотришь в книгу видишь фигу".
Ну, с этим понятно. А как все же к определенному полю привязывать условие отбора?
 
Искать через NotesDatabase.Search(...).
Здесь надо задать условие выбора. В хелпе написано.
Потом всю найденную коллекцию документов переместить в папку.
 
Это понятно, я это все могу сделать, если в формуле запишу fieldname="конкретное значение", а у меня это значение выбирается пользователем из списка Prompt и соответственно присваивается какой-то переменной, и после этого мне надо что бы выбирались те документы, в которых значение поля соответствует значению в этой переменной. Это у меня и не получается.
 
Для: НБРК
Поэтому я и просил привести код.
Если у тебя поиск по нескольким значениям, и все они должны задаваться, то лучше используй метод NotesUIWorkspace.DialogBox. Почитай в хелпе.
Т.е. создаешь специальную форму для поиска. Ставишь поля.
В свойствах NotesUIWorkspace.DialogBox можно указать документ, с которым работать. Т.е. перед вызовом тебе надо его создать.
Вот небольшой примерчик. Пусть у тебя есть форма SearchForm. На ней 3 поля. Search (тип Text), Date1 (тип Date), Date2 (тип Date). И пусть нам надо найти все документы с значением Search в поле Field1, созданными между Date1 и Date2 и поместить их в папку SearchFolder.

Код:
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
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 = {(Field1 = "} + CStr(searchDoc.Search(0)) + {")}
find = find + {&(@Created >= @TextToTime("} + searchDoc.Date1(0) + {"))}
find = find + {&(@Created <= @TextToTime("} + searchDoc.Date2(0) + {"))}

Set dc = session.CurrentDatabase.Search(find, Nothing, 0)
Call dc.PutAllInFolder("SearchFolder", False)
Call ws.ViewRefresh
End if

Этот код помещаешь в кнопку в папке SearchFolder.
 
Спасибо большое, сейчас постараюсь все сделать.
 
Всем привет.
Medevic, спасибо все получилось, вот только один нюанс, достаточно медленно все это работает. Понятно конечно пока все поля, по которым отбор происходит, проверит, но может, как -то можно ускорить. В принципе это не критично, но все же.
 
Для: НБРК
Использовать NotesDatabase.FTSearch.
Но здесь поиск будет проведен по всем полям. Т.е. возможны лишние документы.
Или NotesView.GetAllDocumentsByKey.
Здесь представление должно быть построено определенным образом. Т.е. на каждое поле, учавствующее в поиске, должна быть отсортированная колонка. Можно использовать скрытое представление. Но здесь проверка идет только на равенство (т.е. больше/меньше нельзя).
Для твоего случая это может подойти. Документы можно отобрать за период.
Вот пример отбора за период (первая отсортированная колонка должна быть с датой (например, датой создания)):
Код:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim dc As NotesDocumentCollection
Dim dateTime1 As New NotesDateTime("01.01.2005")
Dim dateTime2 As New NotesDateTime("01.02.2005")
Set dateRange = session.CreateDateRange()
Set dateRange.StartDateTime = dateTime1
Set dateRange.EndDateTime = dateTime2

Set db = session.CurrentDatabase
Set view = db.GetView( "MainView" )
Set dc = view.GetAllDocumentsByKey(dateRange, True)
...
End Sub

Или стандартный поиск.
 
Наверное, из-за того, что мне скоро в отпуск я совсем думать и искать ничего не хочу.
И все же подскажите, как папку открыть, через код (типа openview, но для папки)
 
Спасибо, я бы в жизни не догадалась, что папка открывается той же командой что и представление и в Help не написано или я так читаю.
Но спасибо, что есть такие люди, как вы, которые помогут в трудную минуту.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!