PowerApps启动时从SharePoint加载用户设置并创建缺失记录报错
原代码的问题点
- 逻辑颠倒:
IsBlankOrError判断成立时(即找不到用户记录),你写的是再次查找记录,而不是创建新记录 - 函数误用:
Collect是用来添加多条记录到集合的,用户设置是单条数据,用Set更合适 - 未写入SharePoint:原代码只是构造了新记录的对象,但没有真正把这条记录写入到SharePoint列表中
- 必填字段问题:SharePoint的
Title字段默认是必填项,不能设为空字符串"" - 列表名称不一致:代码里同时出现了
SharepointListName和IntegrationReporting-UserSettings,必须统一成实际的列表名称
修正后的OnStart代码
// 缓存当前用户邮箱,减少重复调用User()函数 Set(varCurrentUserEmail, User().Email); // 查找当前用户已有的设置记录 Set(varExistingSettings, LookUp('IntegrationReporting-UserSettings', Email = varCurrentUserEmail)); // 无记录则创建新记录,最终将用户设置存入变量 If( IsBlankOrError(varExistingSettings), // 创建新记录并同步到变量 Set(UserSettings, Patch( 'IntegrationReporting-UserSettings', Defaults('IntegrationReporting-UserSettings'), { Title: varCurrentUserEmail, // 用邮箱填充必填的Title,也可改为用户全名 Email: varCurrentUserEmail, DarkMode: false, // Y/N类型直接用布尔值,PowerApps会自动映射到SharePoint的Y/N Theme: "Green" } )), // 已有记录则直接赋值 Set(UserSettings, varExistingSettings) )
关键说明
- 缓存用户邮箱:避免多次调用
User().Email,提升应用启动性能 - Patch创建记录:
Defaults()函数会获取列表的默认字段配置,确保新记录符合列表要求 - Title字段处理:由于SharePoint默认要求
Title必填,这里用用户邮箱填充,你也可以根据需求改成用户的显示名称(比如User().FullName) - 字段类型匹配:
DarkMode是Y/N类型,直接用true/false布尔值即可,PowerApps会自动转换为SharePoint的Y/N格式 - 单条记录用Set:用户设置是单条数据,用
Set存储后,后续可以直接通过UserSettings.DarkMode、UserSettings.Theme来引用设置值
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

