Acoplamiento de NodeJS con la API de Microsoft Graph para operar los eventos del calendario de Outlook del usuario (3)

Prefacio

Después de obtener el token de acceso a través de Microsoft Identity Platform, puede agregar Autorización al encabezado http y llamar a la API de Microsoft Graph para operar el calendario de Outlook del usuario.

De hecho, la descripción de varias solicitudes es aún más detallada en la documentación oficial de la API, como la adquisición de eventos de Outlook, adjuntar la conexión a la  API de Microsoft Graph para obtener eventos de calendario. 

A continuación se muestra solo un resumen de los siguientes puntos de atención durante el desarrollo, principalmente en los siguientes aspectos:

  1. Obtenga eventos de calendario de Outlook del usuario (adición, eliminación, modificación y verificación)
  2. Obtener la configuración de color del evento del usuario
  3. Reuniones compartidas y eventos personales

Primero mira el efecto

Pon algunos códigos comunes primero

// 标准化返回值
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;
}

Uno, obtener eventos de calendario de Outlook del usuario (adición, eliminación, modificación y verificación)

En primer lugar, debo recordar que los eventos y los calendarios en el calendario de Outlook son diferentes. La principal diferencia radica en los eventos repetitivos. Por ejemplo, cada reunión de la mañana. Puede obtener información de eventos repetidos a través de la vista del calendario, pero si pasa el evento, solo puede obtener la repetición inicial.

Para obtener un evento a través de la vista de calendario, debe especificar el intervalo de tiempo de inicio y finalización, y para que el evento pase a través del evento, no es necesario especificar el intervalo de tiempo. A continuación, se muestra un ejemplo de cómo obtener eventos a través de eventos.

  /**
   * 获取用户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;
      }
  },

El formato básico requerido para el evento al agregar es el siguiente

// timeZone:时区
const newEvent = {
        subject: “件名”,
        start: {
          dateTime: “开始时间(UTC格式)”,
          timeZone: timeZone
          },
        end: {
          dateTime: “结束时间(UTC格式)”,
          timeZone: timeZone
          },
        body: {
          contentType: 'HTML',
          content: “event内容”
          },
        location:{
          displayName: “地点”
          },
        attendees:{},
    };

En segundo lugar, obtenga la configuración de color del evento del usuario

Cabe señalar aquí que si el usuario está autenticado, incluso el administrador solo puede leer la configuración de su propia categoría y no puede leer la configuración de categoría de los miembros que no sean el usuario autenticado. Sin embargo, no ha pasado ninguna autenticación de usuario, es decir, cliente Autenticación secreta : solo entonces podrá acceder a la configuración de categorías de todos los usuarios.

Además, la categoría obtenida aquí es solo un formulario, sin información de color específica, como el ejemplo oficial de devolución de API es el siguiente.

Cuando escribí el código, elegí el color, pero no lo usé más tarde, debería corresponder a los siguientes colores:
 

categoría color
preestablecido 0 # FFFF14
preajuste 1 # FF8C00
preajuste 2 # FECB6F
preajuste 3 # FFF100
preajuste 4 # 5FBE7D
preajuste 5 # 33BAB1
preajuste 6 # A3B367
preajuste 7 # 55ABE5
preajuste 8 # A895E2
preajuste 9 # E48BB5
preestablecido 10 # B9C0CB
preestablecido 11 # 4C596E
preajuste 12 #ABABAB
preajuste 13 # 666666
preestablecido 14 # 474747
preajuste 15 # 910A19
preajuste 16 # CE4B28
preajuste 17 # A47332
preajuste 18 # B0A923
preajuste 19 # 026802
preajuste 20 # 1C6367
preajuste 21 # 5C6A22
preajuste 22 # 254069
preajuste 23 # 562685
preestablecido 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. Reuniones y eventos personales compartidos

Después de crear un evento compartido en el calendario de Outlook, si se comparte con otros, se convertirá en una reunión. Por el momento, no he encontrado la bandera distintiva de si es un evento o una reunión en los eventos, por lo que solo se puede juzgar obteniendo los asistentes al evento temporalmente, pero se crea en Outlook. Los asistentes a eventos personales también se incluyen a usted. Esto debe tenerse en cuenta. Para el evento de Outlook compartido por otros, hay un organizador de bandera obvio, por lo que puede ser juzgado claramente.

 

Supongo que te gusta

Origin blog.csdn.net/bai_ye_/article/details/115076939
Recomendado
Clasificación