【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工作流引擎 (本博客都是纯文本手工代码,错误难免 ...
随机推荐
- pip 命令安装 rdbtools
命令 pip install tdbtools 如果出现类似如下错误 Could not fetch URL https://pypi.org/simple/redis/ 说明morning的pip ...
- 用友 U9 常用的东西
系统资源 数据字典 UI组件 UI参照组件 BE组件 BP组件 SV组件
- 一款神器,批量手机号码归属地查询软件,支持导出Excel表格
很多人查询手机号码归属地,还在一个一个百度去查太慢了,如果有几万个那么是不是要百度很久 有一款软件很多人都不知道,可以吧号码复制进去,即使里面有汉字也可以把手机号码挑出来,然后查询归属地,还具有号码去 ...
- kali2.0升级
1.登录kali2.0系统 2 2.修改软件源APT-sources.list vim /etc/apt/sources.list 3 可以删除该文件中的所有内容,也可以直接在文前添加新的APT源. ...
- 存货?交期?产能不足?APS系统帮你完成计划排程
信息化时代的今天,技术的进步.全球化的竞争与市场环境迅速变化,使得制造业企业的经营环境变得日益复杂. 集中表现在产品生命周期和交货期的缩短,与此同时顾客的需求也变得多样化和个性化.生产方式也从大批量生 ...
- 微信小程序开发--flex详细解读(2)
一.align-items和其参数 stretch / baseline 注:sretch只有在交叉轴没有设置固定长度的情况下才有作用 ...
- App过大
最近开发中遇到一个报错信息 如下 Error:Cannot fit requested classes in a single dex file.Try supplying a main-dex li ...
- 搜索引擎框架之ElasticSearch基础详解(非原创)
文章大纲 一.搜索引擎框架基础介绍二.ElasticSearch的简介三.ElasticSearch安装(Windows版本)四.ElasticSearch操作客户端工具--Kibana五.ES的常用 ...
- Oracle分析函数FIRST_VALUE、LAST_VALUE
FIRST_VALUE.LAST_VALUE分析函数可以按照特定分组和排序取出组内首尾值,语法 FIRST_VALUE { (expr) [ {RESPECT | IGNORE} NULLS ] | ...
- Mac Brew 安装及配置
mac 终端下,执行以下命令,即可安装brew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homeb ...