Como interagir com o Microsoft Graph e o SharePoint usando a lógica do servidor

Este guia explica como configurar e testar o exemplo de lógica do servidor que integra o Power Pages ao Microsoft Graph e ao SharePoint online.

Etapa 1: Baixar o pacote de exemplo

  1. Vá para o repositório https://github.com/microsoft/power-pages-samplesGitHub.
  2. Selecione Código > Baixar ZIP.
  3. Depois de baixar, extraia o arquivo ZIP para uma pasta local, por exemplo: C:\PowerPages\ServerLogic
  4. Navegue até o caminho extraído: samples/server-logic/sharepoint-integration Essa pasta contém o pacote de event-registration.zip solução, que inclui os recursos do site do Power Pages que você importará em etapas posteriores.

Como alternativa, utilize git clone se for de sua preferência.

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

Etapa 2: Pré-requisitos

Antes de começar, verifique se você tem:

Etapa 3: Criar e configurar o aplicativo Entra ID

Você precisa de um registro de aplicativo para permitir que o código lógico do servidor se autentique no Microsoft Graph.

Criar o registro de aplicativo

  1. Acesse o Portal do Azure e selecione Registros de aplicativo.
  2. Selecione + Novo registro.
  3. Forneça um nome (por exemplo, PowerPages-Graph-Integration).
  4. Escolha Contas somente neste diretório organizacional.

    Observação

    Você não precisa fornecer um URI de redirecionamento para este exemplo.

  5. Selecione Registrar.

Configure as permissões da API

  1. No novo aplicativo, vá para Permissões> de APIAdicionar uma permissão.
  2. Selecioneas permissões de Aplicativo do >.
  3. Adicione as seguintes permissões:
    • Sites.ReadWrite.All (para operações de arquivos do SharePoint)
    • Mail.Send (opcional – necessário somente se você planeja habilitar a seção de email)
  4. Selecione Conceder consentimento do administrador para seu locatário.

Criar um segredo do cliente

  1. Vá para Certificados e segredos>Segredos do Cliente.
  2. Selecione + Novo segredo do cliente.
  3. Insira uma descrição e escolha um período de expiração (por exemplo, seis meses).
  4. Selecione Adicionar e copie o valor gerado imediatamente— este é o CLIENT_SECRET.

Coletar valores necessários

Em seu aplicativo do Azure:

  • ID do cliente> CLIENT_ID
  • ID do locatário> TENANT_ID
  • Segredo do Cliente> CLIENT_SECRET

Etapa 4: Identificar seu site e pasta do SharePoint

O script carrega ingressos de evento gerados para um site do SharePoint.

  1. Identificar o nome do host e o caminho do site do SharePoint: Por exemplo: HOSTNAME = contoso.sharepoint.com SITE_PATH = /sites/EventSite
  2. Verifique se existe uma biblioteca de documentos chamada Documentos (padrão).

Etapa 5: Implantar o pacote

  1. Crie um novo site importando o site baixado recentemente do GitHub. Para saber como importar o site, consulte power-pages-solutions

  2. Durante a atualização do site, atualize os valores das variáveis de ambiente. Atualize os seguintes valores capturados nas etapas anteriores:

    • ID do cliente
    • ID do locatário
    • Segredo do cliente (mantenha esse valor em um cofre de chaves e use-o na variável de ambiente. Para teste, você pode mantê-lo diretamente na variável de ambiente.)
    • HOSTNAME
    • SITE_PATH

Realce do script: Seção de configuração

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"); 

Elas são carregadas com segurança das configurações do site do Power Pages (variáveis de ambiente).

Etapa 6: Testar a integração do SharePoint

O script processa envios de formulário de registro de evento, adquire um token de acesso do Microsoft Graph, gera um tíquete HTML, carrega-o no SharePoint e cria um registro no Dataverse.

Realce do script: Chamando o Microsoft Graph para o token de acesso

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;
}

Realce do script: Upload de ticket no 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"
);

Após uma execução bem-sucedida:

  1. Um novo registro aparece em Dataverse sob crd69_eventregistrations.
  2. Um arquivo de tíquete HTML é carregado na pasta Tíquetes > de Documentos do SharePoint .
  3. O campo crd69_ticketurl contém o link para o arquivo de tíquete carregado.

(Opcional) Etapa 7: Habilitar a notificação por email

Para enviar um email de confirmação ao participante:

  1. Descompacte a seção "Enviar email de confirmação" no script.
  2. Substitua {senderUserId} por uma ID de usuário válida habilitada para caixa de correio (por exemplo, uma conta de serviço).
  3. Verifique se a permissão Mail.Send foi adicionada e consentida pelo administrador.

Visão geral da lógica do servidor
Lógica do servidor Author
Objetos do servidor
Como interagir com tabelas do Dataverse usando a lógica do servidor