はじめに
SharePointリストでは、組織でリストテンプレートを発行することができます。
テンプレートからSharePointリストを作成することで、列の設定や書式だけでなく、リストに関連するPower Automate フローも一緒に作成することができます。
今日はその方法を、自分の備忘録がてらまとめていこうと思います!
この記事は管理者向けの記事となります。
SharePoint管理者、グローバル管理者の権限が必要な操作を含みます。
関連リンク
公式を見ればすべてわかります。
この記事はそれを実際にやってみたというだけのものです!
リストの作成
まずはテンプレートとなるリストを実際に作成しておきます。
リストはなんでも良いのですが、書式設定などしっかり設定しておくと、テンプレートとしての価値が増す気がします。
ソリューションの作成
リストと一緒にテンプレートに含めたいフローをまとめるための入れ物として、ソリューションを作成します。
そのまま運用するソリューションではなく、テンプレートのために一時的にしようするものなので、既定の環境とは異なる環境で作成するようにしました。
フローの作成
用意したソリューションの中で、クラウドフローを作成します。
クラウドフローの内容にも特に制約はありませんが、保存場所には注意が必要です。
ソリューションからフローを作成する。もしくは、作成してしまったフローをソリューションに追加する必要があります。
今回は例として 「リストに新しい項目が作成されたときにTeamsで通知する」 フローを作成しました。
こういったトリガーやアクションで、テンプレートとなるリストを参照します。
テンプレートから作成した新しいリストでも、自動的に新しいリストを参照するフローができる、というわけです。
接続の確認
フローで使用する接続はすべて、ソリューション内に保存された接続参照である必要があります。
ソリューション内で作成したフローであれば、基本的には接続参照が使用されているはずですが、他のソリューションの接続参照が使用されていないかなど、しっかり確認しておきましょう。
ソリューションのエクスポート
下準備が終わったら、テンプレートを発行するための準備に移ります。
作成したソリューションの変更を公開し、zipファイルにエクスポートします。
エクスポートしたソリューションファイルの編集
ダウンロードしたzipファイルを一度展開し、中身を編集します。
Workflows
フォルダの中にあるJSONファイルを開いて編集します。
複数のフローをテンプレートに含めた場合は、複数のファイルがあるはずですので、それぞれ同じ手順で編集しましょう。
JSONファイルを開くと、接続の情報など、フローの詳細が定義されたファイルであることがわかります。
フローのトリガーやアクションもJSONで定義されています。
今は特定のリストが参照されているので、テンプレートとして新しく作成するリストが動的に指定できるよう、このparameters
の部分を変数に置き換えます。
トリガーやアクションで複数回リストを参照している場合は、参照するすべてのトリガー・アクションを書き換えます。
{ContextSharePointSiteUrl}
{ContextSharePointListId}
書き換えたら保存し、エクスポートした時と同じ構成になるよう、編集したファイルを再度zipに圧縮します。
SharePoint管理シェルへの接続
次に、リストの定義ファイルをダウンロードし、フローを含めた組織テンプレートに発行していくのですが、これらの作業にはPowerShellを使用します。
PowerShell、SharePoint Online 管理シェルのダウンロードやモジュールのインストールは、何分見よう見まねで行ったため、詳しい手順は割愛させて下さい。
ふらりさんのまとめがとても分かりやすかったです。
SharePoint管理センターのアドレスを使用して、管理シェルに接続しておきます。
Connect-SPOService -Url <SharePoint管理センターのアドレス>
リストの定義ファイルの取得
次に、リストの定義ファイルを取得します。
テンプレートにしたリストのアドレスを確認し、次のコマンドを実行して、ターゲット リストからサイト スクリプト ファイル(manifest.json
)を取得します。
Get-SPOSiteScriptFromList -ListUrl <リストのアドレス> | Out-File manifest.json
リストの定義ファイルの編集
取得したmanifest.json
を開き、テンプレートにフローを含めるよう編集します。
ここでは、actions
に1つ項目を追加します。
{
"verb": "importBusinessApps",
"listName": "[[L_0001_listName]]",
"solutionFileRelativePath": "solution.zip"
}
ここでいうlistName
は、もとからあるactionのcreateSPList
と同じ値にする必要があります。
また、solutionFileRelativePath
はソリューションをエクスポートし編集したファイルの相対的なパスを定義するものですが、ファイル名など、画面の通りにすすめてもらっていれば、例と同じ指定で大丈夫です。
編集が終わったら、ソリューションのエクスポートファイルと一緒にzipにまとめます。
テンプレートの発行
できたファイルを、組織テンプレートとして発行します。
PowerShellで以下のコマンドを実行し、サイト デザインで使用するための新しいサイト スクリプト パッケージをアップロードします。
$pkg = Add-SPOSiteScriptPackage -Title "<サイト スクリプトのタイトル>" -Description "<サイト スクリプトの説明>" -ContentPath '<作成したmanifest.zipのパス>'
最後にリストテンプレートとして発行します。
Add-SPOListDesign -Title "<テンプレートのタイトル>" -Description "<テンプレートの説明>" -SiteScripts $pkg.Id
テンプレートを実際に使う
これで登録が完了です。
リストの作成画面からテンプレートが確認できます。
このテンプレートを使ってリストを作成すると、確認の上、フローが作成されます。
自動的に作成されたフローを確認すると、新しく作ったリストが参照されていることが確認できます。
このフローは既定の環境に作成されたソリューション内に作成されます。
(ここはちょっと困りもの?)
おわりに
フローとリストを一緒に配布できるカスタム組織テンプレート、同じようなリストをいろんなチームで使いまわす場合などには便利だと思います。
ただし、管理者側でそこそこ大変な下準備が必要になるので、使いどころは悩ましいのかもしれません🤔