我想使用自定义扩展属性进行唯一约会以放入数据库。我使用FindAppointments()找到所有约会:
var appointments = _service.FindAppointments(WellKnownFolderName.Calendar, calendarView);
而且我使用foreach循环进行所有约会:
foreach (var appointment in appointments)
对于没有扩展属性的所有约会:
if (appointment.ExtendedProperties.Count <= 0)
我绑定了一个自定义扩展属性,并将其值设置为唯一会议ID(meetingId),我特别生成该会议ID为uniqe int number:
var myPropertySetId = new Guid("{6C3A094F-C2AB-4D1B-BF3E-80D39BC79BD3}");
var extendedPropertyDefinition = new ExtendedPropertyDefinition(myPropertySetId, "RateTheMeetingId", MapiPropertyType.Integer);
var bindedAppointment = Appointment.Bind(_service, appointment.Id, new PropertySet(extendedPropertyDefinition));
bindedAppointment.SetExtendedProperty(extendedPropertyDefinition, meetingId);
bindedAppointment.Update(ConflictResolutionMode.AlwaysOverwrite);
但它不起作用,因为我搜索会议并尝试输出扩展属性和tis值我没有得到结果,它没有绑定。我的问题是我做错了什么以及你可以提供什么其他解决方案给现有的约会定制扩展财产?顺便说一下,我正在使用MS Exchange服务器2010_SP2。
答案 0 :(得分:4)
在这篇文章中看到我的回答: Exchange Webservice Managed API - Find items by extended properties 我认为你的问题非常类似于此。 “FindItems”方法不会加载任何自定义属性。这就是为什么
if (appointment.ExtendedProperties.Count <= 0)
始终为true,即使约会已有您的自定义属性。 Next Thing是,我建议您在DefaultExtendedPropertySet.PublicStrings中创建Extended属性,而不是创建自己的guid。我也试过自己的guid,但从来没有让它正常工作。
试试这样:
ExtendedPropertyDefinition def = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "RateTheMeetingId", MapiPropertyType.Integer);
所以最后你的代码应该是这样的:
var appointments = _service.FindAppointments(WellKnownFolderName.Calendar, calendarView);
ExtendedPropertyDefinition def = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "RateTheMeetingId", MapiPropertyType.Integer);
PropertySet propset = new PropertySet(PropertySet.IdOnly);
propset.Add(def);
foreach (var appointment in appointments)
{
//appointment should already be binded, now load it
appointment.Load(propset);
object value = null;
if (item.TryGetProperty(def, out value))
{
//Do something
}
else
{
//Add Property
}
}