使用Office 365 JS API访问CustomProperties集合,从EWS或REST API中访问。

4
我有一个Office 365邮件应用程序,在项目保存之前将值存储在自定义属性中。当项目保存后,我想使用服务器端应用程序访问此属性。阅读自定义属性文档告诉我,我不能使用任何其他服务(如EWS)访问使用JS API创建的自定义属性,因为它们不是MAPI属性。是否有任何变通方法? 是否可以使用REST API访问这些内容?
3个回答

4
实际上,它们存储在哪里以及以什么格式存储已有记录。[MS-OXCEXT]规范提供了具体细节。基本上,这些值被存储为JSON字典,并作为项目上的自定义属性。您应该能够使用EWS读取该自定义属性作为ExtendedProperty
更新: 经过与内部人员讨论后,我应该声明,这不是一种受支持的方法,正如MrPiao所指出的那样。正如所述,存储设计可能会发生变化,这将破坏您依赖当前设计的应用程序。担心的是我不想让您走上最终变得无法工作的道路 :)。如果您可以描述您的最终目标,也许我们可以建议一个更持久的解决方案。

2
感谢@jason-johnston。这真的很有帮助,我能够实现我想要的。我的下一个目标是从作为原始会议参与者的资源邮箱中访问这些属性。但这没有起作用。我成功地使用EWS访问了一个public_string。我在这里走错了吗? - Chathum Henegama
2
我非常确定那些属性只存在于使用您的邮件应用程序的用户副本上,资源的副本不会具有这些属性。 - Jason Johnston
1
这与它是资源邮箱有关吗?如果参与者是内部人员,我曾看到公共字符串在发送会议请求时被携带。我们可以通过使用用户邮箱来解决这个问题吗? - Chathum Henegama
@JasonJohnston 在我们的场景中,我们需要访问一些自定义属性,因为我们需要在撰写邮件时跟踪“已发送项目”。具体来说,我们向草稿电子邮件添加一个自定义属性,并同时使用Outlook REST API订阅“sentitems”推送通知。在Web钩子中,我们读取这些自定义属性以获取在编写时插入的信息的访问权限。 - Benoit Patra

1
Guid PS_PUBLIC_STRINGS = new Guid("00020329-0000-0000-C000-000000000046"); ////PS_PUBLIC_STRINGS' GUID
ExtendedPropertyDefinition extendedPropertyDefinition = new ExtendedPropertyDefinition(PS_PUBLIC_STRINGS, "cecp-{your add-in manifest id}", MapiPropertyType.String);
PropertySet psPropSet = new PropertySet() { extendedPropertyDefinition };

message.Load(psPropSet);

0

自定义属性肯定只能由Outlook API的应用程序创建和访问。然而,这个属性必须被存储在某个地方 - 那就是在项目上。我相当确定,如果您进行GetItem调用并枚举项目上的每个属性,您将能够访问自定义属性。

需要注意的是,这绝对是一个不支持的场景。设计可能会在未来发生变化,此场景可能会中断。我绝对不会在生产环境中访问Mail App之外的自定义属性。


1
谢谢回复。我能够通过Jason答案中的链接访问这些属性。为什么要在不支持的情况下调用呢?如果微软想要更改存储这些值的位置,你将不得不想出一种方法来迁移所有Office 365应用和邮箱上的现有数据,我认为这并不容易。我们在这里是相当安全的,不是吗? - Chathum Henegama
2
我会请教我的同事Jason(在上面回答了您的问题)。他有更多的信息可以提供给您。 - MrPiao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接