PowerApps, 체크박스에서 선택 항목에 일괄 처리

개요



PowerApps의 갤러리에서 아이템에 체크박스를 붙이고 체크를 한 아이템에 대해 일괄처리를 하고 싶은 경우의 방법에 대해 알아보았습니다.


방법



체크를 한 아이템을 일괄 삭제하는 경우를 예로 합니다.
갤러리의 Items에는 다음과 같은 FoodList 컬렉션이 들어 있다고 가정합니다.{Id:1, FoodName:"炒飯"},{Id:2, FoodName:"餃子"}Id 열과 같은 레코드를 식별할 수 있는 고유한 데이터가 들어 있다고 가정합니다.

삭제 버튼의 OnSelect에서 다음 함수를 입력합니다.
ForAll(
    Filter(Gallery1.AllItems, Checkbox1.Value = true) As A,
    RemoveIf(FoodList,Id = A.Id)
)

ForAll에서 갤러리 컨트롤 중 체크가 들어있는 항목을 한 줄씩 참조하고 RemoveIf에서 Id로 비교하여 원래 컬렉션에서 삭제 처리를 수행합니다.
포인트는 「As 연산자」로 갤러리 컨트롤의 컬렉션을 A로 변환하고 있는 점입니다.
ThisRecord를 사용하여 RemoveIf(FoodList,Id = ThisRecord.Id)로 작동하지 않았습니다.
왼쪽의 Id가 ThisRecord의 Id(약식)인지 FoodList의 Id인지를 구별할 수 없는 것이 원인인 것 같습니다. SQL과 같습니다.
향후 업데이트로 변경될 수 있습니다.


이번은 삭제의 액션을 실시하는 예입니다만, 다른 액션에도 응용할 수 있다고 생각합니다.

다른 방법



다른 방법으로는, 삭제용의 컬렉션을 작성해 두고, 체크 박스의 OnCheck에서 ThisItem을 삭제 리스트에 추가.
삭제 버튼에 다음과 같은 함수를 넣고 컬렉션에 대해 RemoveIf 함수에서 삭제 목록과 비교하여 삭제하는 방법입니다.
방금 전의 방법보다 조금 번거롭다.
If(IsEmpty(DeleteList),
    Notify("削除するアイテムがありません。",NotificationType.Information),
    RemoveIf(FoodList,ThisRecord in DeleteList);Clear(DeleteList);
)

나중에 OnCheck가 작동하지 않는 상황에서는이 방법을 사용할 수 없습니다.
예를 들면, 모두에 체크/해제와 같은 버튼을 준비해, 다른 컨트롤로부터 체크의 상태를 제어하는 ​​경우입니다.
※PowerApps로 그런 요건 없다고 생각합니다만・・

좋은 웹페이지 즐겨찾기