Я сделал это один раз.
Вы должны добавить новую ссылку в свой проект и выбрать «COM» в диалоговом окне «Добавить ссылку». Найдите в списке компонент с именем «Объекты Lotus Domino» и добавьте его. Вы увидите новую ссылку под названием «Domino», добавленную в ваш проект. Этот COM-компонент устанавливается Lotus Notes Client. Он должен быть у вас на компьютере разработчика, и он также должен быть установлен при запуске приложения.
С этого момента вы можете использовать большинство доступных вам классов при разработке с lotusscript в NotesDesigner.
Добавить соответствующий оператор using:
using Domino;
Создать сеанс заметок:
NotesSession session = new NotesSession();
session.Initialize("mypassword");
//this uses your current Notes location and id.
//i think you can use session.Initialize("") if notes is already running and you are already logged in.
Получить базу данных:
NotesDatabase notesDb = session.GetDatabase("server", "database", false);
Получить некоторые документы, например: сегодняшние встречи (если база данных, которую вы открыли, это ваш mail.nsf)
NotesDocumentCollection col = null;
try { col = notesDb.Search("Form = \"Appointment\" & StartDate = @Today", null, 0); }
catch (Exception e) { }
Итерация по вашей коллекции:
if (null != col)
{
NotesDocument doc = col.GetFirstDocument();
while (doc != null)
{
//do your magic tricks
doc = col.GetNextDocument(doc);
}
}
Одна проблема, с которой я столкнулся в этом интерфейсе: нет ни метода session.Close (), ни чего-либо подобного, и мои сеансы не закрывались на сервере, когда GC собирал объект C #. После того, как я открыл новый NotesSession (), он оставался живым на сервере домино, пока мой c # поток был жив. Чтобы решить эту проблему, мне пришлось создавать фоновые потоки и создавать экземпляры только новых объектов NotesSession () из потоков. Потоки также должны были быть настроены в режиме квартиры STA перед запуском.
Thread thread = new Thread(new ThreadStart(MyFunctionThatInstantiatesNewNotesSessions));
thread.SetApartmentState(System.Threading.ApartmentState.STA);
thread.Start();
thread.Join();
Я не уверен, является ли эта проблема действительно проблемой в интерфейсе, или что-то еще, что я сделал неправильно в своем коде. Но если кто-то сталкивается с этой проблемой: нити - это то, как я ее исправил.