Power Apps:JSON函数转换集合时丢失SharePoint空值列求助
核心原因
SharePoint列表的空值字段在Power Apps中会被识别为不存在的属性,而Excel数据源会保留空字段的结构,因此使用JSON()函数转换时,SharePoint来源的空值字段会被自动丢弃。
解决方案
方法1:手动构造记录,强制保留所有字段
放弃使用ShowColumns,改为手动定义每个字段,用Coalesce()函数给空值字段设置默认值(比如空字符串或对应类型的默认值),确保每个字段都存在于记录中:
// 清空现有集合 Clear(ProfileContent); // 手动构造包含所有目标字段的记录,空值替换为默认值 Collect(ProfileContent, { First: Coalesce(CurrentItem.First, ""), Last: Coalesce(CurrentItem.Last, ""), Middle: Coalesce(CurrentItem.Middle, ""), Phone: Coalesce(CurrentItem.Phone, ""), Class: Coalesce(CurrentItem.Class, ""), Score: Coalesce(CurrentItem.Score, 0), // 数字类型用0作为默认值 Grade: Coalesce(CurrentItem.Grade, "") } ); // 转换为JSON Set(ProfileData, JSON(ProfileContent, JSONFormat.FlattenValueTables))
说明:Coalesce()会返回第一个非空值,若原字段为空则使用指定的默认值,保证每个字段都有明确值,JSON转换时不会被丢弃。
方法2:在Power Automate端补全字段
如果不想修改Power Apps的逻辑,可以在Power Automate流程中处理:
- 当接收到Power Apps发送的JSON数据后,手动为每个需要的字段设置值,若字段不存在则用默认值填充。例如在邮件内容中:
姓名:@{if(empty(triggerBody()?['First']), '', triggerBody()?['First'])} @{if(empty(triggerBody()?['Middle']), '', triggerBody()?['Middle'])} @{if(empty(triggerBody()?['Last']), '', triggerBody()?['Last'])} 电话:@{if(empty(triggerBody()?['Phone']), '无', triggerBody()?['Phone'])} - 也可以用
Compose动作预先构造完整的对象,再传递到邮件步骤。
方法3:用AddColumns/UpdateIf强制补全空值字段
如果仍想使用ShowColumns,可以在收集数据后,批量给空值字段赋值:
Clear(ProfileContent); // 收集指定列 Collect(ProfileContent, ShowColumns(CurrentItem, "First", "Last", "Middle", "Phone", "Class", "Score", "Grade")); // 给每个空值字段设置默认值 UpdateIf(ProfileContent, IsBlank(First), {First: ""}); UpdateIf(ProfileContent, IsBlank(Last), {Last: ""}); UpdateIf(ProfileContent, IsBlank(Middle), {Middle: ""}); UpdateIf(ProfileContent, IsBlank(Phone), {Phone: ""}); UpdateIf(ProfileContent, IsBlank(Class), {Class: ""}); UpdateIf(ProfileContent, IsBlank(Score), {Score: 0}); UpdateIf(ProfileContent, IsBlank(Grade), {Grade: ""}); Set(ProfileData, JSON(ProfileContent, JSONFormat.FlattenValueTables))
内容的提问来源于stack exchange,提问作者sharkbait703
相关产品推荐
相关产品推荐

