0

我正在使用 EWS 托管 API 加载特定房间资源的约会,并通过 WCF 发布它以供平板设备使用。

如果组织者在会议预定开始 15 分钟后没有执行特定操作,我想取消会议室预订。

因为平板设备只有 StoreId 属性来识别事件,所以我实现了以下代码:

public bool CancelMeeting(string appointmentId, string roomEmail)
    {
        try
        {
            var service = GetExchangeService();
            var ai = new AlternateId[1];
            ai[0] = new AlternateId();
            ai[0].UniqueId = appointmentId;
            ai[0].Format = IdFormat.HexEntryId;
            ai[0].Mailbox = roomEmail;
            ServiceResponseCollection<ConvertIdResponse> cvtresp = service.ConvertIds(ai, IdFormat.EwsId);
            var appointment = Appointment.Bind(service, ((AlternateId)cvtresp[0].ConvertedId).UniqueId);

            if (appointment.Resources.Count != 0)
                appointment.Resources.RemoveAt(0);

            appointment.Location = string.Empty;

            appointment.Save(SendInvitationsMode.SendOnlyToAll);
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }

然而,

if (appointment.Resources.Count != 0)
    appointment.Resources.RemoveAt(0);

在此代码中,约会.Resources.Count 始终为 0。根据这篇文章(无法从 Exchange Web 服务检索资源(房间)),您需要告诉 EWS 专门包含资源。使用 Appointment.Bind 时如何指定包含资源?

4

1 回答 1

2

与您链接的帖子大致相同。使用 AppointmentSchema.Resources 属性创建一个属性集并将其传递给 Bind 方法。

PropertySet includeResources = new PropertySet(BasePropertySet.FirstClassProperties, AppointmentSchema.Resources);
var appointment = Appointment.Bind(service, ((AlternateId)cvtresp[0].ConvertedId).UniqueId, includeResources);

更新:

看起来您正在访问会议室的日历,而不是组织者。在房间的日历中,您不会看到资源。资源仅在组织者的日历中可见。这是因为它们被实施为密件抄送收件人。另请记住,从房间的约会副本中删除某些内容不会将其从其他人邮箱中的约会中删除,因此这可能不是最佳方法。相反,您可能希望拒绝会议,这会将拒绝通知发送回组织者并将会议从会议室的日历中删除。

于 2015-01-26T15:44:50.427 回答