Поделиться через


Пример сценария Office: планирование собеседований в Teams

В этом сценарии вы являетесь специалистом по подбору кадров, планируя собеседования с кандидатами в Teams. Вы управляете расписанием собеседований кандидатов в файле Excel. Вам потребуется отправить приглашение на собрание Teams как кандидату, так и интервьюелю. Затем необходимо обновить файл Excel с подтверждением отправки собраний Teams.

Решение состоит из трех этапов, объединенных в одном потоке Power Automate.

  1. Скрипт извлекает данные из таблицы и возвращает массив объектов в виде данных JSON .
  2. Затем данные отправляются в действие Teams Create a Meeting (Создание собрания Teams ) для отправки приглашений.
  3. Те же данные JSON отправляются другому скрипту для обновления состояния приглашения.

Дополнительные сведения о работе с JSON см. в статье Использование JSON для передачи данных в скрипты Office и из нее.

Охваченные навыки сценариев

  • Потоки Power Automate
  • Интеграция Teams
  • Синтаксический анализ таблиц

Инструкции по настройке

Скачивание книги

  1. Скачайте пример книги в OneDrive.

  2. Откройте книгу в Excel.

  3. Измените по крайней мере один из адресов электронной почты на свой собственный, чтобы вы получили приглашение.

Создание скриптов

  1. На вкладке Автоматизация выберите Создать скрипт и вставьте следующий скрипт в редактор. Это позволит извлечь данные таблицы для планирования приглашений.
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. Присвойте скрипту имя Schedule Interviews для потока.

  2. Создайте еще один скрипт со следующим кодом. При этом строки будут помечаться как приглашенные.

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. Присвойте второму скрипту имя Record Sent Invites для потока.

Создание потока Power Automate

Этот поток запускает сценарии планирования интервью, отправляет собрания Teams и записывает действие обратно в книгу.

  1. Создайте мгновенный облачный поток.

  2. Выберите Вручную активировать поток и нажмите кнопку Создать.

  3. В построителе потоков нажмите кнопку + и добавьте действие. Используйте действие Выполнить скрипт соединителя Excel Online (бизнес). Выполните действие со следующими значениями.

    • Расположение: OneDrive для бизнеса
    • Библиотека документов: OneDrive
    • Файл: hr-interviews.xlsx (выбрано в браузере файлов)
    • Скрипт. Планирование интервью Завершенное действие выполнить скрипт для получения данных интервью из книги.
  4. Добавьте действие, использующее действие "Создать собрание Teams" соединителя Microsoft Teams. При выборе динамического содержимого в соединителе Excel для потока будет создано значение Для каждого блока. Заполните соединитель следующими значениями.

    • Тема: Интервью Contoso
    • Message: Message (динамическое содержимое из скрипта запуска)
    • Часовой пояс: тихоокеанское время (зима)
    • Время начала: StartTime (динамическое содержимое из скрипта запуска)
    • Время окончания: FinishTime (динамическое содержимое из скрипта запуска)
    • Идентификатор календаря: Календарь
    • Обязательные участники: CandidateEmail ; InterviewerEmail (динамическое содержимое из скрипта запуска — обратите внимание на символ ";", разделяющий значения) Завершенное действие Teams по планированию собраний.
  5. В том же разделе Для каждого блока добавьте еще одно действие Выполнить скрипт . Используйте следующие значения.

    • Расположение: OneDrive для бизнеса
    • Библиотека документов: OneDrive
    • Файл: hr-interviews.xlsx (выбрано в браузере файлов)
    • Сценарий: запись отправленных приглашений
    • invites: result (динамическое содержимое из скрипта запуска)
  6. Сохраните поток. Конструктор потоков должен выглядеть так, как показано на следующем рисунке.

    Схема завершенного потока, на которых показаны два шага, ведущих к Элементу управления Для каждого элемента управления, и два шага внутри Элемента управления For each.

  7. Нажмите кнопку Тестировать на странице редактора потоков или запустите поток через вкладку Мои потоки . Обязательно разрешите доступ при появлении запроса.

Обучающее видео: отправка собрания Teams из данных Excel

Посмотрите, как Суди Рамамурти просмотрите версию этого примера на YouTube. В его версии используется более надежный скрипт, обрабатывающий изменение столбцов и устаревшее время собраний.