heidsoft / devops

devops 经验总结实践与产品化
81 stars 44 forks source link

flowable 流程引擎 #134

Open heidsoft opened 9 months ago

heidsoft commented 9 months ago

Flowable是一个基于Java的轻量级业务流程引擎,适用于部署BPMN 2.0,CMNN,DMN和CMMN等流程模型。在流程审批和流程流转上,Flowable主要通过以下几个步骤来完成:

  1. 流程定义:首先需要使用Flowable提供的建模工具或XML来定义一个流程。这个流程包含了一系列的任务(Task),事件(Event)以及它们之间的流向(Sequence Flow)。

  2. 流程部署:将定义好的流程部署到Flowable引擎中,Flowable会将流程定义转换为可执行的流程实例。

  3. 流程启动:通过API启动一个流程实例,启动的时候可以传入一些参数,比如流程的发起人,审批人等。

  4. 流程流转:每个任务在完成时,会按照预定义的流向转移到下一个任务。如果遇到分支(Gateway),Flowable会根据设定的条件选择一个或多个分支继续执行。

  5. 任务处理:处理任务主要是完成任务的审批工作,审批结果可能影响流程的流向。Flowable提供了TaskService来进行任务的查询,完成,指派等操作。

  6. 流程结束:当流程到达预定义的结束事件时,流程实例就会结束。Flowable会保存流程实例的执行历史,方便后续的查询和分析。

通过以上步骤,Flowable可以实现流程的审批和流转。同时,Flowable还提供了一套丰富的API和事件机制,支持流程的动态修改,流程变量的管理,以及与外部系统的集成。

以下是使用Flowable执行的基本流程操作的Java代码示例:

  1. 流程定义

    public void createProcessDefinition() {
    BpmnModel model = new BpmnModel();
    Process process = new Process();
    model.addProcess(process);
    process.setId("myProcess");
    process.setName("My Process");
    
    StartEvent startEvent = new StartEvent();
    startEvent.setId("startEvent");
    process.addFlowElement(startEvent);
    
    UserTask userTask = new UserTask();
    userTask.setName("User Task");
    userTask.setId("userTask");
    process.addFlowElement(userTask);
    
    EndEvent endEvent = new EndEvent();
    endEvent.setId("endEvent");
    process.addFlowElement(endEvent);
    
    process.addFlowElement(new SequenceFlow("startEvent", "userTask"));
    process.addFlowElement(new SequenceFlow("userTask", "endEvent"));
    }
  2. 流程部署

    public void deployProcess() {
    Deployment deployment = repositoryService.createDeployment()
      .addClasspathResource("path-to-your-bpmnfile.bpmn20.xml")
      .deploy();
    }
  3. 流程启动

    public void startProcess() {
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");
    }
  4. 流程流转

    public void transitionProcess() {
    TaskService taskService = processEngine.getTaskService();
    Task task = taskService.createTaskQuery().singleResult();
    System.out.println("Current Task : " + task.getName());
    taskService.complete(task.getId());
    task = taskService.createTaskQuery().singleResult();
    System.out.println("Task after transition : " + task.getName());
    }
  5. 任务处理

    public void handleTask() {
    TaskService taskService = processEngine.getTaskService();
    Task task = taskService.createTaskQuery().singleResult();
    System.out.println("Handling Task : " + task.getName());
    taskService.complete(task.getId());
    }
  6. 流程结束

    public void endProcess() {
    TaskService taskService = processEngine.getTaskService();
    Task task = taskService.createTaskQuery().singleResult();
    while (task != null) {
        System.out.println("Task available : " + task.getName());
        taskService.complete(task.getId());
        task = taskService.createTaskQuery().singleResult();
    }
    System.out.println("Process ended");
    }

以上代码中的 "myProcess" 是流程定义的ID,"path-to-your-bpmnfile.bpmn20.xml" 是你的流程定义文件的路径. 请根据你的实际情况修改这些值. 你还需要确保在执行这些操作之前已经初始化了ProcessEngine.

heidsoft commented 9 months ago

34张表说明:

表分类 | 表名 | 表说明 -- | -- | -- 一般数据(2) | ACT_GE_BYTEARRAY | 通用的流程定义和流程资源 ACT_GE_PROPERTY | 系统相关属性 流程历史记录(8) | ACT_HI_ACTINST | 历史的流程实例 ACT_HI_ATTACHMENT | 历史的流程附件 ACT_HI_COMMENT | 历史的说明性信息 ACT_HI_DETAIL | 历史的流程运行中的细节信息 ACT_HI_IDENTITYLINK | 历史的流程运行过程中用户关系 ACT_HI_PROCINST | 历史的流程实例 ACT_HI_TASKINST | 历史的任务实例 ACT_HI_VARINST | 历史的流程运行中的变量信息 用户用户组表(9) | ACT_ID_BYTEARRAY | 二进制数据表 ACT_ID_GROUP | 用户组信息表 ACT_ID_INFO | 用户信息详情表 ACT_ID_MEMBERSHIP | 人与组关系表 ACT_ID_PRIV | 权限表 ACT_ID_PRIV_MAPPING | 用户或组权限关系表 ACT_ID_PROPERTY | 属性表 ACT_ID_TOKEN | 系统登录日志表 ACT_ID_USER | 用户表 流程定义表(3) | ACT_RE_DEPLOYMENT | 部署单元信息 ACT_RE_MODEL | 模型信息 ACT_RE_PROCDEF | 已部署的流程定义 运行实例表(10) | ACT_RU_DEADLETTER_JOB | 正在运行的任务表 ACT_RU_EVENT_SUBSCR | 运行时事件 ACT_RU_EXECUTION | 运行时流程执行实例 ACT_RU_HISTORY_JOB | 历史作业表 ACT_RU_IDENTITYLINK | 运行时用户关系信息 ACT_RU_JOB | 运行时作业表 ACT_RU_SUSPENDED_JOB | 暂停作业表 ACT_RU_TASK | 运行时任务表 ACT_RU_TIMER_JOB | 定时作业表 ACT_RU_VARIABLE | 运行时变量表 其他表(2) | ACT_EVT_LOG | 事件日志表 ACT_PROCDEF_INFO | 流程定义信息

1.1.4、日志配置