Power Apps如何用变量替代多If语句实现Dropdown选择对应列Patch操作
简化Power Apps中批量更新训练状态的嵌套If操作
你当前通过嵌套If语句实现以下功能:根据Dropdown1的选择,遍历selected_people集合中的每条记录,在SampleExcelData数据源中匹配ID后,将对应的Training列设为"Yes"。
现有嵌套If代码
ForAll( selected_people, If( Dropdown1.SelectedText.Value = "Training 1", Patch(SampleExcelData,LookUp(SampleExcelData,ID = selected_people[@ID]),{Training1: "Yes"}), If( Dropdown1.SelectedText.Value = "Training 2", Patch(SampleExcelData,LookUp (SampleExcelData,ID = selected_people[@ID]),{Training2: "Yes"}), If( Dropdown1.SelectedText.Value = "Training 3", Patch(SampleExcelData, LookUp( SampleExcelData,ID = selected_people[@ID]),{Training3: "Yes"}), ....
实现效果
| ID | Person | Last Name | Training 1 | Training 2 | Training 3 |
|---|---|---|---|---|---|
| 001 | joe | xxx | yes | yes | |
| 002 | jill | rrr | yes | yes | |
| 002 | lilly | bbb | yes | yes |
当课程数量多达15个时,嵌套If语句过于繁琐,你希望将Dropdown选择的列名动态传入Patch,简化为类似以下的代码:
ForAll( selected_people, Patch( SampleExcelData, LookUp(SampleExcelData,ID = selected_people[@ID]), {*dropdown.selected(My column name) or variable*: "Yes"}))
可以实现!用动态列名语法即可
Power Apps支持动态列名的记录构造,只需要用方括号[]包裹列名字符串或变量,即可动态指定要更新的列。
具体实现步骤:
对齐Dropdown选项与数据源列名
- 如果Dropdown显示的是"Training 1"这类友好名称,而数据源列名是
Training1(无空格),建议将Dropdown的Items设置为包含显示文本和对应列名的记录集:Table( {DisplayText: "Training 1", ColumnName: "Training1"}, {DisplayText: "Training 2", ColumnName: "Training2"}, {DisplayText: "Training 3", ColumnName: "Training3"}, // 依次添加剩余12个课程的对应项 ) - 然后将Dropdown的
DisplayFields设置为["DisplayText"],保证界面显示友好名称。
- 如果Dropdown显示的是"Training 1"这类友好名称,而数据源列名是
简化后的Patch代码
直接在Patch的更新记录中使用动态列名语法:ForAll( selected_people, Patch( SampleExcelData, LookUp(SampleExcelData, ID = selected_people[@ID]), {[Dropdown1.Selected.ColumnName]: "Yes"} ) )如果Dropdown的
Value本身就是数据源的列名(比如直接用数据源的列名作为选项),则可以简化为:ForAll( selected_people, Patch( SampleExcelData, LookUp(SampleExcelData, ID = selected_people[@ID]), {[Dropdown1.Selected.Value]: "Yes"} ) )
注意事项
- 动态传入的列名必须与
SampleExcelData中的列名完全一致(包括大小写、特殊字符),否则会更新失败。 - 如果
selected_people集合数据量较大,建议改用批量更新的方式(比如先Collect待更新记录,再一次性Patch),提升性能。
内容的提问来源于stack exchange,提问作者Paula Pipkin
相关产品推荐
相关产品推荐

