SharePoint リストの個人列に入っている値を Power Automate のクラウドフローからクリアする(値を消す)方法を、自分が必要になるたびに調べているので、重い腰を上げてメモを残しておこうと思います。
この個人列は厄介で、値をクリアするには、SharePoint コネクタの「項目の更新」アクションでは行うことができず、「SharePoint に HTTP 要求を送信します」アクションを利用する方法があります。
そのため、事前に知っておく知識がいくつか必要となり、ややこしいわけです。
アイテムのタイプと列の更新に必要な内部名を調べる
SharePoint リストの列の値を「SharePoint に HTTP 要求を送信します」アクションで更新するには、アイテムのタイプと、更新時に指定する列の内部名を知っておく必要があります。列の内部名と言えば、リストの設定から調べる方法が良く知られていますが、今回のような場合は、ちょっと別の方法で調べる必要があります。
さて、実際に調べていきます。調べるためにも Power Automate を利用し、「SharePoint に HTTP 要求を送信します」アクションで次のように設定して実行します。
設定項目 | 設定値 |
---|---|
サイトのアドレス | 値を更新するリストがあるサイトの URL |
方法 | GET |
URI | _api/web/lists/GetByTitle(‘<リストの名前>’)/items(<アイテムの ID>) |
すると、次のような結果が返ってくるので、結果から必要な値を探します。
まずは、「__metadata」の「type」です。こちらは「SP.Data.ListListItem」のような値になります。次に更新する列の更新用内部名ですが、今回は「個人」という名前で作成された列の場合、「OData__x500b__x4eba_Id」となっていました。リストの設定から調べていた内部名が「_x500b__x4eba_」でしたので、その前後に「OData_」「Id」が追加されたものになっています。
単一値の個人列の値をクリアする
さて、さっそく値をクリアしていきましょう。まず、ひとつだけユーザーを指定できる個人列では、次のようにアクションを設定します。
設定項目 | 設定値 |
---|---|
サイトのアドレス | 値を更新するリストがあるサイトの URL |
方法 | POST |
URI | _api/web/lists/GetByTitle(‘<リストの名前>’)/items(<アイテムの ID>) |
ヘッダー | content-type: application/json;odata=verbose If-Match: * X-HTTP-Method: MERGE |
ボディ | 以下の通り |
{ '__metadata': { 'type': 'アイテムのタイプ' }, '<更新用内部名>': null }
列の指定値として、null を指定します。
複数値の個人列の値をクリアする
複数のユーザーを指定できる個人列では、次のようにアクションを設定します。
設定項目 | 設定値 |
---|---|
サイトのアドレス | 値を更新するリストがあるサイトの URL |
方法 | POST |
URI | _api/web/lists/GetByTitle(‘<リストの名前>’)/items(<アイテムの ID>) |
ヘッダー | content-type: application/json;odata=verbose If-Match: * X-HTTP-Method: MERGE |
ボディ | 以下の通り |
{ '__metadata': { 'type': 'アイテムのタイプ' }, '<更新用内部名>': {'results': [0]} }
列の指定値として、{‘results’: [0]} を指定します。
さいごに
SharePoint リストの個人列の値をクリアする方法について紹介しました。ちょっとややこしいですが、必要になるために調べていましたので、同じような方がいましたら参考にしてもらえると嬉しいです。