• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Кастумизация Advanced Search

  • Автор темы SkinGreek
  • Дата начала
S

SkinGreek

Всем привет.
Чет не ладится у меня с лотусом... сново прошу помощи:)
В общем есть желание поменять интерфейс поиска писем в Notes 8. Стандартный поиск реализован как плагин. И он всеж не очень понятен людям привыкшим к The Bat, в котором четко и ясно вводится, в каких полях и что искать, и не надо искать имя поля в куче мусора(я имею ввиду поиск по конкретному полю).
Я попытался написать свой плагин, который использует уже разработанные ibm библиотеки.
Я накопал что основной фасад механизма поиска реализован в плагине com.ibm.rcp.search.engines_1.3.1.20080214-1630.jar, а реализация, поиска писем в com.ibm.notes.sharednotescontent_8.0.1.20080214-1630. API обоих не документирован - ИМХО, API фасада могли бы и открыть.
На данный момент получилось искать по конкретным полям в All Documents, а хотелось бы чтоб пользователь указывал несколько папок в которых стоит искать,но на это я уже не сильно надеюсь, как минимум хотелось бы узнать как указать в какой папке искать.
Вот.

Может конечно я не потому пути пошел, и надо писать плагин либо с нуля, либо вообще решать эту задачу через другое место.
Потому и хотел спросить, есть ли идеи как натравить уже созданную IBM'ом библиотеку, на поиск в конкретной папке,
или куды смотреть чтоб написать поиск с менее гибким по возможностям, но юзабельным для поиска писем?

Заранее пасиб.
 
A

allex

На данный момент получилось искать по конкретным полям в All Documents, а хотелось бы чтоб пользователь указывал несколько папок в которых стоит искать,но на это я уже не сильно надеюсь, как минимум хотелось бы узнать как указать в какой папке искать.

Ты получаешь уоллекцию доков в представлении (пока она у тебя одна)
Пользователю нужно выбрать несколько папок.
Сделай диалог выбора представлений (с возможностью выбрать несолько)

а затем в своем запросе поиска через UI меняй имя папки на последующую

Цикл по колличесву папок
запрос поиска доков

конец поиска доков по первой папке (через колличество доков)

замена имени папки на следующее

Конец цикла по колличесву папок
 
S

SkinGreek

Ок, то есть на IBM'ском плагине не заморачиватся и делать нечто подобное

Код:
	selectedFolders = getSelectedFolders()
Forall f In selectedFolders
Set view = db.GetView(f)
If view.IsFolder Then
view.FTSearch(query)
Set doc = view.GetFirstDocument()
While Not(doc Is Nothing)
col.AddDocument(doc)
Set doc = view.GetNextDocument(doc)
Wend
End If
End Forall
Единственное всеж не ясно
1 NotesDocumentCollection, в которую я складываю найденные доки так просто не создать, а делать для его создания через db.GetView("tmp").Documents а вотом очищать перед началом поиска не очень то симпотно выглядит
2 Как в дальнейшем отобразить это в виде view? я не разу такого не делал тыкни в док плз где поглядеть про это. В хелпе результаты помещаются в папку. Но создавать папку Search Result как то не красиво, нельзя сделать 2 последовательных поиска и смотреть на наих одновременно. А динамически создать фолдер я тож не нашел,ток view.

Пасиб большое за помощь,хыть новый путь решения проклевывается
 
S

SkinGreek

покопавшись по форуму вроде как стало ясно что для этих целей стоит использовать фолдеры.И вроде как Shared, private on first use.
Попытался.говорит, что я не могу помещать доки в фолдер такого типа.что это значит? Затык на затыке:'(
Дальше пытался открывать фолдер через NotesUIDatabase.OpenView. Он конечно не обновился, но надеюсь IsAutoUpdate или что то подобное поможет. Лишь бы сейчас он мне скинул результат.

И еще не совсем ясно, если говорят что использование PutInFolder серьезно сказывается на производительности,почему же я не могу самостоятельно создать коллекцию документов(через New), заполнить ее и воспользоваться PutAllInFolder.как я понимаю она быстрее сработает так как при вставке в фолдер что-то происходит кроме записи инфы о прикреплении данного дока к фолдеру.Ну эт так, риторический вопрос наверное...
 
30.05.2006
1 345
12
BIT
0
почему же я не могу самостоятельно создать коллекцию документов(через New), заполнить ее и воспользоваться PutAllInFolder
Для коллекции метода new (конструктора) не предусмотрено (вроде с какой-то 8-ки д.б.). Для мазохистов есть трюк:
Код:
set coll = db.Search({@False},nothing, 0)
А лучше
Код:
set coll = db.Search({@False}, session.CreateDateTime(now), 0)
 
S

SkinGreek

забросил эту задачу теперь вновь пришлось вернуться...
покопал инет пол дня на тему.
как инстанцировать Shared, private on first use(то есть программно сделать этот "first use") и дальше уже забить каталог результатами.
Но толком так и не нашел решения. В здешнем форуме нашел топик связанный немного с этим. там инстанцию фолдара делали чере собак, но на сабаках поиск я даже не представляю как делать
Кто делал свой поиск и выводил его на экран в виде view, подскажите плз сам момент отображения результатов.BackEnd вроде отрабатывает нормально, осталось только чтобы SPOFU фолдер инстанцировать да отобразить его.
Так же не ясно почему отказываеться работать
Код:
Call w.CurrentDatabase.OpenView("ViewOrFolder", , True, True)
Причем не только на моем SPOFU а на любой view

Заранее благодарен за помощь.

ЗЫ: офтоп - как долго нужно ломать свой моск чтоб решать, такие, на первый взгляд, простые задачи. И все ли выжили при этой ломке?:())


Constantin A Chervonenko
почему же для мазохистов,если по отзывам PutInFolder в цикле это ресурсоемкий процесс?:$
Пасиб за прием, буду пользовать при надобности:(
 
S

Sandr

Создаете на бекенде документик. На форму этого дкумента лепите одно РТ поле. Рисуете в нем таблицу . Каждая строчка в таблице - это ссылка на найденный документ и информация о документе. Открываете его на уи.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Если нужен поиск в почтовой базе, то можно обычную Shared папку использовать. Всё равно пользователь у базы один. И проблем лишних не будет.
 
S

SkinGreek

Medevic
В принципе да, я перемудрил с приватными в данном случае. Пасиб за то что повернул мыслю в верную сторону:)
Sandr
Чую мне повезло что в данном случае мне хватит расшареной папки. Если таким методом решается задача кастумезированого поиска документов по общей базе, то мне остается ток молится за свой моск:(
Но решение понятно, рисовать таблицу в RichText и каждый результат поиска - документ.

как я понимаю то что не работает Call w.CurrentDatabase.OpenView("($All)", , True, True) в action для вьюхи это скорее глюк 8-ки, других объяснений я не вижу.
Попытка открыть результаты через Evaluate("@Command([OpenView];""($All)"";"""";1)") тоже ни к чему не привели(

Ну вот вроде получилось открыть результаты... Функционал поиска засунул в агент и его вызывал из экшена через собаку RunAgent. И все ок. Не ругаеться ни на какой контекст.в чем прикол не понимаю o_O. В агенте так и осталось
Call w.CurrentDatabase.OpenView("SearchResult", , True, True)
Теперь переживаю что будут траблы с диалоговым окном, которое буду вызывать из агента. Думаю что тоже не все так просто получится, лотус просто так не сдается))...

Спасибо за помощь один затык преодолен, скоро ожидаю следующих:^)
 
Мы в соцсетях:

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