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

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

Collectionとは

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

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

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

Collectionの関数

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

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

Collect関数

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

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

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

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

Clear関数

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

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

Clear(CollectionName)

ClearCollect関数

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

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

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

Patch関数

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

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

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

Remove関数、RemoveIf関数

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

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

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

Concarrent関数

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

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

参考 Power Apps での Concurrent 関数Microsoft Docs

ForAll関数

コレクション内の複数のレコードに対して操作を行うときはForAll関数を利用します。ForAll関数はすべてのレコードに対して数式を実行します。

Apps
//まず下記の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行新しいレコードを追加する

Apps
//下記のコレクションに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}
)

既存のコレクションに複数行のレコードを追加する

Apps
//下記のコレクションに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);

レコードの値を変更する

Apps
//コレクションを作成する
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}
)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA