Поиск в базе данных Lotus Notes

я пытаюсь написать код, чтобы открыть VBA и выполнить поиск на основе значения ячейки в A1 (целое число). мне удалось написать код до того момента, когда я могу открыть заметки лотоса и перейти к определенной базе данных. Я пробовал много онлайн-кодов, но не смог найти код для поиска в этой базе данных. «Lotus.NotesSession» не работает с версией Excel, которую я использую. Не могли бы вы помочь мне закончить этот код. Код ниже:

Sub macro4()

Dim uiWs As Object
Dim dbname As String
Dim serverName As String
Dim db As NotesDatabase
Dim doccol As NotesDocumentCollection
Dim varA As Integer



dbname = "***"

serverName = "***"


Set uiWs = CreateObject("Notes.NotesUIWorkSpace")

Call uiWs.OpenDatabase(serverName, dbname) 

Set db = uiWs.GetDatabase(serverName, dbname) ---->where i get the error

varA.Value = Sheets("sheet1").Range("A1").Value

Set doccol = db.FTSearch(varA, Nothing, 0)

End Sub

person RALF    schedule 28.01.2019    source источник
comment
Для вашего полнотекстового поиска db.ftsearch() требуются другие параметры, см. ibm.com/support/knowledgecenter/en/SSVRGU_9.0.1/basic/ . Первой должна быть строка.   -  person umeli    schedule 28.01.2019


Ответы (2)


В Notes есть два "родительских" класса, от которых все происходит. NotesUIWorkspace — это класс для «внешнего интерфейса»: он содержит все, что вы ВИДИТЕ в клиенте. NotesSession — это класс для серверной части. NotesDatabase — это базовый класс. Чтобы правильно получить свою базу данных, вам нужно использовать NotesSession:

Set ses = CreateObject("Notes.NotesSession")
Set db = ses.GetDatabase(serverName, dbname)

Вы перепутали интеграцию COM и OLE. То, что вы пытались использовать (Lotus.NotesSession), предназначено только для COM, и вам нужно включить Notes в свой проект, чтобы использовать это.

Чтобы ваш пример работал, вам необходимо использовать интеграцию OLE: Notes.NotesSession

Теперь к вашему "Поиск"- Код:

Существует два разных способа поиска в базе данных Notes:

Есть полнотекстовый поиск и "обычный" поиск.

Полнотекстовый поиск просто ищет ваше значение повсюду во всех документах и ​​возвращает коллекцию. Поиск «Tom» в почтовом файле найдет все письма / записи календаря, где:

  • прислал Том
  • получено Томом
  • иметь слово "Том" в теме или теле или вложении почты.

Синтаксис для FTSearch:

Set doccol = db.FTSearch( YourSearchValue )

Вы можете ограничить поиск одним определенным полем, используя специальный синтаксис для поиска. например. чтобы искать только в поле "От", вы можете написать

[From] = "YourSearchValue" 

В FTSearch "=" всегда означает "содержит"

обычный поиск использует формулу (в синтаксисе @Formula-) для поиска документа. Ему нужен правильный синтаксис, иначе он ничего не найдет. Формула для поиска всех документов, исходящих от «Тома», будет следующей:

@Contains( From ; "Tom" )

Синтаксис поиска:

Set doccol = db.Search( YourQueryAsExampleAbove, Nothing, 0 )

With Nothing = Cutoffdate (если заданы только возвращаемые документы, созданные или измененные после указанной даты) и 0 = макс. количество возвращаемых документов (0 = вернуть все).

Таким образом, ваш пример кода для может быть примерно таким:

strQuery = "FieldToSearch = " & Sheets("sheet1").Range("A1").Value
Set doccol = db.Search( strQuery, Nothing, 0 )
person Torsten Link    schedule 28.01.2019
comment
Спасибо за ваш ответ, я действительно ценю. это очень подробно и полезно. я попробовал ваши коды, но все еще имею ошибку несоответствия типа в строке Set db = uiWs.GetDatabase (serverName, dbname) ----> Ошибка несоответствия типа - person RALF; 28.01.2019
comment
я думаю, что я пользователь внешнего интерфейса, когда я использую NotesUIWorkspace и звоню, я могу перейти прямо к приложению/форме, где я хочу выполнить поиск, но с кодами, которые я использую, кажется, я не могу выполнять поиск. - person RALF; 28.01.2019
comment
Просто прочитайте документацию по NotesUIWorkspace: там НЕТ getDatabase, и OpenDatabase не возвращает объект NotesDatabase, который вам нужен для поиска... - person Torsten Link; 29.01.2019
comment
И еще: нет «удаленного управления» для панели поиска в открытой базе данных... вам нужно сделать поиск в бэкэнде, а затем каким-то образом представить результаты пользователю... но это не так просто задача даже для опытных разработчиков Notes... если ваш результат представляет собой один документ, вы можете использовать uiws.EditDocument, чтобы напрямую открыть его для пользователя... - person Torsten Link; 29.01.2019
comment
Спасибо за информацию, в основном потратил несколько дней на написание кода, но безуспешно. я сдалась, все равно спасибо. - person RALF; 29.01.2019

После успешного вызова OpenDatabase вы можете использовать

set uiDb = uiWS.CurrentDatabase 

Это получит NotesUIDatabase, а затем вы можете использовать

set db= uiDb.Database 

Это даст вам NotesDatabase, необходимый для вызова метода FTSearch.

person Richard Schwartz    schedule 29.01.2019
comment
Спасибо, я сделал то, что вы сказали, и сначала это дало мне ошибку несоответствия типа, когда я объявляю переменную uidb как notesuidatabase, когда я изменил объект, его код не дал мне никакой ошибки, но также ничего не сделал, поэтому я сдался. Спасибо за комментарий. - person RALF; 29.01.2019
comment
Что вы делаете после того, как позвоните в FTSearch? Это внутренний метод. Это не покажет вам никаких результатов. Вам нужно написать код для циклического просмотра коллекции и получения данных. - person Richard Schwartz; 30.01.2019
comment
Но в любом случае я понятия не имею, почему он дал вам несоответствие типов, когда вы объявили его как NotesUIDatabase. Если вы запустите в отладчике, какой тип объекта uidb вы увидите после вызова OpenDatabase? - person Richard Schwartz; 30.01.2019
comment
Привет, Ричард, в основном база данных, которую я открываю с помощью функции вызова, представляет собой журнал. вы можете искать по идентификатору (где я хочу поместить в ячейку A2. После поиска он показывает только этого человека, и при двойном щелчке по записи журнала вы можете увидеть информацию об этом человеке. Поэтому я хочу создать гиперссылку для каждого человека и при нажатии автоматически открывает лотосные заметки, переходит к этой базе данных (которой я управлял до этого момента) и ищет и находит этот идентификационный номер.Остальное не так важно.Но с моими знаниями это кажется невозможным.Я верю, если я покажу вы журнал, может быть, у вас будет больше идей? - person RALF; 31.01.2019
comment
Хммм... Если бы вызов OpenDatabase сработал, то CurrentDatabase точно не должна возвращать значение Nothing. Действительно ли ваш вызов OpenDatabase заставляет клиент Notes отображать открытую базу данных? - person Richard Schwartz; 01.02.2019
comment
Привет Ричард. Да, после вызова Opendatabase Lotus Notes сразу переходит к записи в журнале, и я могу видеть документ, возможно, проблема в том, что нельзя вывести внутренний поиск для отображения во внешнем интерфейсе? Но я могу найти все записи в журнале по почте. .box, и я могу открыть и увидеть их только в том случае, если я экспортирую файл mail.box в заметки лотоса как структурированный, и когда я открываю этот файл в excel, текстовый формат читается, но когда я открываю файл mali.box без экспорта ( непосредственно из каталога Lotus Notes) текстовый формат не читается. есть ли код для преобразования mail.box без экспорта? - person RALF; 01.02.2019
comment
Тогда мне не нужен код для открытия заметок лотоса и выполнения поиска, я могу найти точно такие же вещи, если смогу открыть файл mail.box в excel (конечно, читаемую версию) и использовать функцию сопоставления, чтобы найти то, что мне нужно. Любая помощь в этом кто-нибудь? - person RALF; 01.02.2019
comment
К вашему сведению. StackOverflow на самом деле не предназначен для использования веток комментариев для подобных расширенных обсуждений, и они не одобряют этого. Теперь, когда вы говорите о mail.box, я действительно не могу понять, что вы пытаетесь сделать. Но вы правы в том, что внутренний поиск не покажет свои результаты во внешнем интерфейсе. FTSearch возвращает NotesDocumentCollection, и вы можете написать код для итерации по этой коллекции, и вы можете получить доступ к значениям данных из dos в этой коллекции и можете использовать свой код для отображения этих данных в Excel или в MsgBox или в форме VBA. - person Richard Schwartz; 02.02.2019