PowerAutomate SharePoint リスト 取得

はじめに

SharePointリストのテナント間移行を行いたい人なんて少数かもしれませんが、この記事では以下のやり方も纏めてあります。

  • Power Automateを用いて特定のSPOリストからフィールド情報を取得する
  • Power Automateを用いてリストを作成する
  • Power Automateを用いて特定のリストにフィールドを追加する
  • Power Automateのアクションをコピペする(おまけ)

PnPとか使ってスクリプト書く方法もありますが、テナントによっては管理者に許可されていない場合もありますからね。

ざっくり構成

こんな感じで

  1. Tenant A(移行元)でリストのフィールド情報をPower Automateを利用して取得
  2. Tenant B(移行先)のPower Automateに 1. で取得した情報を設定
  3. Tenant Bにリストを作成

を行います。

手順2は手動ですね。

フローを作成する

リストの情報を取得する

フローの全体イメージはこんな感じです。

PowerAutomate SharePoint リスト 取得

こちらは移行元のテナント(Tenant A)で作成して実行します。

アクションを順にみていきましょう。

リストが存在するサイトのアドレスでは取得したいリストが存在するアドレスのリンクを設定します。

PowerAutomate SharePoint リスト 取得

リスト名では取得したいリストの表示名を設定します。

PowerAutomate SharePoint リスト 取得

SharePoint に HTTP 要求を送信しますで上記変数で設定した情報をもとにリストのフィールドを取得します。
今回の設定では、デフォルトフィールドは取得しないように省いています。
ユーザが作成したフィールドだけが欲しいですからね。

PowerAutomate SharePoint リスト 取得

もしすべてのフィールドを取得したければ、filterを外してください。

このアクションの出力結果として、以下のようなbodyが取得できます。

PowerAutomate SharePoint リスト 取得

欲しいのはd.resultsなので、結果を加工して作成に格納します。
この結果は配列で取得されるのでarray関数を利用しています。

PowerAutomate SharePoint リスト 取得

array(body('SharePoint_に_HTTP_要求を送信します')?['d']?['results'])

これで対象リストのフィールド情報が取得できました。

「作成」で得られた出力はこの後使いますので控えておいてください。

リストを作成してフィールドを作成する

フローの全体イメージはこんな感じです。

PowerAutomate SharePoint リスト 取得

こちらは移行先のテナント(Tenant B)で作成して実行します。

まずはリスト作成に必要な情報だけみていきましょう。

リストを作成するサイトのアドレスにはリストを作成したいサイトのアドレスを設定します。

PowerAutomate SharePoint リスト 取得

リスト名には作成したいリストの内部名(表示名にも利用します)を設定します。

PowerAutomate SharePoint リスト 取得

残り二つの変数は、フィールド作成の時に利用するものですので、後述します。

SharePoint に HTTP 要求を送信します(リストの作成)で先ほど設定した2つの変数をもとにリストを作成します。

PowerAutomate SharePoint リスト 取得

説明を変えたい場合は、"Description"を変更してください。

リストを作成している箇所は以上です。

続いて先ほど作成したリストに先ほど取得したフィールド情報をもとにフィールドを作成していきます。

ListFieldObjに先ほど移行元で取得したフィールド情報をコピペします。

PowerAutomate SharePoint リスト 取得

booleanは条件分岐のtrue or falseの判定に利用したいだけですので、trueとだけ設定しておきます。

PowerAutomate SharePoint リスト 取得

続いてリストのフィールド作成を実行していくわけですが、フィールド作成は1フィールドずつしか行えません(多分。知らんけど。)

試しにArray情報を渡してみたらObject情報を渡せ。とのエラーで怒られました。

よって先ほど設定したArray変数からObject単位で情報を取得してアクションを実行していこうと思います。

これを実現するためにApply to eachを利用しています。

まず最初のJSON の解析ではApply to eachのitems()つまり、1フィールドの情報に対して解析を行っています。

PowerAutomate SharePoint リスト 取得

ここは、フィールドの型などによってサンプルから生成したスキーマが異なり、そのまま利用するとエラーになってしまうので、地味にめんどくさかったですね。

続いて、JSON の解析(metadata)では__metadataの内容のうちtypeだけが欲しかったので、解析を行っています。
'body('JSON_の解析')?['__metadata']?['type']でもよかったかもですね。(試してはないです)

PowerAutomate SharePoint リスト 取得

いよいよフィールドの作成を行っていくのですが、フィールドの型が選択肢か否か。でPOSTする際のBodyが変わってきます。

今ブログを書いているときに思いましたが、型がSP.FieldChoiceどうか?で判断すればよかったかな?とは思いましたが、今回作成したフローでは選択肢が設定されているかどうか?で判断しています。

PowerAutomate SharePoint リスト 取得

empty(body('JSON_の解析')?['Choices'])選択肢が空であれば、Choicesを利用しません。

まずがChoicesを利用しない(Bodyに設定しない)パターンです。

SharePoint に HTTP 要求を送信します(フィールドの作成)では選択肢を作成しない場合のフィールドの作成を行っています。
リストは先ほど作成したリストを指定しています。

PowerAutomate SharePoint リスト 取得

続いてChoicesを利用する(Bodyに設定する)パターンです。

Choiceで得られた結果は以下のようになっています。

"Choices": {
    "__metadata": {
        "type": "Collection(Edm.String)"
    },
    "results": [
        "選択肢1",
        "選択肢2",
        "選択肢3"
    ]
}

このうち欲しいのはresultsの結果ですので、JSON の解析(Choices)で抜け出せるようにしてあげます。

PowerAutomate SharePoint リスト 取得

SharePoint に HTTP 要求を送信します(フィールドの作成(Choicesあり))では選択肢を作成する場合のフィールドの作成を行っています。
選択肢には先ほどの解析で得られた選択肢を設定します。

リストは先ほど作成したリストを指定しています。

PowerAutomate SharePoint リスト 取得

以上でTenant A(移行元)からTenant B(移行先)へSPOリストを移行させる仕組みを作成することができました。

とはいえ色々な型やフィールドの設定などは未検証なため正しく動かない部分があるかもです。

もしそのような場合は、どのようなフィールド設定がエラーとなったか?エラー内容はどのようなものか?を教えていただけると助かります。

フローコピペ用コード

リスト情報を取得する

リストが存在するサイトのアドレス

リスト名

SharePoint に HTTP 要求を送信します

作成

リストを作成してフィールドを作成する

リストを作成するサイトのアドレス

リスト名

ListFieldObj

boolean

SharePoint に HTTP 要求を送信します(リストの作成)

Apply to each

なにこのコード?どうやって使うの?

いずれかのコードをクリップボードにコピーした状態でフローを開いて、

「自分のクリップボード > Ctrl + V」をすると、アクションが選択肢に追加されますので、それを選択すると、フロー内にアクションが追加されます。
便利

PowerAutomate SharePoint リスト 取得

ここには自分のテナント内でコピーしたアクションであればCtrl + Vをしなくとも、自動でアクションが溜まっていきます。
もちろんログアウト行ったりするとリセットされます。

PowerAutomate SharePoint リスト 取得

ただこの機能、プレビューなだけあって「条件」アクション内や「スイッチ」アクション内などにはこの方法でアクションを追加することはできない。などの制限があるようです。
残念

おわりに

短時間で作ったフローなのでちょっと作り雑だったり検証不足だったりする箇所があります。
お気づきの点があればご指摘いただければー

それでは

Power Automate SharePoint リスト取得の上限は?

既定のオプションを使用していて、サイト アドレスとリストまたはライブラリ名を指定するだけの場合、Power Automateリストまたはライブラリから 100 個のアイテムを返します。 大規模なリストで作業している場合は、この制限をリスト ビューのしきい値制限である 5,000 まで増やすことができます。

SharePoint リスト どこにある?

SharePoint Online サイトでのリスト作成 SharePoint Online のサイトの左メニューから「ホーム」を選択し、上部に表れる「+新規」をクリックします。 そこから「リスト」を選択すると、リストの新規作成画面に移行できます。 リストの名前と説明を記入し、作成ボタンをクリックすると完了です。

Powerautomateの改ページしきい値は?

改ページ(Pagenation)をオンにしないと、しきい値を256より大きい数値にしても256行以上のデータを取得することはできません。

SharePointのリスト数上限は?

リストには最大 3,000 万個のアイテムを含めることができ、ライブラリには最大 3,000 万個のファイルとフォルダーを含めることができます。 リスト、ライブラリ、またはフォルダーに 100,000 を超えるアイテムが含まれている場合、リスト、ライブラリ、またはフォルダーの権限の継承を解除することはできません。