对自己说:新年好!
年前看了几天的activiti工作流引擎,开始听到老大叫我看看时,比较蛋定,想着在网上查查资料应该问题不大,之后我就蒙圈了,感觉资料好少。
开始:
搜到了activiti中文api,下载了源码包,照着上面的操作了一下,把war包放到tomcat下面,能跑起来,但是不知道是啥,用eclipse跑了一个请假的小demo,首先研究的是流程图,要画流程图,还得安装相应的插件,不知道idea上如何操作,没弄成功,所以还是用eclispe。在界面上画好流程图,保存成文件后,以xml的格式打开,可以将其中的各个属性代码与界面对应起来:
StartEvent——任务开始
UserTask——用户任务节点,General中有id和name属性,id不变,name定义为该节点的中文名字;Main config中Assignee表示该节点的拥有者,groups表示该节点所属的分组
Endevent——任务结束
创建任务:
//加载配置文件 ProcessEngine processEngine = ProcessEngineConfiguration .createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine(); //部署提供的所有来源的Activiti引擎。 RepositoryService repositoryService = processEngine.getRepositoryService(); repositoryService.createDeployment().addInputStream("helloworld.bpmn20.xml", new FileInputStream(filename)).deploy(); //设置流程发起用户信息,并创建任务流程 IdentityService identityService = processEngine.getIdentityService(); identityService.setAuthenticatedUserId("kk");//任务发起人为kk RuntimeService runtimeService = processEngine.getRuntimeService(); Map<String, Object> variableMap = new HashMap<String, Object>(); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess", variableMap); //获取TaskService ProcessEngine engine=ProcessEngines.getDefaultProcessEngine(); TaskService ts=engine.getTaskService();
流程引擎的数据时保存在数据库中的,默认为h2数据库,如果想换成自己的数据库,比如mysql,可以在配置文件中修改
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=UTF8" /> <property name="username" value="root" /> <property name="password" value="123456" /> </bean>在配置processEngineConfiguration的时候注入dataSource就可以了,这样可以清楚的看到数据库中的数据是怎么处理的
初级使用:
TaskService.createTaskQuery().taskAssignee("张三").count()//查询某个人的任务,对应Main config中Assignee
TaskService.createTaskQuery().taskCandidateGroup("小组长").count()//查询某个组的任务,对应Main config中groups
TaskService.claim(t.getId(), "张三");//claim签收功能去指定受理人"张三"
TaskService.complete(t.getId());//完成某个任务节点,参数为任务id