Dataversetips

【Power Apps】リレーションの増分・減分更新

Dataverse

Relate関数はリレーション設定、Unrelate関数はリレーション解除しかできないため、N側を更新する際に工夫が必要です。

Power Appsで増分・減分を取得するテクニックを用いて、Relate関数でリレーションの増分、Unrelate関数でリレーションの減分を更新する方法を紹介します。

増分更新

増分取得

in演算子を用いて増分を取得し、その増分に対して繰り返し処理を行うことで増分更新を実現します。

Not(選択したもの in デフォルト)で増分を取得できます。

選択したものとデフォルトの共通部分(A1,A2)を比較し、選択したものにしかないもの(A4)を取得するという数式です。

増分を繰り返し更新

増分更新は以下の数式で可能です。

ForAll(
    Filter(
        ComboBox1.SelectedItems,
        Not(注文 in PowerAppsOneGridCustomer.Selected.注文.注文)
    ),
    Relate(PowerAppsOneGridCustomer.Selected.注文, ThisRecord)
)

コンボボックスで選択した注文列と、テーブルで選択した注文(参照列)の注文列を比較して、増えたレコードに対してRelate関数でリレーションを行います。

減分更新

減分取得

in演算子を用いて減分を取得し、その減分に対して繰り返し処理を行うことで減分更新を実現します。

Not(デフォルト in 選択したもの)で減分を取得できます。

選択したものとデフォルトの共通部分(A1,A2)を比較し、デフォルトにしかないもの(A3)を取得するという数式です。

減分を繰り返し更新

減分更新は以下の数式で可能です。

4行目は委任できない処理のため、リレーションされているN側(ここでは注文テーブル)のレコード数が多いと正しく処理できません。

Unrelate関数は処理後にRefresh関数でデータソースの更新を行う必要があります。

ForAll(
    Filter(
        PowerAppsOneGridCustomer.Selected.注文,
        Not(注文 in ComboBox1.SelectedItems.注文)
    ),
    Unrelate(PowerAppsOneGridCustomer.Selected.注文, ThisRecord)
);

Refresh(注文)

コンボボックスで選択した注文列と、テーブルで選択した注文(参照列)の注文列を比較して、減ったレコードに対してUnrelate関数でリレーション解除を行います。

まとめ

ForAll(
    Filter(
        PowerAppsOneGridCustomer.Selected.注文,
        Not(注文 in ComboBox1.SelectedItems.注文)
    ),
    Unrelate(PowerAppsOneGridCustomer.Selected.注文, ThisRecord)
);

ForAll(
    Filter(
        ComboBox1.SelectedItems,
        Not(注文 in PowerAppsOneGridCustomer.Selected.注文.注文)
    ),
    Relate(PowerAppsOneGridCustomer.Selected.注文, ThisRecord)
);

Refresh(注文)

ここまでをまとめるとこのような数式となります。

以下のようにコンボボックスにデフォルトの値を示す際は、変数などで元の値を参照しないようにする必要があります。

コメント

タイトルとURLをコピーしました