我在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
}
}
// ......
答案 0 :(得分:1)
这是设计的。这些约会没有什么特别之处,它们的属性仍然可以使用扩展MAPI(C ++或Delphi)访问。如果使用Redemption是一个选项(它包装扩展MAPI并且可以从任何语言使用),则其RDOAppointment对象(可以从RDOFolder检索)将返回所有可用属性。< / p>
如果您使用OutlookSpy查看数据,是否可以在MAPI级别上查看数据(单击IMessage按钮或单击IMAPIFolder按钮并从GetContentsTable选项卡中打开约会)?