从Outlook加载项访问共享日历中的私人约会

时间:2017-01-17 12:48:01

标签: c# outlook vsto exchangewebservices

我在C#中开发了一个Outlook VSTO加载项。我需要从共享日历中读取现有约会以查看繁忙的时段。我拥有所有共享日历的发布编辑权限,并且无缝地使用非私人约会。

我唯一的问题是 CalendarFolder.Items 集合不包含具有 olPrivate olPersonal 敏感度设置的约会项目。 内置的Outlook日历视图使用小锁图标显示这些项目。

我知道私人约会只会暴露开始和结束时间,这对我来说绝对够用。

基础Exchange服务器版本是2013.我们使用Outlook 2013和2016.

知道是什么原因引起的吗?

谢谢。

更新:

最后,我使用EWS Managed API 2.0找到了解决此问题的方法。

using Microsoft.Exchange.WebServices.Data;
// ...... 
ExchangeService EWSService = new ExchangeService();
EWSService.Credentials = new WebCredentials("EXCHUser", "EXCHPW");
EWSService.Url = new Uri("https://...../EWS/Exchange.asmx");

Mailbox primary = new Mailbox(Tools.MainWindow.SelectedConsultant.Email);
var calendar = Microsoft.Exchange.WebServices.Data.CalendarFolder.Bind(EWSService, 
               new FolderId(WellKnownFolderName.Calendar, primary));
ItemView cView = new ItemView(100);

// Limit the properties returned to the appointment's subject, 
//                       start time, end time and sensitivity.
cView.PropertySet = new PropertySet(AppointmentSchema.Subject, 
                                    AppointmentSchema.Start, 
                                    AppointmentSchema.End, 
                                    AppointmentSchema.Sensitivity);

// Filter by sensitivity and retrieve a collection of appointments by using the item view.
String SearchFilterValue = Sensitivity.Private.ToString();
SearchFilter.IsEqualTo filter = new SearchFilter.IsEqualTo(AppointmentSchema.Sensitivity, SearchFilterValue);
FindItemsResults<Item> appointments = calendar.FindItems(filter, cView);
foreach (Appointment a in appointments)
{
    if (a.Sensitivity == Sensitivity.Private)
    {
        // Do what you want with the matched item
    }
}
// ...... 

1 个答案:

答案 0 :(得分:1)

这是设计的。这些约会没有什么特别之处,它们的属性仍然可以使用扩展MAPI(C ++或Delphi)访问。如果使用Redemption是一个选项(它包装扩展MAPI并且可以从任何语言使用),则其RDOAppointment对象(可以从RDOFolder检索)将返回所有可用属性。< / p>

如果您使用OutlookSpy查看数据,是否可以在MAPI级别上查看数据(单击IMessage按钮或单击IMAPIFolder按钮并从GetContentsTable选项卡中打开约会)?