Извлечение общедоступных календарей Exchange 2007 с помощью API веб-служб Exchange

У нас есть общедоступный календарь для нашей компании, созданный в общей папке Exchange 2007. Я могу получить личные встречи в календаре на текущий день, используя код ниже. Я искал в Интернете все выше и ниже, и я не могу найти ни одного примера того, как кто-то извлекал информацию из календаря из календаря общих папок.

Кажется, что это должно быть выполнимо, но я не могу заставить его работать. Как я могу изменить приведенный ниже код для доступа к календарю? Я не заинтересован в создании каких-либо встреч через asp.net, просто получить простой список. Я открыт для любых других предложений. Спасибо.

ДОБАВЛЕНО БОЛЬНИ
- Я не могу быть единственным человеком, которому когда-либо нужно было это делать. Давайте решим эту проблему для будущих поколений.

ОБНОВЛЕНО СНОВА ИЗ-ЗА НЕЗНАНИЯ
- я не упомянул, что проект, над которым я работаю, - это .NET 2.0 (очень важно, не так ли?).

* ДОБАВЛЕНО РЕШЕНИЕ МОЕГО КОДА НИЖЕ *
- Я заменил свой исходный пример кода на код, который закончил работать. Огромное спасибо Олегу за предоставление кода для поиска общедоступной папки, что было самой сложной частью. Я изменил код, используя приведенный здесь пример http://msexchangeteam.com/archive/2009/04/21/ 451126. aspx для использования более простого метода FindAppointments.

Этот простой пример возвращает строку html с встречами, но вы можете использовать ее в качестве основы для настройки по мере необходимости. Вы можете увидеть наши ответы под его ответом ниже.

using System;
using Microsoft.Exchange.WebServices.Data;
using System.Net;

namespace ExchangePublicFolders
{
    public class Program
    {
        public static FolderId FindPublicFolder(ExchangeService myService, FolderId baseFolderId,
        string folderName)
        {

        FolderView folderView = new FolderView(10, 0);
        folderView.OffsetBasePoint = OffsetBasePoint.Beginning;
        folderView.PropertySet = new PropertySet(FolderSchema.DisplayName, FolderSchema.Id);

        FindFoldersResults folderResults;
        do
        {
            folderResults = myService.FindFolders(baseFolderId, folderView);

            foreach (Folder folder in folderResults)
                if (String.Compare(folder.DisplayName, folderName, StringComparison.OrdinalIgnoreCase) == 0)
                    return folder.Id;

            if (folderResults.NextPageOffset.HasValue)
                folderView.Offset = folderResults.NextPageOffset.Value;
        }
        while (folderResults.MoreAvailable);

        return null;
    }

    public static string MyTest()
    {
        ExchangeService myService = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

        myService.Credentials = new NetworkCredential("USERNAME", "PASSWORD", "DOMAIN");
        myService.Url = new Uri("https://MAILSERVER/ews/exchange.asmx");

        Folder myPublicFoldersRoot = Folder.Bind(myService, WellKnownFolderName.PublicFoldersRoot);
        string myPublicFolderPath = @"PUBLIC_FOLDER_CALENDAR_NAME";
        string[] folderPath = myPublicFolderPath.Split('\\');
        FolderId fId = myPublicFoldersRoot.Id;
        foreach (string subFolderName in folderPath)
        {
            fId = Program.FindPublicFolder(myService, fId, subFolderName);
            if (fId == null)
            {
                return string.Format("ERROR: Can't find public folder {0}", myPublicFolderPath);

            }
        }

        Folder folderFound = Folder.Bind(myService, fId);
        if (String.Compare(folderFound.FolderClass, "IPF.Appointment", StringComparison.Ordinal) != 0)
        {
            return string.Format("ERROR: Public folder {0} is not a Calendar", myPublicFolderPath);

        }

        CalendarFolder AK_Calendar = CalendarFolder.Bind(myService, fId, BasePropertySet.FirstClassProperties);

        FindItemsResults AK_appointments = AK_Calendar.FindAppointments(new CalendarView(DateTime.Now,DateTime.Now.AddDays(1)));


        string rString = string.Empty;


        foreach (Appointment AK_appoint in AK_appointments)
        {

            rString += string.Format("Subject: {0}
Date: {1}

", AK_appoint.Subject, AK_appoint.Start); } return rString; } } }

25
задан Alfred Myers 23 September 2010 в 14:54
поделиться