Power Apps多If语句失效求助(基于SharePoint数据)
Power Apps 多条件If语句失效问题解决
问题描述
基于SharePoint列表数据实现多条件颜色判断,单个If语句可正常运行,但多条件If无法按预期生效:
可运行代码(单条件)
If( IsBlank(LookUp(RP_Tasks_SPList, Task_Owner = Label3.Text && Task_Type_Short="FLT" && Text(DateValue(Date_of_Task_From), "yyyy-mm-dd") = Text(DateTimeValue(Button2_2.Text), "yyyy-mm-dd"))), Color.AliceBlue, Color.DarkRed )
失效代码(多条件)
If( IsBlank(LookUp(RP_Tasks_SPList, Task_Owner = Label3.Text && Task_Type_Short="FLT" && Text(DateValue(Date_of_Task_From), "yyyy-mm-dd") = Text(DateTimeValue(Button2_2.Text), "yyyy-mm-dd"))), Color.YellowGreen, IsBlank(LookUp(RP_Tasks_SPList, Task_Owner = Label3.Text && Task_Type_Short="MCE" && Text(DateValue(Date_of_Task_From), "yyyy-mm-dd") = Text(DateTimeValue(Button2_2.Text), "yyyy-mm-dd"))), Color.DarkGreen, Color.DarkRed )
问题原因
Power Apps的If函数是顺序判断逻辑:只要第一个条件不成立(即FLT任务存在),就会直接跳过后续所有条件判断,返回最后一个默认值Color.DarkRed,MCE任务的存在性判断完全没机会触发。
修正方案
根据常见需求场景,提供两种修正代码:
场景1:优先判断FLT,再判断MCE
逻辑:FLT任务不存在→YellowGreen;FLT存在但MCE不存在→DarkGreen;两者都存在→DarkRed
If( // 先判断FLT是否不存在 IsBlank(LookUp(RP_Tasks_SPList, Task_Owner = Label3.Text && Task_Type_Short="FLT" && Text(DateValue(Date_of_Task_From), "yyyy-mm-dd") = Text(DateTimeValue(Button2_2.Text), "yyyy-mm-dd"))), Color.YellowGreen, // FLT存在时,再判断MCE是否不存在 If( IsBlank(LookUp(RP_Tasks_SPList, Task_Owner = Label3.Text && Task_Type_Short="MCE" && Text(DateValue(Date_of_Task_From), "yyyy-mm-dd") = Text(DateTimeValue(Button2_2.Text), "yyyy-mm-dd"))), Color.DarkGreen, // 两者都存在 Color.DarkRed ) )
场景2:优先判断MCE,再判断FLT
逻辑:MCE任务不存在→DarkGreen;MCE存在但FLT不存在→YellowGreen;两者都存在→DarkRed
If( IsBlank(LookUp(RP_Tasks_SPList, Task_Owner = Label3.Text && Task_Type_Short="MCE" && Text(DateValue(Date_of_Task_From), "yyyy-mm-dd") = Text(DateTimeValue(Button2_2.Text), "yyyy-mm-dd"))), Color.DarkGreen, IsBlank(LookUp(RP_Tasks_SPList, Task_Owner = Label3.Text && Task_Type_Short="FLT" && Text(DateValue(Date_of_Task_From), "yyyy-mm-dd") = Text(DateTimeValue(Button2_2.Text), "yyyy-mm-dd"))), Color.YellowGreen, Color.DarkRed )
性能优化建议:减少重复查询
重复调用LookUp会降低运行效率,建议先把查询结果存入变量,再用变量判断:
// 可在控件OnVisible或页面加载时执行以下变量赋值 Set( varHasFLT, !IsBlank(LookUp(RP_Tasks_SPList, Task_Owner = Label3.Text && Task_Type_Short="FLT" && Text(DateValue(Date_of_Task_From), "yyyy-mm-dd") = Text(DateTimeValue(Button2_2.Text), "yyyy-mm-dd"))) ); Set( varHasMCE, !IsBlank(LookUp(RP_Tasks_SPList, Task_Owner = Label3.Text && Task_Type_Short="MCE" && Text(DateValue(Date_of_Task_From), "yyyy-mm-dd") = Text(DateTimeValue(Button2_2.Text), "yyyy-mm-dd"))) ); // 用变量完成判断 If( !varHasFLT, Color.YellowGreen, !varHasMCE, Color.DarkGreen, Color.DarkRed )
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

