# 渲染预填

事件列表中我们可以看到渲染事件有两种:INSTANCE_RENDERING和STEP_RENDERING。前者用于办理说明页渲染前预处理数据,后者用于步骤渲染时预处理数据。其中后者比较常见,我们就以后者为例说明渲染事件,前者我们只是给出简单代码实现。

# 办理说明页

办理说明页中就根据业务系统中的数据或者特定逻辑显示一些需要预填的内容这个场景并不常见,为此我们需要在Messenger中实现实例渲染事件,并在工作流编辑器中勾选实例的Rendering事件保存。

@Override
public InfoPlusResponse onInstanceRendering(InfoPlusEvent e) {
    Leave form = e.toBean(Leave.class);
    // 这里根据实际需求对表单对象填写数据,将这些数据内容字段放到办理说明页的表单上就能显示了
    return new InfoPlusResponse(e, form);
}
1
2
3
4
5
6

# 步骤渲染页

现在的需求是我们想要在表单上显示一个申请日期标签,显示申请当天的日期。

现在需要做以下几件事情:

  • 在表单上添加这个字段,当然是桌面版和移动版都要添加
  • IDE中设置数据类型为Date,渲染类型为Label
  • 表单对象类Leave中需要添加applyDate成员变量
  • 工作流编辑器中勾选填写申请单节点的Rendering事件并保存流程

开始添加Rendering事件代码,我们需要添加Rendering事件在填写申请单节点(代码是Apply)上,所以方法名称应该是onStepApplyRendering(方法命名规则参见Messenger实现章节),现在将这个方法添加到QuickStartMessenger类中

public InfoPlusResponse onStepApplyRendering(InfoPlusEvent e) {
    Leave form = e.toBean(Leave.class);
    form.setApplyDate(new Date());
    return new InfoPlusResponse(e, form);
}
1
2
3
4
5

渲染效果如图

也许你会问为什么不在Starting事件里做这件事,而要在Rendering事件里这么做呢?那么让我们试想这样的场景,用户发起了请假申请,但是暂时没有提交,只是保存了一下,过了一天后又打开再编辑了一下内容后提交。如果是在Starting事件里初始化申请日期,那么第二天用户打开时候显示的申请日期就是昨天了,显然这不合理,实际申请日期应该是用户提交的那个时刻。所以在Rendering事件里设置申请日期有其合理性,只是这么做其实也没解决提交时候申请日期字段的内容是正确的,试想用户在晚上11点59分填表然后0点2分提交,那么Rendering事件赋的申请日期和实际申请日期还是差了一天,那么就应该用其他事件来解决这个问题了,这在后续章节中将会解决。

# 案例地址

download 流程链接
download 主表单模版
download Messenger代码