方法: サーバー ロジックを使用して Microsoft Graph と SharePoint を操作する

このガイドでは、Power Pages と Microsoft Graph および SharePoint Online を統合するサーバー ロジック サンプルの設定とテストについて説明します。

手順 1: サンプル パッケージをダウンロードする

  1. GitHub リポジトリ https://github.com/microsoft/power-pages-samplesに移動します。
  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: 前提条件

開始する前に、次の内容を確認してください。

手順 3: Entra ID アプリケーションを作成して構成する

サーバー ロジック コードが Microsoft Graph に対して認証されるようにするには、アプリの登録が必要です。

アプリ登録を作成する

  1. Azure Portal に移動し、[アプリの登録] を選択します。
  2. [+ 新規登録] を選択します。
  3. 名前 (PowerPages-Graph-Integrationなど) を指定します。
  4. [この組織のディレクトリ内のアカウントのみ] を選択します。

    このサンプルのリダイレクト URI を指定する必要はありません。

  5. 登録 を選択します。

API のアクセス許可を構成する

  1. 新しいアプリで、[ API のアクセス許可] に移動します>アクセス許可を追加します
  2. [Microsoft Graph>アプリケーションのアクセス許可] を選択します
  3. 次のアクセス許可を追加します。
    • Sites.ReadWrite.All (SharePoint ファイル操作用)
    • Mail.Send (省略可能 – 電子メール セクションを有効にする場合にのみ必要)
  4. [テナント に管理者の同意を付与 する] を選択します。

クライアント シークレットを作成する

  1. 証明書とシークレット>Client シークレットに移動します。
  2. + 新しいクライアント シークレットを選択します。
  3. 説明を入力し、有効期限 (6 か月など) を選択します。
  4. [ 追加] を選択し、 生成された値 をすぐにコピーします。これが CLIENT_SECRETです。

必要な値を収集する

Azure アプリから:

  • クライアント ID> CLIENT_ID
  • テナント ID> TENANT_ID
  • クライアント シークレット> CLIENT_SECRET

手順 4: SharePoint サイトとフォルダーを特定する

このスクリプトは、生成されたイベント チケットを SharePoint サイトにアップロードします。

  1. SharePoint ホスト名サイト パスを特定する: 例: HOSTNAME = contoso.sharepoint.com SITE_PATH =/sites/EventSite
  2. ドキュメントと呼ばれるドキュメント ライブラリが存在することを確認します (既定)。

手順 5: パッケージをデプロイする

  1. GitHub から最近ダウンロードしたサイトをインポートして、新しいサイトを作成します。 サイトをインポートする方法については、power-pages-solutions を参照してください

  2. サイトのアップグレード中に、環境変数の値を更新します。 前の手順でキャプチャした次の値を更新します。

    • クライアント ID
    • テナント ID
    • クライアント シークレット (キー コンテナーにこの値を保持し、環境変数で使用します。テストの場合は、環境変数に直接保持できます)。
    • HOSTNAME
    • 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. Crd69_eventregistrationsの下のDataverse に新しいレコードが表示されます。
  2. HTML チケット ファイルが SharePoint ドキュメント > Tickets フォルダーに アップロードされます。
  3. crd69_ticketurl フィールドには、アップロードされたチケット ファイルへのリンクが含まれています。

(省略可能)手順 7: 電子メール通知を有効にする

出席者に確認メールを送信するには:

  1. スクリプトの [確認メールの送信] セクションのコメントを解除します。
  2. {senderUserId} を有効な メールボックスが有効なユーザー ID (サービス アカウントなど) に置き換えます。
  3. Mail.Send アクセス許可が追加され、管理者が同意していることを確認します。

サーバー ロジックの概要
著者サーバーロジック
サーバー オブジェクト
サーバー ロジックを使用して Dataverse テーブルを操作する方法