【问题标题】:How do i access a shared calendar using EWS Managed API如何使用 EWS 托管 API 访问共享日历
【发布时间】:2016-12-12 07:27:02
【问题描述】:

如何使用 Exchange EWS API 仅检索共享日历。

我如何知道使用 Exchange EWS API 共享的日历。

【问题讨论】:

  • 首先我使用下面的代码 FolderView fvFolderView = new FolderView(1000); fvFolderView.Traversal = FolderTraversal.Deep; SearchFilter sfSearchFilter = new SearchFilter.IsEqualTo(FolderSchema.FolderClass, "IPF.Appointment"); FindFoldersResults ffoldres = service.FindFolders(new FolderId(WellKnownFolderName.Root, "email@address"), sfSearchFilter, fvFolderView);现在我得到 3 个日历,包括一个共享日历。需要查找共享日历。

标签: exchangewebservices


【解决方案1】:

您可以在FolderId 中指定要访问的日历。

FolderId folderIdFromCalendar = new FolderId(WellKnownFolderName.Calendar, "sharedInbox@example.com");

然后您可以使用folderIdFromCalendar 来检索您想要的日历项目,例如:

FindItemsResults<Item> appointments = ExchangeServive.FindItems(folderIdFromCalendar, ItemView);

请记住,该程序必须在与邮箱共享的用户的上下文中运行。

更新:

如果您碰巧知道FolderId,您可以通过执行以下代码检查当前用户是否有权访问此日历:

如上,你需要初始化一个FolderId

FolderId folderIdFromCalendar = new FolderId("AQMkADAwATM3ZmYAZS1kNjE0LWU1ZmQtMDACLTAwCgAuAAADJRMtiupYBUGD‌​cKdcqUrr3AEA1/sqwbrw‌​UEeFM0Mc+UBFoQAAABzk‌​m1sAAAA=");

之后,试试下面的代码:

if (folderIdFromCalendar != null)
    {
        try
        {
            ItemView cView = new ItemView(1000);
            FindItemsResults<Item> appointments = service.FindItems(folderIdFromCalendar, cView);
            int count = appointments.TotalCount; //just an example of some random action on the folder calendar
        }
        catch (ServiceResponseException ex)
        {
            Console.WriteLine("The specified calendar was not shared with you. \n" + ex);
        }
    }
    else
    {
        Console.WriteLine("The specified calendar ID could not be linked to a calendar folder.");
    }

另一个更新:

if (folderIdFromCalendar != null)
    {
        if (folderIdFromCalendar.Mailbox.ToString().ToLower() == "your-Mailadress".ToLower())
        {
            Console.WriteLine("The folder you specified is your own");
        }
        else
        {
            try
            {
                ItemView cView = new ItemView(1000);
                FindItemsResults<Item> appointments = service.FindItems(folderIdFromCalendar, cView);
                int count = appointments.TotalCount; //just an example of some random action on the folder calendar
                Console.WriteLine("You have been given access to this mailbox. Its owner is: " + folderIdFromCalendar.Mailbox.ToString()); //if you need to know, whos mailbox you are accessing right now
            }
            catch (ServiceResponseException ex)
            {
                Console.WriteLine("The specified calendar was not shared with you. \n" + ex);
            }
        }
    }
    else
    {
        Console.WriteLine("The specified calendar ID could not be linked to a calendar folder.");
    }

最后更新:

我现在已经用谷歌搜索了很多,发现了一些对我有用的东西。但老实说,我并没有完全理解下面代码中的所有内容:

FolderId folderIdFromCalendar = new FolderId("AQMkADAwATM3ZmYAZS1kNjE0LWU1ZmQtMDACLTAwCgAuAAADJRMtiupYBUGD‌​cKdcqUrr3AEA1/sqwbrw‌​UEeFM0Mc+UBFoQAAABzk‌​m1sAAAA=");
    Folder folderFromCalendar = Folder.Bind(service, folderIdFromCalendar);

    AlternateId aiAlternateid = new AlternateId(IdFormat.EwsId, folderFromCalendar.Id.UniqueId, "random@mailadress.com");
    AlternateIdBase aiResponse = service.ConvertId(aiAlternateid, IdFormat.EwsId);

    var mailbox = ((AlternateId)aiResponse).Mailbox;

    if (folderFromCalendar != null)
    {
        if (mailbox.ToString().ToLower() == "your-Mailadress".ToLower())
        {
            Console.WriteLine("The folder you specified is your own");
        }
        else
        {
            try
            {
                ItemView cView = new ItemView(1000);
                FindItemsResults<Item> appointments = service.FindItems(folderIdFromCalendar, cView);
                int count = appointments.TotalCount; //just an example of some random action on the folder calendar
                Console.WriteLine("You have been given access to this mailbox. Its owner is: " + mailbox.ToString());
            }
            catch (ServiceResponseException ex)
            {
                Console.WriteLine("The specified calendar was not shared with you. \n" + ex);
            }
        }
    }
    else
    {
        Console.WriteLine("The specified calendar ID could not be linked to a calendar folder.");
    }

我不明白,字符串“random@mailadress.com”如何影响该程序中的任何内容,但语法需要一个字符串。

【讨论】:

  • 我不知道用户电子邮件 ID,例如,我不知道电子邮件 ID“sharedInbox@example.com” 我正在使用 C# 并尝试了解我帐户中的共享日历。
  • 这很可能是不可能的,因为您必须向 EWS 提供某种信息,从哪里检索项目。
  • 那么根据您的说法,我们的帐户中没有办法找到共享日历?
  • 在我看来,EWS 不能只打印出与特定帐户共享的日历列表。据我所知,在 EWS 中执行任何操作之前,您必须知道要访问哪个日历。您使用交换在线服务器还是在本地托管?
  • 我有日历 ID,例如 AQMkADAwATM3ZmYAZS1kNjE0LWU1ZmQtMDACLTAwCgAuAAADJRMtiupYBUGDcKdcqUrr3AEA1/sqwbrwUEeFM0Mc+UBFoQAAABzkm1sAAAA= 我想知道这是不是共享日历?
猜你喜欢
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 2013-10-24
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多