こんにちは、あんこ先生です。
委任問題や参照データソースの煩雑さに悩まされていませんか?
たとえば、委任できずに正しく計算できなかったり、データソース間の計算で頭がこんがらがったりしたこともあるはずです。
そんな問題を解決するのがコレクションです。
他ユーザーからは参照できないため、データ共有には向きませんが委任問題を回避できるのは魅力的ですよね。
作業用や参照用としてとても便利なものなのでぜひ使ってほしい機能です。
今回は、「コレクションってよくわからない」、「使いこなせる自信がない」という初心者から中級者の方を対象に、コレクションの加工方法を解説します。
この記事を読めば、データソースの複写や値の抽出、レコードの追加に項目の結合までコレクション操作を一通り学べます。
テーブルの仕組みを理解している前提の記事ですので、自信のない方は先にこの記事をご覧ください。
- データソースをまるごとコレクションに複写する
- 項目やレコードの追加など、コレクションを加工する
- 委任問題の回避
コレクションにそのまま複写する
まずはじめに、データソースをそのままコレクションに複写します。
SharePointリストの場合、設計した項目名はもちろん、登録者などの項目も複写されます。
委任問題がありますので、レコード数が多い場合は分割や絞り込みなどの対応が必要です。
コレクションの新規作成
初めはClearCollect関数で宣言します。
パラメーターはコレクション名と複写元テーブル名の2つです。
図の例では、M商品というテーブルをコレクション_M商品に複写しています。
項目名が日本語の場合の弊害
項目名が日本語の場合、ODataに変換されてしまいます。
これでは元の項目名がなんだったのかわかりにくいですよね。
コード入力時の選択候補は日本語で表示されますが、関数によっては内部名での指定が必要です。
このため、SharePointリストの命名は英数字に絞った方が無難です。
絞り込んでコレクションに複写する
コレクション作成時、複写元テーブルは各種関数で絞り込みが行えます。
必要なデータの抽出や委任問題回避に活用できます。
条件で絞り込みして複写│Filter関数
販売価格が200以上のレコードをコレクションに複写しています。
並び替えて複写│Sort関数
仕入価格昇順で並び替えてコレクションに複写しています。
最初から並び替えておくと、使うときに便利ですね。
先頭から指定した件数を複写│FirstN関数
仕入価格の安いTOP3をコレクションに複写しています。
上位下位の抽出に使えます。
LookUp関数など単一レコードを抜き取る場合は、コレクションより変数を使った方が扱いやすいのでオススメです。
レコードの追加│縦
1レコードを追加する│Collect関数
コレクションにレコードを追加する場合は、Collect関数を使います。
コレクションはテーブルのため、中身を{}で囲みます。
なお、Patch関数でもレコードの追加は行えます。
両者の違いは未記入項目を初期値(Patch関数)とするか空欄(Collect関数)とするかです。
まとめて追加する│Collect関数
項目すべておなじなら、Collect関数でテーブルをまとめて追加できます。
この特性を使って、委任問題を回避することもできます。
例えば数千件の複写元テーブルを月単位で絞り込み、ひたすらつなげていきます。
5千件くらいなら問題なく使えるのでとても重宝しています。
明確な上限はありませんが、1万件を超えたあたりから動作が重くなってきます。
項目の追加│横
追加する│AddColumns関数
項目の追加はAddColumns関数を使います。
AddColumns関数は、テーブルに新たな列を追加します。
また、数式によってその列内の値が定義されます。
俗にいう左外部結合です。
※テーブル1の全データを取り出して、それにテーブル2のデータをくっつけるやり方
記述は元テーブルと追加する列名、そしてその評価式になります。
削除する│DropColumns関数
逆に項目を除くこともできます。
DropColumns関数は、テーブルから指定した列を除外します。
指定は内部名を使うため、項目名が日本語だとODataで指定する必要があります。
ここまで書いていてなんですが、不要な項目は使わなければよいだけです。
なので、データ成形を目的としない限り、わざわざ削除せず放っておいてよいと思います。
知っトク情報
ギャラリーコントロールのItemsプロパティにもAddColumns関数やDropColumns関数が使えます。
例えば、仕入価格と販売価格の差額をギャラリーに表示する場合、二通りのやり方があります。
- テンプレートのラベルコントロールなどに式を記述する。
- Itemsプロパティに差額項目を追加し、それをラベルコントロールで参照させる。
図のようにギャラリーに表示させるだけなら、どちらでやっても結果は同じです。
ただ、ギャラリーはスクロールしないと先頭100件までしか計算しません。
そのため、差額の合計を求める場合は後者でないと正しく算出できないことがあります。
まとめ
今回は、コレクションの加工について紹介しました。
わたしはコレクションを理解するまで、ギャラリーコントロールはSharePointリストをそのまま指定していました。
しかし、委任問題や複数テーブルの項目結合・集計ができないのでやりたいことが実現しづらかったです。
コレクションを使えばそのあたりは解消されるので、ぜひ活用してください。
委任の回避方法は、コチラの記事もどうぞ!