アイテム数が多いので困っています。
Power Automateで簡単にできます。
リストを作成したことが無い人は、電子書籍「SharePoint Lists実践入門」をご一読下さい。
本の紹介
はじめてのリスト作成の電子書籍です。リストの基本〜自動化までを手順通りに作業しながら覚えることができます。リストを使うことで情報共有、業務効率UPに繋がります。関連書籍の「SharePoint Lists活用術」と合わせてご一読下さい。
この記事では、SharePointリスト、Microsoft ListsをPower Automateを使って他のリストへコピーする方法を説明します。
本記事の内容
- コピーできない列の種類
- 作成手順
この記事を書いた人
この記事を書いている私は、手順通りにMicrosoft365のアプリケーションを覚えることができる電子書籍をKindle出版しています。
またYouTubeでは詳しく説明しています。そちらもご視聴下さい。
コピーできない列の種類
Power Automateのトリガーとアクション4つで通常は、コピーできますが、動的なコンテンツを追加してもコピーできない列の種類があります。
それは、複数選択肢とハイパーリンク(代替テキスト)です。(IDもできません。)
下の画像は、1行テキスト、ユーザー、選択肢(複数)、金額、ハイパーリンクの案件リストです。
枠で囲ってある「複数選択肢」は、選択肢が複数表示していて、「ハイパーリンク」は、URLがリンク(代替テキスト)になっています。
Power Automateのアクション「項目の作成」にコピー元のリストの動的なコンテンツを追加すると複数選択肢は、エラーになり、ハイパーリンクは、URLになってしまいます。
アイテムの数が少ない場合は、「グリッドビューでの編集」でExcelのセルを範囲指定してコピーして貼り付けるだけでできますが、アイテムの数が多いと時間がかかります。
できないことは、ありませんが、スクロールで一番下のアイテムまで表示させた後に、「グリッドビューでの編集」を選択してコピーできます。
そうしないと100アイテムしか選択できません。(貼り付けには、読み込みに時間がかかります。)
注意ポイント
自動化することがわかっているリストを作成する時は、英語の列名にして後から日本語に変更して下さい。
内部名がODataになるので、自動化する時にできないことがあります。(ハイパーリンクの列名指定が英語のみです。)
作成手順
作成の順番
- SharePointリストをコピーして作成
- Power Automateでサイト間コピーのフロー作成
SharePointリストをコピーして作成
SharePointリストは、自分が所属しているサイトのリストを「既存のリスト」で簡単にコピーすることができます。
SharePointリストのコピー
step
1コピー先にリストを作成
コピー先のSharePointサイトを開き、リストを作成します。
リストの列がコピーされるだけでアイテムはコピーされません。
①SharePointサイトのホームの「+新規」をクリック。
②「既存のリストから」をクリック。
step
2コピー元のサイト、リストを選択
自分がメンバーになっているチームまたはサイトとリストを選択します。
この時、Microsoft Listsのマイリストを選ぶことはできません。
③チームまたはサイトを選択し、リストを選択、「次へ」をクリック。
step
3リスト名を確認し、作成
④リスト名を確認し、「作成」をクリック。
step
4リストが作成
⑤リストが作成。
※アイテムは、コピーされません。
アイテム数が少なければ、「グリッドビューでの編集」で貼り付けるだけで完全にコピーすることができますが、アイテムが多いと面倒だったり、抜けてしまうこともあります。
Power Automateでサイト間コピーのフロー作成
簡単なフローであれば、トリガーが「手動でフローをトリガーします」でその後、3つのアクションで、コピー(項目の作成)することができます。
3つのアクション
- 複数の項目の取得
- Apply to each(ループ処理)
- 項目の作成
このアクションに複数選択肢は、配列にする為に「データ操作:選択」、ハイパーリンクの代替テキスト取得に「SharePoint:SharePointにHTTP要求を送信します」などを追加します。
Power Automateが初めてでもできるように見ている画面のままの画像で説明します。
Power Automateサイト間コピーのフロー作成
step
1インスタントクラウドフロー
リストのアイテムをコピー(項目の作成)をするので、手動で実行できる、インスタントクラウドフローでフローを作成します。
①Power Automateの「+作成」→「インスタンドクラウドフロー」をクリック。
step
2フロー名とトリガーを選択
フロー名とトリガーを選択します。
②フロー名に『サイト間リストコピー』と入力。
③トリガーを「手動でフローをトリガーします」を選択。
④「作成」をクリック。
step
3コピー元のリストを取得
最初にコピー元のリストを取得します。初期値は、100アイテムなので、設定で改ページ、しきい値に取得するアイテム以上の数値を入れることを忘れないようにして下さい。
⑤「+新しいステップ」→SharePointの「複数の項目の取得」を追加。
⑥サイトのアドレスに「コピー元のサイトアドレス」、リスト名を設定。
⑦「詳細オプションを表示する」の上から順に取得に取得するアイテムを入力。(最大5000)
⑧右上の三点リーダー「・・・」→「設定」→改ページ「オン」、しきい値に『5000』と入力、「完了」をクリック。
step
4ループ処理を追加
次にループ処理を追加します。5000アイテムあれば、5000回繰り返しますが、10分でタイムアウトすることがあるので、フローが実行されているか経過時間を見る必要があります。
タイムアウトにならずに分割してフローを実行するなら前のコピー元のリストの取得するアイテムの取得(フィルタークエリ)でID '1' ge and ID '1000' le(ID1以上ID1000以下)と入れるといいでしょう。
⑨「+新しいステップ」→コントロールの「Apply to each」を追加。
⑩以前の手前から出力を選択に[複数の項目の取得]の「value]を追加。
step
5データ操作の選択を追加
次に複数選択肢の列を配列にします。式も使いますが、コピペでできます。
⑪Apply to eachの中の「アクションの追加」→データ操作の「選択」を追加。
⑫開始に選択肢の「動的なコンテンツ」を追加。
※選択肢は、◯◯項目と◯◯valueがありますが、◯◯だけの動的なコンテンツを選択します。
⑬マップの[キーの入力]に『Value』を入力、[値の入力]に式で下記を入力し、「OK」をクリック。
item()?['Value']
step
6項目の作成を追加
次にコピー先(移動先)のリストにハイパーリンク以外の1行テキスト、ユーザー、複数選択肢、金額を追加します。
動的なコンテンツを追加するだけです。複数選択肢は、出力を追加して下さい。
⑭選択の下の「アクションの追加」→SharePointの「項目の作成」を追加。
⑮サイトのアドレスに「コピー先のサイトアドレス」、リスト名を設定。
⑯列名と同じ動的なコンテンツを追加。
⑰ユーザー(個人)は、「カスタム値」で動的なコンテンツを追加。
⑱複数選択肢は、右側にある「T」(アレイ全体の入力に切り替える)を選択し、「出力」を追加。
step
7SharePointにHTTP要求を送信しますを追加
次に「SharePointにHTTP要求を送信します」を使って代替テキストを取得します。
⑲項目の作成の下の「アクションの追加」→SharePointの「SharePointにHTTP要求を送信します」を追加。
⑳サイトのアドレスに「コピー元のサイトアドレス」、方法に「GET」、URIは、下記のように入力。
※コピー元のリスト名とIDは、複数の項目の取得のIDを選択。
_api/web/lists/getbytitle('案件リスト')/items(ID)
step
8データ操作の作成を追加
次にデータ操作の作成を使って、ハイパーリンクの代替テキストを取得します。
本当は、2つハイパーリンクがあるのでデータ操作の作成を2つ使っていますが、説明が難しくなるので、1つで説明して最後のフロー全体で2つを表示します。
㉑SharePointにHTTP要求を送信しますの下の「アクションの追加」→データ操作の「作成」を追加。
㉒入力に式で下記を入力。
※列名は、スペースなしの英語の必要があります。もし、英語じゃない場合は、内部名ODataを入れて下さい。
body('SharePoint_に_HTTP_要求を送信します')['d']['列名']['Description']
step
9SharePointにHTTP要求を送信しますを追加
最後にデータ操作の作成で取得したハイパーリンクの代替テキストを出力して項目を更新(PATCH置き換え)します。
㉓データ操作の作成の下の「アクションの追加」→SharePointの「SharePointにHTTP要求を送信します」を追加。
㉔サイトのアドレスに「コピー先のサイトアドレス」、方法に「PATCH」、URIは、下記のように入力。
※コピー元のリスト名とIDは、複数の項目の取得のIDを選択。
_api/web/lists/getbytitle('案件リスト')/items(ID)
㉕ヘッダーの「T」を選択して、下記を入力。
{
"content-type": "application/json;odata=verbose",
"IF-MATCH": "*"
}
㉖ボディーに下記を入力。
※LastDayは、英語の列名。
※出力は、作成の動的なコンテンツ。
※ハイパーリンクの列は、複数の項目の取得から列名を選択。
※List12は、リストのURLのLists/◯◯◯/AllItems.aspxの◯◯の部分。
{
"LastDay":
{
"__metadata": {
"type": "SP.FieldUrlValue"
},
"Description": "出力",
"Url": "ハイパーリンクの列(動的なコンテンツ)"
},
"__metadata": { "type": "SP.Data.List12ListItem" }
}
㉗フローが完成したら「保存」をクリック。
フロー全体
フロー実行
手動トリガーは、テストの手動、フローの実行ボタン、スマートフォンアプリのPower Automateから実行できます。
リストのコピーなので、テストでフローを実行します。
Power Automateサイト間コピーのフローテスト
step
1テストを選択
フローを保存したらテストをします。
①フローの編集画面の右上にある「テスト」をクリック。
step
2手動を選択
手動を選択します。
②手動を選択し、「テスト」をクリック。
step
3アプリの許可
最初のみ、アプリのアクセス許可がでるので、「続行」を選択します。
③「続行」をクリック。
step
4フローの実行
準備ができたらフローを実行します。
④「フローの実行」をクリック。
step
5完了
完了をクリックするとテストフローが成功したかわかります。
⑤「完了」をクリック。
step
6フロー成功
トリガーとアクションにチェックが入っていればフローは、成功です。
アイテム数が多いとループ処理に時間がかかりタイムアウトになることもあります。
⑥トリガー、アクションを展開して確認。
step
7コピー先リスト確認
完全にコピーされていることを確認します。
※更新者、更新日時、登録者、登録日時は、フローを作成、実行したユーザーになります。
⑦コピー先のリストを開き確認。
まとめ
今回は、SharePointリストをサイト間で完全にコピーする方法を説明しました。
アイテム数少なければ、グリッドビューでの編集からコピペが最速ですが、アイテム数が多い場合は、Power Automateで自動化してみて下さい。
複数選択肢は、「データ操作の選択」を使って配列にし、ハイパーリンクの代替テキストは、「SharePointにHTTP要求を送信します」、「データ操作の作成」を使って取得します。
初心者でも見ながらできると思うので、フローを作成してコピーをしたら、このフローはオフにして他のリストをコピーする時にも使ってみて下さい。
無料で読む場合は、初回30日無料のKindle unlimitedに申込みをすれば無料で読むことができます。
本の紹介
はじめて自動化する入門編の電子書籍です。プログラミングの知識が無くても、文字を組み合わせるように自動化ツールが作成できるアプリケーションです。もちろん、無料アプリケーションです。はじめて自動化したい人は、本書を見ながら個人で使える11個の自動化をすることができます。
YouTubeリスト完全コピーで説明した式、JSON
コピーするリストのJSON取得
_api/web/lists/getbytitle('CompleteCopy')/items(@{items('Apply_to_each')?['ID']})
ファイル識別子
slice(body('コピーするリストのJSON取得')['d']['Image'],indexOf(body('コピーするリストのJSON取得')['d']['Image'],'/SiteAssets'),sub(nthindexOf(body('コピーするリストのJSON取得')['d']['Image'],',',2),1))
ETag
toLower(slice(outputs('ファイルのコピー')?['body/ETag'],2,lastIndexOf(outputs('ファイルのコピー')?['body/ETag'],'}')))
コピー先のリストのアイテムを更新
{
"__metadata": {
"type": "SP.Data.CompleteCopyListItem"
},
"Location": "@{replace(body('コピーするリストのJSON取得')['d']['Location'], '"', '\"')}",
"Image":"@{variables('image')}",
"Hyperlink": {
"__metadata": {
"type": "SP.FieldUrlValue"
},
"Description": "@{body('コピーするリストのJSON取得')['d']['Hyperlink']['Description']}",
"Url": "@{body('コピーするリストのJSON取得')['d']['Hyperlink']['Url']}"
},
"MultipleChoice": {
"__metadata": {
"type": "Collection(Edm.String)"
},
"results":@{body('コピーするリストのJSON取得')['d']['MultipleChoice']['results']}
}
}