📦

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

に公開

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

https://docs.microsoft.com/ja-jp/sharepoint/dev/spfx/tenant-properties?WT.mc_id=M365-MVP-5002941

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

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

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

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

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

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

{
  "odata.metadata": "https://{{tenant-name}}.sharepoint.com/_api/$metadata#SP.ApiData.StorageEntitys/@Element",
  "odata.type": "Microsoft.SharePoint.ClientSideComponent.StorageEntity",
  "odata.id": "https://{{tenant-name}}.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 のアプリケーション カスタマイザーなどの拡張機能では、読み取り専用のプロパティを持つことができます。ただし、プロパティは埋め込まれているため、値を変更するにはデプロイが必要です。テナントのプロパティとして持っておけば、変更が簡単です。

Discussion