sharepoint - 如何基于单个架构更新两个 SharePoint 列表?(电源应用程序)
问题描述
我正在尝试为我正在开发的 PowerApp 创建一个优先队列系统。优先级队列 (RequestPriorityQueue) 存储在包含以下列的 SharePoint 列表中:Title、UniqueID 和 Priority。Title 是代表队列项的 GUID,UniqueID 是队列项的短标识符,Priority 是一个数字,1 是最高优先级。还有一个单独的 SharePoint 列表 (RequestsList) 具有相同的列,以及许多其他表示与队列项关联的数据的列。
我想要做的是使用相同的集合修补这两个 SharePoint 列表,该集合表示由于队列项目的优先级向上或向下移动而导致的优先级发生变化(这会将所有队列项目向上/向下推到队列中/向上)。但是,这似乎不起作用 - 每当我修补优先级列表时,它都会将新项目添加到列表中,而不是使用相同的 Title/UniqueID 更新列表项目 - 我做错了什么?
If(!(ThisItem.Priority = PriorityDropdown.Selected.Value),
ClearCollect(PrioritiesToChange, {Title: "init", UniqueID0: Blank(), Priority: -1});
ForAll(ShowColumns(RequestPriorityQueue, "Title", "UniqueID0", "Priority"), Collect(PrioritiesToChange, {Title: Title, UniqueID0: UniqueID0, Priority: Priority}));
If(ThisItem.Priority > PriorityDropdown.Selected.Value,
ClearCollect(PrioritiesToChange, Filter(PrioritiesToChange, Priority >= PriorityDropdown.Selected.Value && Priority < ThisItem.Priority));
UpdateIf(PrioritiesToChange, true, {Priority: Priority + 1});
UpdateIf(PrioritiesToChange, Title = ThisItem.Title, {Priority: PriorityDropdown.Selected.Value});,
ClearCollect(PrioritiesToChange, Filter(RequestPriorityQueue, Priority <= PriorityDropdown.Selected.Value && Priority > ThisItem.Priority));
UpdateIf(PrioritiesToChange, true, {Priority: Priority - 1});
UpdateIf(PrioritiesToChange, Title = ThisItem.Title, {Priority: PriorityDropdown.Selected.Value});
);
RemoveIf(PrioritiesToChange, Title = "init");
Patch(RequestPriorityQueue, PrioritiesToChange);
Patch(RequestsList, PrioritiesToChange);
Refresh(RequestsList);
Notify("Priority changed");
);
解决方案
终于想通了。诀窍是使用具有与 SharePoint 列表项匹配的 ID 的集合进行修补。对于第一个列表来说这很容易,但是要弄清楚如何更新第二个列表需要一段时间。诀窍是在第一个补丁之后使用第二个列表中的查找更新集合中的 ID(即下面代码中的最后一个 UpdateIf)。
If(!(ThisItem.Priority = PriorityDropdown.Selected.Value),
ClearCollect(PrioritiesToChange, ShowColumns(RequestPriorityQueue, "ID", "Priority", "Title"));
If(ThisItem.Priority > PriorityDropdown.Selected.Value,
ClearCollect(PrioritiesToChange, Filter(PrioritiesToChange, Priority >= PriorityDropdown.Selected.Value && Priority <= ThisItem.Priority));
UpdateIf(PrioritiesToChange, true, {Priority: Priority + 1});
UpdateIf(PrioritiesToChange, Title = ThisItem.Title, {Priority: PriorityDropdown.Selected.Value});,
ClearCollect(PrioritiesToChange, Filter(RequestPriorityQueue, Priority <= PriorityDropdown.Selected.Value && Priority >= ThisItem.Priority));
UpdateIf(PrioritiesToChange, true, {Priority: Priority - 1});
UpdateIf(PrioritiesToChange, Title = ThisItem.Title, {Priority: PriorityDropdown.Selected.Value});
);
Patch(RequestPriorityQueue, ShowColumns(PrioritiesToChange, "ID", "Priority", "Title"));
UpdateIf(PrioritiesToChange, true, {ID: LookUp(RequestsList, RequestsList[@Title] = PrioritiesToChange[@Title]).ID});
Patch(RequestsList, ShowColumns(PrioritiesToChange, "ID", "Priority", "Title"));
Refresh(RequestsList);
Notify("Priority changed");
);
推荐阅读
- javascript - 如何在从函数返回的只读字段中显示值
- html - 使文本和href对齐完美需要适当的css
- php - Laravel Env 文件:如何添加包含空格的文件路径
- amazon-web-services - 反正有没有在红移表中只保留一周的数据
- javascript - 双向视频会议webrtc的问题
- spring-boot - 迁移 spring-boot 1 到 spring-boot 2.2.5,使用 JSP
- java - PreAuthorize 仅适用于 GET 请求
- asp.net-core - 在 ASP.NET Core 3.1 中找不到 Sustainsys /Saml2/Acs url
- node.js - 是否可以将 Sonarqube 集成到 nodejs 项目的 azure devops 管道中?
- db2 - 使用 ODBC 在 ACE 11 ESQL 中访问 DB2 数据库