Procedure: communiceren met Microsoft Graph en SharePoint met behulp van serverlogica

Deze handleiding helpt u bij het instellen en testen van het serverlogicavoorbeeld dat Power Pages integreert met Microsoft Graph en SharePoint Online.

Stap 1: Het voorbeeldpakket downloaden

  1. Ga naar de GitHub-opslagplaats https://github.com/microsoft/power-pages-samples.
  2. Selecteer Code > .zip downloaden.
  3. Pak na het downloaden het ZIP-bestand uit naar een lokale map, bijvoorbeeld: C:\PowerPages\ServerLogic
  4. Navigeer naar het uitgepakte pad: samples/server-logic/sharepoint-integration Deze map bevat het event-registration.zip oplossingspakket, inclusief de Power Pages-siteresources die u in latere stappen gaat importeren.

U kunt ook git-kloon gebruiken als u wilt.

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

Stap 2: Vereisten

Voordat u begint, moet u ervoor zorgen dat u het volgende hebt:

Stap 3: de Entra ID-toepassing maken en configureren

U hebt een app-registratie nodig om uw serverlogicacode te laten verifiëren bij Microsoft Graph.

De app-registratie maken

  1. Ga naar Azure Portal en selecteer App-registraties.
  2. Selecteer + Nieuwe registratie.
  3. Geef een naam op (bijvoorbeeld PowerPages-Graph-Integration).
  4. Kies Alleen accounts in deze organisatiedirectory.

    Opmerking

    U hoeft geen omleidings-URI voor dit voorbeeld op te geven.

  5. Selecteer Registreren.

API-machtigingen configureren

  1. Ga in de nieuwe app naar API-machtigingen>een machtiging toevoegen.
  2. Selecteer Microsoft Graph>toepassingsmachtigingen.
  3. Voeg de volgende machtigingen toe:
    • Sites.ReadWrite.All (voor Bewerkingen van SharePoint-bestanden)
    • Mail.Send (optioneel– alleen nodig als u van plan bent om de e-mailsectie in te schakelen)
  4. Selecteer Beheerdersmachtiging verlenen voor uw tenant.

Een clientgeheim maken

  1. Ga naar Certificaten en geheimen>Clientgeheimen.
  2. Selecteer + Nieuw clientgeheim.
  3. Voer een beschrijving in en kies een verloopperiode (bijvoorbeeld zes maanden).
  4. Selecteer Toevoegen en kopieer de gegenereerde waarde onmiddellijk. Dit is uw CLIENT_SECRET.

Vereiste waarden verzamelen

Vanuit uw Azure-app:

  • Client-id> CLIENT_ID
  • Tenant-id> TENANT_ID
  • Client Secret> CLIENT_SECRET

Stap 4: Uw SharePoint-site en -map identificeren

Met het script worden gegenereerde gebeurtenistickets geüpload naar een SharePoint-site.

  1. Identificeer uw SharePoint-hostnaam en -sitepad: bijvoorbeeld: HOSTNAME = contoso.sharepoint.com SITE_PATH = /sites/EventSite
  2. Zorg ervoor dat er een documentbibliotheek met de naam Documenten bestaat (standaard).

Stap 5: Het pakket implementeren

  1. Maak een nieuwe site door de onlangs gedownloade site te importeren vanuit GitHub. Zie power-pages-solutions voor meer informatie over het importeren van de site

  2. Werk tijdens de site-upgrade de waarden voor omgevingsvariabelen bij. Werk de volgende waarden bij die u in de vorige stappen hebt vastgelegd:

    • Client-ID
    • Tenant-id
    • Clientgeheim (bewaar deze waarde in een sleutelkluis en gebruik deze in de omgevingsvariabele. Voor het testen kunt u deze rechtstreeks in de omgevingsvariabele bewaren.)
    • HOSTNAAM
    • SITE_PATH

Scriptmarkering: Configuratiesectie

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

Deze worden veilig geladen vanuit de site-instellingen van Power Pages (omgevingsvariabelen).

Stap 6: De SharePoint-integratie testen

Het script verwerkt verzendingen van gebeurtenisregistratieformulieren, verkrijgt een Microsoft Graph-toegangstoken, genereert een HTML-ticket, uploadt het naar SharePoint en maakt een record in Dataverse.

Scriptmarkering: Microsoft Graph aanroepen voor toegangstoken

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

Scriptvermelding: Uploaden van ticket naar 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"
);

Na een geslaagde run:

  1. Er wordt een nieuwe record weergegeven in Dataverse onder crd69_eventregistrations.
  2. Er wordt een HTML-ticketbestand geüpload naar de map SharePoint Documents > Tickets .
  3. Het veld crd69_ticketurl bevat de koppeling naar het geüploade ticketbestand.

(Optioneel) Stap 7: e-mailmelding inschakelen

Een bevestigingsmail verzenden naar de deelnemer:

  1. Verwijder opmerkingen in de sectie Bevestigings-e-mail verzenden in het script.
  2. Vervang {senderUserId} door een geldige postvak-ingeschakelde gebruikers-id, bijvoorbeeld een serviceaccount.
  3. Zorg ervoor dat de machtiging Mail.Send is toegevoegd en dat de beheerder toestemming heeft gegeven.

Overzicht van serverlogica
Serverlogica ontwerpen
Server-objecten
Interactie met Dataverse-tabellen met behulp van serverlogica