はじめに
以前も似たような記事を書きましたが、最近聞かれることが多く、備忘も兼ねて改めて記事を書こうと思います。
アプローチ
まず、今回は、以下のような問い合わせを管理するアプリにて、ステータスを対応完了に、また、併せて対応完了日を一括で変更するような処理を実装したいと思います。
いくつかアプローチがあると思います。まずは、以下のように、Gallery1_1.AllItems をベースに、ForAll で処理を繰り返すアプローチがあります。
基本的にすべてのデータを更新する前提であればこれでもいいのですが、今回は、一部のレコードだけが更新対象なので、条件を付けてあげた方がいいですかね。
ForAll(
Gallery1_1.AllItems,
Patch(
問い合わせリスト,
ThisRecord,
{対応完了日: DatePicker3_1.SelectedDate,
ステータス:{Value:"完了"}
}
)
);
ForAll(
Gallery1_1.AllItems,
If(
Checkbox1_1.Value,
Patch(
問い合わせリスト,
ThisRecord,
{
対応完了日: DatePicker3_1.SelectedDate,
ステータス: {Value: "完了"}
}
),
""
)
);
なお、個人的にちょっとはまってしまったのですが、最初、以下のように LookUp を使っていたのですが、エラーは出ないものの、実際にはレコードが上手く更新されませんでした。また、ID = ThisRecord.ID
と最初記載していたのですが、式としてはエラーがないものの更新時にエラーで失敗しました。そのため、更新対象の行の指定について、LookUp ではなく、ThisRecord
で指定するよう注意が必要と思います。
ForAll(
Gallery1_1.AllItems,
Patch(
問い合わせリスト,
LookUp(
問い合わせリスト,
ID = Value(ThisRecord.ID)
),
{
対応完了日: DatePicker3_1.SelectedDate,
ステータス: {Value: "完了"}
}
)
);
また、以下のように、チェックボックスにチェックを入れた際や、カレンダーコントロールの日付を変更した際に、変更を加えたデータだけをコレクションに格納をして一括更新する方法もあります。
Collect(
colFinishedItems,
ThisItem
);
Patch(
colFinishedItems,
LookUp(
colFinishedItems,
ID = ThisItem.ID
),
{ステータス: {Value: "完了"}}
);
Patch(
colFinishedItems,
LookUp(
colFinishedItems,
ID = ThisItem.ID
),
{対応完了日: DatePicker3_1.SelectedDate}
);
この場合は、最後に以下のようにして変更をすることが出来ます。"colFinishedItems"は、"問い合わせリスト"をベースにしており、行で一意な ID
を持っているため、ForAll で式を書かず、以下のような式で、一括で変更することが出来ます。チェックを入れた行だけ更新、こちらでもいいかもしれませんね。
Patch(
問い合わせリスト,
ShowColumns(
colFinishedItems,
ID,
ステータス,対応完了日
)
);
Notify(
"ステータスを一括更新しました。",
NotificationType.Success
);
Clear(colFinishedItems);
まとめ
今回は、Power Apps でデータの一括変更をする方法について改めて整理してみました。実際の要件を踏まえ、紹介したアプローチを参考にしていただけたら幸いです。