activiti工作流开发_flowable工作流

activiti工作流开发_flowable工作流深入理解Activiti工作流Activiti作为一个流行的开源工作流引擎,正在不断发展,其6.0版本以API形式提供服务,而之前版本基本都是要求我们的应用以JDK方式与其交互,只能将其携带到我们的应用中,而API方式则可以服务器独立运行方式,能够形成一个专网内工作流引擎资源共享的方式。Activiti执行的BPMN2.0,这个规范中有几个要素见下图:其实最经常使用的是开始结束事件和任务,本文就以…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

深入理解Activiti工作流

Activiti作为一个流行的开源工作流引擎,正在不断发展,其6.0版本以API形式提供服务,而之前版本基本都是要求我们的应用以JDK方式与其交互,只能将其携带到我们的应用中,而API方式则可以服务器独立运行方式,能够形成一个专网内工作流引擎资源共享的方式。

Activiti执行的BPMN2.0,这个规范中有几个要素见下图:

984d53a8d1c5b407ad73c28e99f5c84b.png

其实最经常使用的是开始结束事件和任务,本文就以这三个为例,说明通过UI画图和REST API方式如何实现调用,当然如果能够了解BPMN的XML,就能更加精确地定制流程,否则只能是玩玩而已,当然如果你说掌握XML定义不如编程呢,至少编程工具还能提示错误,BPMN绘图画错了很难发现,特别是携带很多数据,这些数据又有不同的逻辑关系时,隐藏在图形化流程背后的逻辑关系被弱化了。

2.下载

我们可以从Activiti网站本身下载两个webapps 的war文件。

对于v6.0.0,我们可以下载activiti-6.0.0.zip,解压缩,war文件可以在activiti-6.0.0 / wars目录中找到。

activiti-app提供了一个用户界面,用户可以通过该界面执行任何身份管理和任务管理相关的操作,创建用户和组。同样,activiti-rest是一个webapp,它提供REST API,用于对流程,任务等执行任何操作。

3. Activiti Kickstart App

我们需要一个可用的Java运行时和一个Apache Tomcat安装来部署该应用程序。任何Web容器都可以工作,但Activiti主要在Tomcat上进行测试。

现在,我们只需要在Tomcat上部署战争并使用http:// localhost:8080 / activiti-app访问它。

用户名和密码:

activiti-admin: admin/admin

activiti-app: admin/test

activiti-rest: kermit/kermit

主页应如下所示:

e00d825b88686c3f6a0253b7b2edd63a.png

3.1 数据库

默认情况下,它使用H2内存数据库。如果我们想要更改数据库配置,我们可以检查代码并修改activiti-app.properties文件。执行此操作后,我们需要重新生成war文件,这可以通过运行start.sh脚本来完成。这将构建activiti-app以及所需的依赖项。

3.2。Kickstart App

当我们点击Kickstart App时,我们会获得使用Process的选项。我们可以创建/导入流程并从这里运行它们。

让我们创建一个包含单个User Task的小流程,该任务接收来自用户的消息。进入Kickstart应用程序后,要创建流程,请选择Processes选项卡,然后单击Create Process:

16beb0719c492ed41da5709b7feb168e.png

流程编辑器将打开,我们可以拖放开始事件,各种类型的任务和结束事件的各种符号来定义流程。

当我们在我们的流程中添加用户任务时,我们需要将其分配给某人。我们可以通过单击此任务选项中的分配并选择受理人来完成此操作。

为简单起见,让我们将任务分配给流程启动器:

c756a9cea9ee7385bc7003ff936a55da.png

我们还希望此用户任务从用户获取输入消息。为此,我们需要将Form与单个文本字段关联到此任务。

选择用户任务,然后选择参考表格 Referenced form。目前,没有与任务关联的表单,因此单击“ 新建表单”,然后添加所需的详细信息:

8fccead7df1aa486e87fd2982831b375.png

在此之后,它将带我们到表单部分,我们可以在表单中拖放我们想要的各种字段,并为它们设置标签:

c364270d7371948205f82cba142c5bbe.png

请注意,我们已勾选Required,这意味着如果不输入Message,则无法完成User任务。

完成后,我们将保存并转到“app”标签。为了能够运行我们创建的流程,我们需要创建一个Process App。

在Process App中,我们可以添加一个或多个Process Definitions。执行此操作后,我们需要发布此应用程序,以便其他用户可以使用流程,这个发布很重要,如果你的流程有错误就发布不了,当然Activiti也不会像IDE那样告诉你精确的错误位置和原因或提示,你自己好好反省自查。

当然我们也可以将流程导出BPMN.xml文件,主要部分内容:

这些startEvent、userTask是文章开头第一张图里面的对应含义。sequenceFLow是顺序流,startEvent是流程事件,userTask是任务。

3.3 任务应用程序

在任务应用程序中,有两个选项卡:任务 – 用于当前正在运行的任务,以及流程 – 用于当前正在运行的流程。

单击“ 流程中的开始流程”选项卡后,我们将获得可以运行的可用流程列表。从此列表中,我们将选择我们的流程并单击开始按钮,只有你的流程发布publish之后才能看到,也才能按开始按钮。

我们的流程只包含一个任务,它是一个用户任务。因此,该过程正在等待用户完成此任务。当我们点击流程正在等待的任务时,我们可以看到我们创建的表单:

4ef3be2a639fdf4bde249cc7df7802a2.png

如果我们点击查看图,这将不仅向我们展示过程图也强调,完成的任务和正在等待的人。在我们的示例中,用户任务仍处于待处理状态,会突出显示:

e58d89728a2cc5a5ad60a37acc2a983a.png

要完成此任务,我们可以单击Complete butto n。如前所述,我们需要输入消息,因为我们必须保留它。因此,在输入消息后,我们可以完成任务。

3.4。身份管理应用

除了管理流程外,我们还有一个身份管理应用程序,允许我们添加用户和组。我们还可以为用户定义角色。

4. Activiti REST

Activiti为Activiti Engine提供REST API,可以通过将activiti-rest.war文件部署到像Apache Tomcat这样的servlet容器来安装。

默认情况下,Activiti Engine将连接到内存中的H2数据库。就像我们在activiti-app中看到的一样,在这里我们可以更改WEB-INF / classes文件夹中db.properties文件中的数据库设置并重新创建war文件。

启动并运行应用程序后,我们可以将此基本URL用于所有请求:

默认情况下,所有REST资源都需要对有效的Activiti用户进行身份验证。每次REST调用都应使用基本HTTP访问身份验证。

4.1。创建和运行流程

要创建流程,首先,我们需要BPMN文件用于流程。我们可以按照之前基于Activiti with Java的文章中的描述创建文件,也可以从Kickstart App的Process部分下载。

我们需要发一个POST请求,以及contentType:multipart / form-data,我们将为我们的新流程上传BPMN文件,在postman中设置:body中选择form,key填入file;类型从text和file中选择file,然后上传我们之前导出的BPMN.xml文件,授权选择basic auth,用户名和密码: kermit

POST http://127.0.0.1:8080/activiti-rest/service/repository/deployments

当我们通过传递我们创建的流程的BPMN文件来进行此调用时,它将提供以下输出:

{

“id”: “40”,

“name”: “myprocess.bpmn20.xml”,

“deploymentTime”: “2018-08-21T15:20:11.056+08:00”,

“category”: null,

“url”: “http://127.0.0.1:8080/activiti-rest/service/repository/deployments/40”,

“tenantId”: “”

}

现在,如果我们获得所有流程定义,我们可以看到列出的流程定义:

GET http://127.0.0.1:8080/activiti-rest/service/repository/process-definitions

接下来,我们可以使用我们在BPMN文件中提到的processKey来运行此过程:

POST http://127.0.0.1:8080/activiti-rest/service/runtime/process-instances

有了这个请求正文:

{

“processDefinitionKey”:”myprocess-Id”

}

响应将是:

{

“id”: “48”,

“url”: “http://127.0.0.1:8080/activiti-rest/service/runtime/process-instances/48”,

“businessKey”: null,

“suspended”: false,

“ended”: false,

“processDefinitionId”: “myprocess-Id:2:47”,

“processDefinitionUrl”: “http://127.0.0.1:8080/activiti-rest/service/repository/process-definitions/myprocess-Id:2:47”,

“processDefinitionKey”: “myprocess-Id”,

“activityId”: null,

“variables”: [],

“tenantId”: “”,

“name”: null,

“completed”: false

}

我们可以使用上一个响应返回的流程实例的id来查看正在运行的流程图:

GET http://127.0.0.1:8080/activiti-rest/service/runtime/process-instances/48/diagram

如前所述,该过程正在等待用户任务完成,因此它在图中突出显示:

3855629ec5b61b2bc7823df68c238305.png

4.2。完成任务

现在让我们看看我们的待处理任务:

GET http://127.0.0.1:8080/activiti-rest/service/runtime/tasks

响应将包含待处理任务的列表。目前,只有一项任务 – 我们的用户任务:

{

“data”: [

{

“id”: “53”,

“url”: “http://127.0.0.1:8080/activiti-rest/service/runtime/tasks/53”,

“owner”: null,

“assignee”: “$INITIATOR”,

“delegationState”: null,

“name”: null,

“description”: null,

“createTime”: “2018-08-21T15:23:55.714+08:00”,

“dueDate”: null,

“priority”: 50,

“suspended”: false,

“taskDefinitionKey”: “sid-9A9219F8-306C-4ED0-A243-88756537F7FA”,

“tenantId”: “”,

“category”: null,

“formKey”: “userinputmessage”,

“parentTaskId”: null,

“parentTaskUrl”: null,

“executionId”: “50”,

“executionUrl”: “http://127.0.0.1:8080/activiti-rest/service/runtime/executions/50”,

“processInstanceId”: “48”,

“processInstanceUrl”: “http://127.0.0.1:8080/activiti-rest/service/runtime/process-instances/48”,

“processDefinitionId”: “myprocess-Id:2:47”,

“processDefinitionUrl”: “http://127.0.0.1:8080/activiti-rest/service/repository/process-definitions/myprocess-Id:2:47”,

“variables”: []

}

],

“total”: 1,

“start”: 0,

“sort”: “id”,

“order”: “asc”,

“size”: 1

}

最后,让我们使用任务ID 49完成此任务:

POST http://127.0.0.1:8080/activiti-rest/service/runtime/tasks/53

这是一个POST请求,我们需要发送操作字段来指示我们要对该任务执行的操作。我们可以“解决”,“完成”或“删除”任务。此外,我们可以传递任务所需的变量数组来完成。

在我们的例子中,我们要传递一个字段“message”,它就是用户消息文本字段。所以我们的要求是:

{

“action”: “complete”,

“variables”: [{

“name”: “message”,

“value”: “This is a User Input Message”

}]

}

5.结论

在本文中,我们讨论了如何使用Activiti Kickstart应用程序和提供的REST API。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185477.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • c0000005 access_violation_0X0000005

    c0000005 access_violation_0X00000050xC0000005:AccessViolation-vc++6.0aps001,002,003创建的C:\SMW200DATA\DATA,内容是不一样的,不通用的。读取相关文件就会报错咯。如果想要运行,则目录内容得删除。然要运行时,自动创建。每台设备已经有了数据时,需要先备份C:\SMW200DATA\DATA里面的内容。否则数据丢失。参考:https://blog.csd…

  • freemarker 的ObjectWrapper Settings

    freemarker 的ObjectWrapper Settings

  • create table as select * from mysql_达梦数据库建表语句

    create table as select * from mysql_达梦数据库建表语句达梦数据库建表语句之createtableasselect注意事项

  • ‘java‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件「建议收藏」

    ‘java‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件「建议收藏」’java’不是内部或外部命令,也不是可运行的程序或批处理文件。今天在运行逆向的jar,其中在cmd中用到了java命令。配置JAVA环境变量如下:1.下载安装jdk2.安装完成后,右击“我的电脑”,点击“属性”;3.选择“高级”选项卡,windows7选择左边的“高级系统设置”,点击“环境变量”;4.用户变量配置JAVA_HOME指明JAVA安装路径,值设为:C…

  • pycharm配置环境及安装第三方库_pycharm关联python

    pycharm配置环境及安装第三方库_pycharm关联pythonpycharm配置python环境的方法是:1、依次点击【File】、【ProjectInterpreter】;2、点击【ShowAll】,选择【ExistingEnvironment】;3、选择python的安装路径,点击OK即可。配置方法:1、打开软件,依次点击【File】→【Settings】→【Project】→【ProjectInterpreter】,这样我们就进入了配置Pyth…

  • zencart 模板设计「建议收藏」

    zencart 模板设计「建议收藏」ZenCart的模板设计比较复杂,需要一定的时间来熟悉。一旦你了解了它的结构,就会慢慢习惯了。首先要阅读常见问答部分的:如何添加、制作新模板。ZenCart的设计没有什么特别,与以前设计HTML页面是一样的。只是整个页面分成了好几个部分,并加入了PHP代码。通常,页面分为页眉(header),页脚(footer),边框(sideboxes)。所以设计页面的时候,要记住ZenCart是如

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号