activiti 可以用在php吗

如题所述

1、启动流程  在完成了流程定义部署后,就要启动流程实例了。/***1启动流程*当流程到达一个节点时,会在act_ru_execution表中产生1条数据*如果当前节点是用户任务节点,这时会在act_

1、启动流程   在完成了流程定义部署后,就要启动流程实例了。
/**
* 1 启动流程
* 当流程到达一个节点时,会在act_ru_execution表中产生1条数据
* 如果当前节点是用户任务节点,这时会在act_ru_task表中产生1条数据(任务的办理人,任务的创建时间)
*/
@Test
public void startProcess() throws Exception {
/**
* v1 myProcess:2:604
* v2 myProcess:3:704
*/
// runtimeService.startProcessInstanceById(processDefinitionId)
// 通过流程定义的key启动流程,会启动版本最高的流程
ProcessInstance pi = runtimeService.startProcessInstanceByKey("LeaveFlow");
System.out.println("pid:" + pi.getId() +",activitiId:" + pi.getActivityId());
}

2、查看流程状态
public void queryProcessState() throws Exception {
String processInstanceId="1401";
// 通过流程实例ID查询流程实例
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
if(pi!=null){
System.out.println("当前流程在:" + pi.getActivityId());
}else{
System.out.println("流程已结束!!");
}
}

3、查看公有任务
  对指定用户的可接取的公共任务执行查询。
public void queryCommonTask() throws Exception {
// 创建任务查询对象
TaskQuery taskQuery = taskService.createTaskQuery();
// 配置查询对象
String candidateUser="张三";
taskQuery
// 过滤条件
.taskCandidateUser(candidateUser)
// 分页条件
// .listPage(firstResult, maxResults)
// 排序条件
.orderByTaskCreateTime().desc();
// 执行查询
List<Task> tasks = taskQuery.list();
System.out.println("======================【"+candidateUser+"】的公共任务列表=================");
for (Task task : tasks) {
System.out.print("id:"+task.getId()+",");
System.out.print("name:"+task.getName()+",");
System.out.print("createTime:"+task.getCreateTime()+",");
System.out.println("assignee:"+task.getAssignee());
}
}

说明:
  1.查询任务首先使用TaskService创建TaskQuery对象
  2.在查询对象上,添加taskCandidateUser过滤条件,代表过滤任务候 选者为自己的任务
  3.调用list方法返回指定用户的可接任务列表
  4.所有公共任务的assignee属性为空

4、查看私有任务
  对指定用户的未完成的个人任务执行查询。
public void queryPersonalTask() throws Exception {
// 创建任务查询对象
TaskQuery taskQuery = taskService.createTaskQuery();
// 配置查询对象
// String assignee="user";
String assignee="李四";
taskQuery
// 过滤条件
.taskAssignee(assignee)
// 分页条件
// .listPage(firstResult, maxResults)
// 排序条件
.orderByTaskCreateTime().desc();
// 执行查询
List<Task> tasks = taskQuery.list();
System.out.println("======================【"+assignee+"】的代办任务列表=================");
for (Task task : tasks) {
System.out.print("id:"+task.getId()+",");
System.out.print("name:"+task.getName()+",");
System.out.print("createTime:"+task.getCreateTime()+",");
System.out.println("assignee:"+task.getAssignee());
}
}

说明:
  1) 因为是任务查询,所以从processEngine中应该得到TaskService
  2) 使用TaskService获取到任务查询对象TaskQuery
  3) 为查询对象添加查询过滤条件,使用taskAssignee指定任务的候选者(即查询指定用户的代办任务),添加分页排序等过滤条件
  4) 调用list方法执行查询,返回办理者为指定用户的任务列表
  5) 任务ID、名称、办理人、创建时间可以从act_ru_task表中查到。
  6) Execution与ProcessInstance见5.6章节的介绍。在这种情况下,ProcessInstance相当于Execution
  7) 如果assignee属性为部门经理,结果为空。因为现在流程只到了”填写请假申请”阶段,后面的任务还没有执行,即在数据库中没有部门经理可以办理的任务,所以查询不  到。
  8) 一个Task节点和Execution节点是1对1的情况,在task对象中使用Execution_来标示他们之间的关系
  9) 任务ID在数据库表act_ru_task中对应“ID_”列

5、认领任务
  通常一个任务为公共任务任务都有一个以上的候选者,用户想要办理它应该先进行认领任务操作,即把自己变成任务的拥有者。
public void takeTask() throws Exception {
// claim 认领
String taskId="1404";
String userId="李四";
// 让指定userId的用户认领指定taskId的任务
taskService.claim(taskId, userId);
System.out.println("认领操作完毕!!");
}

说明:
  1.任务相关操作,首先得到taskService
  2.确定被认领的任务ID和认领人ID
  3.调用taskService的claim(认领)方法,把公共任务变成指定用户的 私有任务

6、办理任务
public void complete() throws Exception {
String taskId = "1602";
// 完成任务
taskService.complete(taskId );
}

说明:
  1) 办理任务,从ProcessEngine得到的是TaskService。
  2) 当执行完这段代码,再以员工的身份去执行查询的时候,会发现这个时候已经没有数据了。
  3) 对于执行完的任务,activiti将从act_ru_task表中删除该任务,下一个任务会被插入进来。
  4) 以”部门经理”的身份进行查询,可以查到结果。因为流程执行到部门经理审批这个节点了。
  5) 再执行办理任务代码,执行完以后以”部门经理”身份进行查询,没有结果。
  6) 重复第3和4步直到流程执行完。

7、验证流程已经结束
  在流程执行的过程中,创建的流程实例ID在整个过程中都不会变,当流程结束后,流程实例将会被删除

说明:
  1) 因为是查询流程实例,所以先获取runtimeService
  2) 创建流程历史查询对象,设置实例ID过滤参数
  3) 由于一个流程实例ID只对应一个实例,使用singleResult执行查询返回一个唯一的结果,如果结果数量大于1,则抛出异常
  4) 判断指定ID的实例是否存在,如果结果为空,则代表流程结束,实例已被删除
温馨提示:内容为网友见解,仅供参考
无其他回答

android 如何实现音乐播放
可以在Activity中布局相关的界面,例如按钮等。然后通过这个Activitiy来启动这个Service。要通过UI与Service交互,可以通过Intent对象传递消息。更复杂一些,要实现Service向Activity发送消息,并利用这些消息来更新UI,这可以用广播机制,例如告诉Activity是否正在播放,播放进度,当前播放歌曲条目等信息。例如以下实例...

linux ln -s 用ln -s 链接 根目录到 \/home\/good怎么做啊。
2、硬链接ln源文件目标文件,没有参数-s, 会在选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。

相似回答