вам нужно будет использовать метод notesDbDirectory.OpenDatabaseByReplicaID (rid $). Чтобы получить NotesDbDirectory, вы можете использовать метод getDbDirectory сеанса
Set notesDbDirectory = notesSession.GetDbDirectory( serverName$ )
Таким образом, вы можете использовать приведенный ниже код для получения базы данных по replicaID.
public static string[] GetLotusNotesHelpTickets()
{
NotesSession session = new NotesSession();
session.Initialize(Password);
Set notesDBDirectory = session.GetDbDirectory("NTNOTES1A")
// 85256B45:000EE057 = NTNOTES1A Server Replica ID
NotesDatabase database = notesDBDirectory.OpenDatabaseByReplicaID("85256B45:000EE057")
string SearchFormula = string.Concat("Form = \"Call Ticket\""
, " & GroupAssignedTo = \"Business Systems\""
, " & CallStatus = \"Open\"");
NotesDocumentCollection collection = database.Search(SearchFormula, null, 0);
NotesDocument document = collection.GetFirstDocument();
string[] ticketList = new string[collection.Count];
for (int i = 0; i < collection.Count; ++i)
{
ticketList[i] = ((object[])(document.GetItemValue("TicketNumber")))[0].ToString();
document = collection.GetNextDocument(document);
}
document = null;
collection = null;
database = null;
session = null;
return ticketList;
}
К сожалению, это решает только половину вашей проблемы. Я знаю, что вы бы просто сказали Notes, чтобы он извлекал базу данных с конкретным replicaID с ближайшего к клиенту сервера, как это делает Notes-клиент, когда вы нажимаете DBLink или Bookmark. Тем не менее, нет (или, кажется, нет) никакого способа сделать это с помощью API Notes.
Мое предложение состоит в том, чтобы либо пройти через жестко закодированный список потенциальных серверов по имени, и проверить, найдена ли база данных (метод OpenDatabaseByReplicaID возвращает ERR_SYS_FILE_NOT_FOUND (ошибка 0FA3), если база не найдена). Если это не очень хороший вариант, возможно, вы легко можете указать имя сервера в меню администратора вашего приложения, чтобы его можно было легко изменить, если в какой-то момент имя сервера изменится.