Activiti 5.16 用户手册 http://www.mossle.com/docs/activiti/index.html
Groovy语法 http://www.jianshu.com/p/1e95d03060f7
Activiti数据库表结构(表详细版) http://blog.csdn.net/hj7jay/article/details/51302829
集成新版(5.17+)Activiti Modeler与Rest服务 http://www.kafeitu.me/activiti/2015/12/27/integrate-new-activiti-modeler-and-rest.html
流程开发Activiti 与SpringMVC整合实例 http://www.cnblogs.com/xiaochangwei/p/5443173.html
SpringMVC与Activiti网页流程设计器整合 http://blog.csdn.net/xinqing623/article/details/48541811
设计器汉化 http://blog.csdn.net/xugangjava/article/details/12949151 一些汉化资源 http://pan.baidu.com/s/1qWlzHDE
SpringMVC项目集成Activiti Modeler(Activiti5.20版本) http://my.oschina.net/scoder/blog/678647
在eclipse中设计BPMN 2.0工作流定义的根本步骤 https://yq.aliyun.com/articles/28598
activiti入门3排他网关,并行网管,包含网关,事件网关 http://blog.csdn.net/a67474506/article/details/40428709
比较Activiti中三种不同的表单及其应用 http://www.kafeitu.me/activiti/2012/08/05/diff-activiti-workflow-forms.html
Form properties 表单属性 https://github.com/waylau/activiti-5.x-user-guide/blob/master/Chapter%209.%20Forms%20%E8%A1%A8%E5%8D%95/Form%20properties%20%E8%A1%A8%E5%8D%95%E5%B1%9E%E6%80%A7.md
Activiti: 关于表单的一些接口 http://www.mekau.com/index.php/tec/server/workflow/pandy_1611.html
Activiti5 的变量信息加入taskId http://fackyou200.iteye.com/blog/2089429
Activiti学习笔记七 流程变量 http://blog.csdn.net/qq710262350/article/details/42391757
扩展activiti使用自己的用户表和群组表 http://my.oschina.net/winHerson/blog/118172
同步或者重构Activiti Identify用户数据的多种方案比较 http://www.kafeitu.me/activiti/2012/04/23/synchronize-or-redesign-user-and-role-for-activiti.html
表达式支持自定义类 http://www.mossle.com/docs/activiti/index.html#springExpressions
BOS项目练习(activiti,历史数据操作,流程变量,任务组,监听器,网关,spring整合) http://blog.csdn.net/opopopwqwqwq/article/details/51702267
Activiti5 自定义查询语句 TaskQuery查询 条件查询 like查询 http://blog.csdn.net/iflow/article/details/10513903
Activiti历史查看,activiti历史 http://www.bkjia.com/Javabc/852758.html
- SQL脚本:下载activiti-5.21.0.zip,解压,得到SQL执行脚本。myslq有三个分类,试用执行没有错误的那一类来执行。
- User Task: Assignee指定拥有这个任务的用户编码。
- 并行网关里面是加号(+): 下一级每个结点都要执行;
- 排他网关里面是乘号(X): 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件解析为true的顺序流(或者没有设置条件,概念上在顺序流上定义了一个’true’) 会被选中,让流程继续运行。注意这里的外出顺序流 与BPMN 2.0通常的概念是不同的。通常情况下,所有条件结果为true的顺序流 都会被选中,以并行方式执行,但排他网关只会选择一条顺序流执行。 就是说,虽然多个顺序流的条件结果为true, 那么XML中的第一个顺序流(也只有这一条)会被选中,并用来继续运行流程。 如果没有选中任何顺序流,会抛出一个异常。
- 包含网关里面是一个圆圈: 可以看做是排他网关和并行网关的结合体。 和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析它们。 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样。
包含网关的功能是基于进入和外出顺序流的:
分支: 所有外出顺序流的条件都会被解析,结果为true的顺序流会以并行方式继续执行, 会为每个顺序流创建一个分支。
汇聚: 所有并行分支到达包含网关,会进入等待章台, 直到每个包含流程token的进入顺序流的分支都到达。 这是与并行网关的最大不同。换句话说,包含网关只会等待被选中执行了的进入顺序流。 在汇聚之后,流程会穿过包含网关继续执行。
注意,如果同一个包含节点拥有多个进入和外出顺序流, 它就会同时含有分支和汇聚功能。 这时,网关会先汇聚所有拥有流程token的进入顺序流, 再根据条件判断结果为true的外出顺序流,为它们生成多条并行分支。 - 表单所有需要渲染的表单属性都是通过2个服务方法中的一个进行装配的:
StartFormData FormService.getStartFormData(String processDefinitionId) 和
TaskFormdata FormService.getTaskFormData(String taskId).表单属性可以通过
ProcessInstance FormService.submitStartFormData(String processDefinitionId, Map<String,String> properties)
void FormService.submitStartFormData(String taskId, Map<String,String> properties)2种方式进行提交。 - 表单数据类型: 支持以下的几种表单属性类型:
string (org.activiti.engine.impl.form.StringFormType)
long (org.activiti.engine.impl.form.LongFormType)
enum (org.activiti.engine.impl.form.EnumFormType)
date (org.activiti.engine.impl.form.DateFormType)
boolean (org.activiti.engine.impl.form.BooleanFormType) - Activiti对任务分配的扩展
当分配不复杂时,用户和组的设置非常麻烦。 为避免复杂性,可以使用用户任务的自定义扩展。
assignee属性:这个自定义扩展可以直接把用户任务分配给指定用户。
<userTask id=”theTask” name=”my task” activiti:assignee=”kermit” />
它和使用上面定义的humanPerformer 效果完全一样。
candidateUsers属性:这个自定义扩展可以为任务设置候选人。
<userTask id=”theTask” name=”my task” activiti:candidateUsers=”kermit, gonzo” />
它和使用上面定义的potentialOwner 效果完全一样。 注意它不需要像使用potentialOwner通过user(kermit)声明, 因为这个属性只能用于人员。
candidateGroups属性:这个自定义扩展可以为任务设置候选组。
<userTask id=”theTask” name=”my task” activiti:candidateGroups=”management, accountancy” />
它和使用上面定义的potentialOwner 效果完全一样。 注意它不需要像使用potentialOwner通过group(management)声明, 因为这个属性只能用于群组。下面的例子中,执行者会通过调用ldapService这个spring bean的findManagerOfEmployee方法获得。 流程变量emp会作为参数传递给bean。
<userTask id=”task” name=”My Task” activiti:assignee=”${ldapService.findManagerForEmployee(emp)}”/>
也可以用来设置候选人和候选组:
<userTask id=”task” name=”My Task” activiti:candidateUsers=”${ldapService.findAllSales()}”/>
注意方法返回类型只能为String或Collection<String> (对应候选人和候选组):
public class FakeLdapService {public String findManagerForEmployee(String employee) {
return “Kermit The Frog”;
}public List<String> findAllSales() {
return Arrays.asList(“kermit”, “gonzo”, “fozzie”);
}} - 集成LDAP, 不是必须的,因为上面的assignee,candidateUsers,candidateGroups是可以使用表达式的。
企业通常已经在LDAP系统各种保存了用户和群组信息。 自从5.14版本开始,Activiti提供了一种解决方案, 通过简单的配置就可以告知activiti如何连接LDAP。
要想在你的项目中集成LDAP, 在pom.xml中添加如下依赖:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-ldap</artifactId>
<version>latest.version</version>
</dependency>用例
集成LDAP目前有两大用例:
通过IdentityService进行认证。比如,使用Activiti Explorer 通过LDAP登录。
获得用户的组。这在查询用户可以看到哪些任务时非常重要。 (比如,任务分配给一个候选组)。 - 整合设计器问题: angular-strap-mini.js:8 Uncaught TypeError: a.focus is not a function, 这个是源码出现问题,去官网找对应版本的源码,然后修改$modal.show方法里面的requestAnimationFrame回调函数,直接注释掉a.focus(); 碰到问题再说!!!
- 整合设计器问题:对话框问题, 设计器点doucemnt文本弹出框,无法关闭,是因为重复创建了对话框div,所以关闭的时候要清空这个对话框,text-popup.html里面的div加入id=”KisBpmTextPropertyPopupCtrl” , properties-default-controllers.js,close方法最后加入: jQuery(document.getElementById(“KisBpmTextPropertyPopupCtrl”)).remove(); 同理,listeners,Signal definitions,保存对话框,对话框也响应处理,包括close,如果有cancel,也要加入清除代码;
- 整合设计器问题:隐藏没必要的区域, modeler.html里面的main-header加入隐藏代码style=”display: none;”, id=main的增加style=”padding:0px;”
- 表单的Form values使用,如果想使用它,请使用enum作为这个字段的Type, 然后才能读取 formProperty.getType().getInformation(“values”)
- 表单字段: 如果你在流程图里面没有定义表单字段,但是在启动流程和完成任务,一样可以提交没定义的字段,后台一样能读取的。