Lotus Notes Database Search - PullRequest
       43

Lotus Notes Database Search

0 голосов
/ 28 января 2019

Я пытаюсь написать код, чтобы открыть 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

Ответы [ 2 ]

0 голосов
/ 29 января 2019

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

set uiDb = uiWS.CurrentDatabase 

, который получит объект NotesUIDatabase , а затем вы можете использовать

set db= uiDb.Database 

, который получитвы NotesDatabase объект, который вам нужен для вызова метода FTSearch.

0 голосов
/ 28 января 2019

В 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:

Тамэто полный текст поиска и "нормальный" поиск.

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

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

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

Set doccol = db.FTSearch( YourSearchValue )

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

[From] = "YourSearchValue" 

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

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

@Contains( From ; "Tom" )

Синтаксис для поиска:

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

С Nothing = Cutoffdate (если заданы только созданные возвратные документыили изменено после даты) и 0 = макс.количество документов для возврата (0 = вернуть все).

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

strQuery = "FieldToSearch = " & Sheets("sheet1").Range("A1").Value
Set doccol = db.Search( strQuery, Nothing, 0 )
...