camunda工作流开发实战------04 请假流程实例

接着上篇hello world 说,之前的流程是一个简单的工作流程 不符合业务逻辑,那么稍微正常的流程图应该怎么设计呢?

首先请假是要设置启动人为申请人--填写请假单--到领导审批--审批之通过之后系统发送通过消息然后结束

 审核不通过则返回重新填写请假单

一、设置启动人为申请人

谁开启的流程实例,那么说明这个人就是请假的申请人 

在开始节点设置开启人 initiator 属性 starter

 在用户任务节点设置任务受理人 属性assignee 设置 ${starter}

设置当前用户为操作人
identityService.setAuthenticatedUserId("admin");

获取全局参数 

starter runtimeService.getVariable("6ade2265-3d3b-11ec-97fd-00ff0eca940e","starter")

关于el表达式详情  camunda表达式语言

 二、填写请假单

填写请假单就要用到camunda的表单功能了

camunda表单分内置动态表单外链表单 只有在开始节点和任务节点是可以添加表单

内置表单

 在xml的表现形式为节点下的extensionElements标签的formData标签下的 formField 

 根据流程实例id 获取开始节点 表单数据

@GetMapping("/getStartFormData")
    public void getStartFormData( String processDefinitionId) {

        StartFormData startFormData = formService.getStartFormData(processDefinitionId);
        List<FormField> formFields = startFormData.getFormFields();
        for (FormField formField : formFields) {
            System.out.println("############");
            System.out.println(formField.getId());
            System.out.println(formField.getValue());
            System.out.println(formField.getType());
            System.out.println(formField.getTypeName());
            System.out.println(formField.getLabel());
            System.out.println(formField.getDefaultValue());
            System.out.println("############");
        }
    }

 根据任务id 获取任务节点表单数据 

 

    @GetMapping("/getTaskFormData")
    public void getTaskFormData(String taskId ) {

        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
        System.out.println(task.getId());

        TaskFormData taskFormData = formService.getTaskFormData(task.getId());
        System.out.println("############");
        System.out.println(taskFormData.getDeploymentId());
        System.out.println(taskFormData.getTask());
        System.out.println(taskFormData.getFormKey());
        List<FormProperty> formProperties = taskFormData.getFormProperties();
        System.out.println(formProperties);
        List<FormField> formFields = taskFormData.getFormFields();
        System.out.println(formFields);
        System.out.println("############");
    }

根据流程实例id 提交开始节点表单 

   public void submitStartForm(String processDefinitionId) {
    
        VariableMap variableMap = Variables.createVariables()
                .putValue("reason", "请假三天")
                .putValue("name", "张三")
        ProcessInstance processInstance = formService.submitStartForm(processDefinitionId, variableMap);
        System.out.println(processInstance);
    }

 根据任务id 提交任务表单

   @GetMapping("/submitTaskForm")
    public void submitTaskForm(String taskId) {
        VariableMap variableMap = Variables.createVariables()
                .putValue("name", "王五")
                .putValue("reason", "年假");

        formService.submitTaskForm(taskId, variableMap);
    }

外置表单

 内置表单的xml表现形式为 节点里面的Formkey 属性 

 获取开始节点表单formkey

  @GetMapping("/getStartFormKey")
    public  void  getStartFormKey(String processDefinitionId){

        String startFormKey = formService.getStartFormKey(processDefinitionId);

        System.out.println("startFormKey:"+startFormKey);

    }

获取任务节点表单formkey

@GetMapping("/getTaskFormKey")
    public  void  getStartFormKey(String processDefinitionId, String taskId){

        String taskFormKey = formService.getTaskFormKey(processDefinitionId, taskId);

        System.out.println("taskFormKey:"+taskFormKey);

    }

  三、

更多请看camunda集成SpringBoot 自定义节点样例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值