私は一度それをしました。
プロジェクトに新しい参照を追加し、[参照の追加] ダイアログで [COM] を選択する必要があります。リストで「Lotus Domino Objects」という名前のコンポーネントを見つけて追加します。プロジェクトに追加された「Domino」という新しい参照が表示されます。その COM コンポーネントは、Lotus Notes クライアントによってインストールされます。開発マシンにインストールする必要があり、アプリケーションを実行するときにもインストールする必要があります。
その時点から、NotesDesigner 内で lotusscript を使用して開発するときに使用できるほとんどのクラスを使用できます。
適切な「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);
}
}
このインターフェイスで気付いた問題の 1 つは、session.Close() メソッドなどがないことと、GC が C# オブジェクトを収集した後、サーバーでセッションが閉じられなかったことです。新しい NotesSession() を開くと、C# スレッドが動作している限り、Domino サーバーで動作し続けました。この問題を解決するには、バックグラウンド スレッドを作成し、スレッド内から新しい NotesSession() オブジェクトのみをインスタンス化する必要がありました。また、スレッドは、開始する前に STA アパートメント モードでセットアップする必要がありました。
Thread thread = new Thread(new ThreadStart(MyFunctionThatInstantiatesNewNotesSessions));
thread.SetApartmentState(System.Threading.ApartmentState.STA);
thread.Start();
thread.Join();
この問題が本当にインターフェイスの問題なのか、それともコードで間違っていたのかはわかりません。しかし、誰かがその問題に直面している場合: スレッドは私が修正した方法です。