转载

springboot2.0+activiti 7 整合(四)--遇到的那些坑(一)

1、认证问题

问题描述:

当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})

2、json结果集不返回NULL问题

问题描述:

集成后,springMVC返回的json结果集排除了null字段,比如定义返回结果集{id,name},如果name==null,返回结果集如下:

{
    "id": 1,
}

去掉了name字段

解决办法

在yml中添加(jackson可以控制json返回结果集是否显示null字段):

jackson:
    default-property-inclusion: always

3、流程发起人initiator赋值问题

问题描述

我想保存流程的发起人,网上的解决办法是添加activiti:initiator的属性赋值,实际就是插入'act_hi_procinst'中START_USER_ID_字段,但是activiti7中没有identityService接口,所以额, identityService.setAuthenticatedUserId( `"zx" ); 没用,initiator没法赋值。

解决办法

1、新建表关联流程(在用)

新建一张流程关联的表,可以把流程中的自己业务流程所需的资源都带上,比较灵活,降低与activiti的耦合,推荐。

2、直接手动插入START_USER_ID_(理论)

理论上来讲既然知道具体是那个表的字段了,可以根据processInstanceId手动插入发起人。

3、其他

activiti7应该有其他的解决方案,但是7的api一直没找到,源码看着头疼,而且第一种个人认为更适用于项目,整合之后就是分离独立。

4、流程变量问题

问题描述

springboot2.0+activiti 7 整合(四)--遇到的那些坑(一)

如上图请假流程图,在网关位置有分支,变量为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

原文  https://segmentfault.com/a/1190000021279081
正文到此结束
Loading...