Power Apps条码扫描功能失效,JSON解析及Value识别报错求助
问题背景
原功能实现逻辑:
- 条码扫描器
OnScan属性公式:Collect(colBarcodes,Self.Barcodes) - Gallery控件
Items设为colBarcodes,内部文本标签公式:Thisitem.Value
功能自上线后正常运行,2025年2月21日突然失效,出现两个核心错误:
JSON paring error. expected 'object' but got 'array'
Name isn't valid. 'Value' isn't recognized
尝试修改OnScan为Collect(colBarcodes,{Barcode : BarcodeReader1.Barcodes})、文本标签为Thisitem.Barcode后问题仍未解决。
故障原因推测
Power Apps条码扫描器控件的Barcodes属性返回结构发生版本更新:此前该属性返回单个对象(格式为{Value: "条码内容"}),更新后改为返回包含条码对象的数组(格式为[{Value: "条码1"}, {Value: "条码2"}...])。原公式仅适配单个对象结构,无法处理数组类型,因此触发解析错误,同时Gallery因集合记录结构变更无法识别Value字段。
修复方案
方案1:直接适配数组结构(推荐)
修改条码扫描器的OnScan属性公式:
// 可选:若需清空历史扫描记录,保留则删除Clear行 Clear(colBarcodes); // 将数组中的每个条码对象直接存入集合 Collect(colBarcodes, Self.Barcodes)
Gallery及文本标签保持原配置:
- Gallery的
Items属性:colBarcodes - 文本标签公式:
ThisItem.Value
效果:扫描到的每个条码会作为集合的独立记录存储,Gallery可正常遍历显示所有条码内容。
方案2:自定义集合字段名
若需使用自定义字段名(如Barcode),修改OnScan属性公式:
Clear(colBarcodes); // 遍历条码数组,将每个条码值存入自定义字段 ForAll(Self.Barcodes, Collect(colBarcodes, {Barcode: ThisRecord.Value}))
同步修改文本标签公式:
ThisItem.Barcode
验证方法
添加临时标签控件,设置其Text属性为JSON(Self.Barcodes),扫描条码后查看返回结构,确认是否为数组格式,以此验证故障原因并确认修复后的集合结构。
原修改无效的原因
此前尝试的Collect(colBarcodes,{Barcode : BarcodeReader1.Barcodes})是将整个条码数组作为单个记录的Barcode字段存入集合,导致集合中每条记录的Barcode字段是数组类型,而非单个条码值,因此Gallery无法直接解析显示。
内容的提问来源于stack exchange,提问作者Ployphet Veerasak

