EWS创建约会以交换额外的自定义属性

时间:2014-07-02 08:47:16

标签: c# visual-studio-2012 exchange-server exchangewebservices

我目前正在寻找一种方法,使用C#将一些额外的属性保存到交换预约中。目前我可以使用以下属性进行保存:

Appointment calendar = new Appointment(p_service);

calendar.Subject = calendarS5Subject;
calendar.Body = calendarS5Body;
calendar.Start = calendarS5StartDateTime;
calendar.End = calendarS5EndDateTime;
calendar.IsReminderSet = false;
calendar.Location = calendarS5Location;
calendar.Body.BodyType = BodyType.Text;

calendar.Save();

但我希望能够存储自己的自定义属性,例如calendar.EventIDcalendar.Blah。是否可以针对约会保存这些属性,然后能够在以后访问它们?如果它可以全部作为用户控件表单存储在指定窗口内,那就更好了。我知道你可以使用类型 AppointmentItem 的outlook插件来做到这一点。但是我还没有找到一种方法来与约会的类型进行交换。

TIA。

我现在可以使用以下方法保存额外的财产:

Guid EventIDSetGUID = new Guid("{C11FF724-AA03-4555-9952-8FA248A11C3E}");
ExtendedPropertyDefinition extendedPropertyEventID = new ExtendedPropertyDefinition(EventIDSetGUID, "EventID", MapiPropertyType.String);
calendar.SetExtendedProperty(extendedPropertyEventID, calendarS5EventID);

但是我现在正在努力回读这个属性。这项工作就在我保存了额外的属性之后,但如果我重新启动应用程序然后尝试读取额外的属性eventIDProp,则始终返回null。我的阅读代码:

Guid EventIDReadGUID = new Guid("{C11FF724-AA03-4555-9952-8FA248A11C3E}");
ExtendedPropertyDefinition extendedPropertyEventIDRead = new ExtendedPropertyDefinition(EventIDReadGUID, "EventID", MapiPropertyType.String);
object eventIDProp;
if (calendar.TryGetProperty(extendedPropertyEventIDRead, out eventIDProp) && eventIDProp != calendarS5EventID)
{

}

1 个答案:

答案 0 :(得分:2)

您可以使用MAPI扩展属性执行此操作:

    // Define MAPI extended properties
    private readonly ExtendedPropertyDefinition _extendedPropEventId = 
        new ExtendedPropertyDefinition(
            new Guid("{00020329-0000-0000-C000-000000000046}"),
            "Event Identifier",
            MapiPropertyType.String);

    private readonly ExtendedPropertyDefinition _extendedPropBlah = 
        new ExtendedPropertyDefinition(
            new Guid("{00020329-0000-0000-C000-000000000046}"),
            "Blah",
            MapiPropertyType.String);

...

    // Set extended properties for appointment
    calendar.SetExtendedProperty(_extendedPropEventId, "custom EventID value");
    calendar.SetExtendedProperty(_extendedPropBlah, "custom Blah value");

...

    // Bind to existing item for reading extended properties
    var propertySet = new PropertySet(BasePropertySet.FirstClassProperties, _extendedPropEventId, _extendedPropBlah);
    var calendar = Appointment.Bind(p_service, itemId, propertySet);
    if (calendar.ExtendedProperties.Any(ep => ep.PropertyDefinition.PropertySetId == _extendedPropEventId.PropertySetId))
    {
        // Add your code here...
    }