HTTP要求(REST)を使ってリストアイテムを追加する

[Microsoft 365の活用ネタのまとめに戻る](https://qiita.com/Keiji_otsubo/items/5ddec87d5f1fd4e9f4af)


このページを参考に作ってみました。

https://www.annajhaveri.com/power-automate/rest-api-to-create-and-update-sharepoint-list-items-from-power-automate


はい、やっぱりエラーですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/0661e5e4-5776-0129-1d51-14dd288ded7e.png)


いつもの通り公式のヘルプは役に立ちませんね。人々を騙しているだけだな。

多くの場合、フローは認証エラーが原因で失敗します。このタイプのエラーが発生した場合、エラー メッセージに「Unauthorized」が含まれるか、エラー コード401または403が表示されます。通常、接続を更新することで認証エラーを修正できます。

https://learn.microsoft.com/en-us/power-automate/fix-flow-failures

やっとエラーがなくなった

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/c778a362-f461-1b2d-dee1-12ffe25efd5e.png)

ここでも問題でした。

```
"__metadata":{"type":"SP.Data.ListViewTestListItem"},
```
URLの方を使う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/487062f1-ec7c-1de4-ab49-3a27e40ebbbc.png)

これで調べてもSP.Data.ListViewTestListItemですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/449811f4-dc89-63bb-1906-5015ac389c3f.png)

こんなエラーになる

:::note alert
"status": 400,
  "message": "'SP.Data.承認申請ListViewTestItem' という名前の型はモデルで解決できません。モデルが使用可能な場合、各型名は有効な型に解決される必要があります。
:::

401エラーの原因は _ がなかったことみたいですね。しかし普通に考えたら404が正しいと思うけど。


```
api/web/lists/getbytitle('@{variables('ListView')}')/Items
```

ヘッダの　X-RequestForceAuthentication : True はなくてもOKでした。

X-RequestDigestもIf-Matchも不要ですね。

# 鬼門のユーザ型のフィールド

これを使ってみたら...


```Json
"Author" : "[{'Key': 'i:0#.f|membership|xxxxx@yyyyy.co.jp'}]"
```

相変わらず何をしたらいいのか分からないエラーメッセージ。嫌がらせにしか思えない


:::note alert
  "status": 400,
  "message": "ナビゲーション プロパティの値を読み取ろうとしているときに、NULL 以外の値を含む 'PrimitiveValue' ノードが見つかりましたが、'StartArray' ノード、'StartObject' ノード、または NULL 値を含む 'PrimitiveValue' ノードを読み取ることを想定していました。
:::

以下の形式にしたらエラーはでませんがやはり更新の時と同じで値は入ってません。
リターンコードは201なんだな。

```Json
"Author" : {"Key": "i:0#.f|membership|xxxxx@yyyyy.co.jp"}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/71ea4f22-3600-b10e-b847-3d8c4017d406.png)

公式のヘルプを見ても不思議なことにユーザ型のフィールドの例はないんですよね。意図的に使わせないようにしてそうな気がします。

その中で以下のサイトを見つけました。

+ [How to update People field using ‘Send an HTTP request to SharePoint’ in Power Automate?](https://pankajsurti.com/2020/10/12/how-to-update-people-field-using-send-an-http-request-to-sharepoint-in-power-automate/)

どうもサフィックスにIdをつけてユーザIdをセットするみたいな感じですね。

ユーザIdはメールアドレスから求められるみたい。

```
https://yyyyy.sharepoint.com/sites/sandbox_approval/_api/web/SiteUsers/getByEmail('xxxxx@yyyyyy.co.jp')?$select=Id
```
私の場合は数値の9でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/35a96f4f-edf5-06d3-5042-1d7ad3a2deb0.png)

```Json
{
        "__metadata":{"type":"SP.Data.ListViewTestListItem"},
        "Title":"020出生届",
        "AuthorizerId" : 9,
        "ApplicantId" : 9
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d6770f80-76e0-1b05-0651-a3be31681050.png)

グループの場合も...

```
https://yyyyy.sharepoint.com/sites/sandbox_approval/_api/web/sitegroups/GetByName('092Edit')?$select=Id
```

このグループは42でした

```Json
{
        "__metadata":{"type":"SP.Data.ListViewTestListItem"},
        "Title":"020出生届",
        "AuthorizerId" : 9,
        "ApplicantId" : 9,
        "ViewPermissionAfterApprovalId": 42
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/25b4bfc3-f102-15e0-538b-802ddd8da315.png)

実際に使うのはどうしようか？

全てをIdでできれば問題ないけど、Claimsを使っているところが他にもあるし、統一はできないとなるとgetしてIdを得て、Json形式でIdを抽出するロジックも必要になることを考えると今回は項目の作成アクションのままで我慢するしかないですね。　ちょっと使いにくい仕様です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/6625160d-a5c4-d47a-ab71-ab9333a9c4e0.png)