通过Microsoft Graph在Outlook加载项中设置自定义属性

时间:2017-03-31 01:08:39

标签: office-js outlook-restapi outlook-web-addins microsoft-graph

假设我在我的Outlook加载项(使用Office.js)中跟随代码的撰写形式运行代码:

<?php
include("YOUR PHP CONNECT FILE");

$query = "SELECT sum(new_customers) AS new, sum(old_customers) AS old, region FROM daily GROUP BY region";
$exec = mysqli_query($YOURCONNECTIONVARIABLE ,$query);

?>

<!DOCTYPE html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('visualization', '1', {packages: ['corechart', 'bar']});
      google.charts.setOnLoadCallback(drawMaterial);

       function drawMaterial() {
       var data = google.visualization.arrayToDataTable([
       ['Region', 'New Customers'],
        <?php 
          while($row = mysqli_fetch_array($exec)){
            echo "['".$row[2]." [".$row[0]."]', ".$row[1]."],";  
          }
        ?>
        ]);

        var options = {
          title: 'Country wise new and returned visitors',
          bars: 'horizontal'
        };

        var material = new google.charts.Bar(document.getElementById('barchart'));
          material.draw(data, options);
        }
    </script>
</head>
<body>
    <div id="barchart" style="width: 100%; height: 40em;"></div>
</body>
</html>

我知道,它实际上已保存在事件中。

现在有很多关于这些自定义属性的问题:

  1. 但这些是否与扩展属性有关?

  2. 这些属性是否可通过Outlook REST API或Microsoft Graph以某种方式访问​​?

  3. 我可以使用带有基于这些属性的过滤器的Microsoft Graph创建推送通知订阅吗? (我知道我可以基于扩展属性)

  4. 如果上述问题的答案是&#34; no&#34;,并且只能通过创建它们的加载项访问自定义属性,是否有办法为事件创建扩展属性来自加载项,即使它没有保存?

  5. 解释我为什么要问 - 我正在创建一个加载项,它允许连接&#34;与我们的第三方系统约会,并使该约会与我们的对象保持同步。

    因此,当在撰写表单上单击按钮时,我:

    • 保存约会并获取const item = Office.context.mailbox.item; item.loadCustomPropertiesAsync((result) => { const props = result.value; const testProp = props.get("my_prop"); console.log("CUSTOM_PROP", testProp); props.set("my_prop", "test_value"); props.saveAsync((saveResult) => console.log("SAVE_CUSTOM_PROP", saveResult)); });
    • 将其存储在我们的系统中,以便从我们的系统同步到约会。
    • 在我们的系统中使用Microsoft Graph为该约会添加扩展属性

    首次使用加载项时,用户进行身份验证,并为使用扩展属性的事件创建推送通知订阅,以便从Outlook同步到我们的系统。

    它在OWA上运行良好,但现在我们确实需要支持桌面,因此出现了两个主要问题:

    • Outlook for Mac:没有event-id方法,因此无法获取事件saveAsync,我正在考虑添加一些自定义属性,然后让推送通知告知我们的系统,创建了一个需要与系统同步的事件。

    • Outlook for PC:有id方法,但在本地保存约会时执行回调,而不是在服务器上保存,因此我无法确定事件的确切时间已创建,我可以对该事件进行一些Microsoft Graph调用。

    回答我的第一个问题,和/或有关我的用例的任何提示都非常受欢迎。

2 个答案:

答案 0 :(得分:3)

  1. Per MS-OXCEXT,关于加载项如何在Outlook中存储内容的互操作性文档,自定义属性作为JSON字典存储在MAPI扩展属性中(该链接的gory详细信息)。这意味着您应该能够通过Graph扩展属性访问它们,您只需要自己解析该值。
  2. 应使用extended properties"{type} {guid} Name {name}"格式。
  3. 我不明白为什么不。
  4. 答案不是,但无论如何我都会回复你的跟进:)。当然,如果您使用加载项中的REST API,则可以执行此操作。

答案 1 :(得分:2)

TL; DR; 是的,可以使用REST API读取Office.js api loadCustomPropertiesAsync设置的自定义属性 您需要创建一个类似于

的REST调用查询
string addinManifestId = "<your manifest guid here>";//lower cases
string prop = @"String {00020329-0000-0000-C000-000000000046} Name"+ string.Format(" cecp-{0}", addinManifestId );
var url = $"<apiEndpoint>/messages/<youritemid>?$expand=SingleValueExtendedProperties($filter=PropertyId eq '{propertyname}')";

更多信息

此处提供了文档https://msdn.microsoft.com/en-us/library/hh968549(v=exchg.80).aspx

当我需要处理加载项Keluro的“已发送邮件”时,我遇到了类似的问题。 我使用REST API上的Web钩子实现了与您的方法非常接近的东西。据我所知,这是处理已发送物品的唯一方法。 考虑提出这个问题 https://officespdev.uservoice.com/forums/224641-feature-requests-and-feedback/suggestions/10964871-add-itemsend-event-so-add-in-can-cancel-email