EWS - 访问共享日历

时间:2017-01-19 11:01:12

标签: exchange-server exchangewebservices

我想列出每个交换共享日历的权限。 我有两个交换在线帐户: vikramsingh@gmail.com vikramsinghmrt@outlook.com

现在,我已经从vikramsingh@gmail.com与vikramsinghmrt@outlook.com分享了一个日历。

现在,当我使用Exchange EWS API获取日历列表时,我获得了所有日历(包括共享日历),但无法知道哪一个共享日历。

我使用下面的代码:

PropertySet propSet = new PropertySet(BasePropertySet.FirstClassProperties,FolderSchema.Permissions);        Folder folder = Folder.Bind(service,folderid,propSet);

   if (folder.Permissions.Count != 0)
    {
        for (int t = 0; t < folder.Permissions.Count; t++)
        {
            if (folder.Permissions[t].UserId.DisplayName != null || folder.Permissions[t].UserId.PrimarySmtpAddress != null)
            {

            }
        }
    }

但是每次都会将userId.DisplayName和UserId.PrimarySmtpAddress返回null。

我怎么知道哪个日历是共享的?

3 个答案:

答案 0 :(得分:0)

您可以使用属性RequiredAttendeesOptionalAttendees,并检查共享日历的电子邮件地址。如果其中一个属性包含共享日历的邮件地址,则它来自共享日历。

答案 1 :(得分:0)

如果使用“关联遍历共享”文件夹检查每个文件夹的“文件夹关联项目”集合,则该集合中应该有一个类型为IPM.Sharing.SyncState的项目。

        ItemView iv = new ItemView(1000);
        iv.Traversal = ItemTraversal.Associated;
        SearchFilter sf = new SearchFilter.IsEqualTo(ItemSchema.ItemClass, "IPM.Sharing.SyncState");
        FindItemsResults<Item> fiItems = Folder.FindItems(sf, iv);

答案 2 :(得分:0)

我得到了答案。我们有日历电话如下。 service.FindFolders(new FolderId(WellKnownFolderName.Root,&#34; email&#34;)

在此次通话中,我们会传递我的电子邮件ID。 (我的凭证电子邮件)。 如果我需要访问其他用户日历(共享日历)。我需要在这里传递其他用户电子邮件地址。 like service.FindFolders(new FolderId(WellKnownFolderName.Root,&#34; Other user email&#34;)。

服务对象由我的凭证创建,只是传递其他用户的电子邮件。现在你可以获得所有日历。