1

最近、ユーザーのOutlookデータベースをサードパーティアプリケーションと同期するクライアント用のOutlookプラグイン(Outlook 2010で使用するため)を作成しました。これは正常に機能します。ただし、クライアントが実行したいことの1つは、標準のコピー/貼り付け機能を利用してOutlookでレコードを複製することです。問題は、サードパーティシステムに送信されたOutlookレコードのUserPropertyを定義することです(サードパーティシステムからの内部IDを格納します)。クライアントがコピー/貼り付けを実行すると、このUserPropertyもコピーされます(同じサードパーティIDで複数のレコードが作成されるため、これは不適切です)。コピー/貼り付けが行われていることをコードで検出し、保存する前にレコードに変更(このUserPropertyの削除)を行う方法があるかどうか疑問に思いました。彼らはタスク、予定、

以下の提案に従って、以下に示すように、BeforeItemPasteを活用しようとしました。

private void ThisAddIn_Startup(object sender, System.EventArgs e) {
    Globals.ThisAddIn.Application.ActiveExplorer().BeforeItemPaste += new Outlook.ExplorerEvents_10_BeforeItemPasteEventHandler(Item_BeforeItemPaste);
}

private void Item_BeforeItemPaste(ref System.Object ClipboardContent,
    Microsoft.Office.Interop.Outlook.MAPIFolder Target, ref bool Cancel) {
    System.Windows.Forms.MessageBox.Show("Trying to paste");
}

このメッセージは、コピー/貼り付けを初めて実行したときに表示され、その後は二度と表示されません。理論的にはOutlookのすべてのエクスプローラーにアクセスできるApplication.Explorersを利用してみましたが、探していた個々のエクスプローラー(予定、タスク、連絡先)にアクセスできませんでした(その中には1つの要素しかありませんでした)デバッグしたときの「配列」)。また、MAPIFolder.GetExplorerを呼び出して、これらの特定のExplorerアイテムにアクセスしようとしましたが、これは常にnullを返しました。

4

1 に答える 1

1

Explorer.BeforeItemPasteイベントを使用してみてください。

于 2013-02-05T14:47:12.390 に答える