からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

SharePoint Framework で共通のプロパティを利用する

SharePoint Framework ではテナントまたはサイト コレクション単位で共通の読み取り専用のプロパティを使用することができます。

docs.microsoft.com

値の設定は Office 365 CLI または PnP PowerShell を使って行うことができます。SharePoint Framework では REST API または pnpjs を使って値を読み取ることができます。

実際に試してみたいと思います。まずは PnP PowerShell でプロパティを追加します。

Set-PnPStorageEntity -Key "Copyright" -Value "Copyright (c) 2020 karamem0"

確認のために PowerShell で REST API を呼び出します。*1

Invoke-WebRequest -Uri "https://{{tenantname}}.sharepoint.com/_api/web/getstorageentity('Copyright')" -Method Get -Headers @{ "Accept" = "application/json"; "Authorization" = "Bearer eyJ0eXAi..." } | select -ExpandProperty Content

結果として JSON が取得できます。

{
  "odata.metadata": "https://{{tenantname}}.sharepoint.com/_api/$metadata#SP.ApiData.StorageEntitys/@Element",
  "odata.type": "Microsoft.SharePoint.ClientSideComponent.StorageEntity",
  "odata.id": "https://{{tenantname}}.sharepoint.com/_api/web/getstorageentity('Copyright')",
  "odata.editLink": "web/getstorageentity('Copyright')",
  "Comment": null,
  "Description": null,
  "Value": "Copyright (c) 2020 karamem0"
}

内部実装としてはテナントのアプリ カタログ サイトまたはサイト コレクションのアプリ カタログ サイトの Web.AllProperties の storageentitiesindex に JSON 形式で値が格納されます。SharePoint Framework では他のサイト コレクションのデータを読み込むことはできませんが、getstorageentity のメソッド呼び出しにより読み込むことができるようになります。テナントとサイト コレクションで同じキーの設定がある場合はサイト コレクションが優先されるようです。

SharePoint Framework のアプリケーション カスタマイザーなどの拡張機能では読み取り専用のプロパティを持つことができますが、プロパティは埋め込まれているため、値を変更するためにはデプロイを行う必要があります。テナントのプロパティとして持っておけば変更が簡単になると思います。

*1:メソッド呼び出しなのに GET なのが気持ち悪いですね。POST でもできますけど。