はじめに
ごきげんよう、百合宮桜(Miyu)です(*'▽')
Power Platform を使っていると、こんな場面に出会うことはありませんか?
- 「この SharePoint サイトは研修用なので、作ったアプリを業務で利用する場合は業務用サイトに データを移行 してください」と言われる
- 「隣の部署でもこのアプリを利用したい。ただしデータは 部署ごとに分けたい 」と頼まれる
そしてこれらの依頼を遂行するために、結局同じリストを2回も、3回も作る羽目になっていませんか?
本稿では SharePoint Lists の作成を自動化し、アプリのデータ移行や横展開をラクにする方法をお伝えします。
この記事でできること
- SharePoint Lists を自動で作成する
- 半角英数字で内部列名を設定した上で、列名を日本語で自動設定する
- 列の説明を自動で入力する
- 入力の必須 or 任意を自動で設定する
完成イメージ
本稿で紹介するフローを実行すると、Excel の情報を基に
SharePoint Lists が自動で作成されます。
本稿では、内部名・表示名(列名)・この列の情報の種類・説明・この列への情報の入力を必須にするの合計5項目を自動で設定します。
この方法を利用すると、Excel で列情報を整理しておけば、SharePoint Lists の作成を自動化できるため、アプリの横展開や本番環境への移行がラクになります。
フローの概要
フローの概要は下図の通りです。
ボタンを押したら
- リスト名を指定
- 1 で指定したリスト名で SharePoint Lists を作成
- Excel から列情報を取得 & 列作成用のパラメータ情報を整理
- 3 の情報で 2 で作成したリストに列を作成
を行います。
実装方法で、それぞれ説明します。
前提条件
利用できるデータ型について
本稿で検証済みのデータ型(列の種類)は以下の通りです。
- 1行テキスト
- 複数行テキスト
- 数値
- 日付と時刻
- 選択肢
- はい / いいえ
ユーザーや参照など上記以外の列の種類は 未検証 です。よってこの方法が使えるかどうかも分かりませんので、ご了承ください。
データ型独自の細かい設定について
本稿で取り扱うのはすべての列に共通する
- 列の種類(データ型)
- 列の表示名
- 列の内部名
- 列の説明
- 入力の必須 / 任意
を自動で設定する方法です。
以下のような細かい設定については取り扱いません。
- 選択肢の設定
- 既定値の設定
- 数値の最大 / 最小許容値
- 入力文字数の上限
予めご了承ください。
実装方法
リスト名称を指定
変数 > 変数を初期化するアクションの 値 で指定します。タイプは 文字列 です。このリスト名称はリストの内部名として利用されるので 半角英数字 で指定してください。
リストを作成
SharePoint > SharePoint に HTTP 要求を送信しますアクションを利用します。
書き方が変わることもございますので Microsoft のドキュメントも参照しつつ、作業してください。
サイトのアドレスはリストを作成したい SharePoint Site 、方法は POST を指定してください。
UPI は以下の通りです。
_api/web/lists
詳細パラメーターをすべて表示し、ヘッダーとボディを指定します。
ヘッダーは以下の通りです。テキストモードに切り替えると、そのまま貼り付けられます。
{
"Accept": "application/json;odata=nometadata",
"Content-Type": "application/json;odata=verbose"
}
ボディは以下の通りです。
{
"__metadata": {
"type": "SP.List"
},
"AllowContentTypes": true,
"BaseTemplate": 100,
"ContentTypesEnabled": true,
"Description": "Power Automate から作成のテストです",
"Title": "@{variables('ListName')}"
}
Description はリストの説明です。
Title には変数「ListName」を入れています。
これでフローを実行すると、サイトアドレスで指定したサイトに変数「ListName」で指定した値の SharePoint Lists が作成されます。
リストに追加する列情報を取得
リストに列を追加するために、列の情報を取得します。作りたい列の情報は Excel にあります。
本フローは上記 Excel と同様の構成でないと動きません。作成する際は形式を必ず合わせてください。
そのため、Excel Online(Business) > 表内に存在する行を一覧表示アクションを利用します。
Excel ファイルが OneDrive for Business または SharePoint にないと指定できません。ご注意ください!
列の作成で利用するメタデータを データ操作 > 作成 アクションに入れておきます。
FieldTypeKind は以下のドキュメントに従って指定します。
長いので折りたたんでおきます。必要な時に開いてお読みください
[
{
"列の種類": "1行テキスト",
"FieldTypeKind": 2,
"__metadata.type": "SP.FieldText"
},
{
"列の種類": "複数行テキスト",
"FieldTypeKind": 3,
"__metadata.type": "SP.FieldMultiLineText"
},
{
"列の種類": "日付と時刻",
"FieldTypeKind": 4,
"__metadata.type": "SP.FieldDateTime"
},
{
"列の種類": "選択肢",
"FieldTypeKind": 6,
"__metadata.type": "SP.FieldChoice"
},
{
"列の種類": "はい / いいえ",
"FieldTypeKind": 8,
"__metadata.type": "SP.Field"
},
{
"列の種類": "数値",
"FieldTypeKind": 9,
"__metadata.type": "SP.FieldNumber"
},
{
"列の種類": "複数選択肢",
"FieldTypeKind": 15,
"__metadata.type": "SP.FieldMultiChoice"
}
]
作成アクションの 列の種類 = Excel の列の種類 にしてください。ここで文字が一致しないとフローが動きません。
作成アクションに入れたデータを データ操作 > JSON の解析アクションで動的な値として使いやすくします。
Schema は長いので折りたたんでおきます。
{
"type": "array",
"items": {
"type": "object",
"properties": {
"列の種類": {
"type": "string"
},
"FieldTypeKind": {
"type": "integer"
},
"__metadata.type": {
"type": "string"
}
},
"required": [
"列の種類",
"FieldTypeKind",
"__metadata.type"
]
}
}
列の作成
Excel ファイルのテーブルを1行ずつ確認し、列を作成します。
コントロール > それぞれに適用する アクションを配置します。
それぞれに適用するアクションの中の + マークをクリックして、データ操作 > アレイのフィルター処理アクションを配置します。このアクションでは それぞれに適用するアクションで取得した Excel ファイルのテーブルのデータを見て、その行の列の種類の値で、JSON の解析アクションの中に入っているメタデータを絞り込みます。
例えば Excel ファイルの1つ目のデータの場合、列の種類が「1行テキスト」です。
そのため、同じく列の種類が「1行テキスト」のメタデータが取得されます。
このメタデータを利用して、リストに列を追加していきます。列の作成には SharePoint > SharePoint に HTTP 要求を送信しますアクションを利用します。列の追加だけならこのアクションを1回追加すれば良いです。
しかし、列作成時に列名は内部名として自動で登録されます。この時に列名が日本語だとエンコードされ、分かりにくい内部名になってしまいます。
これを避けるため、半角英数字で列名を登録 → 日本語の列名に直すという工程を踏みます。そのため、SharePoint に HTTP 要求を送信しますアクションを2回使うことになります。
最初に半角英数字で列名を登録するための SharePoint で HTTP 要求を送信しますアクションです。
列作成時に定義できる要素は以下の Microsoft Learn に記載されています。
URI は以下の通りです。
_api/web/lists/GetByTitle('@{variables('ListName')}')/fields
GetByTitle にはリスト名を入れます。リスト名は変数「ListName」にあるので、そちらを入れています。
ヘッダーは以下の通りです。
{
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose"
}
ボディはスクリーンショットと以下の Microsoft Learn の「リストのカスタム フィールドを作成する方法」を参照してください。
式の部分だけコードブロックで載せます。
type の式は以下の通りです。これはアレイのフィルター処理で取得したメタデータから First 関数で最初の項目だけ取得して、__metadata.type の値だけを取得しています。
first(body('アレイのフィルター処理'))?['__metadata.type']
FieldTypeKind の式は以下の通りです。
int(
first(body('アレイのフィルター処理'))?['FieldTypeKind']
)
first 関数の部分は type と同様です。FieldTypeKind の値だけを取得しています。int はテキストを数値に変換する関数です。取得した値がテキストなので FieldTypeKind の型である数値に変換しています。
2回目の SharePoint に HTTP 要求を送信しますアクションです。ここで列名を半角英数字の内部名 → 日本語の表示名に変更します。
URI は以下の通りです。
_api/web/lists/GetByTitle('@{variables('ListName')}')/fields/GetByInternalNameOrTitle('@{items('それぞれに適用する')?['内部名']}')
ヘッダーは以下の通りです。
{
"IF-MATCH": "*",
"X-HTTP-Method": "MERGE",
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose"
}
ボディについてはスクリーンショットと以下の Microsoft Learn の「MERGE メゾットを使用してリストを更新する」を参考にしてください。
type の式はコードブロックで載せておきます。
first(body('アレイのフィルター処理'))?['__metadata.type']
以上で完成です。
リスト作成後の注意点
選択肢や日付と時刻など一部データ型には本稿の方法では設定できない項目がございます。これらについては手動での設定が必要です。ご注意ください。
列の表示について
フローの実行が完了しても、列が表示されない場合もあります。その際はタイトル列をクリックし、列の設定 > 節の表示 / 非表示 で列を表示させてください。
必要な列にチェックを入れて、適用をクリックすると列が表示されます。
選択肢について
選択肢は単一選択・複数選択ともに設定されていません。そのため、自分で手動入力する必要があります。
日付と時刻について
日付と時刻をこの方法で設定すると、デフォルトで「時間を含める」が はい になるようです。時間が不要の場合はトグルをクリックし、手動で いいえ に戻しましょう。
おわりに
本稿では Excel にあるデータを基に SharePoint Lists を自動生成する方法を紹介しました。
少々難しい部分もありますが、
- 開発環境と本番環境を分ける
- アプリやフローを別の部署に展開する
という時には作業がかなり楽になると思います。ぜひお試しください✨
ちなみに……こんな面倒なフローは組みたくない(´・ω・`)という私の同志はぜひ Dataverse を導入 しましょう。Dataverse ならソリューションで列定義も、テーブルの中に入っているデータも全部持っていけますからね!!! さらに部署ごとの権限管理も行レベルのセキュリティでできちゃうので、リストを分ける必要もないんですよー!!!
結局、課金が 1番ラク ですよ💛💛💛
それではごきげんよう(*'▽')























