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

  • Автор темы lepa
  • Дата начала
Статус
Закрыто для дальнейших ответов.

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: НБРК
Код кнопки давай.
Имхо, самое лучшее решение - отбор в папку (folder - shared, private on first use).
Если у тебя надо искать по одному полю и условие на равенство, то лучше использовать стандартный поиск.
 
D

Domino6

Для 3-ки когда делал такое.
1. Кнопка - открывает новый документ
2. В форме задаються условия поиска формируется общий запрос
3. Пользователь нажимает "найти".
- Копируется в буфер обмена запрос.
- Закрывается форма
- В виде командой показываем панель поиска(курсор сразу туда позиционирует)
- Вставляем из буфера

Пользователю остается только нажать Ентер
 
G

Guest

Нет у меня поиск не по одному полю, а по нескольким, также поиск должен быть по дате, причем в некоторых случаях это будет интервал времени. В папку пробовала, но у меня отбор по ответным документам и при перемещении в папку требуется так же перемещать родительские документы, а мне они не нужны.
Очень прошу Domino6 пункт 3 подробней.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
<!--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" на второй закладке.
 
G

Guest

Спасибо, вообще я как-то смотрела это свойство по аналогии как в представлении но почему-то не нашла, как говорится "Смотришь в книгу видишь фигу".
Ну, с этим понятно. А как все же к определенному полю привязывать условие отбора?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Искать через NotesDatabase.Search(...).
Здесь надо задать условие выбора. В хелпе написано.
Потом всю найденную коллекцию документов переместить в папку.
 
G

Guest

Это понятно, я это все могу сделать, если в формуле запишу fieldname="конкретное значение", а у меня это значение выбирается пользователем из списка Prompt и соответственно присваивается какой-то переменной, и после этого мне надо что бы выбирались те документы, в которых значение поля соответствует значению в этой переменной. Это у меня и не получается.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: НБРК
Поэтому я и просил привести код.
Если у тебя поиск по нескольким значениям, и все они должны задаваться, то лучше используй метод 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.
 
G

Guest

Спасибо большое, сейчас постараюсь все сделать.
 
G

Guest

Всем привет.
Medevic, спасибо все получилось, вот только один нюанс, достаточно медленно все это работает. Понятно конечно пока все поля, по которым отбор происходит, проверит, но может, как -то можно ускорить. В принципе это не критично, но все же.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: НБРК
Использовать 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

Или стандартный поиск.
 
G

Guest

Наверное, из-за того, что мне скоро в отпуск я совсем думать и искать ничего не хочу.
И все же подскажите, как папку открыть, через код (типа openview, но для папки)
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
@Command([ViewChange])
@Command([SwitchView])
notesUIDatabase.OpenView
 
G

Guest

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

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