PowerApps出现Incompatible types for comparison告警如何排查解决
PowerApps类型不匹配比较警告修复
报错现象
开发PowerApps应用时收到警告提示:
Incompatible types for comparison. These types can't be compared Number,Text.
应用功能可正常运行,但页面顶部会向终端用户显示红色错误告警,触发告警的原公式代码如下:
If( Param("View") = "View", true ) Or (varFormMode <> FormMode.New And (Or( Param("Owner") = LookUp( ID = Param("ID") ).'Group Owner Email', Or( Param("DG") = LookUp( ID = Param("ID") ).'DG Approver Email', Param("Cloud") = LookUp( ID = Param("ID") ).'Cloud Admin Email' ) )))
报错根因
Param()函数所有返回值默认是Text文本类型,公式中ID = Param("ID")的比较逻辑里,数据源的ID字段为Number数字类型,文本和数字直接比较触发类型不匹配校验告警。PowerApps的隐式类型转换虽然能让功能勉强运行,但类型校验不通过就会弹出全局红色提示。- 原公式存在冗余逻辑:重复3次查询同一条ID匹配的记录,额外拖慢加载性能;开头的
If(Param("View") = "View", true)属于多余嵌套,判断表达式本身就返回布尔值,不需要再套If。 - 原公式的
LookUp()函数缺失必填的数据源参数,属于不规范写法。
修复方法
- 用
Value()函数对取到的ID参数做显式类型转换,把文本类型的参数值转为数字类型,再和ID字段做比较。 - 用
With()函数把ID匹配的记录查询结果暂存,只需要查询1次就能取到所有需要的字段值,消除重复查询。 - 移除冗余的If嵌套,补全LookUp的数据源参数,简化逻辑。
修复后的可直接参考的公式如下(注意把替换为你的实际数据源名改成你当前Lookup查询用到的真实数据表名称):
( Param("View") = "View" ) Or ( varFormMode <> FormMode.New And With( { matchedRecord: LookUp(替换为你的实际数据源名, ID = Value(Param("ID"))) }, Param("Owner") = matchedRecord.'Group Owner Email' Or Param("DG") = matchedRecord.'DG Approver Email' Or Param("Cloud") = matchedRecord.'Cloud Admin Email' ) )
替换保存后,类型不匹配的警告会直接消失,顶部红色告警不会再对终端用户展示,同时公式运行性能比原版本更好。
内容的提问来源于stack exchange,提问作者Vibhu Verma
相关产品推荐
相关产品推荐

