Power Apps中Gallery2审批时遍历Gallery1匹配行项扣减预算的问题
解决方案
问题根源
你的代码里用了gallery1.Selected,只会指向Gallery1中当前选中的单个行项,无法遍历所有行完成匹配,这就是为什么只能匹配第一个项的原因。
修正代码(按钮OnSelect属性)
把原代码替换为以下逻辑,用ForAll遍历Gallery1的所有行,匹配Gallery2选中项的行后更新余额,同时处理余额不足的情况:
// 处理Gallery2选中的请求项 ForAll( // 遍历Gallery1的所有预算行项 Gallery1.AllItems, If( // 匹配行项(根据实际字段名调整) LineItem.Value = gal_NewBudget_3.Selected.LineItem.Value && !IsBlank(CurrentBalance) && CurrentBalance >= gal_NewBudget_3.Selected.AmountRequested, // 匹配成功:扣减余额并更新数据源 Patch( 你的预算数据源名称, // 替换为存储Gallery1数据的SharePoint列表名 ThisRecord, {CurrentBalance: CurrentBalance - gal_NewBudget_3.Selected.AmountRequested} ), // 余额不足或不匹配:标记请求项为超额 Patch( Vouchers, gal_NewBudget_3.Selected, {ExceededValue: "yes"} ) ) )
关键说明
Gallery1.AllItems:遍历Gallery1的所有行项,而非仅选中的单个项ThisRecord:在ForAll循环中代表当前遍历到的Gallery1行项- 字段匹配:确保
LineItem.Value的对比两边字段类型一致(比如都是查找列的Value属性) - 余额判断:将
>0改为>=,避免刚好等于请求金额时被误判为余额不足
额外注意事项
- 若Gallery2允许多选,需把
gal_NewBudget_3.Selected改为gal_NewBudget_3.SelectedItems,并在外层再加一层ForAll遍历所有选中的请求项 - 务必替换代码中的
你的预算数据源名称为实际存储Gallery1预算数据的SharePoint列表名称
内容的提问来源于stack exchange,提问作者Ada Eloka
相关产品推荐
相关产品推荐

