Практическое руководство. Взаимодействие с Microsoft Graph и SharePoint с помощью логики сервера

В этом руководстве описано, как настроить и проверить пример логики сервера, который интегрирует Power Pages с Microsoft Graph и SharePoint Online.

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

  1. Перейдите в репозиторий https://github.com/microsoft/power-pages-samplesGitHub.
  2. Выберите Код Скачать ZIP>.
  3. После скачивания извлеките ZIP-файл в локальную папку, например: C:\PowerPages\ServerLogic
  4. Перейдите к извлеченному пути: samples/server-logic/sharepoint-integration Эта папка содержит event-registration.zip пакет решения, который включает ресурсы сайта Power Pages, которые будут импортированы на последующих этапах.

Кроме того, при желании используйте клон git.

git clone https://github.com/microsoft/power-pages-samples.git
cd power-pages-samples/samples/server-logic/sharepoint-integration

Шаг 2. Предварительные требования

Прежде чем начать, убедитесь, что у вас есть:

  • Доступ к идентификатору Microsoft Entra (Azure AD) с разрешением на регистрацию приложений.
  • Доступ к сайту SharePoint Online (например, https://contoso.sharepoint.com/sites/EventSite).

Шаг 3. Создание и настройка приложения Entra ID

Требуется регистрация приложения, чтобы разрешить коду логики сервера пройти проверку подлинности в Microsoft Graph.

Создание регистрации приложения

  1. Перейдите на портал Azure и выберите "Регистрация приложений".
  2. Выберите +Создать регистрацию.
  3. Укажите имя (например, PowerPages-Graph-Integration).
  4. Выберите Учетные записи только в данном каталоге организации.

    Замечание

    Для этого примера не нужно указывать URI перенаправления.

  5. Выберите Зарегистрировать.

Конфигурация разрешений API

  1. В новом приложении перейдите в раздел "Разрешения> API", чтобыдобавить разрешение.
  2. Выберитеразрешения приложения>.
  3. Добавьте следующие разрешения:
    • Sites.ReadWrite.All (для операций с файлами SharePoint)
    • Mail.Send (необязательно, если вы планируете включить раздел электронной почты)
  4. Выберите "Предоставить согласие администратора " для вашего клиента.

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

  1. Перейдите к сертификатам и секретам>клиента.
  2. Выберите + Создать секрет клиента.
  3. Введите описание и выберите срок действия (например, шесть месяцев).
  4. Нажмите кнопку "Добавить" и скопируйте созданное значение немедленно. Это ваш CLIENT_SECRET.

Сбор необходимых значений

Из приложения Azure:

  • Идентификатор> клиента CLIENT_ID
  • Идентификатор арендатора> TENANT_ID
  • Секрет клиента> CLIENT_SECRET

Шаг 4. Определение сайта и папки SharePoint

Скрипт отправляет созданные билеты на события на сайт SharePoint.

  1. Определите имя узла SharePoint и путь сайта: например: HOSTNAME = contoso.sharepoint.com SITE_PATH = /sites/EventSite
  2. Убедитесь, что библиотека документов с именем Documents существует (по умолчанию).

Шаг 5. Развертывание пакета

  1. Создайте новый сайт, импортируя недавно скачанный сайт из GitHub. Сведения о импорте сайта см. в разделе power-pages-solutions

  2. Во время обновления сайта обновите значения переменных среды. Обновите следующие значения, которые были записаны на предыдущих шагах:

    • идентификатор клиента
    • Идентификатор клиента
    • Секрет клиента (сохраните это значение в хранилище ключей и используйте его в переменной среды. Для тестирования его можно сохранить непосредственно в переменной среды.)
    • ИМЯ УЗЛА
    • SITE_PATH

Особенности скрипта: секция конфигурации

const CLIENT_ID = Server.SiteSetting.Get("CLIENT_ID");
const CLIENT_SECRET = Server.SiteSetting.Get("CLIENT_SECRET");;
const TENANT_ID = Server.SiteSetting.Get("TENANT_ID");

const HOSTNAME = Server.SiteSetting.Get("HOSTNAME"); 
const SITE_PATH = Server.SiteSetting.Get("SITE_PATH"); 

Они безопасно загружаются из параметров сайта Power Pages (переменные среды).

Шаг 6. Тестирование интеграции SharePoint

Скрипт обрабатывает отправки форм регистрации событий, получает маркер доступа Microsoft Graph, создает HTML-билет, отправляет его в SharePoint и создает запись в Dataverse.

Подсветка скрипта: вызов Microsoft Graph для токена доступа

async function getAccessToken() {
   const body = {
      "client_id": CLIENT_ID,
      "client_secret": CLIENT_SECRET,
      "scope": "https://graph.microsoft.com/.default",
      "grant_type": "client_credentials"
   };
   const tokenResp = await Server.Connector.HttpClient.PostAsync(
      `https://login.microsoftonline.com/${TENANT_ID}/oauth2/v2.0/token`,
      JSON.stringify(body),
      { "Content-Type": "application/x-www-form-urlencoded" },
      "application/x-www-form-urlencoded"
   );
   const tokenJson = JSON.parse(JSON.parse(tokenResp).Body);
   return tokenJson.access_token;
}

Выделение скрипта: отправка билета в SharePoint

const siteResp = await Server.Connector.HttpClient.GetAsync(
  `https://graph.microsoft.com/v1.0/sites/${HOSTNAME}:${SITE_PATH}`,
  { Authorization: `Bearer ${accessToken}` }
);
const siteId = JSON.parse(JSON.parse(siteResp).Body).id;

const driveResp = await Server.Connector.HttpClient.GetAsync(
  `https://graph.microsoft.com/v1.0/sites/${siteId}/drive`,
  { Authorization: `Bearer ${accessToken}` }
);
const driveId = JSON.parse(JSON.parse(driveResp).Body).id;

const uploadUrl = `https://graph.microsoft.com/v1.0/drives/${driveId}/root:/Tickets/${fileName}:/content`;

await Server.Connector.HttpClient.PutAsync(
  uploadUrl,
  htmlTicket,
  { Authorization: `Bearer ${accessToken}`, "Content-Type": "text/html" },
  "text/html"
);

После успешного выполнения:

  1. Новая запись отображается в Dataverse в crd69_eventregistrations.
  2. HTML-файл билета передается в папку SharePoint Documents > Tickets .
  3. Поле crd69_ticketurl содержит ссылку на отправленный файл билета.

(Необязательно) Шаг 7. Включение уведомления по электронной почте

Чтобы отправить сообщение электронной почты подтверждения участнику, выполните следующие действия:

  1. Раскомментируйте раздел "Отправить подтверждающее сообщение электронной почты" в скрипте.
  2. Замените {senderUserId} допустимым идентификатором пользователя с поддержкой почтового ящика (например, учетной записью службы).
  3. Убедитесь, что добавлено разрешение Mail.Send и предоставлено согласие администратора.

Общие сведения о логике сервера
Разработка логики сервера
Объекты сервера
Взаимодействие с таблицами Dataverse с помощью логики сервера