2011-12-09 107 views
4

使用EWS託管api v1.1,我可以成功地將聯繫人「標題」或敬語(如果您願意)保存/設置爲非空值,但我無法弄清楚如何刪除或將其設置回一個空字符串/ null。如何使用EWS託管API v1.1刪除聯繫人CompleteName.Title?

我試圖設置一個空值我試圖刪除擴展屬性。這裏是相關的代碼。

var titleDef = new ExtendedPropertyDefinition(0x3A45, MapiPropertyType.String); 

// works when set to a non-empty string value 
ewsContact.SetExtendedProperty(titleDef, "Mr."); 

// throws null argument exception when set to String.Empty or null 
ewsContact.SetExtendedProperty(propDefinition, String.Empty); 

// isRemoved is equal to false and the value doesn't change 
var isRemoved = ewsContact.RemoveExtendedProperty(titleDef); 

我也試過在this very similar question提到使用不同的過載的ExtendedPropertyDefinition,但它並沒有改變我的最終結果去除屬性。我不確定我是否理解構造函數的兩個簽名中的差異。

var titleDef = new ExtendedPropertyDefinition(new Guid("{00062004-0000-0000-C000-000000000046}"), 0x3A45, MapiPropertyType.String); 

// isRemoved is equal to false and the value doesn't change 
var isRemoved = ewsContact.RemoveExtendedProperty(titleDef); 

蠻力變通

我想我可以把接觸(無標題)的完整副本,並刪除原始,但似乎比最高位,可能會導致其他錯誤。

+0

你有沒有創建原始[聯繫方式](http://msdn.microsoft.com/en-us/library/gg274394%28v=exchg.80%29.aspx)項還是你只是修改現有? – SliverNinja

+0

我正在使用'ItemId'的'Contact.Bind()'方法修改現有的聯繫人以檢索它。 –

回答

4

EWS允許您在沒有先綁定它們的情況下分配Extended Properties。但是,要刪除擴展特性 - 您需要將其包含在初始綁定調用PropertySet中。以下爲我工作...

var titleDef = new ExtendedPropertyDefinition(0x3A45, MapiPropertyType.String); 
Contact contact = Contact.Bind(service, id, new PropertySet(titleDef)); 
contact.RemoveExtendedProperty(titleDef); 
contact.Update(ConflictResolutionMode.AutoResolve); 

這也是奇怪的是,你可以檢索Title作爲第一類屬性,但(因爲它是一個複合型),你不能給它分配。他們本可以讓我們更容易。

var title = contact.CompleteName.Title; 
+0

工作正常!非常感謝你。我在這個問題上長期處於困境。 –

相關問題