Прежде всего, мои соболезнования по поводу выбора почтового сервера, навязанного вам вашей компанией.
Проблема в том, что действительно нет хороших примеров.Существует только небольшое сообщество пользователей, которые все еще используют эту мертвую технологию.
Вот то, что я нашел:
Как облажался, как это звучит ... Откройте файл nsf в шестнадцатеричном редакторе - есть несколько «хороших» примеров, написанных на VB (или Lotus Script) втам.o_O
Но, насколько я могу судить (по крайней мере, для себя), информация календаря не хранится в локальных файлах NSF.Проблемы, с которыми мы сталкиваемся:
- Что такое имя сервера / имя базы данных?Я могу найти около 10 различных IP-адресов сервера домино, если я их осмотрю - могу ли я использовать только один из них?Помогает ли знание SMTP-адреса?
- Какую строку передать в GetView?Я видел, как "Контакты", "Люди", "$ (Люди)", помещающие туда что-то глупое, возвращают ноль, есть ли где-нибудь список ??
- Откуда пришел пользователь?В остальной части юниверса для аутентификации используются имя пользователя и пароль.Почему API Notes не хочет знать имя пользователя ??
Чтобы ответить 1 : я думаю, что пустая строка каким-то образом получает нужный сервер из реестра Бог знает где.
Еще одна возможность - попробовать это. На Lotus Notes есть стрелка вниз, которая расширяется, чтобы вы могли переходить к Mail, Calendar, (и куче других дерьмов, которые вынаверно никогда не пользовался).Щелкните правой кнопкой мыши Календарь здесь, затем перейдите в Приложение> Свойства.Это перечислит сервер и имя файла.Удалите висящий / мусор / хрень с имени сервера.Это даст имя сервера для функции ниже.Также удалите префикс \ mail \ directory из имени файла, который даст базу данных для функции ниже.
Чтобы ответить 2 : я не нашел лучшего ответа, чем использование Hex-редактора или поиск в Интернете фрагментов кода.Я подозреваю, что эта строка установлена не IBM, а во время установки.Так что, если бы мы могли найти значение по умолчанию, * может работать.Я снова хотел бы получить лучший ответ сам.Для меня работает $ All для электронной почты (извините В лотосных заметках нет «писем», Lotus отправляет «Memos») и Calendar для календаря.
Для ответа 3 :Lotus Notes API, похоже, использует последнего вошедшего в систему пользователя для аутентификации следующего вошедшего в систему пользователя.Пойми, наверное, поэтому Lotus и так более безопасен.
Следующая функция требует ссылки на Domino dll.Возможно, вам придется сослаться на него, и если вы используете 64-битную систему, он все равно не будет работать.Скомпилируйте это в 32-битном режиме.Не забывайте, что Lotus Notes - это приложение уровня предприятия, и световые годы за пределы возможностей Outlook.Это вернет серию пар ключ / значение.Да, вы правильно прочитали.Это все пары ключ-значение.Куча 64-битного закодированного мусора, цветовых кодов, направляющих, на первый взгляд случайных массивов «1» и другой бесполезной хрени, к счастью, вам нужны данные в виде открытого текста.
using System;
using System.Linq;
using System.Data;
using System.Collections;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using Domino;
using System.Text;
using System.IO;
using System.Collections.Generic;
namespace NotesScraper
{
public class NotesCommunication
{
public KeyValuePair<string, NotesViewResultSet[]>[] PullNotesView(string[] ViewNames, string server, string database, string password )
{
if (ViewNames == null || ViewNames.Length == 0 || ViewNames.ToList().Distinct().Count() != ViewNames.Length )
{
throw new ArgumentException();
}
else
{
List<KeyValuePair<string, NotesViewResultSet[]>> results = new List<KeyValuePair<string, NotesViewResultSet[]>>();
NotesSession notesSession = new Domino.NotesSession();
notesSession.Initialize(password);
NotesDatabase notesDatabase = notesSession.GetDatabase(server, database, false);
for(int i=0; i<ViewNames.Length; i++)
{
List<NotesViewResultSet> result = new List<NotesViewResultSet>();
Domino.NotesView notesView;
string view = ViewNames[i];
notesView = notesDatabase.GetView(view);
NotesViewEntryCollection notesViewCollection = notesView.AllEntries;
for (int rowCount = 1; rowCount <= notesViewCollection.Count; rowCount++)
{
NotesViewEntry viewEntry = notesViewCollection.GetNthEntry(rowCount);
NotesDocument document = viewEntry.Document;
Array notesThings = document.Items as Array;
for (int j = 0; j < notesThings.Length; j++)
{
NotesItem notesItem = (notesThings.GetValue(j) as Domino.NotesItem);
result.Add(new NotesViewResultSet()
{
RecordID = rowCount,
Name = notesItem.Name,
Value = notesItem.Text
});
}
}
results.Add(new KeyValuePair<string,NotesViewResultSet[]>(view, result.ToArray()));
}
return results.ToArray();
}
}
}
public class NotesViewResultSet
{
public int RecordID {get;set;}
public string Name { get; set; }
public string Value { get; set; }
}
}