标签:派生   链式编程   zip   ber   throw   相对   框架   blank   engines   
可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种:
Fatal  error  warn  info  debug  trace
一、部署流程定义
1,在工程项目下创建源码文件夹process
2,在该文件下下面新创建一个工作流流程定义文件test1.bpmn(NewàActivit Diagram)
3,在test1.bpmn文件定义请假流程或者是报销流程
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)     由仓库的服务对象创建一个部署对象配置对象,用来封装部署环境的相关配置。
  4)     这是一个链式编程,在部署配置对象中设置显示名,上传规则文件相对classpath的地址。
  5)     部署,也是往数据库中存储流程定义的过程。
  6)     这一步在数据库中将操作三张表:
    a)     act_re_deployment
       存放流程定义的显示名和部署时间,每部署一次增加一条记录
    b)     act_re_procdef
       存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。
    c)     act_ge_bytearray
       存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,一条是关于bpmn规则文件的,一条是图片的(如果部署时只指定了bpmn一个文件,activiti会在部署时解析bpmn文件内容自动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中。
二、查询流程定义
 
-      
 
- @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的值以一定的形式变化
三、删除流程定义
 
- @Test  
 
- public void delDeployment() throwsException {  
 
-  
 
-  RepositoryService repositoryService =processEngine.getRepositoryService();  
 
-  
 
-  String deploymentId = "1";  
 
-  
 
-  repositoryService.deleteDeployment(deploymentId);  
 
-  
 
-  repositoryService.deleteDeployment(deploymentId, true);  
 
-  }  
 
 
四、启动流程实例
 
什么是流程实例?根据一个流程定义具体的一次执行过程就是一个流程实例,一个流程定义对应多个流程实例(一对多关系),比如:已经定义了一个请假流程,张三同学走了一次该流程这就是启动一次流程实例
 
-    @Test  
 
-    public void startProcessInstance() {  
 
-       
 
-       String processDefinitionKey = "qjlc";  
 
-       ProcessInstance processInstance = processEngine.getRuntimeService()  
 
-             .startProcessInstanceByKey(processDefinitionKey);  
 
-       System.out.println(processInstance.getId());  
 
-    }  
 
 
五、查询流程实例列表
 
 
-    @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());  
 
-       }  
 
-    }  
 
 
六、结束流程实例
 
 
-    @Test  
 
-    public void deleteProcessInstance(){  
 
-       String processInstanceId = "1601";  
 
-       processEngine.getRuntimeService().deleteProcessInstance(processInstanceId, "我愿意");  
 
-    }  
 
 
七、查询部署信息
 
 
-    @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);  
 
-       }  
 
-    }  
 
 
八、删除部署信息
 
 
-    @Test  
 
-    public void deleteDeployment() {  
 
-       String deploymentId = "101";  
 
-       
 
-       
 
-       processEngine.getRepositoryService().deleteDeployment(deploymentId,  
 
-             true);  
 
-    }  
 
 
九、查询一次流程部署对应的文件名称(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();  
 
-       }  
 
-    }  
 
 
十、获取流程定义图标(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"));  
 
-    }  
 
 
十一、      查询个人任务列表
 
 
-    @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());  
 
-       }  
 
-    }  
 
 
十二、      办理任务
 
 
-    @Test  
 
-    public void completeTask(){  
 
-       String taskId= "404";  
 
-       processEngine.getTaskService().complete(taskId);  
 
-    }  
 
 
十三、      直接将流程想下执行一步管理员用户拥有该权限
 
 
-    @Test  
 
-    public void signal(){  
 
-       String executionId = "2701";
 
-       processEngine.getRuntimeService().signal(executionId);  
 
-    }  
 
 Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作
标签:派生   链式编程   zip   ber   throw   相对   框架   blank   engines   
原文地址:http://www.cnblogs.com/tian830937/p/6646915.html