Док-станция NodeJS с Microsoft Graph API для управления событиями календаря пользователя Outlook (3)

Предисловие

После получения токена доступа через платформу Microsoft Identity Platform вы можете добавить авторизацию в заголовок http и вызвать Microsoft Graph API для работы с календарем Outlook пользователя.

Фактически, описание различных запросов все же более подробно описано в официальной документации API, например, получение событий Outlook, подключение к  Microsoft Graph API для получения событий календаря. 

Вот лишь краткое изложение следующих моментов, на которые следует обратить внимание во время разработки, в основном в следующих аспектах:

  1. Получить события календаря Outlook Outlook (добавление, удаление, изменение и проверка)
  2. Получить настройки цвета пользовательского события
  3. Общие встречи и личные мероприятия

Сначала посмотрим на эффект

Сначала укажите общие коды

// 标准化返回值
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, совместно используемого другими, есть очевидный органайзер флажков, так что это может быть четко оцененным.

 

рекомендация

отblog.csdn.net/bai_ye_/article/details/115076939