1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Power Automate でSharePoint Listsの選択肢型の列を追加する方法

Posted at

やりたいこと

表題の通りですが、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 指定したデータをサーバーから削除するために使用されます
今回は新しい列を追加するのでPOSTを選択したわけですね。内容が少し難しいですが、今回は読み飛ばしてしまっても大丈夫です。

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つのままでいきます。

実行

これですべてのパラメータの設定が完了しました。私の場合の設定項目はこんなかんじ。

image.png

ではテストで実行してみましょう。

image.png

成功しました!Listsのほうはどうなっているかというと・・・

image.png

非表示になっている列の中に「ここに追加する列の表示名を入力します!!!」という名前の列がありますね!
ちなみにこれ、もう一回実行したら同じ表示名の列が追加されるのかしら? エラーになるのかしら? と疑問に思ったのでもう一回実行してみます。

image.png

2回目も成功しましたね。

Listsの詳細設定画面でも、同じ表示名の列ができているのを確認できました。列の内部名は自動で変えてくれるみたいですね。

が!!!
Listsのレコード一覧画面でおなじ表示名の列を表示しようとしたところ、1列分しか表示されていません!!挙動がおかしなことになってしまってますね。

image.png

既に表示している列の名前を「ここに追加する列の表示名を入力します!!!1」に変更したところ、2つとも列が表示できるようになりました。

image.png

SharePoint に HTTP要求を送信するアクションで列を追加する場合は、表示名を重複させないように注意して実行する必要がありますね。

SharePoint ListsはPower Automateでフローを作るうえでよく自動化対象となるツールですので、こういったListsの仕様も把握しておくとよいですね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?