0
点赞
收藏
分享

微信扫一扫

Canvas App中列表的选择全选及针对所选择记录执行操作

我是微软Dynamics 365 & Power Platform方面的工程师/顾问罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),这是我的第477篇原创文章,写于2022年8月17日。

今天降解的是一个常见的需求,一个记录列表,可以选择一条或者多条记录,提供全选按钮,可以对选中的记录执行操作,比如批量更新,批量删除等。话不多说,直接上怎么实现的。

首先在屏幕上插入一个垂直的Gallery控件来展示数据,这个Gallery的Items属性我设置为'Test Entities',也就是这个实体的数据,每个列的前面增加一个复选框,这个复选框我命名为 chkSelect 。界面效果如下:

Canvas App中列表的选择全选及针对所选择记录执行操作_Dynamics 365

然后我增加了一个复选框,不在Gallery里面,命名为chkCheckAll,显示文本为全选。

然后我为Gallery里面的chkSelect复选框的Default属性设置为 If(chkCheckAll.Value,true) 。

再增加几个按钮,如下图所示。

Canvas App中列表的选择全选及针对所选择记录执行操作_Dynamics 365_02


第一个按钮,获取选择记录的OnSelect属性我设置如下面代码,比较容易理解,就是将选择的记录筛选出来放到一个collection中,然后告知选择了几条记录。

ClearCollect(
colSelected,
Filter(
Gallery3.AllItems,
ThisRecord.chkSelect.Value
)
);
Notify("选择了" & Text(CountRows(colSelected)) & "条记录!");


第二个按钮,批量更新选择的记录的OnSelect属性我设置为如下代码,第一行代码和前面代码类型,筛选出所有的选择记录,第二个用 ​​ForAll​​ 函数对每个选中的记录做循环处理,ForAll对记录执行的顺序是不定的,这个要注意。使用​​Patch​​函数来更新记录,这个函数的第二个参数我没有用常用的​​LookUp​​函数,而是直接指定了要更新记录的主键值,这个免去了查询,性能应该会好些。最后一行代码​​Refresh​​是必须的,否则界面上看不到效果。

ClearCollect(
colSelected,
Filter(
Gallery3.AllItems,
ThisRecord.chkSelect.Value
)
);
ForAll(
colSelected,
Patch(
'Test Entities',
{'Test Entity':ThisRecord.'Test Entity'},
{整数字段: 100}
)
);
Refresh('Test Entities');


第三个按钮,批量移除选择的记录 的OnSelect属性我设置为如下代码,第一行代码还是类似,获取选择的记录,但是这次我加了​​ShowColumns​​​ 函数,这样创建的collection只有一列,这个为后面的​​RemoveIf​​函数的使用创立了好条件,可以使用in这个操作符,代码简单明了。

ClearCollect(
colSelectedForDelete,
ShowColumns(
Filter(
Gallery3.AllItems,
ThisRecord.chkSelect.Value
),
"ly_testentityid"
)
);
RemoveIf(
'Test Entities',
'Test Entity' in colSelectedForDelete
);
Refresh('Test Entities');


我测试了一下,这个发起的还是批量删除,不是删除一条记录发送一次请求,性能不错,我捕获的请求如下:

--batch_8a4613af-586b-4836-93a2-1a548b568827
Content-Type: application/http
Content-Transfer-Encoding: binary

DELETE ly_testentities%2841eea325-f81d-ed11-b83e-000d3a80ba6a%29 HTTP/1.1
Accept: application/json

--batch_8a4613af-586b-4836-93a2-1a548b568827
Content-Type: application/http
Content-Transfer-Encoding: binary

DELETE ly_testentities%2874421a6d-f81d-ed11-b83e-000d3a80ba6a%29 HTTP/1.1
Accept: application/json

--batch_8a4613af-586b-4836-93a2-1a548b568827
Content-Type: application/http
Content-Transfer-Encoding: binary

DELETE ly_testentities%2875421a6d-f81d-ed11-b83e-000d3a80ba6a%29 HTTP/1.1
Accept: application/json

--batch_8a4613af-586b-4836-93a2-1a548b568827--


举报

相关推荐

0 条评论