我正在尝试使用全局UID找到约会。我知道全局UID将提前是什么(可以在创建约会时设置)。
我通过引用此URL http://msdn.microsoft.com/en-us/library/cc815676(v=office.15).aspx创建了ExtendedPropertyDefinition。
var service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.Credentials = new NetworkCredential("","","");
service.Url = new Uri("");
ExtendedPropertyDefinition epICalId = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Appointment, 3, MapiPropertyType.String);
ItemView view = new ItemView(50);
view.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties);
view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Calendar, new SearchFilter.IsEqualTo(epICalId, "CustomUID123"), view);
var x = findResults.TotalCount;
问题是没有会议返回。有什么想法吗?
我仍然无法将ICalUID转换为二进制对象。它可能是一个不同的对象(见下面的评论)。但我可以使用Extended属性设置搜索过滤器。在下面的代码中,我只需保存“temp”对象并重新使用它进行搜索。
var PROP_DEF_PidLidGlobalObjectId = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Meeting, 0x00000003, MapiPropertyType.Binary);
appt.Load(new PropertySet(BasePropertySet.FirstClassProperties, PROP_DEF_PidLidGlobalObjectId);
object temp;
appt.TryGetProperty(PROP_DEF_PidLidGlobalObjectId, out temp);
var sf2 = new SearchFilter.IsEqualTo(PROP_DEF_PidLidGlobalObjectId, Convert.ToBase64String(temp as byte[]));
答案 0 :(得分:1)
您使用了错误的MapiPropertyType。 GlobalID是二进制属性,而不是字符串。 EWS使用Base64字符串处理SOAP。我相信二进制类型的扩展属性将作为字节数组来实现,因此如果您正在获取/设置二进制扩展属性,您可能需要自己处理Base64转换(如果需要)。如果您已经有Base64字符串,那么没问题。将扩展属性定义为二进制,并在搜索过滤器中使用Base64字符串。 EWS应该完成剩下的工作。
啊,对不起,我错过了。您正在检查DefaultExtendedPropertySet.Appointment。它应该是DefaultExtendedPropertySet.Meeting。如果您尝试以这种方式设置全局唯一ID,那么您需要设置一个&#34; new&#34;扩展财产而不是。您无法设置GlobalUniqueID。如果你尝试,交易所可能不会抛出错误,但这并不意味着它做了你要求它做的事情。 GlobalUniqueID基于约会的日期/时间生成。它可能与ICalUID匹配(我之前没有意识到它们可以匹配,所以道歉),但不一定。查看GlobalUniqueID和CleanGlobalUniqueID之间的差异。我不知道ICalUID本身是否可以与之分开,但我对此表示怀疑。如果要搜索其中任何一个,您需要创建约会,然后加载所需的扩展属性并将其保留在其他地方进行搜索,或者使用您自己的标识符设置您自己的扩展属性并搜索它。 / p>答案 1 :(得分:0)
我认为问题是你的PropertySet没有包含你的ExtendedPropertyDefinition。因此,当您调用FindItemsResults时,没有加载扩展属性值来搜索。所以改变:
view.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties);
到
view.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, epICalId);
Viewing custom extended properties by using the EWS Managed API是一个很好的资源,如果它没有解决它。