Share via


Escenario de ejemplo de Scripts de Office: Programar entrevistas en Teams

En este escenario, usted es un reclutador de RR. HH. que programa reuniones de entrevistas con candidatos en Teams. Administra la programación de entrevistas de los candidatos en un archivo de Excel. Tendrá que enviar la invitación a la reunión de Teams tanto a los candidatos como a los entrevistadores. A continuación, debe actualizar el archivo de Excel con la confirmación de que se han enviado reuniones de Teams.

La solución tiene tres pasos que se combinan en un único flujo de Power Automate.

  1. Un script extrae datos de una tabla y devuelve una matriz de objetos como datos JSON .
  2. A continuación, los datos se envían a la acción Crear una reunión de Teams para enviar invitaciones.
  3. Los mismos datos JSON se envían a otro script para actualizar el estado de la invitación.

Para obtener más información sobre cómo trabajar con JSON, lea Uso de JSON para pasar datos hacia y desde scripts de Office.

Aptitudes de scripting cubiertas

  • Flujos de Power Automate
  • Integración de Teams
  • Análisis de tablas

Instrucciones de instalación

Descarga del libro

  1. Descargue el libro de ejemplo en OneDrive.

  2. Abra el libro en Excel.

  3. Cambie al menos una de las direcciones de correo electrónico a la suya propia para que reciba una invitación.

Creación de los scripts

  1. En la pestaña Automatizar , seleccione Nuevo script y pegue el siguiente script en el editor. Esto extraerá los datos de la tabla para programar invitaciones.
function main(workbook: ExcelScript.Workbook): InterviewInvite[] {
  const MEETING_DURATION = workbook.getWorksheet("Constants").getRange("B1").getValue() as number;
  const MESSAGE_TEMPLATE = workbook.getWorksheet("Constants").getRange("B2").getValue() as string;

  // Get the interview candidate information.
  const sheet = workbook.getWorksheet("Interviews");
  const table = sheet.getTables()[0];
  const dataRows = table.getRangeBetweenHeaderAndTotal().getValues();

  // Convert the table rows into InterviewInvite objects for the flow.
  let invites: InterviewInvite[] = [];
  dataRows.forEach((row) => {
    const inviteSent = row[1] as boolean;
    if (!inviteSent) {
      const startTime = new Date(Math.round(((row[6] as number) - 25569) * 86400 * 1000));
      const finishTime = new Date(startTime.getTime() + MEETING_DURATION * 60 * 1000);
      const candidateName = row[2] as string;
      const interviewerName = row[4] as string;

      invites.push({
        ID: row[0] as string,
        Candidate: candidateName,
        CandidateEmail: row[3] as string,
        Interviewer: row[4] as string,
        InterviewerEmail: row[5] as string,
        StartTime: startTime.toISOString(),
        FinishTime: finishTime.toISOString(),
        Message: generateInviteMessage(MESSAGE_TEMPLATE, candidateName, interviewerName)
      });
    }    
  });

  console.log(JSON.stringify(invites));
  return invites;
}

function generateInviteMessage(
  messageTemplate: string,
   candidate: string,
   interviewer: string) : string {
  return messageTemplate.replace("_Candidate_", candidate).replace("_Interviewer_", interviewer);
}

// The interview invite information.
interface InterviewInvite {
  ID: string
  Candidate: string
  CandidateEmail: string
  Interviewer: string
  InterviewerEmail: string
  StartTime: string
  FinishTime: string
  Message: string
}
  1. Asigne al script el nombre Schedule Interviews (Programar entrevistas ) para el flujo.

  2. Cree otro script con el código siguiente. Esto marcará las filas como invitadas.

function main(workbook: ExcelScript.Workbook, invites: InterviewInvite[]) {
  const table = workbook.getWorksheet("Interviews").getTables()[0];

  // Get the ID and Invite Sent columns from the table.
  const idColumn = table.getColumnByName("ID");
  const idRange = idColumn.getRangeBetweenHeaderAndTotal().getValues();
  const inviteSentColumn = table.getColumnByName("Invite Sent?");

  const dataRowCount = idRange.length;

  // Find matching IDs to mark the correct row.
  for (let row = 0; row < dataRowCount; row++){
    let inviteSent = invites.find((invite) => {
      return invite.ID == idRange[row][0] as string;
    });

    if (inviteSent) {
      inviteSentColumn.getRangeBetweenHeaderAndTotal().getCell(row, 0).setValue(true);
      console.log(`Invite for ${inviteSent.Candidate} has been sent.`);
    }
  } 
}

// The interview invite information.
interface InterviewInvite {
  ID: string
  Candidate: string
  CandidateEmail: string
  Interviewer: string
  InterviewerEmail: string
  StartTime: string
  FinishTime: string
  Message: string
}
  1. Asigne al segundo script el nombre Invitaciones enviadas a registros para el flujo.

Creación del flujo de Power Automate

Este flujo ejecuta los scripts de programación de entrevistas, envía las reuniones de Teams y registra la actividad de nuevo en el libro.

  1. Cree un flujo de nube instantáneo.

  2. Elija Desencadenar manualmente un flujo y seleccione Crear.

  3. En el generador de flujos, seleccione el + botón y Agregar una acción. Use la acción Ejecutar script del conector de Excel Online (Empresa). Complete la acción con los siguientes valores.

    • Ubicación: OneDrive para la Empresa
    • Biblioteca de documentos: OneDrive
    • Archivo: hr-interviews.xlsx (elegido mediante el explorador de archivos)
    • Script: Programar entrevistas La acción Ejecutar script completada para obtener datos de entrevista del libro.
  4. Agregue una acción que use la acción Crear una reunión de Teams del conector de Microsoft Teams. Al seleccionar contenido dinámico desde el conector de Excel, se generará un bloque For each para el flujo. Complete el conector con los siguientes valores.

    • Asunto: Entrevista de Contoso
    • Mensaje: Mensaje (contenido dinámico del script de ejecución)
    • Zona horaria: Hora estándar del Pacífico
    • Hora de inicio: StartTime (contenido dinámico del script de ejecución)
    • Hora de finalización: FinishTime (contenido dinámico del script de ejecución)
    • Id. de calendario: Calendario
    • Asistentes necesarios: CandidateEmail ; InterviewerEmail (contenido dinámico del script de ejecución : anote el valor ";" que separa los valores) La acción de Teams completada para programar reuniones.
  5. En el mismo bloque Para cada bloque, agregue otra acción Ejecutar script . Use los siguientes valores.

    • Ubicación: OneDrive para la Empresa
    • Biblioteca de documentos: OneDrive
    • Archivo: hr-interviews.xlsx (elegido mediante el explorador de archivos)
    • Script: invitaciones enviadas de registros
    • invites: result (contenido dinámico del script de ejecución)
  6. Guarde el flujo. El diseñador de flujo debe tener un aspecto similar al de la imagen siguiente.

    Diagrama del flujo completado que muestra dos pasos que conducen a un control For each y dos pasos dentro del control For each.

  7. Use el botón Probar de la página del editor de flujo o ejecute el flujo a través de la pestaña Mis flujos . Asegúrese de permitir el acceso cuando se le solicite.

Vídeo de entrenamiento: Envío de una reunión de Teams desde datos de Excel

Vea cómo Sudhi Ramamurthy recorre una versión de este ejemplo en YouTube. Su versión usa un script más sólido que controla las columnas cambiantes y los tiempos de reunión obsoletos.