使用EWS管理的API 2.0为现有约会绑定自定义扩展属性



我想使用自定义扩展属性进行唯一的预约以放入数据库。我使用FindAppointments()查找所有约会:

var appointments = _service.FindAppointments(WellKnownFolderName.Calendar, calendarView);

然后我使用foreach循环浏览所有约会:

foreach (var appointment in appointments)

对于所有没有扩展属性的约会:

if (appointment.ExtendedProperties.Count <= 0)

我绑定了一个自定义扩展属性,并用唯一的会议id(meetingId)设置其值,我专门生成了一个唯一的整数:

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。

请参阅我在这篇文章中的回答:Exchange Web服务托管API-按扩展属性查找项目我认为你的问题与此相当相似。"FindItems"方法不加载任何自定义属性。这就是的原因

if (appointment.ExtendedProperties.Count <= 0)

始终为true,即使约会已具有您的自定义属性。接下来,我建议您在DefaultExtendedPropertySet.PublicStrings中创建Extended属性,而不是创建自己的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
    }
}

最新更新