#PowerAutomate SharePoint アクション利用時に OneDrive 操作でエラーが出たので回避してみた（2023年10月時点の話題）

長いタイトルどおりです。

2023年10月時点で当方が遭遇したエラーになります。手元でアクセス可能な複数のテナントで検証した結果、当方では 2つのテナントで発生しました。つまり、再現性が取れてしまった・・・ので、同様のエラーでお困りの方がいるかもしれないし、未来の自分が対策をすっかり忘れて困らないよう記事にしておきます。

# 経緯
2023年10月のとある日、Power Automate で SharePoint Online のアクションを利用して OneDrive for Business を操作するフローを作っていたんですよ。ある程度カタチになったので念のため保存を実行したんですが、エラーになってフローを保存できないテナントに当たったんですよね・・・。

## OneDrive のアクションを利用しない理由
OneDrive for Business ではアクションとして提供されていない操作をしたい場合、SharePoint Online のアクションを利用して要件を満たせる場面があるんですよ。例えば、下記の記事を参照ください。

https://qiita.com/yamad365/items/b7a9fd865b905eb9165a

## 発生したエラー
フローを保存するボタンをクリックすると、こんな感じで保存できませんでした。

![スクリーンショット 2023-10-21 003452.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/5237f8b8-2308-58b3-9983-affe69d41a07.png)

［サイトのアドレス］に OneDrive for Business の URL をカスタム項目の追加で設定し、［一覧またはライブラリ］の項目は ”Documents” で SharePoint Online アクション経由で OneDrive for Business が操作できるのですが、エラーになっている・・・という図です。困る😖

エラーメッセージをコピペしておきます。

> フローの保存がコード 'DynamicOperationRequestClientFailure' およびメッセージ 'The dynamic operation request to API 'sharepointonline' operation 'GetTable' failed with status code 'NotFound'. This may indicate invalid input parameters. Error response: { "status": 404, "message": "List not found\r\nclientRequestId: ～略～\r\nserviceRequestId: ～略～" }' で失敗しました。

SharePoint Online の API が失敗してるよ、NotFound （見つからない）よ、って言われています。”入力パラメータが無効”って、これで問題無く保存できて実行もできるテナントもあるんですが・・・

# 前提となる知識（あるいは補足）
回避方法の前に、前提となる知識を補足しておきます。各サービスの名前が長くてそろそろメンドクサイので、これ以降は OneDrive for Business → ODfB、SharePoint Online → SPO と略す場合があります。

## OneDrive for Business と SharePoint Online の関係性
詳細は割愛しますが ODfB と SPO は血族なのです。間違いを恐れずに端的に表現すると「個人用 SPO から進化してきたのが ODfB」です。

皆さんの ODfB をブラウザーで表示して URL をよく確認してみましょう。下記のような状態になっているハズです。テナント名や User Principal Name（UPN）については適宜検索してください。

```
https：//＜tenant name＞-my.sharepoint.com/personal/＜user principal name＞ 
```

https://learn.microsoft.com/ja-jp/sharepoint/list-onedrive-urls?WT.mc_id=DX-MVP-5004053

”my.sharepoint.com” ってなってますよね。血族の証明です。

## ODfB のサイトコンテンツを表示する方法
ODfB が SPO の血族である、というコトは、ODfB でもサイトコンテンツを確認できます。
サイトコンテンツの URL は下記になります。

:::note info
/_layouts/15/viewlsts.aspx
:::

つまり、前述の ODfB の URL へサイトコンテンツの情報を付与してアクセスすればよい、ですね。

```
https：//＜tenant name＞-my.sharepoint.com/personal/＜user principal name＞/_layouts/15/viewlsts.aspx
```

実際にアクセスしてみると、こんな感じの画面になると思います。画像上では Lists を 2つ利用している様子も確認できます。下画面でコンテンツの一覧で末尾にある「ドキュメント」が、そのユーザーが利用する ODfB になります。

![スクリーンショット 2023-10-21 004246.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/26954673-08f8-038b-d52c-eb61e762ed56.png)

ちなみに「ドキュメント」を単純にクリックすると、通常はブラウザー上の ODfB 画面へ強制遷移します。うまく”SPO ぽさ”が隠されているので、知らないと「ODfB が SPO の血族」というのに気づけない仕様になっている感じがしますね。

## OneDrive for Business の設定を確認する方法
単純に「ドキュメント」をクリックしても設定画面には遷移できません。三点リーダー → ［設定］をクリックします。

![スクリーンショット 2023-10-21 004456.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/c4714ab5-7bf7-a3b8-5a74-557f44322cf4.png)

ドキュメントの設定画面が表示されます。

![スクリーンショット 2023-10-21 004859.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/f45c81cb-8b06-bdd8-aa1a-528aa7a83b4a.png)

ここで ODfB の URL が確認できます。”Documents” で正解だよね？というのもみてとれます。

# SharePoint Online アクションで OneDrive for Business を操作する関係性
あらためて Power Automate の SPO アクションでも ODfB が操作できる理由が何となく伝わったでしょうか？

SPO アクションにある「新しいフォルダーの作成」を利用する例で解説します。

![スクリーンショット 2023-10-20 233946.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/3d7b480d-9b54-07fb-e985-3513937fe81a.png)

下図のようにアクションを設定すると、ODfB 直下に”folder01”というフォルダーが作成されます。

![スクリーンショット 2023-10-20 234454.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/0b7f6d95-b64a-5a2a-4074-8038f8bb234b.png)

サイトのアドレス ＝ ODfB の URL
一覧またはライブラリ ＝ Documents

これで問題無いハズなんですよねー。上図のスクリーンショットを取得した環境・テナントでは問題無いんです。

なぜかエラーになってフローを保存できないテナントがあるんですよ・・・解せぬ🤔

# 遭遇したエラーの回避方法
SPO アクションで ”Documents” を指定して見つからないというエラーなので、それ以外の指定方法で ODfB の場所をアクションへ設定して回避すれば良かろうなのです。

他の方法とは？

前述の ODfB のドキュメント設定画面へ遷移して URL の末尾を取得します。

![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/a8bcc09a-89c2-c48e-afbf-66212df25657.png)

ODfB の URL で ”？” から続くパラメーターを取得してください。そのなかに ”Lists＝～” という箇所があります。

:::note info
?List=［この値］
:::

”？List =” に続く ID ぽいパラメーターのみをコピーして、フローに指定して保存しましょう。

![スクリーンショット 2023-10-21 005346.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/cb61b547-607a-a844-a39f-9186b53a6e8f.png)

無事、保存できました。やったね！
ODfB の内部IDを指定している、というイメージです。

# まとめ
繰り返しになりますが 2023年10月時点で発生している現象と回避方法になります。しかも「この問題が発生するテナントもある」（理由までは追ってない）という状況で、全テナントで発生するワケじゃぁないです。エラー回避できたので、原因調査までしてないしする気も現状無い😇ｗ


- ODfB は SPO の血族
    - つまり SPO の仕様を把握していると ODfB でも活用できる場面が多々ある
    - Power Automate で SPO アクションから ODfB を操作できる理由でもあります
- SPO で確認できるサイトコレクション画面等は ODfB でも表示可能
    - 設定画面で誤って意図しない変更などをしないよう注意してください
    - 誤操作などで何か壊してしまっても当方は一切の責任が取れません
    - 裏の設定画面と思ってアプローチしたほうが良いかもです

SPO や ODfB の仕様が変更にならない限り ”Documents” でも URL から取得したパラメーターでも、どちらでも問題無く動作するハズです。しかし、わざわざパラメーターでアクションの設定するよりも”Documents”となっていたほうが可読性は高いです。作成している環境とは別の場所へ移植して、作成者とは別ユーザーで動作させる場合も”Documents”のほうが変更する箇所が減りますし、セオリーというか定石どおり、はひとつの正義だと思います。

前提条件を知らない方からするとトリッキーな設定にみえるハズなので、フローのアクションにコメントで理由を記載しておくと良いかもしれません。そのコメントで未来の自分が助かる可能性もありますよね。

それでは、皆さま。素晴らしい Power Platform Life を！