2016-04-26 32 views
1

Ich entwickle ein Add-In, das einige Daten auf den Mailitems speichern muss. Ich verwende die Redemption-Bibliothek und die MAPI.Utils HrSetOneProp-Methode.Benutzerdefinierte Eigenschaft MAPI_E_OBJECT_CHANGED

Nur in Outlook 2016 bekomme ich "Fehler in IMAPIProp :: SaveChanges: MAPI_E_OBJECT_CHANGED" jedes Mal, wenn ich einen zweiten Aufruf der Methode auf dem gleichen Mail-Element.

Es wurde versucht, RDO-Objekte für die Einlösung zu verwenden, und auch OOM mit denselben Ergebnissen. Hier

ein Beispiel:

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

Bitte überprüfen Sie [mcve] ans [fragen] – Claudius

+0

Was ist der relevante Ausschnitt Ihres Codes? –

+0

dort habe ich ein Stück des Codes –

Antwort

0

Erstens MAPIUtils Objekt ist veraltet, und es gibt keinen Grund, es zu benutzen - safeMailItem implementiert die gleichen Methoden (safeMailItem.GetIdsFromNames/Felder []).

Zweitens, warum übergeben Sie True (Save) für den zweiten Parameter in MAPIUtils.HrSetOneProp? Möchten Sie nicht, dass Outlook den Artikel immer dann speichert, wenn der Benutzer das möchte?

Woher kommt MailItem?

+0

1-ok hinzugefügt, habe ich festgestellt, dass MAPIUtils veraltet ist, aber da es bereits im Projekt verwendet wird Im arbeiten an, ich habe nicht geändert. Wenn ich versuchte, es zu ändern und safemailitem setfields zu verwenden und dann für das Mail-Element Speichern zu verwenden, speicherte es die Änderungen nicht. Ich lese hier, dass in diesen Fällen müssen Sie Outlook glauben, dass die Mail geändert hat. zB mailitem.subject = mailitem.subject. Aber indem ich das tue, habe ich Mails, die von einigen Mail-Servern duplicated sind, und auch einige merkwürdige Verhaltensweisen von IMAP-Synchro. –

+0

2- Was den save-Parameter betrifft, denke ich, dass du den vierten gemeint hast. Ich wollte, dass die Mail gespeichert wird, wenn die Eigenschaft hinzugefügt/bearbeitet wird. –

+0

3- \t Outlook._Explorer oExplorer = OutlookApp.ActiveExplorer(); \t Outlook.Selection Auswahl = oExplorer.Selection als Outlook.Selection; \t Diese Auswahl ist das mailItem, aber das sollte hier nicht das Problem sein, da ich das gleiche Problem habe, auch wenn ich das mailItem von entryId aus der Outlook-Sitzung –