У нас есть общедоступный календарь для нашей компании, настроенный в общей папке 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<Appointment> 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}<br />Date: {1}<br /><br />", AK_appoint.Subject, AK_appoint.Start);
}
return rString;
}
}
}