关于uflo中,流程显示任务已领取,但是任务处理人为空的异常

1、版本号:  uflo-core-1.1.4.jar,uflo-client-1.1.4.jar,uflo-console-1.1.4.jar
2、问题描述:今年在生产系统上,有两个系统偶尔会出现“任务已领取,但是领取人为空的异常”,之前怀疑是用户操作问题,但是出现的次数多了,就得引起重视。查看日志发现报异常是:当前登录人为空,我们在测试环境中很难模拟出现,就出现生产系统中,之后与银联数据的andy沟通后,说也在生产中出现过这种情况,我们的共同点都是使用了端点登录,用户场景也类似,难道是端点登录引起的?但客户的第一反应就是我们的uflo产品bug,还请公司产品部的同事辛苦下,帮助分析并协助解决,谢谢。
 
QQ图片20160831102351.jpg
已邀请:

Jacky - 规则

赞同来自:

“任务已领取,但是领取人为空的异常”这是什么意思?

hans

赞同来自:

补充说明:用户在待办任务页面,点击“领取任务”时发生了异常,即没有获取到当前登录用户,但是任务的状态已变成“Reserved”,任务处理人为"null"。
/**
* 领取任务
* @author jack
* @param taskId
*/
@Expose
public void claimTask(long taskId) {
taskService.claim(taskId, EnvironmentUtils.getEnvironment().getLoginUser());
}


 
com/bstek/bdf2/uflo/env/DefaultEnvironmentProvider.java

public String getLoginUser() {
IUser user=ContextHolder.getLoginUser();
if(user==null){
return null;
}else{
return user.getUsername();
}
}

Jacky - 规则

赞同来自:

这个方法需要改进下,加个判断:
 
if(EnvironmentUtils.getEnvironment().getLoginUser()==null){
   throw new RuntimeException("not login.");
}
public void claimTask(long taskId) { taskService.claim(taskId, EnvironmentUtils.getEnvironment().getLoginUser()); } 
也就是在用户未登录的情况下不允许进行任务领取操作。
 
我在这个claim操作里也加个判断吧。

Jacky - 规则

赞同来自:

请下载uflo-core-1.1.6-snapshot,这个版本中如果claim时user为null则会抛出异常。
这样至少业务层面不会出问题。
这种问题应该说与uflo没有关系,问题出在session中没有登录人信息,所以你们需要检查是不是sso操作时登录人没有加到session中,诸如引类。

hans

赞同来自:

谢谢Jack。
在同一个方法中,业务表单数据可以保存成功且可以通过ContexHolder读到当前登录用户的信息,但是claim中通过EnvironmentUtils.getEnvironment().getLoginUser()读到不任务处理人,这个非常奇怪。
 
 

Jacky - 规则

赞同来自:

检查一下你们自己实现的EnvironmentProvider中获取登录用户的写法是不是存在问题

要回复问题请先登录注册