这是我在客户服务中遇到的一个真实案例,在此做一个记录,同时也分享一下这个案例与其解决方案。
- 背景说明
客户需要每天定时将已提交并且审批通过,或者被拒绝的表单数据导出到Excel表中,说白了就是导出流程已完成的表单。
这也算是个比较常见的需求了。
- 功能实现
这里我使用Dataverse来进行演示,我们这里有“表单状态”字段,流程是否完成可以通过这个字段来判断,因为我们在表单的审批流中设置了在结束时更新当前表单的状态的功能,审批人点了拒绝,那么表单的状态就是拒绝,流程结束;所有审批人都点了同意,那么在最后表单的状态就是通过,流程结束。
接下来我们需要判断一下这个表单是否已经被导出过了,当然我们可以直接在Power Automate中设置筛选,让“列表行”节点只获取到前一天的数据。
但首先,客户提出这个需求时其实这个表单和流程已经运行了一段时间了,如果这样配置的话,那么客户之前提交的所有表单都没法自动导出了;其次,我们感觉这样的话还是不太稳妥。
所以我们在表单中加入了一列用来标记表单是否已导出。
当一个表单被导出过一次之后,这一列的值就会被改为“是”,这样我们就可以在导出的流程中判断这一列的值是否为“否”,值为“否”了才会被导出。
之后我们在Power Automate中选择建立一个计划的云端流,即定时自动触发的流程,按照客户的需求设置为每天的早上9点触发流程。
然后我们直接获取Dataverse对应表中的数据,这里也是可以获取SharePoint List中的数据的,设置方式都是一样的。在这个获取数据的节点中我们设置过滤器,只获取流程已完成并且没有导出过的表单。注意如果要对下拉单选类型的列做判断的话,不能直接跟选项标签做判断。
同时要注意也不能直接用列名做对比,如果是Dataverse数据源就填逻辑名称。
如果是SharePoint List数据源可以这样看正确的列名。
然后我们对这个节点的返回值做一下判断,如果返回的有值(返回值长度不为0),那么就说明有符合我们要求的数据需要导出,此时我们再在“如果是”的分支设置到处相关的节点,否则的话流程直接结束(“如果不是”分支不执行任何操作)。
然后我们可以使用Data Operation中的“选择”节点来生成一个Map。
之后再使用Data Operation节点生成一个csv表格。
再然后我们就可以在SharePoint或者OneDrive之类的地方生成文件了,这里我选择生成文件到OneDrive中,同时我会在文件名后边加上当天日期,以确保不会因为重名文件导致生成失败,文件的内容就写我们刚刚生成的那个csv表格即可,注意文件内容需要做一下防乱码处理。
最后将本次导出的全部数据的“是否已导出字段”全部改成“是”,数据源直接用前面获取数据节点所拿到的所有数据即可,毕竟哪些数据就是我们本次导出的全部数据。