Patch関数で複数レコードを登録するにはForAll関数と組み合わせて繰り返し処理を実装する必要があり、パフォーマンスもあまり良くありません。
そんな特に候補として上がるのがCollect関数です。
ただ、Collect関数ではデータソースのスキーマに完全に一致する必要があるので、少し工夫が必要です。
ただ、コツが分かれば簡単に利用できる関数なので試してみましょう!
目次
主な流れ
主には以下のような流れで一括登録用のデータ準備及びボタンを作成していきます。
スキーマをデータソースとコレクションとで合わせます。
この動作はスクリーンのOnVisibleなどに仕込んでもよいでしょう。
テキスト入力やギャラリーコントロールを利用して一括登録データを準備します。サンプルではテキスト入力に入力してボタンを押すと一旦先程宣言したからのコレクションに入るようになっています。
データソースに対してCollect関数を利用することで準備したデータを一括で登録することができます。
簡単にスキーマを合わせる方法
First 関数を使って最初の一行を取得してコレクションを宣言します。その後、初期化します。
コピーしました!
Collect(コレクション名, First(データソース));
Clear(コレクション名);
ここでFirst として1行だけ取ってきているのはデータソースのデータを沢山取得してしまうと読み込みに時間がかかってしまうからです。
Clearで初期化しているのは、Firstで取得したデータが1行コレクションに入っている状況になってしまうので、データが入っていない、カラのコレクションとするためです。
記載例はこのとおりです。
固定資産管理
というデータソースからコレクションFixedAsset
を宣言しています。
コピーしました!
Collect(FixedAsset, First(固定資産管理));
Clear(FixedAsset);
一括登録したいデータの準備
このコレクションに一括で登録したいデータを追加していきます。コレクションに対して追加する方法はPatchでも、CollectでもOKです。
テキスト入力に書かれた名前だけをコレクションにPatchで登録させました。
名前しかPatchしていませんが、最初にスキーマを定義したのでコレクションの中のデータを見てみるとちゃんとデータソースと同じスキーマを保持していることがわかります。
データソースへの一括反映
その後、コレクションをデータソースにCollectします。その方法はさっきとは書き方が逆です。
コピーしました!
Collect(データソース名, コレクション名)
再度同じデータの登録を行いたくないときは、処理の後はコレクションを初期化するとよいでしょう。
Collect関数で一括でデータがデータソース(今回はDataverse)に反映されました。
Patchで繰り返し処理させてデータを反映させている処理が長いプロセスなどがありましたらこちらの手法も参考にしてみてください。
以上、参考になれば幸いです。