2016-11-30 109 views

回答

2

范围

下面的文章涵盖了开发商的做法,使COM之间的桥梁/ VSTO Outlook插件和Office JS外接共享用户的漫游设置和偏好。

介绍

有很多谁通过COM提供前往体验到他们的客户/ VSTO Outlook加载项的年龄和Outlook 2000到最新版本的支持是正常的,他们的公司。随着Microsoft Office商店的成熟和Office JS插件背后的技术越来越多的公司希望使用Office JS API实现其现有的解决方案。能够编写一次并轻松分发Office工作环境的应用程序非常有吸引力。但那些仍然使用旧版Office 2010甚至更​​旧的客户呢?你可能会说:“让他们使用我们旧的COM加载项,不要回头看”。那么这个可能是有效的,直到这个客户开始使用Outlook for Web并意识到你也为这个环境创建了外接程序。大!开始使用它......但等待一秒钟,我的工作场所使用桌面解决方案时,我的设置和偏好设置在哪里?如果我想改变我的偏好怎么办?现在我必须这样做两次?开发人员会说:“转到我们的新解决方案,忘掉旧的COM”。但是,用户可能有一个原因,他们为什么在工作时使用带有COM加载项的旧Outlook版本,而远程使用新的Office JS插件(在旅途中,在家工作等)使用OWA。现在读者可能已经明白了我的观点。作为开发人员,您可能希望通过共享您全新而有光泽的Office JS插件以及旧的,但实用且功能丰富的COM/VSTO解决方案之间的偏好,让这些客户的生活变得更简单。所以,让我们找出如何做到这一点。

办公室JS外接漫游设置

从一要求而设定1.0办事处JS API RoamingSettings对象是使用四种方法引入了用户设置操作。您可以设置,获取和删除{String | Number | Boolean | Object | Array}的用户设置/属性类型的任何自定义值。此对象保留每个用户邮箱的这些设置,并可从任何位置,设备等提供给Office JS加载项。真正的漫游可保持用户的偏好和设置,不是吗?请注意:您不应该使用此对象来保留敏感信息,例如用户凭证或安全令牌。下面的例子演示了对象的用法:

// Get the current value of the 'myKey' setting 
var value = Office.context.roamingSettings.get('myKey'); 
// Update the value of the 'myKey' setting 
Office.context.roamingSettings.set('myKey', 'Hello World!'); 
// Persist the change 
Office.context.roamingSettings.saveAsync(); 

COM/VSTO外接台式机的Outlook

让我们回到我们的COM/VSTO解决方案。有一个预先请求:处理存储在用户邮箱中的设置开发人员需要了解Office JS Add-in ID,因为RoamingSettings按每个加载项和每个用户进行存储。那么,你确实会知道它,因为这是你的公司加载项。我们正在寻找的设置存储在message property,它存储在Associated contents table的收件箱文件夹可能使用IMAPIFolder接口访问。哇,这是整个帖子的关键句子,需要详细解释。
首先,您需要枚举关联的内容表中的所有消息,并找到具有类“IPM.Configuration.ClientExtension.00000000000000000000000000000000”的消息,其中零必须是您的Office JS加载项的ID。



当选择的消息,你需要得到“PR_ROAMING_DICTIONARY”属性。


此属性将包含序列化的数据,我们存储的Office JS外接在我们上面的例子中,当漫游设置:

<?xml version="1.0" encoding="utf-8"?> 
<UserConfiguration> 
    <Info version="Exchange.12" /> 
    <Data> 
     <e k="18-ExtensionSettings" v="18-{"myKey":"\"Hello World!\""}" /> 
    </Data> 
</UserConfiguration> 

你的COM/VSTO插件将能够阅读并用简单的解析来修改这些设置。您可能还想公开您的COM加载项用户设置。通常这些设置开发人员保留在HKCU Windows注册表中,以漫游世界每个用户邮箱。这不仅在Office JS加载项之间的功能上,而且在每个用户邮箱的加载项的独立设置集中都有好处。当从桌面Outlook中创建这些设置使用不同的信息版本,例如:

<Info version="Outlook.16"/> 

结论

由于关于这个专题的最后要注意的,我想说明的从应用程序的共享设置简单的例子COM和Office JS加载项共享用户设置的相同提供程序。


参考

  1. https://dev.outlook.com/reference/add-ins/RoamingSettings.html
  2. https://msdn.microsoft.com/en-us/library/office/cc842083.aspx
  3. https://msdn.microsoft.com/en-us/library/office/cc842374.aspx?f=255&MSPPError=-2147217396
  4. https://msdn.microsoft.com/en-us/library/office/cc842386.aspx
+0

感谢光荣!我很高兴我偶然发现了这一点 - 我想知道这些存储在哪里,我用OutlookSpy无处不在。你是怎么学习的? –

+0

Eric,当我想知道“CustomProperties”Office.js API对象时,我的故事开始了。我想了解这些属性是如何保存的,以及是否可以将它们转换为传输x-header。 OutlookSpy会在IMessage对象中显示这些自定义属性,这不是火箭科学。它们与加载项的Id一起被沙箱化。长话短说我最终没有使用它们,因为没有办法将它们翻译成x-header。但是,这导致我在哪里“RoamingSetting”对象存储的问题,经过一些思考和时间与OutlookSpy后,我找到了我想分享的方式;) –

+0

基本上这是我在MSDN上提出的原始问题:[link] (https://social.msdn.microsoft.com/Forums/office/en-US/22a0ab3e-ea64-4741-aadf-9e51adbb54d2/how-to-get-roamingsettings-stored-with-officejs-api-from-vstocom -addin?forum = outlookdev#22a0ab3e-ea64-4741-aadf-9e51adbb54d2) –

相关问题