【问题标题】:Get other user's Outlook availability information获取其他用户的 Outlook 可用性信息
【发布时间】:2018-03-01 01:43:53
【问题描述】:

我正在编写一个创建人们 Outlook 日历概览的应用程序,即它将显示未来 [n] 周内每周计划外的时间量。

基本工作正常,但有一件事我遇到了麻烦。一些用户以某种方式共享他们的 Outlook 日历,以便其他用户只能看到可用性信息(约会的时间和描述),但看不到任何详细信息。

我通过手动打开 Outlook 并打开共享日历来验证这一点;将鼠标悬停在约会上将显示一个弹出窗口,其中包含开始和结束时间、描述和位置,但双击它会出现错误:“您无权显示日历,您要让 [人] 共享它吗? ”。

我的代码中的相关行是:

var outlook = new Application();
var mapiNamespace = outlook.GetNamespace("MAPI");

var recipient = mapiNamespace.CreateRecipient("Scott");
recipient.Resolve();

var calendarFolder = mapiNamespace.GetSharedDefaultFolder(recipient, OlDefaultFolders.olFolderCalendar);
var calendarItems = calendarFolder.Items;

我现在尝试对 calendarItems 进行的所有操作都会引发异常。例如,获取 Count 将引发 TargetInvocationException(客户端进程失败,但我不太确定确切的英文翻译)。调用Sort("[Start]") 将引发带有消息Unknown property: Start 的COMException。两者都适用于完全共享的日历。

现在,对于概述,我只需要开始和结束时间,所以我真的不想要求每个人更改他们的共享设置,尤其是在不必要的时候。

我的问题是:

  • 最重要的是:还有其他方法可以获取我忽略的可用性信息吗?
  • 和相关:Interop 现在仍然是可行的方法,还是有替代方案?也许是 Office365 网络服务?

【问题讨论】:

  • 我过去曾使用EWS 在使用 Office365 的组织中获取此信息。我会注意到,您进行身份验证的帐户仍然需要查看请求的日历信息的权限。

标签: c# .net outlook automation


【解决方案1】:

您可以使用Recipient.FreeBusy 方法,而不是使用GetSharedDefaultFolder 并访问该文件夹中的项目。

【讨论】:

  • 谢谢。这肯定是我见过的方法中最奇怪的结果值之一。
  • 您知道结果中的值“5”是什么意思吗?枚举只上升到 4 msdn.microsoft.com/en-us/vba/outlook-vba/articles/…
  • 则与“4”相同。好吧,好吧,我猜。
  • 嗯.. 一定是不同的东西。您是否有权访问返回该值的约会?
  • 不,所有者目前不在,我需要几周才能见到他。如果我能找到时间,我会在自己的日历中尝试一些选项。 (这是一个低优先级的项目)。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2015-06-21
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 2020-08-21
相关资源
最近更新 更多