我正在尝试为我正在开发的PowerApp创建一个优先级队列系统。优先级队列(RequestPriorityQueue)存储在以下列的SharePoint列表中: Title、UniqueID和Priority。Title是表示队列项的GUID,UniqueID是队列项的简短标识符,priority是一个数字,1是最高优先级。还有一个单独的队列列表( SharePoint list,RequestsList),其中包含相同的列,以及许多其他列,这些列表示与队列项相关联的数据。
我正在尝试做的是用相同的集合修补这两个SharePoint列表,该集合表示由于队列项的优先级向上或向下移动(这会将队列上/下的所有队列项推上/上推)而更改的优先级。然而,这似乎不起作用-每当我修补优先级列表时,它都会向列表中添加新的项,而不是更新具有相同标题/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");
);
发布于 2021-11-22 21:06:17
终于想明白了。诀窍是使用ID与SharePoint列表项相匹配的集合来打补丁。这对于第一个列表来说很简单,但它花了一段时间才弄清楚如何更新第二个列表。这里的诀窍是在第一个补丁之后通过查找第二个列表(即下面代码中的最后一个UpdateIf )来更新集合中的in。
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");
);
https://stackoverflow.com/questions/69831262
复制相似问题