工作流之Camunda开发记录(二)---- 用户任务、服务任务、全局变量的使用

Camunda错误边界事件与用户任务结合使用 使用Camunda错误边界事件(Error boundary event)与用户任务(User task)处理流程异常与修复 阅读详情
前言

上篇文章我们简单介绍了工作流的发布与启动

直通车

这篇文章 我们介绍几种常用任务与全局变量的使用
全局变量会穿插在任务中介绍 不会单独列出来了奥

用户任务

用户任务 可以理解为我们常说的审批,工作流本身的意义在于自动执行某些业务逻辑,然而用户任务打断了所谓的自动,用户任务需要用户进行审批通过才能继续执行当前流程实例

既然是需要审批的 那么就需要一个审批人,这个审批人Camunda 本身是维护一个用户列表的 但是使用中肯定是不方便的,我看其他有些人是通过把自己的用户信息同步到Camunda自己的表中进行设置,这样肯定是不方便的。
所以我是通过在用户任务的逻辑来获取自己业务中的用户信息进行判断,我们还是把Camunda 想象成一个壳子,不参与任务业务逻辑的判断。

下面来看一下我是怎么做的

首先用户任务xml信息
<bpmn:userTask id=“usertask_1” name=“usertask111” camunda:assignee="#{demoTask.fun1(s1)}">
bpmn:incomingFlow_0u8v6zi</bpmn:incoming>
bpmn:outgoingFlow_1cjr3j9</bpmn:outgoing>
</bpmn:userTask>
其中Camunda:assignee 的意思是调用一个外部方法
这里的类是Spring容器中的类名 加上具体的方法名称即可,而且可以添加参数,这里的参数就是全局参数
我们一步步来
首先 看DemoTask类

@Component
public class DemoTask {
    public String fun1(String s1) {
        System.out.println("fun1 run " + s1);
        return s1;
    }
}

这里就提到了全局参数这个东西,全局参数贯穿工作流整体
首先在启动任务时可以设置全局参数 具体可以参考上一篇文章中的启动流程
直通车
我们在这里获取同名参数即可,他可以是一个对象 也可以是一个基本数据类型。

这里有一点需要注意的 就是如果想使用这个标签内属性,需要在xml头部添加信息,这里我列出我的所有xml头部信息,仅供参考

<bpmn:definitions xmlns:bpmn=“http://www.omg.org/spec/BPMN/20100524/MODEL”
xmlns:bpmndi=“http://www.omg.org/spec/BPMN/20100524/DI”
xmlns:dc=“http://www.omg.org/spec/DD/20100524/DC” xmlns:di=“http://www.omg.org/spec/DD/20100524/DI”
xmlns:camunda=“http://camunda.org/schema/1.0/bpmn” id=“Definitions_demo4”
targetNamespace=“http://bpmn.io/schema/bpmn” exporter=“Camunda Modeler” exporterVersion=“4.6.0”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://camunda.org/schema/1.0/bpmn”>

这样我们就可以通过全局变量传入我们自己的用户信息,在fun1()方法中进行判断,因为我不是这样实现的 所以仅供参考,另一种方法会在服务任务中一起介绍

服务任务与全局变量

我的业务逻辑中 需要服务任务做的东西很多,包括设置全局参数,调用脚本任务等等,虽然在前端时各种奇怪的任务类型,在后端只有一种任务类型 那就是服务任务,服务任务与用户任务最大的区别就是服务任务是自动执行的。
举例说明:
前端有三个节点信息,第一个节点设置全局参数,第二个节点调用脚本任务有输出信息,第三个也是调用脚本任务需要用到第一步的输入与第二步的输出,这里的交互主要就是通过全局参数实现的

首先

还是调用外部任务 上面的用户任务介绍了调用一个外部类的某一个方法,这个在服务任务也是可以使用的,但是有诸多不便,所以这里我们使用另一种方法,通过实现camunda内置的一个接口来实现
xml如下:

<bpmn:serviceTask id=“serviceTask_1” camunda:class=“com.xiangfu.core.workflow.DemoTask”>
bpmn:incomingFlow_136z0w9</bpmn:incoming>
bpmn:outgoingFlow_0d7jz10</bpmn:outgoing>
</bpmn:serviceTask>

这里的Camunda:class 后面的类是全路径
我们看一下这个类 升级了

@Component
public class DemoTask implements JavaDelegate, Serializable {

    @Autowired
    private HttpClientUtil httpClientUtil;

    public String fun1(String s1) {
        System.out.println("fun1 run " + s1);
        return s1;
    }

    public void fun2(String s2) {
        System.out.println("fun2 run " + s2);
    }

    @Override
    public void execute(DelegateExecution execution) throws Exception {
        DemoParam s1 = (DemoParam)execution.getVariable("s1");
        ResponseEntity<String> stringResponseEntity = httpClientUtil.postRequest("https://api.apiopen.top/getJoke?page=1&count=2&type=video", "application/json", null, null);
        System.out.println(stringResponseEntity);
        s1.setName(stringResponseEntity.toString());

        execution.setVariable("1", true);
    }
}


@Component
public class DemoTask2 implements JavaDelegate, Serializable {

    public String fun1(String s1) {
        System.out.println("fun1 run " + s1);
        return s1;
    }

    public void fun2(String s2) {
        System.out.println("fun2 run " + s2);
    }

    @Override
    public void execute(DelegateExecution execution) throws Exception {
        DemoParam s1 = (DemoParam)execution.getVariable("s1");
        System.out.println("----s1=" + s1);
    }
}

这里我也再放一下另一个类 因为他们俩是有交互,细心的朋友一眼应该就能看出来

我通过http请求在demo1中请求了一些信息并设置到全局变量中 ps:这个util就不外放了 若此url有侵犯到其他利益请与我沟通
在demo2中我通过全局变量信息取到了这个设置的信息
说的大一点就是可以在运行中 两个节点之间传递各自的信息,当然肯定是后面的节点拿前面节点的信息

这里需要实现一个javaDelegate接口
需要实现一个execute()方法
这个参数信息很好玩
需要的朋友可以自己玩一玩,他可以取到执行的定义id,实例id,当前任务id,包括在启动任务时设置的全局变量都可以取到 部分代码在下面 需要自取

// 处理参数 其中每个实例execution id 都是相同的
        Map<String, Object> variables = runtimeService.getVariables(execution.getId());
        // taskXmlId 查询task Variable
        String taskXmlId = ((ExecutionEntity) execution).getActivityId();
        String workflowId = variables.get(WORKFLOWID_STR).toString();

上面的代码variables这个映射就是整个流程实例的全局参数,通过id去判断时哪个实例设置的参数,所有的业务逻辑都在这个execute中实现。几乎不会用到工作流本身任何的业务信息 用户任务也是可以这样的使用的

这里我给一下完整的xml信息 仅供参考

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
                  xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
                  xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
                  xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_demo4"
                  targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.6.0"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://camunda.org/schema/1.0/bpmn">
    <bpmn:process id="Process_0cj7ee6" isExecutable="true">
        <bpmn:startEvent id="StartEvent_1">
            <bpmn:outgoing>Flow_136z0w9</bpmn:outgoing>
        </bpmn:startEvent>
        <bpmn:sequenceFlow id="Flow_136z0w9" sourceRef="StartEvent_1" targetRef="serviceTask_1" />
        <bpmn:serviceTask id="serviceTask_1" camunda:class="com.xiangfu.core.workflow.DemoTask">
            <bpmn:incoming>Flow_136z0w9</bpmn:incoming>
            <bpmn:outgoing>Flow_0d7jz10</bpmn:outgoing>
        </bpmn:serviceTask>
        <bpmn:exclusiveGateway id="Gateway_1ch9i3u">
            <bpmn:incoming>Flow_0d7jz10</bpmn:incoming>
            <bpmn:outgoing>Flow_00c78zu</bpmn:outgoing>
            <bpmn:outgoing>Flow_1clatpr</bpmn:outgoing>
        </bpmn:exclusiveGateway>
        <bpmn:sequenceFlow id="Flow_0d7jz10" sourceRef="serviceTask_1" targetRef="Gateway_1ch9i3u" />
        <bpmn:sequenceFlow id="Flow_00c78zu" sourceRef="Gateway_1ch9i3u" targetRef="Activity_0yg6kty">
            <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{s3&gt;1}</bpmn:conditionExpression>
        </bpmn:sequenceFlow>
        <bpmn:serviceTask id="Activity_0yg6kty" camunda:class="com.xiangfu.core.workflow.DemoTask2">
            <bpmn:incoming>Flow_00c78zu</bpmn:incoming>
        </bpmn:serviceTask>
        <bpmn:sequenceFlow id="Flow_1clatpr" sourceRef="Gateway_1ch9i3u" targetRef="Activity_0sl94zs">
            <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{true}</bpmn:conditionExpression>
        </bpmn:sequenceFlow>
        <bpmn:serviceTask id="Activity_0sl94zs" camunda:expression="#{demoTask.fun1(s1)}">
            <bpmn:incoming>Flow_1clatpr</bpmn:incoming>
        </bpmn:serviceTask>
    </bpmn:process>
    <bpmndi:BPMNDiagram id="BPMNDiagram_1">
        <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_0cj7ee6">
            <bpmndi:BPMNEdge id="Flow_136z0w9_di" bpmnElement="Flow_136z0w9">
                <di:waypoint x="215" y="117" />
                <di:waypoint x="270" y="117" />
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge id="Flow_0d7jz10_di" bpmnElement="Flow_0d7jz10">
                <di:waypoint x="370" y="117" />
                <di:waypoint x="425" y="117" />
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge id="Flow_00c78zu_di" bpmnElement="Flow_00c78zu">
                <di:waypoint x="475" y="117" />
                <di:waypoint x="530" y="117" />
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge id="Flow_1clatpr_di" bpmnElement="Flow_1clatpr">
                <di:waypoint x="450" y="142" />
                <di:waypoint x="450" y="230" />
                <di:waypoint x="530" y="230" />
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
                <dc:Bounds x="179" y="99" width="36" height="36" />
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="Activity_1ksiteo_di" bpmnElement="serviceTask_1">
                <dc:Bounds x="270" y="77" width="100" height="80" />
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="Gateway_1ch9i3u_di" bpmnElement="Gateway_1ch9i3u" isMarkerVisible="true">
                <dc:Bounds x="425" y="92" width="50" height="50" />
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="Activity_0xjkxrd_di" bpmnElement="Activity_0yg6kty">
                <dc:Bounds x="530" y="77" width="100" height="80" />
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="Activity_02x1ews_di" bpmnElement="Activity_0sl94zs">
                <dc:Bounds x="530" y="190" width="100" height="80" />
            </bpmndi:BPMNShape>
        </bpmndi:BPMNPlane>
    </bpmndi:BPMNDiagram>
</bpmn:definitions>

好了到这里服务任务与用户任务 包括全局变量的两种设置方法 也完事了
camunda 的基本日常使用也应该OK 了 如果有什么需要讨论的 欢迎留言分享

camunda框架学习(六)任务节点系列 节点:开始节点、结束节点、活动节点、等待活动节点、不等待活动节点 任务:个人任务、组任务、任务认领、任务归还、监听器使用、角色组使用 一、节点说明 开始节点: 结束节点: 节点说明: 二、userTask任务的两种处理方式 用户个人任务: TaskService类 直接指定办理人: 个人任务查询与完成: 使用变量: 在启动流程时,需要指定变量,变量存在ACT_RU_VARIABLE中 @Test public void startProcessInstanceByKey() 阅读详情

相关推荐

Camunda工作流引擎一

基于SpringBoot 应用 的 Camunda 工作流引擎 教程

qq_42758551的博客 1万+

camunda流程引擎如此简单(二)

工作流服务组件和表介绍 camudna是从activity分裂出来的其实绝大多数表和activity也一致的,所以用户能很好地从activity迁移过来 几大服务介绍 服务名称 描述 RepositoryService Activiti 中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据 ( 例如 BPMN2.0 XML 文件,表单定义文件,流程定义图像文件等 ),这些文件都存储在 Activiti 内建的 Repository 中。Repository Servic

qq_35789269的博客 2347

camunda入门教程及实现原理

camunda流程引擎介绍及使用

xiaolong2230的博客 3万+

Camunda流程运行中,需要更换UserTask的被订阅者

主要应用于实际开发中,考虑到会有人员调动的情况。

qq_70835082的博客 419

工作流之Camunda开发记录(一)----常用API与流程

它是什么 一种工作流引擎,是Activiti的变种,他怎么来的其他很多地方有介绍 我不怎么关心 做什么 我本次记录的是作为工作流引擎使用 进行二次封装开发 只用他的一个壳子 具体流程是: 1、前端传他自己的Json结构。当然必要时需要添加后端定制化的东西 2、后端解析为Camunda识别的Json结构 3、解析中需要通过camunda 的 用户任务与服务任务调用自己业务的逻辑 4、发布流程定义

java_ying的博客 1万+

Camunda工作流引擎之bpmn设计器定制

Camunda工作流引擎之bpmn设计器定制 在 Vue.js应用中,基于 bpmn-js. 定制 vue-bpmn-modeler 前段时间,由于公司业务需要工作流引擎,但是由于之前的工作流引擎是第三方付费的,又遇到客户需要本地地方部署,所以需要再次购买,加上原来的工作流引擎并不是很好用(CS架构设计器,跟业务系统不能很好的集成),所以决定重新定制开发,在activity、flowable、ca...

all in 浮现 8595

Camunda工作流引擎二

本篇将在上一篇应用的基础上开发一个最基本的 ”流程Demo“ ! 提要 简单总结一下《Camunda工作流引擎一》中关于表的知识,大体上分为 4 类: act_RE_* :RE 表示 repository,这个前缀的表包含了流程定义和流程静态资源(图片,规则,等等)。 **act_RU_* **:RU 表示 runtime,这些运行时的表,包含流程实例、任务、变量、异步任务等运行中的数据。只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录,这样来尽量使运行时表可以一直很小速度很快。 act

qq_42758551的博客 7660

Camunda(一):Camunda Platform和Modeler创建工作流

因为公司有个项目需求要使用到工作流引擎,考查了市面各种的工作流引擎,对比它们之间的优劣势,最后选择Camunda工作流引擎。此前自己对Camunda工作流引擎了解的并不多,所以就记录下自己学习Camunda工作流引擎到springboot项目中整合Camunda工作流引擎使用的过程。本文就不涉及到任何代码,就单纯从Camunda 官方提供的工具来创建工作流,来观察流程的流转,对工作流的流转审核做个简单的初步认识。

gorylee的博客 3377

工作流Camunda使用教程及与Spring boot集成

本文介绍了Camunda工作流引擎的基础使用指南。首先说明了环境部署要求(Java8+Camunda7.19.0),详细讲解了依赖配置、登录和数据库设置。然后重点介绍了BPMN流程图的绘制方法,包括用户任务、系统任务、会签/或签和各类网关的使用场景与参数配置。接着阐述了核心服务(RepositoryService、RuntimeService等)的功能和常用API,如流程启动、暂停、任务完成等操作。最后说明了管理页面的功能和使用方法,并提供了流程实例操作演示。文章旨在帮助初学者快速掌握Camunda的基本使

weixin_44179588的博客 2670

30、流程变量及作用域

前面已经很多地方使用过流程变量(variable),camunda中的变量主要有全局变量(variable)和局部变量(Local Variable). 前面我们使用的都是全局变量,就是整个流程实例中都可以访问的变量,作用域是整个流程实例。 现实开发中,有时候变量只希望变量部分范围可见,多实例任务时同一变量名会有多份不同数据,为了保持数据的并发案例,控制变量的作用域特别重要。流程变量主要是用来方便流程流转的数据传递,大量的业务数据不要使用流程变量。最好只传一些状态数据,影响流程路径的业务数据。流程引擎默认是

leyoliu的博客 2114

霍尔安装歪了也能用?揭秘无感FOC中的‘霍尔自学习’黑科技,实现信号线自适应

本文揭秘了无感FOC中的‘霍尔自学习’黑科技,即使霍尔安装歪了或信号线接错,电机仍能平稳运转。该技术通过算法创新解决了传统霍尔方案的安装公差、接线容错和校准成本问题,显著提升了电机控制的可靠性和效率。文章详细解析了自学习算法的实现架构、关键技术及工程实践中的优化方案,展示了其在工业应用中的卓越性能。

weixin_28309571的博客 462

Springboot使用camunda工作流使用笔记

进入localhost:端口/camunda/app/cockpit/default/#/login可见camunda首页,yml中配置为demo。3.IDEA安装外部Tools(选择解压路径的Camunda Modeler.exe)配置后第一次启动项目非常慢,启动成功后数据库会多出49张表。汉化效果:(驾驶舱内部未汉化,其他两个内部汉化了)(若修改用户id会新创建一个用户原用户不会删除)未完待续,后来有空再写。2.找个路径解压放好。4.使用时右击项目名。

翎墨袅 3310

RAG项目简历包装指南:从“流水线工人”到“问题解决者”的跃迁(附代码与思路)

本文代码已在Python 3.11 + CUDA 12.3环境测试,部分功能需LangChain 0.2+支持。

Conan_0728的博客 1885

.NET 使用Camunda快速入门

工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流将一套大的业务逻辑分解成业务逻辑段, 并统一控制这些业务逻辑段的执行条件,执行顺序以及相互通信,实现业务逻辑的分解和解耦。做饭:Camunda是一种工作流引擎,是由Java开发的一个纯Java库。工作流引擎是用来开发工作流的框架。市面上主流的工作流引擎有Activiti、Flowable、Camunda等。Activiti。

softshow1026的博客 2316

红帽RHCE考试下午-RHCE (RH294)任务概览[2021最新版]

RH294任务概览 考试时间4个小时,6台虚拟机,15道题 原来通过脚本或者集群做的题现在都需要使用playbook实现 考试时大概有6台虚拟服务器,都已经做好了互相的免密 做题在ansible控制节点workstation做,但是需要去其他虚拟服务器进行验证 考试时需要将6台虚拟服务器在考试环境全部开启,物理机界面点击左侧按钮启动 考试时Ansible所有playbook都放在普通用户目录中且都以普通用户执行 注意:考试时一定注意要求将playbook放在哪个用户的家目录中,就需要用指定的户登录做题!

SunMy的博客 5615

Android架构中UseCase的设计原则与实战解析

本文深入解析Android架构中UseCase的设计原则与实战应用,探讨其在Domain Layer中的核心作用。通过对比ViewModel的臃肿问题,详细阐述UseCase的无状态原则、单一职责边界等设计铁律,并提供多种实现方式的代码示例,帮助开发者构建更清晰、高效的Android应用架构。

weixin_28432777的博客 431

Camunda工作流引擎三

本篇继续拓宽对 Camunda 工作流的学习! 《Camunda 工作流引擎一》 《Camunda 工作流引擎二》 提要 文章目录提要正文组任务网关排他网关并行网关包含网关事件网关SpringBoot整合 本文仍然在前文的 Demo 基础上进行! 正文 组任务 在一个流程中一个用户任务,有时可以被多个人中的任意一个审批即可,例如:请假流程的部门审批这个用户任务中,只要部门经理或者部门副经理其中的任意一个人审批通过即可。 这时候就需要候选人机制,首先在流程模型中给该用户任务设置候选人列表,这样用户任务就变成

qq_42758551的博客 5698

别再死磕DH参数了!用MATLAB Robotics Toolbox + SOLIDWORKS搞定六轴机械臂仿真(附避坑指南)

本文详细介绍了如何利用MATLAB Robotics Toolbox和SOLIDWORKS进行六轴机械臂仿真,避免常见的DH参数错误和模型导出问题。通过实战指南和避坑技巧,帮助工程师实现从三维建模到运动学仿真的无缝衔接,提升仿真效率和准确性。

weixin_27066963的博客 393

Camunda7(二):springboot 整合Camunda 7使用工作流程(含完整代码)

Camunda(二):springboot 整合Camunda 使用工作流程(含完整代码) 前言:因为公司有个项目需求要使用到工作流引擎,考查了市面各种的工作流引擎,对比它们之间的优劣势,最后选择Camunda工作流引擎。此前自己对Camunda工作流引擎了解的并不多,所以就记录下自己学习Camunda工作流引擎到springboot项目中整合Camunda工作流引擎使用的过程。在上一篇文章中已经介绍了Camunda Platform和Modeler创建工作流的玩法了。在本文就将Camunda 应用在生产

gorylee的博客 6496

Autosar Configuration(十四)SomeIP之配置SoAd

本文主要介绍SomeIp协议栈中的SoAd在Configurator中的详细配置

king110108的专栏 2600

OpenClaw实战系列10(完结篇):企业级应用实战案例——从0到1搭建智能客服系统

本文以一家跨境电商公司为例,从需求分析、系统设计、分步搭建到上线运营,完整呈现智能客服系统的落地全过程。所有配置命令和截图均来自实测环境,你可以直接复制使用。

PeterPan的博客 1305

详解SpringCloud集成Camunda7.19实现工作流审批(四)

本篇讲述camunda的基础功能如何集成在springboot项目中,用接口去操作走通camunda流程

m0_52620144的博客 1432

[VT虚拟化驱动]利用EPT实现无痕HOOK

本章利用讲EPT无痕HOOK

吾无法无天的博客 1万+

[14]深入浅出工作开源框架Camunda:多实例串行用户任务

[在《\[13\]深入浅出工作开源框架Camunda:多实例并行用户任务》](https://architect.blog.youkuaiyun.com/article/details/124757833?spm=1001.2014.3001.5502) 我们提到了多实例并行任务,那么对于多实例串行任务,那么Camunda的内部流程和数据库的数据是如何变化的呢? 下面笔者带大家一起来看看。

超越梦想,一起飞!!! 1935

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Camunda BPM平台完整指南:企业级工作流自动化的终极解决方案

Camunda BPM平台是一个基于BPMN 2.0标准的开源工作流和流程自动化框架,专为Java开发者设计,提供从流程设计、执行到监控的全生命周期管理。🚀 ## 📊 为什么选择Camunda进行业务流程管理? **Camunda BPM平台**是当前市场上最强大的开源工作流引擎之一,它不仅仅是一个工具,更是一个完整的**业务流程管理**解决方案。相比其他BPM平台,Camunda的设计哲

gitblog_00110的博客 1133

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SpringBoot整合Camunda工作流

概述工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完成,BPMBPM(Business Process Management,业务流程管理),是一套系统的管理方法论和学科。它强调以“流程”为视角来设计、执行、管理和优化企业的各种业务活动,其最终目标是提高组织效率、增强敏捷性并实现战略目标。BPMN。

objectdsf的博客 1910

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 工作流之Camunda开发记录(一)----常用API与流程
下一篇: 工作流之Camunda开发记录(三)---- 监听器的基本使用
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值