アプリの実行中に保持したい値がある場合、変数かコレクションを使用します。
今回はコレクションについてまとめてみます。
コレクションにはテーブルや繰り返し利用するデータを格納することが可能です。
ギャラリーやフォーム、テーブルは、データソースとしてコレクションを使用することが可能です。
またコレクションを使用することで、データがクラウドではなくローカルデバイスに保存されるため、読み込み時間を短縮することが可能です。
- コレクションはどのスクリーンからも使用可能
- 列のすべての値は同じデータ型である必要がある
- 一度にコレクションに格納できる最大数はデフォルトで500行ですが、委任制限を変更することで最大2000行まで増やすことが可能
- コレクションはアプリの実行中のみ保持される。アプリを閉じるとコレクションの値はリセットされる
Collectionを操作する関数をまとめます。
コレクション関数はすべて「On」で始まる動作の数式内でのみ使用可能です。
例:OnStart, OnVisible, OnSelectionなど
コレクションを作成する際や既存のコレクションにレコードを追加する際に使用します。
//SharePointリストのデータすべてをコレクションに格納する時
Collect(CollectionName, SharePointリストの名前)
上記のコードで書くとSharePointリストにあるすべてのデータをCollectionに格納することが可能です。
コレクション内のすべてのレコードを削除します。
//コレクションに格納したすべてのレコードを削除
Clear(CollectionName)
コレクション一旦初期化してから、レコードを追加する際に使用します。
//ClarCollect関数はClear+Collect両方を備えています
ClearCollect(コレクション名, データソース)
データソースやコレクションに対してレコードの追加、変更を行う関数です。コレクションではレコードの一部の情報を変更する時に利用されます。
//既存のコレクションにPatch関数を使ってデータを追加する
ClearCollect(myCollection,classTestScore);
Patch(
myCollection,
Defaults(myCollection),
{SerialNo:37, FullName:"山田 太郎", TestScore: 85}
)
データソースやコレクションから特定のレコードを削除する関数です。
//特定のレコードの削除
//Remove
Remove(myCollection,LookUp(myCollection, SerialNo=37);
//RemoveIf
RemoveIf(myCollection, SerialNo=37);
複数のデータソースを読み込む場合に、同時実行を行いたい場合に使用します。並列で実行することで、データの読み込み時間を減らすことができます。
//ClearCollectを同時実行する
Concurrent(
ClearCollect( myCollection, TestScore ),
ClearCollect( myCollection1, StudentsData )
)
参考 Power Apps での Concurrent 関数Microsoft Docs
コレクション内の複数のレコードに対して操作を行うときはForAll関数を利用します。ForAll関数はすべてのレコードに対して数式を実行します。
//まず下記のCollectionを作成します
ClearCollect(SLAMDUNK,
Table(
{ SerialNo: 10, FullName: "SAKURAGI Hanamichi", Position: "PF", Height:189.2, Weight: 83},
{ SerialNo: 14, FullName: "MITSUI Hisashi", Position: "SG" , Height:184, Weight: 70},
{ SerialNo: 11, FullName: "RUKAWA Kaede", Position: "SF" , Height:187, Weight: 75 },
{ SerialNo: 7, FullName: "MIYAGI Ryota", Position: "PG", Height:168 , Weight: 59},
{ SerialNo: 4, FullName: "AKAGI Takenori", Position: "C" , Height:197, Weight: 93}
)
)
//ForAllを利用して、Weightが70以上のSerialNoとFullNameとWeightを新しいコレクションに格納します
ForAll(
SLAMDUNK,
If(
Weight >= 70,
Collect(
Taller,
{
SerialNo: SerialNo,
FullName: FullName,
Weight: Weight
}
)
)
)
使いそうな例をいくつかあげておきます。少しずつ思いついたら増やしていこうと思います。
//下記のコレクションに1行レコードを追加します
ClearCollect(SLAMDUNKa,
{ SerialNo: 10, FullName: "SAKURAGI Hanamichi", Position: "PF", Height:189.2, Weight: 83},
{ SerialNo: 14, FullName: "MITSUI Hisashi", Position: "SG" , Height:184, Weight: 70},
{ SerialNo: 11, FullName: "RUKAWA Kaede", Position: "SF" , Height:187, Weight: 75 }
)
)
//やり方①:追加したいレコードを変数に格納
Set(
AddMember,
{ SerialNo: 7, FullName: "MIYAGI Ryota", Position: "PG", Height:168 , Weight: 59}
);
//やり方①:さきほどの変数をコレクションに追加
ClearCollect(SLUMDUNK,SLAMDUNKa);
Collect(SLUMDUNK, AddMember);
//やり方②:Patch関数を使用
ClearCollect(SLUMDUNK,SLAMDUNKa);
Patch(
SLUMDUNK,
Defaults(SLUMDUNK),
{ SerialNo: 7, FullName: "MIYAGI Ryota", Position: "PG", Height:168 , Weight: 59}
)
//下記のコレクションに1行レコードを追加します
ClearCollect(SLAMDUNKa,
{ SerialNo: 10, FullName: "SAKURAGI Hanamichi", Position: "PF", Height:189.2, Weight: 83},
{ SerialNo: 14, FullName: "MITSUI Hisashi", Position: "SG" , Height:184, Weight: 70},
{ SerialNo: 11, FullName: "RUKAWA Kaede", Position: "SF" , Height:187, Weight: 75 }
)
)
//追加したい複数行を新しいコレクションに格納します
ClearCollect(
AddMembers,
{ SerialNo: 7, FullName: "MIYAGI Ryota", Position: "PG", Height:168 , Weight: 59},
{ SerialNo: 4, FullName: "AKAGI Takenori", Position: "C" , Height:197, Weight: 93}
);
//複数行をコレクションに追加する
ClearCollect(SLAMDUNK, SLAMDUNKa);
Collect(SLAMDUNK, AddMembers);
//コレクションを作成する
ClearCollect(myStore,
{ID:101, Name: "Desktop PC", Quantity: 10},
{ID:102, Name: "Monitor", Quantity: 40},
{ID:103, Name: "Laptop", Quantity: 20}
);
//レコードの複数の値を変更する
Patch(
myStore,
LookUp(myStore,ID=103),
{Name: "Mac Laptop", Quantity: 30}
)