繁体   English   中英

在Exchange Web服务(EWS)中处理事件时标识项类型

[英]Identify item type when handling event in Exchange Web Services (EWS)

我正在使用EWS API的流式传输通知。 在事件处理程序中,我发现项目已被修改的事实,但我尝试将修改后的项目绑定到电子邮件消息失败。 错误消息是具体的

服务返回的项类型(约会)与请求的项类型(EmailMessage)不兼容。

在尝试绑定它之前,似乎必须有一种方法来识别项目类型,但我不确定那是什么。 尝试Bind时发生错误,因此我不能简单地检查null。 我可以try/catch ,但如果有更好的方法,我更愿意这样做吗?

汇总代码:

void streamingConnection_OnNotificationEvent(object sender, NotificationEventArgs args)
{
    foreach (NotificationEvent notificationEvent in args.Events)
    {
        ItemEvent itemEvent = notificationEvent as ItemEvent;
        if (itemEvent != null) HandleItemEvent(itemEvent);
    }
}

private void HandleItemEvent(ItemEvent itemEvent)
{
    switch (itemEvent.EventType)
    {
        case EventType.Modified:
            EmailMessage modifiedMessage = EmailMessage.Bind(this.ExchangeService, itemEvent.ItemId);
            // error occurs on Bind if the item type is not an EmailMessage (eg, an Appointment)
            break;
    }
}

看起来正确的绑定方式是使用通用的Item.Bind方法,然后检查该项是否是EmailMessage类型。 为了做到这一点(处理项目在被绑定之前被移动的潜在问题)我将逻辑放入一个方法,类似于下面:

private EmailMessage BindToEmailMessage(ItemId itemId)
{
    try
    {
        Item item = Item.Bind(this.ExchangeService, itemId);
        if (item is EmailMessage) return item as EmailMessage;
        else return null;
    }
    catch
    {
        return null;
    }
}

然后将现有方法中的逻辑更改为

EmailMessage modifiedMessage = BindToEmailMessage(itemEvent.ItemId);
if (modifiedMessage != null) ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM