var auth = require('./auth');
var graph = require('./graph');
// Get an access token for the app.
auth.getAccessToken().then(function (token) {
// Get all of the users in the tenant.
graph.getUsers(token)
.then(function (users) {
// Create an event on each user's calendar.
graph.createEvent(token, users);
}, function (error) {
console.error('>>> Error getting users: ' + error);
});
}, function (error) {
console.error('>>> Error getting access token: ' + error);
});
Я использую этот образец Microsoft Graph Node.js .
Конечная цель состоит в том, чтобы иметь возможность составить список всех пользователей в организации / арендаторе и создать событие в каждом из их календарей.
В настоящее время я могу получить токен доступа (который оказался наиболее сложной частью), который указан в терминале в VSCode.Однако у меня возникают проблемы с доступом к пользователям в организации, и они также перечислены в терминале.У меня есть следующий URI https://graph.microsoft.com/v1.0/users?$select=id,displayName
, который получает всех пользователей в моей организации в Microsoft Graph Explorer.Но использование этого же URI не работает в моем приложении.
У меня есть все необходимые разрешения, указанные в Azure, единственным препятствием является перечисление пользователей в организации.
Вот мой код, который должен ссылаться на пользователей в организации и соответственно создавать событие календаря.
var request = require('request');
var Q = require('q');
// The graph module object.
var graph = {};
// Make a request to get all users in the tenant/organization.
graph.getUsers = function (token, users) {
var deferred = Q.defer();
request.get('https://graph.microsoft.com/v1.0/users?$select=id,displayName', {
auth: {
bearer: token,
}
}, function (err, response, body) {
if (err) {
console.log("error");
}
else {
let parsedBody = JSON.parse(body);
if (parsedBody.error_description) {
console.log("Error=" + parsedBody.error_description);
}
else {
// The value of the body will be an array of all users.
console.log("Users = " + parsedBody.value)
}
}
});
return deferred.promise;
};
//Creates an event on each user's calendar.
graph.createEvent = function (token, users) {
var i;
var startTime;
var endTime;
var newEvent;
for (i = 0; i < users.length; i++) {
// The new event will be 30 minutes and take place tomorrow at the current time.
startTime = new Date();
startTime.setDate(startTime.getDate() + 1);
endTime = new Date(startTime.getTime() + 30 * 60000);
// These are the fields of the new calendar event.
newEvent = {
Subject: 'Creating Event test',
Location: {
DisplayName: "Edison Ballroom"
},
Start: {
DateTime: startTime,
TimeZone: 'PST'
},
End: {
DateTime: endTime,
TimeZone: 'PST'
},
Body: {
Content: 'This is a test for adding calendar events. Thanks!',
ContentType: 'Text'
}
};
// Add an event to the current user's calendar.
request.post({
url: 'https://graph.microsoft.com/v1.0/users/' + users[i].id + '/events',
headers: {
contenttype: 'application/json',
authorization: 'Bearer ' + token,
displayName: users[i].displayName
},
body: JSON.stringify(newEvent)
}, function (err, response, body) {
var parsedBody;
var displayName;
if (err) {
console.error('>>> Application error: ' + err);
} else {
parsedBody = JSON.parse(body);
displayName = response.request.headers.displayName;
if (parsedBody.error) {
if (parsedBody.error.code === 'RequestBroker-ParseUri') {
console.error(
'>>> Error creating an event for ' + displayName +
'. Most likely due to this user having a MSA instead of an Office 365 account.'
);
} else {
console.error(
'>>> Error creating an event for ' + displayName + '.' + parsedBody.error.message
);
}
} else {
console.log('>>> Successfully created an event on ' + displayName + "'s calendar.");
}
}
});
}
};
module.exports = graph;