c# - EWS - 使用交换Web服务访问共享日历

时间:2016-06-08 11:12:31

标签: c# calendar exchangewebservices

我正在尝试访问Exchange服务器用户的共享日历,并且我找到了在stackoverflow中共享的代码。此代码的工作原理如下。它首先浏览用户文件夹并获取登录用户的共享日历。要获取日历数据,代码正在从服务器请求某些扩展属性。请求的扩展属性如下:

  • PidTagWlinkAddressBookEID
  • PidTagWlinkGroupName

稍后在代码中它引用“PidTagWlinkAddressBookEID”来检索共享日历的文件夹。

我遇到的问题是它正在读取服务器发送的数据。结果不包含“PidTagWlinkAddressBookEID”。我试图找到解决这个问题的方法,但找不到任何解决办法。要获取此信息,我应该配置服务器吗?

引用的代码是:

static Dictionary<string, Folder> GetSharedCalendarFolders(ExchangeService service, String mbMailboxname)
{
    Dictionary<String, Folder> rtList = new System.Collections.Generic.Dictionary<string, Folder>();

    FolderId rfRootFolderid = new FolderId(WellKnownFolderName.Root, mbMailboxname);
    FolderView fvFolderView = new FolderView(1000);
    SearchFilter sfSearchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Common Views");
    FindFoldersResults ffoldres = service.FindFolders(rfRootFolderid, sfSearchFilter, fvFolderView);
    if (ffoldres.Folders.Count == 1)
    {

        PropertySet psPropset = new PropertySet(BasePropertySet.FirstClassProperties);
        ExtendedPropertyDefinition PidTagWlinkAddressBookEID = new ExtendedPropertyDefinition(0x6854, MapiPropertyType.Binary);
        ExtendedPropertyDefinition PidTagWlinkFolderType = new ExtendedPropertyDefinition(0x684F, MapiPropertyType.Binary);
        ExtendedPropertyDefinition PidTagWlinkGroupName = new ExtendedPropertyDefinition(0x6851, MapiPropertyType.String);

        psPropset.Add(PidTagWlinkAddressBookEID);
        psPropset.Add(PidTagWlinkFolderType);
        ItemView iv = new ItemView(1000);
        iv.PropertySet = psPropset;
        iv.Traversal = ItemTraversal.Associated;

        SearchFilter cntSearch = new SearchFilter.IsEqualTo(PidTagWlinkGroupName, "Other Calendars");
        FindItemsResults<Item> fiResults = ffoldres.Folders[0].FindItems(cntSearch, iv);
        foreach (Item itItem in fiResults.Items)
        {
            try
            {
                object GroupName = null;
                object WlinkAddressBookEID = null;
                if (itItem.TryGetProperty(PidTagWlinkAddressBookEID, out WlinkAddressBookEID))
                {

                    byte[] ssStoreID = (byte[])WlinkAddressBookEID;
                    int leLegDnStart = 0;
                    String lnLegDN = "";
                    for (int ssArraynum = (ssStoreID.Length - 2); ssArraynum != 0; ssArraynum--)
                    {
                        if (ssStoreID[ssArraynum] == 0)
                        {
                            leLegDnStart = ssArraynum;
                            lnLegDN = System.Text.ASCIIEncoding.ASCII.GetString(ssStoreID, leLegDnStart + 1, (ssStoreID.Length - (leLegDnStart + 2)));
                            ssArraynum = 1;
                        }
                    }
                    NameResolutionCollection ncCol = service.ResolveName(lnLegDN, ResolveNameSearchLocation.DirectoryOnly, true);
                    if (ncCol.Count > 0)
                    {

                        FolderId SharedCalendarId = new FolderId(WellKnownFolderName.Calendar, ncCol[0].Mailbox.Address);
                        Folder SharedCalendaFolder = Folder.Bind(service, SharedCalendarId);
                        rtList.Add(ncCol[0].Mailbox.Address, SharedCalendaFolder);


                    }

                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message);
            }

        }
    }
    return rtList;
}

引用了这个答案:https://stackoverflow.com/a/23773834/6088233

0 个答案:

没有答案