2016-04-26 7 views
1

私はメールアイテムにいくつかのデータを格納する必要があるaddinを開発しています。私はRedemptionライブラリとMAPI.Utils HrSetOnePropメソッドを使用しています。カスタムプロパティMAPI_E_OBJECT_CHANGED

Outlook 2016でのみ、同じメールアイテムのメソッドを2回呼び出すたびに「IMAPIProp :: SaveChanges:MAPI_E_OBJECT_CHANGED」というエラーが発生します。

Redemption RDOオブジェクトを使用して試行し、同じ結果を持つプレーンOOMも試しました。ここ

は一例であり:

SafeMailItem m = RedemptionGM9.SafeMailItem; 
m.Item = mailItem; // this mailitem came as parameter in the function and it is the activeExplorer slection  
MAPIUtils utils = RedemptionGM9.MAPIUtils; 

string sGUID = PS_PUBLIC_STRINGS.ToString("B"); 
int iID = m.GetIDsFromNames(sGUID, GMLINK); 
if (iID != 0) 
{ 
    //this is the method that is failing every second time for the same mailitem until you restart outlook. 
    utils.HrSetOneProp(mailItem.MAPIOBJECT, iID, bForceGMPropTrue ? true : !String.IsNullOrEmpty(sAccNo), true); 
} 

Marshal.ReleaseComObject(utils); 
utils = null; 
Marshal.ReleaseComObject(m); 
m = null; 

//mailitem com object is released outside this method 
+0

[mcve] ans [ask] – Claudius

+0

コードの関連するスニペットは何ですか? –

+0

そこにコードの部分を追加しました –

答えて

0

まず、MAPIUtilsオブジェクトが廃止され、そしてそれを使用する理由はない - safeMailItemは同じメソッドを実装(safeMailItem.GetIdsFromNames /フィールド[])。

第2に、なぜMAPIUtils.HrSetOnePropの2番目のパラメータにtrue(保存)を渡すのですか?ユーザーがいつでもOutlookにアイテムを保存しないようにしますか?

MailItemはどこから来たのですか?

+0

1-ok、私はMAPIUtilsが廃止されていることに気付きました。しかし、すでにプロジェクトで使用されていますので、私はchange.itをやめました。 私はそれを変更しようとし、safemailitem setfieldsを使用して、メールアイテムに対してSaveを呼び出すと、変更が保存されませんでした。 私はここで、このような場合、メールが変更されたと見なすように見通しを変える必要があることを読んでいます。すなわちmailitem.subject = mailitem.subject。しかし、これを行うことで、私はいくつかのメールサーバーといくつかのIMAP同期奇妙な振る舞いによって重複したメールを持っています。 –

+0

2- saveパラメータに関して、私はあなたが4番目のものを意味したと思う、プロパティを追加/編集するときにメールを強制的に保存したかった。 –

+0

3- \t Outlook._Explorer oExplorer = OutlookApp.ActiveExplorer(); \t Outlook.Selection Selection = oExplorer.Selection as Outlook.Selection; \tその選択はmailItemですが、OutlookのセッションからentryIdでmailItemを取得しても同じ問題があるので、これは問題ではありません。 –

関連する問題