やりたいこと
表題の通りですが、SharePointListsへ選択肢型の列を追加する処理をPower Automateで自動化したい、と同僚に相談されたので実行方法をご共有します。それいつ使うん?
実装
Power AutomateのSharepointのアクションには「Listsに列を追加する」という項目はありません。そりゃそうか!
と、いうわけで、「SharePointにHTTP要求を送信します」というアクションを使用します。
やりたい処理を行えるアクションがない場合は、
①他の処理を組み合わせて間接的に実現する
②「〇〇にHTTPを~」というような、「HTTP」と記載のあるアクションで実現する
上記2つの方針を検討しましょう。
Teamsには「Microsoft Graph HTTP 要求を送信する」、
Outlookには「HTTP 要求を送信します」というアクションがあります。
今回は②のほうが良さそうなのでこちらで行きます。
「SharePoint に HTTP要求を送信します」アクションを追加したら、設定しないといけない項目(パラメータ)がたくさん出てきますね。
1. サイトのアドレス
こちらにはどのSharePointサイトにあるListsか?を指定します。ドロップダウンを選択すると選択できるSharePointサイトが表示されるので、目的のListsがあるサイトを選択しましょう。
私の場合は「【All Blue】技術 - 検証開発用プライベートチャネル」です。
2. 方法
「POST」を選択してください。「方法」と書いてありますがプログラミング界隈では「メソッド」といいます。日本語化されて余計わかりづらくなっているのはご愛嬌。メソッド(方法)というのは、HTTP要求の送信先(サーバー)に対してどんな操作をしてほしいのか?を指定するものです。
メソッド | 説明 |
---|---|
GET | サーバーからデータを取得するための要求です |
POST | サーバーにデータを送信して、新しいリソースを作成したり、既存のプロセスを実行するために使用されます |
PATCH | 既存のリソースに対して、部分的な変更や更新を行うために使用されます |
PUT | 指定したリソースを、リクエスト本文に含まれる新しい内容で「完全に置き換える」ために使用されます |
DELETE | 指定したデータをサーバーから削除するために使用されます |
3.URI
「Uniform Resource Identifier」のことで、
インターネット上のリソース(ウェブページやファイルなど)を一意に識別するための文字列です。
Sharepointサイトまでは指定しましたが、SharePointサイトの何に対してHTTP要求を送信するのか?までは指定していませんので、SharePoint サイトを指定しないといけません。
以下の文字列を入力しましょう。
_api/web/lists/getbytitle('サイトの名前')/fields
「サイトの名前」のところに選択肢型の列を追加したいSharePointサイトの名前を記入します。
シングルクォート「''」は消さないでください。
私の場合は「test」というSharePointサイトを作っていて、ここに追加したいので「site」という文字列を記入しました。
_api/web/lists/getbytitle('test')/fields
4. ヘッダー(Header)
HTTPヘッダーというものですね。HTTPヘッダーとは、クライアント(この場合Power Automate)とサーバー(この場合SharePoint)の間でデータをやり取りする際に、追加の情報を提供するためのデータです。Power AutomateでHTTP要求を送信する際、適切なヘッダーを設定することで、リクエストの内容を明確にし、サーバーに正しく処理させる ことができます。今回は、
Accept
Content-Type
この二つの追加情報をサーバーに送りますので、以下の文字列を入力しましょう。
Accept
: application/json;odata=verbose
Contat-Type
: application/json;odata=verbose
5. ボディ(Body)
{
"__metadata": { "type": "SP.FieldChoice" },
"Title": "ここに追加する列の表示名を入力します!!",
"FieldTypeKind": 6,
"Required": false,
"EnforceUniqueValues": false,
"Choices": {
"results": [
"選択肢1を入力します!",
"選択肢2を入力します!",
"選択肢3を入力します!"
]
}
}
"Title"の "ここに追加する列の表示名を入力します!!"の部分に列の表示名を、
"results"の"選択肢1を入力します!"、"選択肢2を入力します!"、"選択肢3を入力します!"に選択肢として追加したい選択肢のテキストを入力します。
ちなみに、4つ以上の選択肢を追加したい場合は、"選択肢3を入力します"のあとにカンマ「,」をつけてから選択肢4の値を入力して、ダブルクォーテーションで囲みましょう。
選択肢1、2、3などは最後にカンマ「,」をつけ、最後の選択肢のみカンマ無しで作成します。
選択肢が5個の場合は5個目の選択肢のみ、10個の場合は10個目の選択肢だけカンマ無しで記載するわけですね。
{
"__metadata": { "type": "SP.FieldChoice" },
"Title": "ここに追加する列の表示名を入力します!!",
"FieldTypeKind": 6,
"Required": false,
"EnforceUniqueValues": false,
"Choices": {
"results": [
"選択肢1を入力します!",
"選択肢2を入力します!",
"選択肢3を入力します!",
"選択肢4を入力します!",
"選択肢5を入力します!"
]
}
}
こんなかんじ。選択肢が5個になったので選択肢3、4の値を囲っているダブルクォーテーション「""」の後ろにカンマ「,」をつけて、最後の選択肢5だけカンマ「,」をつけません。今回はテストなので選択肢は3つのままでいきます。
実行
これですべてのパラメータの設定が完了しました。私の場合の設定項目はこんなかんじ。
ではテストで実行してみましょう。
成功しました!Listsのほうはどうなっているかというと・・・
非表示になっている列の中に「ここに追加する列の表示名を入力します!!!」という名前の列がありますね!
ちなみにこれ、もう一回実行したら同じ表示名の列が追加されるのかしら? エラーになるのかしら? と疑問に思ったのでもう一回実行してみます。
2回目も成功しましたね。
Listsの詳細設定画面でも、同じ表示名の列ができているのを確認できました。列の内部名は自動で変えてくれるみたいですね。
が!!!
Listsのレコード一覧画面でおなじ表示名の列を表示しようとしたところ、1列分しか表示されていません!!挙動がおかしなことになってしまってますね。
既に表示している列の名前を「ここに追加する列の表示名を入力します!!!1」に変更したところ、2つとも列が表示できるようになりました。
SharePoint に HTTP要求を送信するアクションで列を追加する場合は、表示名を重複させないように注意して実行する必要がありますね。
SharePoint ListsはPower Automateでフローを作るうえでよく自動化対象となるツールですので、こういったListsの仕様も把握しておくとよいですね。