2022.08.13PowerApps│コレクションを使ってリストをまとめて更新する方法ツイートこんにちは、あんこ先生です。コレクションを使ってSharePointリストにまとめて登録や変更をさせたくありませんか?Patch関数でひとつずつ項目を指定していくのは骨が折れますよね。そんなとき、更新用レコードをまとめたコレクションをそのままSharePointリストに登録できたらって思います。これ、できますよ!そこで、今回はコレクションをそのまま使ってSharePointリストを更新する方法を解説します。この記事を読めば、データ更新の効率が激変しますよ。ForAll関数やPatch関数ってなに?って方は先にこちらの記事を読んでみてください。基本編2022.08.12コレクションを使ってリストをまとめて更新する方法Patch関数は、更新させるリストと更新用のレコードセットが一致していればテーブルを指定することができます。この特性を使って、更新用テーブルをコレクションに格納してまとめて処理させます。このやり方の利点は、いちいち更新するレコードの項目名を指定しなくてよいことです。多すぎても漏れていても正しく更新されないので、とても重宝します。今回は商品マスターから1日分の売上データをコレクションに格納して、それを売上累積リストに登録する流れで解説していきます。使用するデータは上図のとおり3種類です。商品マスターと売上累積テーブルはSharePointリストで作成しています。前述したとおり、Patch関数でテーブルを指定する場合、更新させるリストと更新用のレコードセットが一致する必要があります。正確には、更新させるリストに更新用のレコードセットがすべて含まれていれば通ります。更新用コレクションの項目がすべて売上累積リストに含まれていればよいわけです。コレクションを作成する際、ひとつずつ項目を指定していくのもナンセンスです。そこでDefaults関数を使って、売上累積リストの項目を全コピーします。Defaults関数は指定したデータソースの項目と初期値をテーブルで返します。次のように記述すれば、かんたんにコピーができます。ClearCollect(colTOrder,Defaults(lstTOrder));Clear(colTOrder);ポイントとして、2行目にClear関数を使っています。これはDefaults関数の戻り値であるテーブルに作成された空レコードを削除するためです。コレクションの項目名は内部名が適用されるため、日本語を使用している場合は少しめんどくさくなります。テキスト型の項目がある場合、最初のひとつがTitle列に変換されるので注意が必要です。商品マスターから数量を選べば、更新用コレクションに格納されるようにします。おおまかな作り方はこの記事のカート部分を参考にしてください。関連記事PowerApps│カートに保存後、まとめてタスクを登録する方法2022.06.28アイコン部分のOnSelectは次の通りです。))まず初めにその商品がコレクションに登録済みならレコードを削除します。その後、注文日と商品ID、数量をコレクションに格納します。これで事前準備は完了ですね。テーブルに新しいレコードを作成します。更新用テーブルをそのまま指定するだけで全レコードが作成されます。Patch(lstTOrder,colTOrder)※注文番号OrderNoはのちほど自動付番するため、現時点では空欄にしています。いかがですか?すごくシンプルで楽ですよね。この方法では既存レコードとの突き合せができず、実行した回数だけレコードが作成されます。重複作成を防ぐためには、先に次の記述を加えれば対応できます。PId=Rec.PId)))この記述で、既存レコードがあれば先に削除することができます。次に、商品IDや数量のみなど、転記する項目を指定してレコードを作成する方法を紹介します。仕組みは単純で、更新用コレクションから登録させたい項目のみ抽出するだけです。それはShowColumns関数で行うことができます。次の記述では商品IDと数量を登録するパターンになります。注文番号は頭にOをつけて5桁の数値とします。数値部分はリストのIDをそのまま流用します。レコード作成時にはIDは付番されていないため、Patch関数の戻り値をコレクションに落とし込みます。テーブルを指定したため、戻り値もテーブルです。そのため、ForAll関数で1レコードずつ注文番号を更新していきます。一連の流れの記述は次の通りです。));このコードで、既存レコード削除>新規レコード作成>注文番号付番といった処理がされます。テーブルで既存レコードを更新│コレクション→リストレコードの更新│全レコードレコードの更新については、既存レコードを指定する関係上、テーブルの指定はできません。そのため、ForAll関数を使って総当たりさせます。このやり方でも、項目の指定は不要なのでずいぶん楽に処理させることができます。今回は注文日と商品IDが一致すれば既存レコードであると判定させ、そのレコードの値を更新します。))With関数は使わず、直接LookUp関数で指定しても大丈夫です。既存レコードがなかった場合は何も処理されないので、登録する記述も追加した方がよいですね。次に、商品IDや数量のみなど、転記する項目を指定してレコードを更新する方法を紹介します。こちらもShowColumns関数を用いて、更新用コレクションから更新させたい項目のみ抽出するだけです。次の記述では商品IDと数量を更新するパターンになります。))コレクションを使ってリストをまとめて更新する方法のまとめ今回はコレクションを使ってリストをまとめて更新する方法を解説しました。テーブルとレコードが混在していて理解に苦しんだかもしれません。記述すれば、作成や更新も思いのままなので重宝します。実際に動作を確認して理解を深めてみましょう!PowerApps│チェックリストアプリを少し使いやすくする方法2022.09.15PowerApps│フォームを使ったチェックリストアプリの作り方2022.09.11PowerApps│領収書を発行してメール送付するアプリの作り方2022.08.30PowerApps│アクセス権のないプランにタスクをまとめて登録する方法2022.07.09ご支援よろしくおねがいしますこの記事を気に入ってくださった方、寄付してあげてもいいよという方がいらっしゃっいましたら、ご支援いただけると助かります。下記リンクからAmazonギフト券で、金額は15円からお気持ちを入力してください。メッセージもいただけるとたいへん喜びます。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。US七草あんこ非IT系中間管理職やってます。社命によりoffice365を主軸とした業務改善プロジェクトメンバーに任命されたことでPowerAppsと出会えました。いまではビジネス・プライベートを問わず、欠かせないツールになっています。導入初期やアプリ作成時に遭遇した諸問題の解決法とサンプルアプリの作り方を紹介していきます。Twitterで情報収集しているので不明点など呟いているとお邪魔するかもしれません。