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 リストの個人列の値をクリアする方法について紹介しました。ちょっとややこしいですが、必要になるために調べていましたので、同じような方がいましたら参考にしてもらえると嬉しいです。