获取扩展属性Microsoft图形javascript api

时间:2017-05-30 13:25:41

标签: javascript jquery microsoft-graph

我已将扩展属性分配给我的主日历,我试图检索它但我没有让它工作。

以下文档是graph apijavascript sdk

function postUserCalendar(emailAddress) {
var rand = guid();
const values = {
  MultiValueExtendedProperties: [{
    PropertyId: 'StringArray ' + '{' + rand + '}' + ' Name Palette',
    Value: ["Green", "Aqua", "Blue"]
  }]
};
getAccessToken(function(accessToken) {
  if (accessToken) {
    var client = MicrosoftGraph.Client.init({
      authProvider: (done) => {
        done(null, accessToken);
      }
    });
    client
      .api('me/calendars/myCalendarId')
      .header('Accept','application/json')
      .patch({
        message: values
      }, (err, res) => {
        console.log(err);
        console.log(res);
      });
  } else {
    var error = {
      responseText: "Cound not retrieve access token"
    };

  }
 });
}

以上是我设置MultiValueExtendedProperties的功能。 然后我有一个函数,我尝试检索这些属性。

  function getUserCalendar(emailAddress, callback) {
getAccessToken(function(accessToken) {
  if (accessToken) {
    // Create a Graph client
    var client = MicrosoftGraph.Client.init({
      authProvider: (done) => {
        // Just return the token
        done(null, accessToken);
      }
    });
    client
      .api('/me/calendars/myCalendarId')
      .header('X-AnchorMailbox', emailAddress)
      .expand('multiValueExtendedProperties')
      .filter('id eq {c56fe371-87fb-87a8-1727-9b2b272b9f76}')
      .get((err, res) => {
        if (err) {
          callback(null, err);
        } else {
          callback(res.value);
        }
      });
  } else {
    var error = {
      responseText: 'Could not retrieve access token'
    };
    callback(null, error);
  }
 });
}

get请求的状态为200,但我得到一个jquery错误“a is not defined”

如果有人能指出我正确的方向,我会很感激。

谢谢!

1 个答案:

答案 0 :(得分:4)

您的代码中存在一些导致问题的错误。

修补日历

在这里,您将{message: values}作为第一个参数传递给patch,这会导致在有效负载中传递不正确的JSON。您应该只传递值本身,这将正确序列化:

client
    .api('me/calendars/myCalendarId')
    .header('Accept','application/json')
    .patch(values, (err, res) => {
        console.log(err);
        console.log(res);
     });

获取展开属性的日历

此处您不想使用SDK中的filter方法。这为GET添加了一个过滤子句,而不是向expand添加过滤器,这就是你想要的。相反,将过滤器嵌入到传递给expand的字符串中,如下所示:

client
    .api('/me/calendars/myCalendarId')
    .header('X-AnchorMailbox', emailAddress)
    .expand("multiValueExtendedProperties($filter=id%20eq%20'StringArray%20{66f5a359-4659-4830-9070-00050ec6ac6e}%20Name%20Palette')")
    .get((err, res) => {
        if (err) {
            callback(null, err);
        } else {
            callback(res);
        }
    });

请考虑使用开放式扩展程序

我们建议使用open extensions来存储自定义数据,而不是传统的扩展属性。开放式扩展更灵活,更易于使用。除非有一些令人信服的理由,你需要将它作为遗留属性(比如使用现有解决方案向后兼容),我建议使用开放式扩展。