【Power Apps】コレクションの操作

アプリの実行中に保持したい値がある場合、変数かコレクションを使用します。
今回はコレクションについてまとめてみます。

Collectionとは

コレクションにはテーブルや繰り返し利用するデータを格納することが可能です。

ギャラリーフォームテーブルは、データソースとしてコレクションを使用することが可能です。
またコレクションを使用することで、データがクラウドではなくローカルデバイスに保存されるため、読み込み時間を短縮することが可能です。

  • コレクションはどのスクリーンからも使用可能
  • 列のすべての値は同じデータ型である必要がある
  • 一度にコレクションに格納できる最大数はデフォルトで500行ですが、委任制限を変更することで最大2000行まで増やすことが可能
  • コレクションはアプリの実行中のみ保持される。アプリを閉じるとコレクションの値はリセットされる
スポンサーリンク

Collectionの関数

Collectionを操作する関数をまとめます。

コレクション関数はすべて「On」で始まる動作の数式内でのみ使用可能です。
例:OnStart, OnVisible, OnSelectionなど

Collect関数

コレクションを作成する際や既存のコレクションレコードを追加する際に使用します。

//SharePointリストのデータすべてをコレクションに格納する時

Collect(CollectionName, SharePointリストの名前)

上記のコードで書くとSharePointリストにあるすべてのデータをCollectionに格納することが可能です。

Clear関数

コレクション内のすべてのレコードを削除します。

//コレクションに格納したすべてのレコードを削除

Clear(CollectionName)

ClearCollect関数

コレクション一旦初期化してから、レコードを追加する際に使用します。

//ClearCollect関数はClear+Collect両方を備えています

ClearCollect(コレクション名, データソース)

Patch関数

データソースやコレクションに対してレコードの追加、変更を行う関数です。コレクションではレコードの一部の情報を変更する時に利用されます。

//既存のコレクションにPatch関数を使ってデータを追加する

ClearCollect(myCollection,classTestScore);
Patch(
    myCollection,
    Defaults(myCollection),
    {SerialNo:37, FullName:"山田 太郎", TestScore: 85}
)

Remove関数、RemoveIf関数

データソースやコレクションから特定のレコードを削除する関数です。

//特定のレコードの削除
//Remove
Remove(myCollection, LookUp(myCollection, SerialNo=37));

//RemoveIf
RemoveIf(myCollection, SerialNo=37);

Concurrent関数

複数のデータソースを読み込む場合に、同時実行を行いたい場合に使用します。並列で実行することで、データの読み込み時間を減らすことができます。

//ClearCollectを同時実行する
Concurrent(
    ClearCollect(myCollection, TestScore),
    ClearCollect(myCollection1, StudentsData)
)

ForAll関数

コレクション内の複数のレコードに対して操作を行うときは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行新しいレコードを追加する

//下記のコレクションに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}
)
スポンサーリンク