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

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

  1. SkinGreek

    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'ом библиотеку, на поиск в конкретной папке,
    или куды смотреть чтоб написать поиск с менее гибким по возможностям, но юзабельным для поиска писем?

    Заранее пасиб.
     
  2. allex

    allex Гость

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

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

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

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

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

    Конец цикла по колличесву папок
     
  3. SkinGreek

    SkinGreek Гость

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

    Код (Text):
        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.

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

    SkinGreek Гость

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

    И еще не совсем ясно, если говорят что использование PutInFolder серьезно сказывается на производительности,почему же я не могу самостоятельно создать коллекцию документов(через New), заполнить ее и воспользоваться PutAllInFolder.как я понимаю она быстрее сработает так как при вставке в фолдер что-то происходит кроме записи инфы о прикреплении данного дока к фолдеру.Ну эт так, риторический вопрос наверное...
     
  5. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Для коллекции метода new (конструктора) не предусмотрено (вроде с какой-то 8-ки д.б.). Для мазохистов есть трюк:
    Код (Text):
    set coll = db.Search({@False},nothing, 0)
    А лучше
    Код (Text):
    set coll = db.Search({@False}, session.CreateDateTime(now), 0)
     
  6. SkinGreek

    SkinGreek Гость

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

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

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


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

    Sandr Гость

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

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Если нужен поиск в почтовой базе, то можно обычную Shared папку использовать. Всё равно пользователь у базы один. И проблем лишних не будет.
     
  9. SkinGreek

    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)
    Теперь переживаю что будут траблы с диалоговым окном, которое буду вызывать из агента. Думаю что тоже не все так просто получится, лотус просто так не сдается))...

    Спасибо за помощь один затык преодолен, скоро ожидаю следующих:^)
     
Загрузка...

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