这个案例也是我们在客户服务中遇到的一个真实案例,客户的需求是需要一个有审批功能的员工差旅报销单,客户采用的方案是使用Power Apps制作表单,使用Dataverse存放数据,并使用Power Automate搭建审批流。

我们首先要做的是在Dataverse中建表,修改表名并设置该表的架构名称。

随后我们把第一列改成自动生成的流水号,同时这一列也是作为整个表的主键的。

之后根据客户需求我们逐个添加所需的字段即可。

添加“申请人”字段的时候,我们可以直接选择一个“查找”类型的字段,并直接关联我们的用户表。

这样申请人字段就可以直接实现下拉选择组织中所有成员的功能

在设置“出差类别”字段时,我们选择单选类型的字段,并设置为自己指定选项值,不联动其他表单的值了。

在设置“住宿天数”字段时,我们可以直接为该字段设置计算值

设置表达式后,即可将该字段自的值设置为自动计算开始日期和结束日期之间相差的天数

至于出发地与目的地,我们与客户商讨后,最后采用的是直接让申请人手动输入填写。

如果想要实现下拉选项的效果,可能需要先维护一个国家与地区的数据库,随后再使用单选类型的字段进行联动了。

之后的各项费用我们直接设置为浮点型字段就好了。

由于我们这个表单是有审批功能的,所以我们还需要在表单中加一个状态字段,用来展示表单的审批状态。

建完底表之后我们就可以开始搭建表单了,我们直接选择从现有数据源开始

这样系统会使用一个模板为我们快速生成一个可用的表单界面,我们只需要在界面中做一些小修改即可。

这就是系统为我们生成的一个模板界面,我们第一步要做的就是将左边的申请单展示栏设置为只能看见本人的申请单。

选中左边这个“库(Gallery)”控件,我们可以看到系统为我们生成页面时在自动添加的数据源,可以看到,这是根据“库”控件上方的搜索栏输入的信息来从我们的差旅报销表中筛选数据

我们只需要在 [@差旅报销表]这个数据源外边加一层额外的过滤器即可

我们将表单中每条记录的创建者的邮箱与当前登陆人的邮箱做一个对比,即可判定当前登陆人是不是这条记录的创建者了。

接下来我们把是否住宿这个选项给改成单选按钮的样式,系统自动给我们生成的是采用了下拉框的形式,一个“是/否”按钮采用下拉框我们感觉有点不太符合直觉。

首先我们添加一个单选按钮控件,然后为其设置选项值(Items)和默认值(Default)。

之后我们先把原本的这个下拉框的控件名给粘走。

再删除原本的下拉框控件,并将单选按钮的控件名改为原本的下拉框控件的控件名。

之后我们再配置一下住宿天数的自动计算值,前边我们在数据库中配置了住宿天数的自动计算值,但那个值没有办法实时地显示在前端,所以我们这里还需要做一下配置。

以及配置一下只有当“是否住宿”字段为“是”时才显示住宿天数的效果

然后设置一下总金额的自动计算与显示模式

接下来我们做一个将表单保存为草稿的功能,表单状态为草稿时将不会触发审批流的运行,申请人可随时修改表单内容,知道点击提交后锁定表单,无法再修改,并且触发审批流程。

我们首先找个位置添加一个暂存按钮,并为该按钮设置表达式。

这个表达式意为将一个名为locIsSubmit的变量的值设置为false,同时提交该表单。

然后再为提交按钮设置表达式。

可以看到提交按钮是将变量locIsSubmit的值设置为true。

然后我们设置“状态”字段的“Update”属性。

这个表达式意为当locIsSubmit变量为true时,状态值为“已提交”,否则状态值为“草稿”。

这样的话我们就实现了点击暂存,状态值自动变为“草稿”,不会触发审批流,而点击提交则状态值变为“已提交”,触发审批流程的效果。

最后设置一下表单已提交或通过后禁止修改表单内容的效果。

这里修改表单是点击上边这个笔的图标。

我们只需要在当当前选择的表单的状态是“已提交”、“审批中”、“通过”时,不让这个笔的图标显示出来即可。

至此,我们的数据库设计和表单搭建基本完成了,下次我们会分享关于这个表单的审批流搭建的相关案例。