4

EWS マネージ API v1.1 を使用して、連絡先の「タイトル」または敬称 (必要に応じて) を空でない値に正常に保存/設定できますが、それを削除または空に戻す方法がわかりません文字列/ヌル。

空の値を設定しようとしましたが、拡張プロパティを削除しようとしました。関連するコードは次のとおりです。

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);

また、この非常によく似た質問で述べたように、ExtendedPropertyDefinition で別のオーバーロードを使用しようとしましたが、プロパティを削除した結果は変わりませんでした。コンストラクターの 2 つのシグネチャの違いを理解しているかどうかはわかりません。

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);

ブルート フォースによる回避策

連絡先の完全なコピー (タイトルなし) を取得し、元の連絡先を削除することもできると思いますが、それは少しやりすぎで、おそらく他のバグを引き起こす可能性があります。

4

1 に答える 1

5

EWS では、最初にバインドせずに拡張プロパティを割り当てることができます。ただし、拡張プロパティを削除するには、最初のバインド呼び出しに含める必要があります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;  
于 2011-12-12T17:12:02.970 に答える