【问题标题】:Bind custom extended property for existing appointment using EWS managed API 2.0使用 EWS 托管 API 2.0 为现有约会绑定自定义扩展属性
【发布时间】:2015-10-29 10:18:12
【问题描述】:

我想使用自定义扩展属性进行唯一的预约以放入数据库。我使用 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 server 2010_SP2。

【问题讨论】:

    标签: c# exchange-server exchangewebservices ews-managed-api


    【解决方案1】:

    在这篇文章中查看我的答案: Exchange Webservice Managed API - Find items by extended properties 我认为您的问题与此非常相似。 “FindItems”方法不加载任何自定义属性。这就是为什么

    if (appointment.ExtendedProperties.Count <= 0)
    

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

    【讨论】:

    • 非常感谢!你解决了我在应用程序中最大的问题:)
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多