能够在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就能够输出到到控制台,log4j提供的日志级别有如下几种:
Fatal error warn info debug tracejava
1、部署流程定义mysql
1,在工程项目下建立源码文件夹processsql
2,在该文件下下面新建立一个工做流流程定义文件test1.bpmn(NewàActivit Diagram)数据库
3,在test1.bpmn文件定义请假流程或者是报销流程apache
4,测试代码编程
- public class ActivitiAPI {
-
- ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
-
- @Test
- public void deploy() {
-
- DeploymentBuilder deploymentBuilder = processEngine
- .getRepositoryService().createDeployment();
-
- deploymentBuilder.name("请假流程部署");
- deploymentBuilder.addClasspathResource("test1.bpmn");
- deploymentBuilder.addClasspathResource("test1.png");
- Deployment
- deployment =deploymentBuilder.deploy();
-
-
-
- }
- }
部署流程定义步骤:框架
1) 首先得到默认的流程引擎getDefaultProcessEngine(),在建立时会自动加载classpath下得activiti-context.xml或者是activiti.cfg.xml工具
2) 经过流程引擎获取了一个RepositoryService对象也就是仓库服务对象测试
3) 由仓库的服务对象建立一个部署对象配置对象,用来封装部署环境的相关配置。ui
4) 这是一个链式编程,在部署配置对象中设置显示名,上传规则文件相对classpath的地址。
5) 部署,也是往数据库中存储流程定义的过程。
6) 这一步在数据库中将操做三张表:
a) act_re_deployment
存放流程定义的显示名和部署时间,每部署一次增长一条记录
b) act_re_procdef
存放流程定义的属性信息,部署每一个新的流程定义都会在这张表中增长一条记录。
c) act_ge_bytearray
存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增长两条记录,一条是关于bpmn规则文件的,一条是图片的(若是部署时只指定了bpmn一个文件,activiti会在部署时解析bpmn文件内容自动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中。
2、查询流程定义
-
- @Test
- public void queryProcessDefinition(){
-
- ProcessDefinitionQuery query = processEngine.getRepositoryService()
- .createProcessDefinitionQuery();
-
- query.processDefinitionKey("bxlc");
-
- query.orderByProcessDefinitionVersion().desc();
-
- query.listPage(0, 10);
- List<ProcessDefinition> list =query.list();
- for(ProcessDefinition pd : list) {
- System.out.println(pd.getName()+ "" + pd.getId());
- }
- }
流程定义查询步骤:
1) 由于流程定义的信息存放在仓库中,因此应该获取RepositoryService。
2) 建立流程定义查询对象,能够在ProcessDefinitionQuery上设置查询过滤参数
3) 调用ProcessDefinitionQuery对象的list方法,执行查询,得到符合条件的流程定义列表
4) 由运行结果能够看出:
a) Key和Name的值为:bpmn文件process节点的id和name的属性值
b) key属性被用来区别不一样的流程定义。
c) 带有特定key的流程定义第一次部署时,version为1。以后每次部署都会在当前最高版本号上加1
d) Id的值的生成规则为:{processDefinitionKey}:{processDefinitionVersion}:{generated-id},这里的generated-id是一个自动生成的惟一的数字
e) 重复部署一次,deploymentId的值以必定的形式变化
3、删除流程定义
- @Test
- public void delDeployment() throwsException {
-
- RepositoryService repositoryService =processEngine.getRepositoryService();
-
- String deploymentId = "1";
-
- repositoryService.deleteDeployment(deploymentId);
-
- repositoryService.deleteDeployment(deploymentId, true);
- }
4、启动流程实例
什么是流程实例?根据一个流程定义具体的一次执行过程就是一个流程实例,一个流程定义对应多个流程实例(一对多关系),好比:已经定义了一个请假流程,张三同窗走了一次该流程这就是启动一次流程实例
- @Test
- public void startProcessInstance() {
-
- String processDefinitionKey = "qjlc";
- ProcessInstance processInstance = processEngine.getRuntimeService()
- .startProcessInstanceByKey(processDefinitionKey);
- System.out.println(processInstance.getId());
- }
5、查询流程实例列表
- @Test
- public void queryProcessInstance(){
-
- ProcessInstanceQuery query = processEngine.getRuntimeService().createProcessInstanceQuery();
- query.processDefinitionKey("qjlc");
- query.orderByProcessInstanceId().desc();
- query.listPage(0, 2);
- List<ProcessInstance> list =query.list();
- for(ProcessInstance pi : list) {
- System.out.println(pi.getId()+ " " + pi.getActivityId());
- }
- }
6、结束流程实例
- @Test
- public void deleteProcessInstance(){
- String processInstanceId = "1601";
- processEngine.getRuntimeService().deleteProcessInstance(processInstanceId, "我愿意");
- }
7、查询部署信息
- @Test
- public void queryDeployment() {
-
- DeploymentQuery query = processEngine.getRepositoryService()
- .createDeploymentQuery();
- List<Deployment> list =query.list();
- for (Deploymentdeployment : list) {
- String id = deployment.getId();
- System.out.println(id);
- }
- }
8、删除部署信息
- @Test
- public void deleteDeployment() {
- String deploymentId = "101";
-
-
- processEngine.getRepositoryService().deleteDeployment(deploymentId,
- true);
- }
9、查询一次流程部署对应的文件名称(bpmn,png)和输入流
- @Test
- public void queryProcessFile() throws Exception {
- String deploymentId = "101";
- List<String> names = processEngine.getRepositoryService()
- .getDeploymentResourceNames(deploymentId);
- for (String name :names) {
- System.out.println(name);
- InputStream in = processEngine.getRepositoryService()
- .getResourceAsStream(deploymentId,name);
-
-
- FileUtils.copyInputStreamToFile(in,new File("d:\\" + name));
- in.close();
- }
- }
10、获取流程定义图标(png文件)
- @Test
- public void getPng() throws Exception {
- String processDefinitionId = "qjlc:9:1204";
- InputStream pngInputStream = processEngine.getRepositoryService()
- .getProcessDiagram(processDefinitionId);
- FileUtils.copyInputStreamToFile(pngInputStream,new File("d:\\my.png"));
- }
11、 查询我的任务列表
- @Test
- public void queryTask() {
- TaskQuery query= processEngine.getTaskService().createTaskQuery();
- String assignee = "张三";
- query.taskAssignee(assignee);
- query.orderByTaskCreateTime().desc();
- List<Task> list = query.list();
- for (Task task :list) {
- System.out.println(task.getId()+ " " + task.getName());
- }
- }
12、 办理任务
- @Test
- public void completeTask(){
- String taskId= "404";
- processEngine.getTaskService().complete(taskId);
- }
十3、 直接将流程想下执行一步管理员用户拥有该权限
- @Test
- public void signal(){
- String executionId = "2701";
- processEngine.getRuntimeService().signal(executionId);
- }