---
title: "Collect 関数によりレコードを一括で登録する | Power Apps"
url: "https://www.geekfujiwara.com/tech/powerplatform/4905/"
author: ギークフジワラ
published: "2024-06-10T07:59:53+00:00"
updated: "2024-06-10T07:59:54+00:00"
categories: [Power Platform]
tags: [Collect, Power Apps]
description: "Patch関数で複数レコードを登録するにはForAll関数と組み合わせて繰り返し処理を実装する必要があり、パフォーマンスもあまり良くありません。 そんな特に候補として上がるのがCollect関数です。 ただ、Collect関数ではデータソー…"
---

# Collect 関数によりレコードを一括で登録する | Power Apps

Patch関数で複数レコードを登録するにはForAll関数と組み合わせて繰り返し処理を実装する必要があり、パフォーマンスもあまり良くありません。

そんな特に候補として上がるのがCollect関数です。

ただ、Collect関数ではデータソースのスキーマに完全に一致する必要があるので、少し工夫が必要です。

ただ、コツが分かれば簡単に利用できる関数なので試してみましょう！

## 主な流れ

主には以下のような流れで一括登録用のデータ準備及びボタンを作成していきます。

:::raw
<!-- wp:sgb/timeline -->
<div class="wp-block-sgb-timeline"><div class="sgb-tl"><!-- wp:sgb/timeline-item {"itemTitle":"カラのコレクションを宣言する "} -->
<div class="wp-block-sgb-timeline-item sgb-tl-item"><div class="sgb-tl-item__label--default"></div><div class="sgb-tl-item__title">カラのコレクションを宣言する </div><div class="sgb-tl-item__main"><!-- wp:paragraph -->
<p>スキーマをデータソースとコレクションとで合わせます。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>この動作はスクリーンのOnVisibleなどに仕込んでもよいでしょう。</p>
<!-- /wp:paragraph --></div><div class="sgb-tl-item__marker main-bdr main-bc"></div></div>
<!-- /wp:sgb/timeline-item -->

<!-- wp:sgb/timeline-item {"itemTitle":"一括で登録したいデータを準備"} -->
<div class="wp-block-sgb-timeline-item sgb-tl-item"><div class="sgb-tl-item__label--default"></div><div class="sgb-tl-item__title">一括で登録したいデータを準備</div><div class="sgb-tl-item__main"><!-- wp:paragraph -->
<p>テキスト入力やギャラリーコントロールを利用して一括登録データを準備します。サンプルではテキスト入力に入力してボタンを押すと一旦先程宣言したからのコレクションに入るようになっています。</p>
<!-- /wp:paragraph --></div><div class="sgb-tl-item__marker main-bdr main-bc"></div></div>
<!-- /wp:sgb/timeline-item -->

<!-- wp:sgb/timeline-item {"itemTitle":"データソースへの一括登録"} -->
<div class="wp-block-sgb-timeline-item sgb-tl-item"><div class="sgb-tl-item__label--default"></div><div class="sgb-tl-item__title">データソースへの一括登録</div><div class="sgb-tl-item__main"><!-- wp:paragraph -->
<p>データソースに対してCollect関数を利用することで準備したデータを一括で登録することができます。</p>
<!-- /wp:paragraph --></div><div class="sgb-tl-item__marker main-bdr main-bc"></div></div>
<!-- /wp:sgb/timeline-item --></div></div>
<!-- /wp:sgb/timeline -->
:::

![](https://www.geekfujiwara.com/wp-content/uploads/2024/06/image-1024x607.png)

## 簡単にスキーマを合わせる方法

First 関数を使って最初の一行を取得してコレクションを宣言します。その後、初期化します。

:::raw
<!-- wp:group {"className":"parent","css":".parent {\n\tposition: relative;\t\n}","scopedCSS":"#id-62ea580b-0406-4cfe-9f42-58a7d1c3c0fb .parent {\n\tposition: relative;\t\n}","js":"let btn = block.querySelector(\u0022.code-btn\u0022);\n\nbtn.addEventListener(\u0022click\u0022, () =\u003e {\n  let txt = block.querySelector(\u0022code\u0022).innerText;\n  navigator.clipboard.writeText(txt);\n\n  let copied = block.querySelector(\u0022.copied\u0022);\n  copied.style.display = \u0022block\u0022;\n  setTimeout(function () {\n    copied.style.display = \u0022none\u0022;\n  }, 1500);\n});","blockId":"id-62ea580b-0406-4cfe-9f42-58a7d1c3c0fb"} -->
<div class="wp-block-group parent"><!-- wp:paragraph {"css":"i {\n\tcursor: pointer;\n\tposition: absolute;\n\ttop: 2.5em;\n\tright: 1em;\n\tz-index:98;\n}\n\n.fa-copy {\n\tcolor:#777;\n}\n\n.copied{\n\tdisplay:none;\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\tz-index:99;\n\tbackground:#222;\n\tcolor:#fff;\n\tborder-radius: 5px;\n\tpadding:3px;\n}","scopedCSS":"#id-fab7264f-72ac-4b45-abc2-25f671f065af i {\n\tcursor: pointer;\n\tposition: absolute;\n\ttop: 2.5em;\n\tright: 1em;\n\tz-index:98;\n}\n\n#id-fab7264f-72ac-4b45-abc2-25f671f065af .fa-copy {\n\tcolor:#777;\n}\n\n#id-fab7264f-72ac-4b45-abc2-25f671f065af .copied{\n\tdisplay:none;\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\tz-index:99;\n\tbackground:#222;\n\tcolor:#fff;\n\tborder-radius: 5px;\n\tpadding:3px;\n}","blockId":"id-fab7264f-72ac-4b45-abc2-25f671f065af"} -->
<p><i class="fas fa-copy code-btn"></i><span class="copied">コピーしました！</span></p>
<!-- /wp:paragraph -->

<!-- wp:sgb/codebox {"title":"Power Fx","source":"Collect(コレクション名, First(データソース));\nClear(コレクション名);","highlight":true,"className":"parent","css":"pre {\n    background: #3c3c3c;\n\tcolor:#ddd;\n\tfont-size: 0.9em;\n\tborder: none;\n}\n\ncode,\n.hljs-tag {\n\tcolor:#fff;\n}\n\n.pre_tag\u003espan {\n    background-color: #3c3c3c;\n}","scopedCSS":"#id-210d261f-144e-4171-a55d-dc3811b52a71 pre {\n    background: #3c3c3c;\n\tcolor:#ddd;\n\tfont-size: 0.9em;\n\tborder: none;\n}\n\n#id-210d261f-144e-4171-a55d-dc3811b52a71 code,\n#id-210d261f-144e-4171-a55d-dc3811b52a71 .hljs-tag {\n\tcolor:#fff;\n}\n\n#id-210d261f-144e-4171-a55d-dc3811b52a71 .pre_tag\u003espan {\n    background-color: #3c3c3c;\n}","blockId":"id-210d261f-144e-4171-a55d-dc3811b52a71"} -->
<div class="wp-block-sgb-codebox pre_tag parent"><span><i class="fa fa-code"></i>Power Fx</span><pre class="js-sng-highlight"><code>Collect(コレクション名, First(データソース));
Clear(コレクション名);</code></pre></div>
<!-- /wp:sgb/codebox --></div>
<!-- /wp:group -->
:::

ここでFirst として1行だけ取ってきているのはデータソースのデータを沢山取得してしまうと読み込みに時間がかかってしまうからです。

Clearで初期化しているのは、Firstで取得したデータが1行コレクションに入っている状況になってしまうので、データが入っていない、カラのコレクションとするためです。

記載例はこのとおりです。

> [!NOTE]
> `固定資産管理`というデータソースからコレクション`FixedAsset`を宣言しています。

:::raw
<!-- wp:group {"className":"parent","css":".parent {\n\tposition: relative;\t\n}","scopedCSS":"#id-62ea580b-0406-4cfe-9f42-58a7d1c3c0fb .parent {\n\tposition: relative;\t\n}","js":"let btn = block.querySelector(\u0022.code-btn\u0022);\n\nbtn.addEventListener(\u0022click\u0022, () =\u003e {\n  let txt = block.querySelector(\u0022code\u0022).innerText;\n  navigator.clipboard.writeText(txt);\n\n  let copied = block.querySelector(\u0022.copied\u0022);\n  copied.style.display = \u0022block\u0022;\n  setTimeout(function () {\n    copied.style.display = \u0022none\u0022;\n  }, 1500);\n});","blockId":"id-62ea580b-0406-4cfe-9f42-58a7d1c3c0fb"} -->
<div class="wp-block-group parent"><!-- wp:paragraph {"css":"i {\n\tcursor: pointer;\n\tposition: absolute;\n\ttop: 2.5em;\n\tright: 1em;\n\tz-index:98;\n}\n\n.fa-copy {\n\tcolor:#777;\n}\n\n.copied{\n\tdisplay:none;\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\tz-index:99;\n\tbackground:#222;\n\tcolor:#fff;\n\tborder-radius: 5px;\n\tpadding:3px;\n}","scopedCSS":"#id-fab7264f-72ac-4b45-abc2-25f671f065af i {\n\tcursor: pointer;\n\tposition: absolute;\n\ttop: 2.5em;\n\tright: 1em;\n\tz-index:98;\n}\n\n#id-fab7264f-72ac-4b45-abc2-25f671f065af .fa-copy {\n\tcolor:#777;\n}\n\n#id-fab7264f-72ac-4b45-abc2-25f671f065af .copied{\n\tdisplay:none;\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\tz-index:99;\n\tbackground:#222;\n\tcolor:#fff;\n\tborder-radius: 5px;\n\tpadding:3px;\n}","blockId":"id-fab7264f-72ac-4b45-abc2-25f671f065af"} -->
<p><i class="fas fa-copy code-btn"></i><span class="copied">コピーしました！</span></p>
<!-- /wp:paragraph -->

<!-- wp:sgb/codebox {"title":"Power Fx","source":"Collect(FixedAsset, First(固定資産管理));\nClear(FixedAsset);","highlight":true,"className":"parent","css":"pre {\n    background: #3c3c3c;\n\tcolor:#ddd;\n\tfont-size: 0.9em;\n\tborder: none;\n}\n\ncode,\n.hljs-tag {\n\tcolor:#fff;\n}\n\n.pre_tag\u003espan {\n    background-color: #3c3c3c;\n}","scopedCSS":"#id-210d261f-144e-4171-a55d-dc3811b52a71 pre {\n    background: #3c3c3c;\n\tcolor:#ddd;\n\tfont-size: 0.9em;\n\tborder: none;\n}\n\n#id-210d261f-144e-4171-a55d-dc3811b52a71 code,\n#id-210d261f-144e-4171-a55d-dc3811b52a71 .hljs-tag {\n\tcolor:#fff;\n}\n\n#id-210d261f-144e-4171-a55d-dc3811b52a71 .pre_tag\u003espan {\n    background-color: #3c3c3c;\n}","blockId":"id-210d261f-144e-4171-a55d-dc3811b52a71"} -->
<div class="wp-block-sgb-codebox pre_tag parent"><span><i class="fa fa-code"></i>Power Fx</span><pre class="js-sng-highlight"><code>Collect(FixedAsset, First(固定資産管理));
Clear(FixedAsset);</code></pre></div>
<!-- /wp:sgb/codebox --></div>
<!-- /wp:group -->
:::

## 一括登録したいデータの準備

このコレクションに一括で登録したいデータを追加していきます。コレクションに対して追加する方法はPatchでも、CollectでもOKです。

![](https://www.geekfujiwara.com/wp-content/uploads/2024/06/image-1-1024x541.png)

テキスト入力に書かれた名前だけをコレクションにPatchで登録させました。

![](https://www.geekfujiwara.com/wp-content/uploads/2024/06/image-2-1024x523.png)

名前しかPatchしていませんが、最初にスキーマを定義したのでコレクションの中のデータを見てみるとちゃんとデータソースと同じスキーマを保持していることがわかります。

![](https://www.geekfujiwara.com/wp-content/uploads/2024/06/image-3-1024x367.png)

## データソースへの一括反映

その後、コレクションをデータソースにCollectします。その方法はさっきとは==書き方が逆==です。

:::raw
<!-- wp:group {"className":"parent","css":".parent {\n\tposition: relative;\t\n}","scopedCSS":"#id-62ea580b-0406-4cfe-9f42-58a7d1c3c0fb .parent {\n\tposition: relative;\t\n}","js":"let btn = block.querySelector(\u0022.code-btn\u0022);\n\nbtn.addEventListener(\u0022click\u0022, () =\u003e {\n  let txt = block.querySelector(\u0022code\u0022).innerText;\n  navigator.clipboard.writeText(txt);\n\n  let copied = block.querySelector(\u0022.copied\u0022);\n  copied.style.display = \u0022block\u0022;\n  setTimeout(function () {\n    copied.style.display = \u0022none\u0022;\n  }, 1500);\n});","blockId":"id-62ea580b-0406-4cfe-9f42-58a7d1c3c0fb"} -->
<div class="wp-block-group parent"><!-- wp:paragraph {"css":"i {\n\tcursor: pointer;\n\tposition: absolute;\n\ttop: 2.5em;\n\tright: 1em;\n\tz-index:98;\n}\n\n.fa-copy {\n\tcolor:#777;\n}\n\n.copied{\n\tdisplay:none;\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\tz-index:99;\n\tbackground:#222;\n\tcolor:#fff;\n\tborder-radius: 5px;\n\tpadding:3px;\n}","scopedCSS":"#id-fab7264f-72ac-4b45-abc2-25f671f065af i {\n\tcursor: pointer;\n\tposition: absolute;\n\ttop: 2.5em;\n\tright: 1em;\n\tz-index:98;\n}\n\n#id-fab7264f-72ac-4b45-abc2-25f671f065af .fa-copy {\n\tcolor:#777;\n}\n\n#id-fab7264f-72ac-4b45-abc2-25f671f065af .copied{\n\tdisplay:none;\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\tz-index:99;\n\tbackground:#222;\n\tcolor:#fff;\n\tborder-radius: 5px;\n\tpadding:3px;\n}","blockId":"id-fab7264f-72ac-4b45-abc2-25f671f065af"} -->
<p><i class="fas fa-copy code-btn"></i><span class="copied">コピーしました！</span></p>
<!-- /wp:paragraph -->

<!-- wp:sgb/codebox {"title":"Power Fx","source":"Collect(データソース名, コレクション名)","highlight":true,"className":"parent","css":"pre {\n    background: #3c3c3c;\n\tcolor:#ddd;\n\tfont-size: 0.9em;\n\tborder: none;\n}\n\ncode,\n.hljs-tag {\n\tcolor:#fff;\n}\n\n.pre_tag\u003espan {\n    background-color: #3c3c3c;\n}","scopedCSS":"#id-210d261f-144e-4171-a55d-dc3811b52a71 pre {\n    background: #3c3c3c;\n\tcolor:#ddd;\n\tfont-size: 0.9em;\n\tborder: none;\n}\n\n#id-210d261f-144e-4171-a55d-dc3811b52a71 code,\n#id-210d261f-144e-4171-a55d-dc3811b52a71 .hljs-tag {\n\tcolor:#fff;\n}\n\n#id-210d261f-144e-4171-a55d-dc3811b52a71 .pre_tag\u003espan {\n    background-color: #3c3c3c;\n}","blockId":"id-210d261f-144e-4171-a55d-dc3811b52a71"} -->
<div class="wp-block-sgb-codebox pre_tag parent"><span><i class="fa fa-code"></i>Power Fx</span><pre class="js-sng-highlight"><code>Collect(データソース名, コレクション名)</code></pre></div>
<!-- /wp:sgb/codebox --></div>
<!-- /wp:group -->
:::

再度同じデータの登録を行いたくないときは、処理の後はコレクションを初期化するとよいでしょう。

![](https://www.geekfujiwara.com/wp-content/uploads/2024/06/image-4-1024x653.png)

Collect関数で一括でデータがデータソース(今回はDataverse)に反映されました。

![](https://www.geekfujiwara.com/wp-content/uploads/2024/06/image-5-1024x611.png)

Patchで繰り返し処理させてデータを反映させている処理が長いプロセスなどがありましたらこちらの手法も参考にしてみてください。

以上、参考になれば幸いです。
