このガイドでは、Power Pages と Microsoft Graph および SharePoint Online を統合するサーバー ロジック サンプルの設定とテストについて説明します。
手順 1: サンプル パッケージをダウンロードする
- GitHub リポジトリ https://github.com/microsoft/power-pages-samplesに移動します。
- コード > ZIP をダウンロード を選択します。
- ダウンロード後、ZIP ファイルをローカル フォルダーに抽出します。次に例を示します。
C:\PowerPages\ServerLogic - 抽出されたパスに移動します。
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 ID (Azure AD) へのアクセス。
- SharePoint Online サイトへのアクセス (たとえば、https://contoso.sharepoint.com/sites/EventSite)。
手順 3: Entra ID アプリケーションを作成して構成する
サーバー ロジック コードが Microsoft Graph に対して認証されるようにするには、アプリの登録が必要です。
アプリ登録を作成する
- Azure Portal に移動し、[アプリの登録] を選択します。
- [+ 新規登録] を選択します。
- 名前 (PowerPages-Graph-Integrationなど) を指定します。
-
[この組織のディレクトリ内のアカウントのみ] を選択します。
注
このサンプルのリダイレクト URI を指定する必要はありません。
- 登録 を選択します。
API のアクセス許可を構成する
- 新しいアプリで、[ API のアクセス許可] に移動します>アクセス許可を追加します。
- [Microsoft Graph>アプリケーションのアクセス許可] を選択します。
- 次のアクセス許可を追加します。
- Sites.ReadWrite.All (SharePoint ファイル操作用)
- Mail.Send (省略可能 – 電子メール セクションを有効にする場合にのみ必要)
- [テナント に管理者の同意を付与 する] を選択します。
クライアント シークレットを作成する
- 証明書とシークレット>Client シークレットに移動します。
- + 新しいクライアント シークレットを選択します。
- 説明を入力し、有効期限 (6 か月など) を選択します。
- [ 追加] を選択し、 生成された値 をすぐにコピーします。これが CLIENT_SECRETです。
必要な値を収集する
Azure アプリから:
- クライアント ID> CLIENT_ID
- テナント ID> TENANT_ID
- クライアント シークレット> CLIENT_SECRET
手順 4: SharePoint サイトとフォルダーを特定する
このスクリプトは、生成されたイベント チケットを SharePoint サイトにアップロードします。
-
SharePoint ホスト名とサイト パスを特定する: 例: HOSTNAME =
contoso.sharepoint.comSITE_PATH =/sites/EventSite - ドキュメントと呼ばれるドキュメント ライブラリが存在することを確認します (既定)。
手順 5: パッケージをデプロイする
GitHub から最近ダウンロードしたサイトをインポートして、新しいサイトを作成します。 サイトをインポートする方法については、power-pages-solutions を参照してください
サイトのアップグレード中に、環境変数の値を更新します。 前の手順でキャプチャした次の値を更新します。
- クライアント 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"
);
正常に実行された後:
- Crd69_eventregistrationsの下のDataverse に新しいレコードが表示されます。
- HTML チケット ファイルが SharePoint ドキュメント > Tickets フォルダーに アップロードされます。
- crd69_ticketurl フィールドには、アップロードされたチケット ファイルへのリンクが含まれています。
(省略可能)手順 7: 電子メール通知を有効にする
出席者に確認メールを送信するには:
- スクリプトの [確認メールの送信] セクションのコメントを解除します。
- {senderUserId} を有効な メールボックスが有効なユーザー ID (サービス アカウントなど) に置き換えます。
- Mail.Send アクセス許可が追加され、管理者が同意していることを確認します。
関連情報
サーバー ロジックの概要
著者サーバーロジック
サーバー オブジェクト
サーバー ロジックを使用して Dataverse テーブルを操作する方法