0

プログラムでいくつかの値を NSF アイテムに変更して保存したい (つまり、NSF ファイルを編集してからエディションを保存する)

例えば:

すべてのメールの差出人名を「preeti@abc.com」にしたい(Domino.dllを使用)。

私が試した解決策:(ToとFromの値の交換)

文字列 Temp_From = ((object[])docInbox.GetItemValue("From"))[0] 文字列として; 文字列 Temp_SendTo = ((object[])docInbox.GetItemValue("SendTo"))[0] 文字列として; docInbox.ReplaceItemValue("From", Temp_SendTo); docInbox.ReplaceItemValue("SendTo", Temp_From); docInbox.Save(真、偽、偽);

/* 以下のフィールドにも適用されます:

From の場合: AltFrom、DisplayFrom、DisplayFrom_2、dspFrom、ForwardedFrom、INetFrom、tmpDisplayFrom

To の場合: displaySendTo,EnterSendTo,Envelope_to,tmpDisplaySendTo

保存も試みました: docInbox.Save(true, true, true); */

上記のコードでは、編集の変更が成功した後、値が Nsf ファイルに反映されません。しかし、編集されたNsf(変更されたファイルを別の場所にコピーする)ファイルをプログラムで読んでいると、変更された値が表示されます.(変更がここに表示されないのはなぜですか?)

4

3 に答える 3

0

Notesクライアントで結果を確認していますか?この動作は、クライアントのかなり積極的なキャッシングによって説明できると思います。cache.ndkプログラムの結果を確認する前に、データディレクトリからファイルを削除してみてください。

また、Notesの「アイテム」には通常、値の配列が含まれています。たとえば、メールが複数の人に送信された場合、フィールドSendToとフィールドを交換する方法ではデータが失われます。代わりFromに全体をコピーしてみてください。object[]

于 2009-11-12T06:14:15.890 に答える
0

私は一度それをしました。

プロジェクトに新しい参照を追加し、[参照の追加] ダイアログで [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();

この問題が本当にインターフェイスの問題なのか、それともコードで間違っていたのかはわかりません。しかし、誰かがその問題に直面している場合: スレッドは私が修正した方法です。

于 2016-07-21T20:04:51.397 に答える
0

『プログラミング ガイド 第 2 巻: LotusScript/COM/OLE クラス』は、 http ://www-12.lotus.com/ldd/doc/uafiles.nsf/docs/DESIGNER70/ にあります。

ただし、簡単にまとめると、Document へのハンドルを取得すると、Items プロパティを使用して、そのドキュメントの既存のフィールド (「アイテム」) をすべて反復処理できます。また、ReplaceItemValue および/または AppendItemValue メソッドを使用して、そのドキュメントの特定のフィールドを更新できます。

于 2009-11-11T14:46:32.867 に答える