原文连接:http://jhaij.iteye.com/blog/1882582
用户任务
user task 是一个需要由实际用户操作的节点. 当流程执行到这么一个用户任务节点时,会通过user(用户) 或者组(group) 在task中定义的 assigned 角色来创建一个新的用户任务.
id 必填 , name 可选
<userTaskid="theTask"name="Important task"/>
documentation 是描述信息,可选
<userTaskid="theTask"name="Schedule meeting"> <documentation> Schedule an engineering meeting for next week with the new hire. </documentation>
通过task获取方式如下:
task.getDescription()
到期日 必须是java.util.Date 类型, 或者 格式化后的String类型,或者null , 生成方式可以是表单输入,或者之前的service 任务生成.
<userTask id="theTask" name="Important task" activiti:dueDate="${dateVariable}"/>
也可以通过 TaskService
或者TaskListener
s , DelegateTask
.改变值
可以分配给一个用户 ,通过 humanPerformer 节点 的 sourceAssignmentExpression 节点 指定人员 . 现在 仅支持 formalExpressions 属性.
<process ... > ... <userTask id='theTask' name='important task' > <humanPerformer> <resourceAssignmentExpression> <formalExpression>kermit</formalExpression> </resourceAssignmentExpression> </humanPerformer> </userTask>
解释为受让人, 或者审批人, 只有一个审批人的任务. 由其在 代办任务中查看, 其他人是看不到的.
直接分配assignee 的用户任务,可以通过 taskService 检索到其 需要代办的任务列表:
List<Task> tasks = taskService.createTaskQuery().taskAssignee("kermit").list();
任务也可以开放给 候选人 列表.那么, potentialOwner 节点就用上了, 用法跟 humanPerformer 节点类似. 要注意的是:候选人必须制定候选人是用户,还是组, 否则无法解析定义的到底是什么东西
<process ... > ... <userTask id='theTask' name='important task' > <potentialOwner> <resourceAssignmentExpression> <formalExpression>user(kermit), group(management)</formalExpression> </resourceAssignmentExpression> </potentialOwner> </userTask>
列出候选人 所属的task 列表 ,代码如下:
List<Task> tasks = taskService.createTaskQuery().taskCandidateUser("kermit");
如果没有制定 user 或者group 默认以组方式查询 类似: group(accountancy)
<formalExpression>accountancy</formalExpression>
下面是通过activiti 提供的简单的描述方式,来定义审批人.比上面那种xml格式简单多了.
-
assignee attribute: 指定实际用户.
<userTask id="theTask" name="my task" activiti:assignee="kermit" />
跟 humanPerformer 定义效果一样
-
candidateUsers attribute: 指定候选人
<userTask id="theTask" name="my task" activiti:candidateUsers="kermit, gonzo" />
跟 potentialOwner定义效果一样. 不用再像 user(kermit) 这样输入, 因为他本身就是user节点. 直接输入用户代码就行了
-
candidateGroups attribute:指定候选人的组名
<userTask id="theTask" name="my task" activiti:candidateGroups="management, accountancy" />
同上, 直接写group name就行了
-
candidateUsers 和 candidateGroups can 在同一个task节点中可以同时存在
验证用户权限,在集成到业务系统中时需要用上监听:
<userTask id="task1" name="My task" > <extensionElements> <activiti:taskListener event="create" class="org.activiti.MyAssignmentHandler" /> </extensionElements> </userTask>
DelegateTask
也是通过 TaskListener
实现,来指定受让人,或者受让组(候选人/候选组)
public class MyAssignmentHandler implements TaskListener { public void notify(DelegateTask delegateTask) { // Execute custom identity lookups here // and then for example call following methods: delegateTask.setAssignee("kermit"); delegateTask.addCandidateUser("fozzie"); delegateTask.addCandidateGroup("management"); ... } }
如果你使用了spring,可以使用service 表达式实现, 如下,就定义了 通过 ldapServie 的 findManagerForEmployee 方法或者审批人.
<userTask id="task" name="My Task" activiti:assignee="${ldapService.findManagerForEmployee(emp)}"/>
获取受让人(候选人) 如出一辙:
<userTask id="task" name="My Task" activiti:candidateUsers="${ldapService.findAllSales()}"/>
注意: 方法返回值 必须是 String 或者 List<String> 类型:
public class FakeLdapService { public String findManagerForEmployee(String employee) { return "Kermit The Frog"; } public List<String> findAllSales() { return Arrays.asList("kermit", "gonzo", "fozzie"); } }
相关推荐
Activiti 6.0 用户手册(Activiti User Guide v 6.0.0)
Activiti 学习笔记12:个人任务
可以支持网页版查看,activiti5操作手册,工作流开发学习List of Tables 2.1. 示例用户 2.2. webapp工具 3.1. 支持的数据库 6.1. 6.2. 6.3. 8.1. 邮件服务器配置 8.2. 邮件服务器配置 8.3. Mule服务器...
在原有Activiti的教程资源上对零散的源码进行了集中整理,并增加了pdm、IDE集成Activiti插件等文件,附上部分菜单,整理不易,给分支持,后期...多用户任务分配 3.内置用户组设计表以及IdentityService 4.组任务分配
documentation为该用户任务的描述。 5) 分配用户 可以把任务分配给指定的用户,也可以分配给指定的组,并且可以有多个,详见用户手册。 3.3. Spring配置文件 这里配置了数据源、事务管理、流程引擎及几个必要的...
Activiti工作流的课件整体、讲师: 刘洋 内容如下: 1:工作流的概念 1 ...16:用户任务(userTask,即用户操作的任务) 50 16.1:个人任务 50 16.2:组任务 56 16.3:工作流定义的角色组(了解) 68
1.2.1 Activiti数据表清单: 3 1.2.2 表名:ACT_GE_BYTEARRAY (通用的流程定义和流程资源) 3 1.2.4 表名:ACT_HI_ACTINST (历史节点表) 5 1.2.3 表名:ACT_GE_PROPERTY (系统相关属性) 4 1.2.5 表名:ACT_HI_...
NULL 博文链接:https://chun521521.iteye.com/blog/2182997
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 14. 系统接口:根据业务代码自动生成相关的api接口文档。 15. 在线...
Activiti的后台是有... 这些表包含身份信息,比如用户,组等等。 ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。 ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。
Activiti允许在设计model的时候指定每个活动的执行权限,但是,业务系统可能需要根据实际情况动态设置这些任务的执行权限(如:动态的Group)。OpenWebFlow完全实现了与流程定义时期的解耦,即用户对活动的访问控制...
定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 14. 系统接口:根据业务代码自动生成相关的api接口文档。 15. 在线构建器:...
20 BPMN任务(1)用户任务 21 BPMN任务(2)服务任务 22 BPMN任务(3)任务监听器与流程监听器 23 BPMN其他元素(1)子流程 24 BPMN其他元素(2)顺序流与网关 25 BPMN其他元素(3)流程活动的特性 26 规则引擎Drools(1)...
2.使用默认的用户登录后(用户名xiaomi,密码1234),可看到已部署好的两个流程,请假OA和采购流程,其中,请假OA包含了用户任务、排他网关、起始结束事件,较为简单;采购流程除此之外,还使用了异常结束事件、子...
运行findTask()查看用户任务,控制台输出如下: [java] view plain copy 1. 2. SLF4J: Defaulting to no-operation (NOP) logger implementation 3. SLF4J: See ...
Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM...
Activiti允许在设计模型的时候指定每个活动的执行权限,但是,业务系统可能需要根据实际情况动态设置这些任务的执行权限(如:动态的组)。OpenWebFlow完全实现了与流程定义阶段的解压缩,即用户对活动的访问控制...
可以通过后台管理,动态部署流程、动态设定用户任务的处理人(运行中的流程也可以调整处理人)。继承Activiti自带的modeler,实现在线设计流程文件。Shiro实现登录认证和权限控制,结合Ehcache缓存权限列表,毕竟权限...
这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。 ACT_ID_*: 'ID'表示...
用户任务的流程图,使用activiti 画出的bpmn流程图!!!!