Power Apps任务屏幕搜索逻辑优化:基于varEMPID动态筛选
问题描述
- 现有Employees、Tasks两个屏幕,可从Switchboard屏幕进入Tasks屏幕:
- Employees屏幕的库展示员工详情,员工需执行特定任务时显示对应小图标,否则隐藏图标
- Tasks屏幕展示所有需执行该任务的员工,支持通过文本框按EmpID、FullName等多维度搜索
- 问题:从Employees屏幕点击图标进入Tasks屏幕时,仅显示选中员工,功能正常;但退出后从Switchboard屏幕再次进入,仍显示之前选中的员工。添加
Set(varEMPID, Blank())代码在Switchboard进入时清除变量后,Tasks屏幕库又出现为空的情况 - 需求:优化搜索逻辑——
varEMPID有值时按该值筛选员工;无值时显示所有需执行任务的员工,当前代码无法实现该需求
当前代码
Search( Filter( tblAllTaskDetails, TaskStatus = ddAllTaskStatus.Selected.Result Or IsBlank(ddAllTaskStatus.Selected.Result) // 从Employees屏幕进入时正常,但从Switchboard进入因varEMPID无值失效 EmpID = varEMPID.EmpID // 点击Employees屏幕图标时赋值 ), txtSearchTasks.Text, EmpID, FullName, TaskStatus, TaskLocation, TaskCategory, TaskType )
解决方案
修改Filter逻辑,加入对varEMPID的空值判断,兼容两种进入场景:
Search( Filter( tblAllTaskDetails, // 任务状态筛选逻辑:选中状态时匹配,未选中时不限制 (TaskStatus = ddAllTaskStatus.Selected.Result || IsBlank(ddAllTaskStatus.Selected.Result)) && // EmpID筛选逻辑:varEMPID为空时不限制,有值时匹配对应ID (IsBlank(varEMPID) || EmpID = varEMPID.EmpID) ), txtSearchTasks.Text, "EmpID", "FullName", "TaskStatus", "TaskLocation", "TaskCategory", "TaskType" )
关键调整说明
- 用
&&关联任务状态和EmpID的筛选条件,确保两个规则同时生效 - 新增的
IsBlank(varEMPID) || EmpID = varEMPID.EmpID判断:- 从Switchboard进入时,
varEMPID为空,该条件恒成立,显示所有符合任务状态的员工 - 从Employees屏幕进入时,
varEMPID有值,仅匹配对应EmpID的员工
- 从Switchboard进入时,
- 注意:如果
varEMPID是直接存储的EmpID值而非记录,将varEMPID.EmpID改为varEMPID即可
配套变量重置逻辑
- Switchboard屏幕跳转按钮的OnSelect属性:
Set(varEMPID, Blank()); Navigate(TasksScreen) - Employees屏幕图标的OnSelect属性(保持原有逻辑):
Set(varEMPID, ThisItem); Navigate(TasksScreen)
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

