Пример сценария Office: планирование собеседований в Teams
В этом сценарии вы являетесь специалистом по подбору кадров, планируя собеседования с кандидатами в Teams. Вы управляете расписанием собеседований кандидатов в файле Excel. Вам потребуется отправить приглашение на собрание Teams как кандидату, так и интервьюелю. Затем необходимо обновить файл Excel с подтверждением отправки собраний Teams.
Решение состоит из трех этапов, объединенных в одном потоке Power Automate.
- Скрипт извлекает данные из таблицы и возвращает массив объектов в виде данных JSON .
- Затем данные отправляются в действие Teams Create a Meeting (Создание собрания Teams ) для отправки приглашений.
- Те же данные JSON отправляются другому скрипту для обновления состояния приглашения.
Дополнительные сведения о работе с JSON см. в статье Использование JSON для передачи данных в скрипты Office и из нее.
Охваченные навыки сценариев
- Потоки Power Automate
- Интеграция Teams
- Синтаксический анализ таблиц
Инструкции по настройке
Скачивание книги
Скачайте пример книги в OneDrive.
Откройте книгу в Excel.
Измените по крайней мере один из адресов электронной почты на свой собственный, чтобы вы получили приглашение.
Создание скриптов
- На вкладке Автоматизация выберите Создать скрипт и вставьте следующий скрипт в редактор. Это позволит извлечь данные таблицы для планирования приглашений.
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
}
Присвойте скрипту имя Schedule Interviews для потока.
Создайте еще один скрипт со следующим кодом. При этом строки будут помечаться как приглашенные.
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
}
- Присвойте второму скрипту имя Record Sent Invites для потока.
Создание потока Power Automate
Этот поток запускает сценарии планирования интервью, отправляет собрания Teams и записывает действие обратно в книгу.
Создайте мгновенный облачный поток.
Выберите Вручную активировать поток и нажмите кнопку Создать.
В построителе потоков нажмите кнопку + и добавьте действие. Используйте действие Выполнить скрипт соединителя Excel Online (бизнес). Выполните действие со следующими значениями.
- Расположение: OneDrive для бизнеса
- Библиотека документов: OneDrive
- Файл: hr-interviews.xlsx (выбрано в браузере файлов)
- Скрипт. Планирование интервью
Добавьте действие, использующее действие "Создать собрание Teams" соединителя Microsoft Teams. При выборе динамического содержимого в соединителе Excel для потока будет создано значение Для каждого блока. Заполните соединитель следующими значениями.
- Тема: Интервью Contoso
- Message: Message (динамическое содержимое из скрипта запуска)
- Часовой пояс: тихоокеанское время (зима)
- Время начала: StartTime (динамическое содержимое из скрипта запуска)
- Время окончания: FinishTime (динамическое содержимое из скрипта запуска)
- Идентификатор календаря: Календарь
- Обязательные участники: CandidateEmail ; InterviewerEmail (динамическое содержимое из скрипта запуска — обратите внимание на символ ";", разделяющий значения)
В том же разделе Для каждого блока добавьте еще одно действие Выполнить скрипт . Используйте следующие значения.
- Расположение: OneDrive для бизнеса
- Библиотека документов: OneDrive
- Файл: hr-interviews.xlsx (выбрано в браузере файлов)
- Сценарий: запись отправленных приглашений
- invites: result (динамическое содержимое из скрипта запуска)
- Сначала нажмите переключить входные данные для всего массива .
Сохраните поток. Конструктор потоков должен выглядеть так, как показано на следующем рисунке.
Нажмите кнопку Тестировать на странице редактора потоков или запустите поток через вкладку Мои потоки . Обязательно разрешите доступ при появлении запроса.
Обучающее видео: отправка собрания Teams из данных Excel
Посмотрите, как Суди Рамамурти просмотрите версию этого примера на YouTube. В его версии используется более надежный скрипт, обрабатывающий изменение столбцов и устаревшее время собраний.
Office Scripts