【Activiti学习之四】Activiti API(三)
环境
JDK 1.8
MySQL 5.6
Tomcat 7
Eclipse-Luna
activiti 6.0
一、启动流程
多种方式启动
package com.wjy.pro; import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance; public class Start { public static void main(String[] args) {
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
// 任务服务
TaskService taskService = engine.getTaskService();
// 部署
Deployment dep = rs.createDeployment().addClasspathResource("start.bpmn").deploy();
ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
// 启动流程
ProcessInstance pi = runService.startProcessInstanceById(pd.getId(), "abc");
//根据流程文件中定义process节点的id来启动
//runService.startProcessInstanceByKey("");
//根据消息名称启动流程 在流程定义的开始事件中加入消息定义 <messageEventDefinition/>
//runService.startProcessInstanceByMessage(""); System.out.println(pi.getId());
} }
二、流程操作与数据查询
1、流程触发-ReceiveTask

package com.wjy.handle; import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance; public class ReceiveTaskTest { public static void main(String[] args) {
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
// 任务服务
TaskService taskService = engine.getTaskService();
// 部署ReceiveTask类型任务
Deployment dep = rs.createDeployment().addClasspathResource("receiveTask.bpmn").deploy();
ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
// 启动流程
ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
// 查当前的子执行流(只有一个)
Execution exe = runService.createExecutionQuery()
.processInstanceId(pi.getId())
.onlyChildExecutions()
.singleResult(); System.out.println(pi.getId() + ", 当前节点:" + exe.getActivityId());//37505, 当前节点:receivetask1 // 让它往前走 同complete
runService.trigger(exe.getId()); exe = runService.createExecutionQuery()
.processInstanceId(pi.getId())
.onlyChildExecutions()
.singleResult();
System.out.println(pi.getId() + ", 当前节点:" + exe.getActivityId());//37505, 当前节点:usertask1
} }
2、触发信号事件
messaga

package com.wjy.handle; import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance; public class MessageTest { public static void main(String[] args) {
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
// 任务服务
TaskService taskService = engine.getTaskService();
// 部署
Deployment dep = rs.createDeployment()
.addClasspathResource("MessageEvent.bpmn").deploy();
ProcessDefinition pd = rs.createProcessDefinitionQuery()
.deploymentId(dep.getId())
.singleResult();
// 启动流程
ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
// 查当前的子执行流(只有一个)
Execution exe = runService.createExecutionQuery()
.processInstanceId(pi.getId())
.onlyChildExecutions()
.singleResult(); System.out.println(pi.getId() + ", 当前节点:" + exe.getActivityId()); // 等待外面发送的消息才会让它往前走
// <intermediateCatchEvent id="messageintermediatecatchevent1" name="MessageCatchEvent">
// <messageEventDefinition messageRef="testMsg"></messageEventDefinition>
// </intermediateCatchEvent>
runService.messageEventReceived("testMsg", exe.getId()); exe = runService.createExecutionQuery()
.processInstanceId(pi.getId())
.onlyChildExecutions()
.singleResult();
System.out.println(pi.getId() + ", 当前节点:" + exe.getActivityId());
} }
signal

package com.wjy.handle; import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance; public class SingleEventTest { public static void main(String[] args) {
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
// 任务服务
TaskService taskService = engine.getTaskService();
// 部署
Deployment dep = rs.createDeployment()
.addClasspathResource("SingleEvent.bpmn").deploy();
ProcessDefinition pd = rs.createProcessDefinitionQuery()
.deploymentId(dep.getId()).singleResult();
// 启动流程
ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
// 查当前的子执行流(只有一个) createExecutionQuery
Execution exe = runService.createExecutionQuery()
.processInstanceId(pi.getId())
.onlyChildExecutions()
.singleResult(); System.out.println(pi.getId() + ", 当前节点:" + exe.getActivityId());
//等待外面传送定义的信号才会执行
// <intermediateCatchEvent id="signalintermediatecatchevent1" name="SignalCatchEvent">
// <signalEventDefinition signalRef="testSignal"></signalEventDefinition>
// </intermediateCatchEvent>
runService.signalEventReceived("testSignal"); //流程查询createExecutionQuery
exe = runService.createExecutionQuery()
.processInstanceId(pi.getId())
.onlyChildExecutions()
.singleResult(); System.out.println(pi.getId() + ", 当前节点:" + exe.getActivityId());
} }
三、工作产生与管理
1、异步任务

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"
targetNamespace="http://www.activiti.org/test">
<process id="myProcess" name="My process" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<endEvent id="endevent1" name="End"></endEvent>
<userTask id="usertask1" name="User Task"></userTask>
<serviceTask id="servicetask1" name="Service Task" activiti:async="true"
activiti:class="org.crazyit.act.c10.MyJavaDelegate"></serviceTask>
<sequenceFlow id="flow1" sourceRef="startevent1"
targetRef="servicetask1"></sequenceFlow>
<sequenceFlow id="flow2" sourceRef="servicetask1"
targetRef="usertask1"></sequenceFlow>
<sequenceFlow id="flow3" sourceRef="usertask1"
targetRef="endevent1"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_myProcess">
<bpmndi:BPMNPlane bpmnElement="myProcess"
id="BPMNPlane_myProcess">
<bpmndi:BPMNShape bpmnElement="startevent1"
id="BPMNShape_startevent1">
<omgdc:Bounds height="35.0" width="35.0" x="190.0"
y="160.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endevent1"
id="BPMNShape_endevent1">
<omgdc:Bounds height="35.0" width="35.0" x="620.0"
y="160.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="usertask1"
id="BPMNShape_usertask1">
<omgdc:Bounds height="55.0" width="105.0"
x="460.0" y="150.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="servicetask1"
id="BPMNShape_servicetask1">
<omgdc:Bounds height="55.0" width="105.0"
x="280.0" y="150.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1"
id="BPMNEdge_flow1">
<omgdi:waypoint x="225.0" y="177.0"></omgdi:waypoint>
<omgdi:waypoint x="280.0" y="177.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2"
id="BPMNEdge_flow2">
<omgdi:waypoint x="385.0" y="177.0"></omgdi:waypoint>
<omgdi:waypoint x="460.0" y="177.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow3"
id="BPMNEdge_flow3">
<omgdi:waypoint x="565.0" y="177.0"></omgdi:waypoint>
<omgdi:waypoint x="620.0" y="177.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
package com.wjy.job;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance; public class ServieTaskTest { public static void main(String[] args) {
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
// 任务服务
TaskService taskService = engine.getTaskService(); Deployment dep = rs.createDeployment().addClasspathResource("service_task.bpmn").deploy();
ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult(); ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
System.out.println(pi.getId());
} }
package com.wjy.job;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.JavaDelegate; public class MyJavaDelegate implements JavaDelegate { @Override
public void execute(DelegateExecution arg0) {
System.out.println("这是处理类");
}
}
2、定时任务

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"
targetNamespace="http://www.activiti.org/test">
<process id="myProcess" name="My process" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<endEvent id="endevent1" name="End"></endEvent>
<intermediateCatchEvent id="timerintermediatecatchevent1"
name="TimerCatchEvent">
<timerEventDefinition>
<timeDuration>PT1M</timeDuration>
</timerEventDefinition>
</intermediateCatchEvent>
<userTask id="usertask1" name="User Task"></userTask>
<sequenceFlow id="flow1" sourceRef="startevent1"
targetRef="timerintermediatecatchevent1"></sequenceFlow>
<sequenceFlow id="flow2" sourceRef="timerintermediatecatchevent1"
targetRef="usertask1"></sequenceFlow>
<sequenceFlow id="flow3" sourceRef="usertask1"
targetRef="endevent1"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_myProcess">
<bpmndi:BPMNPlane bpmnElement="myProcess"
id="BPMNPlane_myProcess">
<bpmndi:BPMNShape bpmnElement="startevent1"
id="BPMNShape_startevent1">
<omgdc:Bounds height="35.0" width="35.0" x="110.0"
y="160.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endevent1"
id="BPMNShape_endevent1">
<omgdc:Bounds height="35.0" width="35.0" x="550.0"
y="160.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="timerintermediatecatchevent1"
id="BPMNShape_timerintermediatecatchevent1">
<omgdc:Bounds height="35.0" width="35.0" x="220.0"
y="160.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="usertask1"
id="BPMNShape_usertask1">
<omgdc:Bounds height="55.0" width="105.0"
x="350.0" y="150.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1"
id="BPMNEdge_flow1">
<omgdi:waypoint x="145.0" y="177.0"></omgdi:waypoint>
<omgdi:waypoint x="220.0" y="177.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2"
id="BPMNEdge_flow2">
<omgdi:waypoint x="255.0" y="177.0"></omgdi:waypoint>
<omgdi:waypoint x="350.0" y="177.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow3"
id="BPMNEdge_flow3">
<omgdi:waypoint x="455.0" y="177.0"></omgdi:waypoint>
<omgdi:waypoint x="550.0" y="177.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
package com.wjy.job;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance; public class TimerTest { public static void main(String[] args) {
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
// 任务服务
TaskService taskService = engine.getTaskService(); Deployment dep = rs.createDeployment().addClasspathResource("timer_test.bpmn").deploy();
ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult(); ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
System.out.println(pi.getId());
} }
PT1M:表示1分钟后执行
3、暂停/激活工作
package com.wjy.job;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance; public class SuspendTest { public static void main(String[] args) throws Exception {
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
// 任务服务
TaskService taskService = engine.getTaskService(); Deployment dep = rs.createDeployment().addClasspathResource("suspend_test.bpmn").deploy();
ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult(); ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
System.out.println(pi.getId()); //暂停
runService.suspendProcessInstanceById(pi.getId());
//激活
runService.activateProcessInstanceById(pi.getId());
} }
4、异常工作
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"
targetNamespace="http://www.activiti.org/test">
<process id="myProcess" name="My process" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<endEvent id="endevent1" name="End"></endEvent>
<userTask id="usertask1" name="User Task"></userTask>
<serviceTask id="servicetask1" name="Service Task"
activiti:async="true"
activiti:class="com.wjy.job.ExceptionDelegate"></serviceTask>
<sequenceFlow id="flow1" sourceRef="startevent1"
targetRef="servicetask1"></sequenceFlow>
<sequenceFlow id="flow2" sourceRef="servicetask1"
targetRef="usertask1"></sequenceFlow>
<sequenceFlow id="flow3" sourceRef="usertask1"
targetRef="endevent1"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_myProcess">
<bpmndi:BPMNPlane bpmnElement="myProcess"
id="BPMNPlane_myProcess">
<bpmndi:BPMNShape bpmnElement="startevent1"
id="BPMNShape_startevent1">
<omgdc:Bounds height="35.0" width="35.0" x="190.0"
y="160.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endevent1"
id="BPMNShape_endevent1">
<omgdc:Bounds height="35.0" width="35.0" x="620.0"
y="160.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="usertask1"
id="BPMNShape_usertask1">
<omgdc:Bounds height="55.0" width="105.0"
x="460.0" y="150.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="servicetask1"
id="BPMNShape_servicetask1">
<omgdc:Bounds height="55.0" width="105.0"
x="280.0" y="150.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1"
id="BPMNEdge_flow1">
<omgdi:waypoint x="225.0" y="177.0"></omgdi:waypoint>
<omgdi:waypoint x="280.0" y="177.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2"
id="BPMNEdge_flow2">
<omgdi:waypoint x="385.0" y="177.0"></omgdi:waypoint>
<omgdi:waypoint x="460.0" y="177.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow3"
id="BPMNEdge_flow3">
<omgdi:waypoint x="565.0" y="177.0"></omgdi:waypoint>
<omgdi:waypoint x="620.0" y="177.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
package com.wjy.job; import org.activiti.engine.ManagementService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.Job;
import org.activiti.engine.runtime.ProcessInstance; public class ErrorServieTaskTest { public static void main(String[] args) {
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
// 任务服务
TaskService taskService = engine.getTaskService();
ManagementService managementService = engine.getManagementService(); Deployment dep = rs.createDeployment().addClasspathResource("error_task.bpmn").deploy();
ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult(); ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
System.out.println(pi.getId()); Job job = managementService.createJobQuery().singleResult();
managementService.setJobRetries(job.getId(), 1);
managementService.executeJob(job.getId());
} }
package com.wjy.job; import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.JavaDelegate; public class ExceptionDelegate implements JavaDelegate { @Override
public void execute(DelegateExecution arg0) {
System.out.println("这是处理类");
throw new RuntimeException("always exception");
}
}
【Activiti学习之四】Activiti API(三)的更多相关文章
- activiti学习资料(架构描述)
Activiti学习资料 Activiti是业界很流行的java工作流引擎,关于Activiti与JBPM5的关系和如何选择不是本文要讨论的话题,相关内容可以baidu一下.Activiti从架构角度 ...
- 【Activiti学习之三】Activiti API(二)
环境 JDK 1.8 MySQL 5.6 Tomcat 7 Eclipse-Luna activiti 6.0 一.流程定义1.中止与激活流程定义 package com.wjy.pd; import ...
- Activiti 学习笔记记录
官方在线用户手册(英文版):http://activiti.org/userguide/index.html 中文用户手册:http://www.mossle.com/docs/activiti/in ...
- activiti学习6:启动流程后动态获取流程图
目录 activiti学习6:启动流程后动态获取流程图 一.绘图原理 二.根据流程定义id绘图 三.根据流程实例id绘图 3.1 基本原理 3.2 当前节点的获取 3.3 走过的节点的获取 3.4 绘 ...
- activiti学习5:开启流程和流程前进
目录 activiti学习5:开启流程和流程前进 一.流程和任务的关系 二.开启流程 2.1根据流程定义key开启流程 三.查询用户任务 3.1 TaskQuery 四.完成任务 activiti学习 ...
- activiti学习4:流程文件的部署
activiti学习4:流程文件的部署 用bpmn规范定义好一个流程得到流程定义文件后,需要把该文件部署到activiti的数据库后,这个流程才可以使用. activiti中和流程定义相关的操作都需要 ...
- activiti学习笔记一
activiti学习笔记 在讲activiti之前我们必须先了解一下什么是工作流,什么是工作流引擎. 在我们的日常工作中,我们会碰到很多流程化的东西,什么是流程化呢,其实通俗来讲就是有一系列固定的步骤 ...
- Activiti学习之 多实例实现会签功
转: Activiti学习之 多实例实现会签功能 2014年11月26日 11:27:11 程诺 阅读数:26185 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...
- activiti学习-用户与用户组
activiti学习笔记3-用户与用户组 2015年05月07日 14:43:06 cq1982 阅读数:4142更多 个人分类: activiti工作流引擎 (本博客都是纯文本手工代码,错误难免 ...
随机推荐
- notepad++格式化代码,自动对齐
Notepad++本身没有快捷命令格式化JavaScript代码,需要通过安装扩展插件来实现快捷格式化JS代码的功能.本文主要介绍如何通过安装JStool插件来实现格式化JS代码的功能. 在插件列表中 ...
- 初识AspNet Core中的标识Identity
AspNet Core中的标识Identity,是用于Web应用程序的成员身份验证系统. 最方便的引入办法是在创建MVC或Pages的Web应用时,直接选择相应的身份验证系统.如图: 如果选择的是“个 ...
- # .NET Core下操作Git,自动提交代码到
.NET Core下操作Git,自动提交代码到 转自博客园(阿星Plus) .NET Core 3.0 预览版发布已经好些时日了,博客园也已将其用于生产环境中,可见 .NET Core 日趋成熟 回归 ...
- c#ADO.NET 执行带参数及有返回数据
直接上代码,这个过程中有个数据SqlDataReader转为 DataTable的过程,当中为什么这样,是应为我直接绑定DataSource的时候没有数据,网人家说直接绑定但是没效果,我就转换了一下. ...
- 史上最全的音视频SDK包分享给大家
史上最全的音视频SDK包分享给大家 概述一下SDK功能: 项目 详情视频通信 支持多种分辨率的视频通信语音通信 提供语音通信,可支持高清宽带语音动态创建房间 可以根据需要,随时创建房间H5 支持 ...
- 在VB编程中,若一行代码太长需要换行时,行尾要加什么符号
& _ 注意,&与_之间一定要有一个空格 例如: aa="select " & _ " a,b,c" & _ ...
- 代码语法高亮踩坑-原理,问题, PRE元素及htmlentity
语法高亮库基础原理 在研究使用能够在web页面上代码语法高显的解决方案时,发现有很多现成的开源库.比较中意的有prism.js,highlightjs.他们的原理基本上核心就两点: 1. 利用html ...
- springmvc上传图片到Tomcat虚拟目录
一.简介 通过把文件上传到tomcat的虚拟目录,实现代码和资源文件分开. 二.环境 spring+springmvc+mybatis 三.代码实现 1.导入文件上传的jar <dependen ...
- 我为啥不想用Python
Python这门语言从一开始就是一个玩具语言,它不是给正经程序员用的东西. 运行效率低 Python运行效率很低,这就导致Python中很多库底层实际上是C++.很多时候,自己千方百计优化的结果就不如 ...
- linux常见性能分析工具
vmstat sar (来源于sysstat工具包,需要yum sysstat)iostat (来源于sysstat工具包,需要yum sysstat)free -muptimene ...