Flowable 外部表单

  • 内置表单需要在每个节点中去配置,当如果多个节点使用同一套表单属性就要配置多次比较麻烦,修改的时候也要修改多次,外部表单可以定义一次,然后其它节点都去引用同一个表单属性。

  • 外部表单需要定义一个.form后缀的文件。

  • 外部表单不需要在每个节点去指定From属性,而是在每个节点指定Form Key属性即可。

定义.form

FormLeaveProcess.form

json 复制代码
{
  "key":"FormLeaveProcess",
  "name": "请假流程外部表单",
  "fields": [
    {
      "id": "startTime",
      "name": "请假开始时间",
      "type": "date",
      "required": true,
      "placeholder": "empty"
    },
    {
      "id": "endTime",
      "name": "请假结束时间",
      "type": "date",
      "required": true,
      "placeholder": "empty"
    },
    {
      "id": "reason",
      "name": "请假原因",
      "type": "string",
      "required": false,
      "placeholder": "empty"
    }
  ]
}

配置Form Key

部署流程和部署表单

java 复制代码
@Autowired
private RepositoryService repositoryService;

@Autowired
private FormRepositoryService formRepositoryService;

@Test
void deployFormProcess() {
	// 1.部署流程
    Deployment deploy = repositoryService.createDeployment()
            .addClasspathResource("processes/FormLeaveProcess.bpmn20.xml")
            .name("外部表单请假流程")
            .deploy();
    // 2.部署表单
    formRepositoryService.createDeployment()
            .addClasspathResource("processes/FormLeaveProcess.form")
            .name("请假流程外部表单")
            .parentDeploymentId(deploy.getId())
            .deploy();
}

启动流程

java 复制代码
@Autowired
private RuntimeService runtimeService;

@Test
void startProcess() {
    String processDefinitionId = "FormLeaveProcess:2:48920686-8145-11ee-b7ee-0a0a3d6982e3";
    runtimeService.startProcessInstanceWithForm(processDefinitionId, "表单请假流程outcome", null, "huihui的请假流程");
}

完成表单任务

java 复制代码
@Test
void completeFormTask() {
    Map<String, Object> variables = new HashMap<>();
    variables.put("startTime", "20221111");
    variables.put("endTime", "20231110");
    variables.put("reason", "活着不是为了工作,工作是为了活得更有意义");

    String taskId = "0f273f73-8149-11ee-b15c-0a0a3d6982e3";
    String formDefinitionId = "652cb868-8145-11ee-a2f0-0a0a3d6982e3";
    taskService.completeTaskWithForm(taskId, formDefinitionId, "huihui", variables);
}

获取任务对应的表单数据

java 复制代码
@Test
void getTaskFormData() {
    FormInfo taskFormModel = taskService.getTaskFormModel("0f273f73-8149-11ee-b15c-0a0a3d6982e3");
    System.out.println(taskFormModel.getId() + "-" + taskFormModel.getName() + "-" + taskFormModel.getKey());
    SimpleFormModel simpleFormModel = (SimpleFormModel)taskFormModel.getFormModel();
    List<FormField> fields = simpleFormModel.getFields();
    for (FormField field : fields) {
        System.out.println(field.getId() + ":" + field.getType() + ":" + field.getName() + ":" + field.getValue());
    }
}
相关推荐
RuoyiOffice20 小时前
SpringBoot OA推荐:面向信创选型,看看这套企业协同平台
spring boot·vue3·信创·flowable·企业协同·ruoyi office·oa选型
RuoyiOffice3 天前
Flowable 状态通知设计:单体用本地事件,微服务如何回写业务状态?
spring boot·微服务·vue3·flowable·ruoyi office·redis stream·流程状态通知
RuoyiOffice4 天前
项目预算和交付日期变了,为什么不能直接改台账?
spring boot·项目管理·vue3·flowable·业务建模·ruoyi office·项目变更
RuoyiOffice5 天前
SpringBoot+Vue3 单据校验设计:保存草稿、提交审批、退回重填,各该检查什么?
spring boot·vue3·flowable·表单设计·ruoyi office·草稿保存·单据校验
RuoyiOffice1 个月前
SpringBoot3+Vue3 低代码业务表单:从拖拽设计、独立建表到审批与数据查询
spring boot·vue3·数据建模·flowable·版本管理·低代码表单·ruoyi office
大龄码农有梦想1 个月前
企业工作流系统如何设计用户、部门、角色、岗位、动态关系五类流程办理人?
工作流引擎·flowable·流程引擎·oa·工作流系统·选人规则·bpm平台
RuoyiOffice1 个月前
SpringBoot3+Vue3 流程抄送已读:打开详情消红点,待办与知会怎么分开
spring boot·vue3·flowable·spring boot 3·ruoyi office·流程抄送·已读回执
RuoyiOffice1 个月前
SpringBoot3+Vue3+Flowable 企业审批平台全链路:从表单设计、节点权限到移动审批怎么落地
spring boot·vue3·uniapp·springboot3·flowable·审批系统·ruoyi office
凤山老林1 个月前
Spring Boot 整合 Flowable 的企业级落地指南
数据库·spring boot·后端·flowable·工作流
RuoyiOffice2 个月前
SpringBoot3+Vue3 最推荐的开源 OA 系统 2026:流程驱动、资源闭环、多端互通
spring boot·vue3·flowable·oa·协同办公·spring boot 3·开源oa