我已将扩展属性分配给我的主日历,我试图检索它但我没有让它工作。
以下文档是graph api和javascript 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”
如果有人能指出我正确的方向,我会很感激。
谢谢!
答案 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来存储自定义数据,而不是传统的扩展属性。开放式扩展更灵活,更易于使用。除非有一些令人信服的理由,你需要将它作为遗留属性(比如使用现有解决方案向后兼容),我建议使用开放式扩展。