我认为我正在正确地创建它,如下所示。 c是一个联系人,我只是试图存储一个唯一的标识符,因为EWS提供的ItemId不是静态的......
propertySetId = System.Guid.NewGuid();
// Create a definition for the extended property.
ExtendedPropertyDefinition extendedPropertyDefinition = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Common, "itemGUID", MapiPropertyType.String);
c.SetExtendedProperty(extendedPropertyDefinition, propertySetId.ToString());
c.Update(ConflictResolutionMode.AlwaysOverwrite);
当我尝试根据其他内容(例如名字)搜索联系人时将其撤回,我将返回null。我试图通过以下方式获得价值:
foreach (Item c in findResults.Items)
{
foreach(ExtendedProperty extendedProperty in c.ExtendedProperties)
{
if(extendedProperty.PropertyDefinition.Name == "itemGUID")
{
results[i] = extendedProperty.Value.ToString();
}
}
}
编辑:findResults的代码
List<SearchFilter> searchFilters = new List<SearchFilter>();
searchFilters.Add(new SearchFilter.IsEqualTo(itemGUID, value));
//can be more filters here depending on situation
SearchFilter filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, searchFilters.ToArray());
findResults = service.FindItems(WellKnownFolderName.Contacts, filter, view);
答案 0 :(得分:2)
您需要在PropertySet
中指定ItemView
,以告知EWS使用FindItems
进行搜索时要包含的属性。如果您未将其包含在ItemView
中,则无法阅读。另一种方法是使用Contact.Bind
并请求每个联系人的财产(< em>更多服务请求,但有时是必要的)。
有关在EWS中使用Viewing Extended Properties using EWS的完整示例,请参阅Extended Properties。
ExtendedPropertyDefinition propDef = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Common, "itemGUID", MapiPropertyType.String);
ItemView view = new ItemView(50) { PropertySet = new PropertySet(propDef) };
ExtendedPropertyDefinition propDef = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Common, "itemGUID", MapiPropertyType.String);
Contact contact = Contact.Bind(service, contactID, new PropertySet(propDef));