当springboot2.0集成activiti7时,activiti使用了身份认证,集成后直接访问报错如下:
{ "timestamp": "2019-12-13T02:54:05.254+0000", "status": 401, "error": "Unauthorized", "message": "Unauthorized", "path": "/" }
启动类添加(排除认证的自动装配):
@SpringBootApplication(exclude ={SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class})
集成后,springMVC返回的json结果集排除了null字段,比如定义返回结果集{id,name},如果name==null,返回结果集如下:
{ "id": 1, }
去掉了name字段
在yml中添加(jackson可以控制json返回结果集是否显示null字段):
jackson: default-property-inclusion: always
我想保存流程的发起人,网上的解决办法是添加activiti:initiator的属性赋值,实际就是插入'act_hi_procinst'中START_USER_ID_字段,但是activiti7中没有identityService接口,所以额, identityService.setAuthenticatedUserId(
`"zx" );
没用,initiator没法赋值。
新建一张流程关联的表,可以把流程中的自己业务流程所需的资源都带上,比较灵活,降低与activiti的耦合,推荐。
理论上来讲既然知道具体是那个表的字段了,可以根据processInstanceId手动插入发起人。
activiti7应该有其他的解决方案,但是7的api一直没找到,源码看着头疼,而且第一种个人认为更适用于项目,整合之后就是分离独立。
如上图请假流程图,在网关位置有分支,变量为audit,测试流程如下:
不走分支流程(正常运行):
开始->请假申请->领导审批->审核通过(赋值audit==1)->结束
走分支流程(循环运行):
开始->请假申请->领导审批->审核不通过(赋值audit==0)->请假申请->领导审批->审核通过(赋值audit==1)->请假申请->...
当第一次赋值audit之后,后面继续使用 taskService.complete(taskId,variables);
赋值无法改变audit的值。
在调用complete前,通过 setVariable
进行赋值
taskService.setVariable(taskId,"audit",audit);
原因在于 act_ru_variable
表,第一次在流程中赋值audit后,activiti认为这是这个流程中的变量,会保存在 act_ru_variable
表中,因为数据库已经存在相应的字段,后面再使用 taskService.complete(taskId,variables);
无法改变值,只能 setVariable