Предисловие
После получения токена доступа через платформу Microsoft Identity Platform вы можете добавить авторизацию в заголовок http и вызвать Microsoft Graph API для работы с календарем Outlook пользователя.
Фактически, описание различных запросов все же более подробно описано в официальной документации API, например, получение событий Outlook, подключение к Microsoft Graph API для получения событий календаря.
Вот лишь краткое изложение следующих моментов, на которые следует обратить внимание во время разработки, в основном в следующих аспектах:
- Получить события календаря Outlook Outlook (добавление, удаление, изменение и проверка)
- Получить настройки цвета пользовательского события
- Общие встречи и личные мероприятия
Сначала посмотрим на эффект
Сначала укажите общие коды
// 标准化返回值
class ResponseInfo {
constructor(status, data,msg) {
this.status = status;
this.data = data;
this.msg = msg;
}
}
// 用access Token注册 Graph client
function getAuthenticatedClient(accessToken) {
// Initialize Graph client
const client = graph.Client.init({
// Use the provided access token to authenticate
// requests
authProvider: (done) => {
done(null, accessToken);
}
});
return client;
}
Во-первых, получить события календаря Outlook пользователя (добавление, удаление, изменение и проверка)
Прежде всего, я должен напомнить, что события и календари в календаре Outlook разные. Основное различие заключается в повторяющихся событиях. Например, каждое утреннее собрание. Вы можете получать информацию о повторяющихся событиях через представление календаря, но если вы пройдете событие, вы можете получить только первоначальное повторение.Данные о событии.
Чтобы получить событие через представление календаря, вам необходимо указать диапазон времени начала и окончания, а для получения события через событие вам не нужно указывать временной диапазон. Вот пример получения событий через событие.
/**
* 获取用户events
*
* @param {*} accessToken 访问令牌
* @param {*} userPrincipalName 用户的微软账号(邮箱)
*/
getUserEvents : async function(accessToken,userPrincipalName){
try{
const client = getAuthenticatedClient(accessToken);
// timeZone:时区 默认是 Pacific Standard Time
let result = await client.api(`/users/${userPrincipalName}/events`)
.header('Prefer',`outlook.timezone="${timeZone}"`)
.get();
//console.log(result.value);
let response = new ResponseInfo(200,result.value,'');
return response;
}catch(errror) {
let response = new ResponseInfo(400,'',error);
return response;
}
},
/**
* 删除用户events
*
* @param {*} accessToken 访问令牌
* @param {*} userPrincipalName 用户的微软账号(邮箱)
* @param {*} eventsId event ID
* @returns
*/
delUserEvents : async function (accessToken, userPrincipalName, eventsId) {
try{
const client = getAuthenticatedClient(accessToken);
let result = await client.api(`/users/${userPrincipalName}/events/${eventsId}`)
.delete();
let response = new ResponseInfo(200,result,'');
return response;
}catch(errror) {
let response = new ResponseInfo(400,'',error);
return response;
}
},
/**
* 新增用户events
*
* @param {*} accessToken 访问令牌
* @param {*} userPrincipalName 用户的微软账号(邮箱)
* @param {*} newEvent event
* @returns
*/
setUserNewEvent : async function (accessToken,userPrincipalName,newEvent){
try{
const client = getAuthenticatedClient(accessToken);
//POST /users/{id | userPrincipalName}/events
let result = await client.api(`/users/${userPrincipalName}/events`)
.header('Prefer',`outlook.timezone="${timeZone}"`)
.post(newEvent);
let response = new ResponseInfo(200,result,'');
return response;
}catch(errror) {
let response = new ResponseInfo(400,'',error);
return response;
}
},
Основной формат, необходимый для события при добавлении, следующий
// timeZone:时区
const newEvent = {
subject: “件名”,
start: {
dateTime: “开始时间(UTC格式)”,
timeZone: timeZone
},
end: {
dateTime: “结束时间(UTC格式)”,
timeZone: timeZone
},
body: {
contentType: 'HTML',
content: “event内容”
},
location:{
displayName: “地点”
},
attendees:{},
};
Во-вторых, получите настройки цвета пользовательского события
Здесь следует отметить, что если пользователь аутентифицирован, даже администратор может читать только настройки своей собственной категории и не может читать настройки категорий других участников, кроме аутентифицированного пользователя. Однако аутентификация пользователя не прошла, то есть клиент Секретная аутентификация. Только после этого вы сможете получить доступ к настройкам категорий для всех пользователей.
Более того, полученная здесь категория представляет собой только форму без конкретной информации о цвете, например, официальный пример возврата API выглядит следующим образом.
При написании кода я выбрал цвет, но потом не использовал, он должен соответствовать следующим цветам:
категория | цвет |
предустановка 0 | # FFFF14 |
предустановка 1 | # FF8C00 |
предустановка 2 | # FECB6F |
предустановка 3 | # FFF100 |
предустановка 4 | # 5FBE7D |
предустановка 5 | # 33BAB1 |
предустановка 6 | # A3B367 |
предустановка 7 | # 55ABE5 |
предустановка 8 | # A895E2 |
предустановка 9 | # E48BB5 |
предустановка 10 | # B9C0CB |
предустановка 11 | # 4C596E |
предустановка 12 | #ABABAB |
предустановка 13 | # 666666 |
предустановка 14 | # 474747 |
предустановка 15 | # 910A19 |
предустановка 16 | # CE4B28 |
предустановка 17 | # A47332 |
предустановка 18 | # B0A923 |
предустановка 19 | # 026802 |
предустановка 20 | # 1C6367 |
предустановка 21 | # 5C6A22 |
предустановка 22 | # 254069 |
предустановка 23 | # 562685 |
предустановка 24 | # 80275D |
/**
* 用户事件类别取得
*
* @param {*} accessToken
* @param {*} userPrincipalName
*/
getUserMasterCategories : async function(accessToken,userPrincipalName) {
try{
const client = getAuthenticatedClient(accessToken);
let result =
await client.api(`/users/${userPrincipalName}/outlook/masterCategories`)
.get();
//console.log(result.value);
let response = new ResponseInfo(200,result.value,'');
return response;
}catch(errror) {
let response = new ResponseInfo(400,'',error);
return response;
}
},
3. Общие встречи и личные мероприятия
После создания общего события в календаре Outlook, если к нему предоставлен доступ другим пользователям, оно станет встречей. В настоящее время я не нашел отличительного флага того, является ли это событием или встречей в событиях, поэтому он можно судить только по временному получению участников мероприятия, но оно создается в Outlook. Среди участников личных мероприятий также есть вы. Это следует отметить. Для события Outlook, совместно используемого другими, есть очевидный органайзер флажков, так что это может быть четко оцененным.