EWS在Appointment.Bind之后的Appointment.Resources中没有资源

时间:2015-01-23 14:41:41

标签: c# exchangewebservices exchange-server-2013

我使用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.根据此帖子(Can't Retrieve Resources (rooms) from Exchange Web Services),您需要告知EWS明确包含资源。在使用Appointment.Bind时如何指定包含资源?

1 个答案:

答案 0 :(得分:2)

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

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

<强>更新

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