1、高级查询API:运行时间与历史任务查询之间的无缝切换

任何BPM用户界面的核心组件是任务列表。通常,最终用户使用开放的运行时任务,通过各种设置过滤他们的收件箱。通常,历史任务也需要在这些列表中显示,并且具有相似的过滤功能。为了使代码更容易,TaskQuery和HistoricTaskInstanceQuery都有一个共享的父接口,它包含所有常见的操作(大部分操作是通用的)。

这个通用接口是org.flowable.engine.task.TaskInfoQuery类。既org.flowable.engine.task.Task和org.flowable.engine.task.HistoricTaskInstance 具有共同的超类org.flowable.engine.task.TaskInfo(具有共同属性的),这是从例如返回的列表()方法。但是,Java泛型有时比帮助更有害:如果要直接使用TaskInfoQuery类型,它看起来像这样:

TaskInfoQuery<? extends TaskInfoQuery<?,?>, ? extends TaskInfo> taskInfoQuery

呃,对。为了解决这个问题,一个org.flowable.engine.task.TaskInfoQueryWrapper类可以用来避免泛型(下面的代码可能来自REST代码,它返回一个任务列表,用户可以在打开和完成的任务之间切换):

TaskInfoQueryWrapper taskInfoQueryWrapper = null;
if (runtimeQuery) {
taskInfoQueryWrapper = new TaskInfoQueryWrapper(taskService.createTaskQuery());
} else {
taskInfoQueryWrapper = new TaskInfoQueryWrapper(historyService.createHistoricTaskInstanceQuery());
}
List<? extends TaskInfo> taskInfos = taskInfoQueryWrapper.getTaskInfoQuery().or()
.taskNameLike("%k1%")
.taskDueAfter(new Date(now.getTime() + (3 * 24L * 60L * 60L * 1000L)))
.endOr()
.list();

2、通过覆盖标准的SessionFactory来定制身份管理

如果您不想使用像LDAP集成一样的完整ProcessEngineConfigurator实现 ,但仍希望插入自定义身份管理框架,那么您也可以重写IdmIdentityServiceImpl类或直接实现IdmIdentityService接口,并使用实现的类ProcessEngineConfiguration中的idmIdentityService属性。在Spring中,通过将以下内容添加到ProcessEngineConfiguration bean定义中可以轻松完成此操作:

<bean id="processEngineConfiguration" class="...SomeProcessEngineConfigurationClass">
...
<property name="idmIdentityService">
<bean class="com.mycompany.IdmIdentityServiceBean"/>
</property>
...
</bean>

看看LDAPIdentityServiceImpl类的实现,有一个很好的例子来说明如何实现IdmIdentityService接口的方法。你必须找出你想在自定义标识服务类中实现的方法。例如下面的调用:

long potentialOwners = identityService.createUserQuery().memberOfGroup("management").count();

导致对IdmIdentityService接口的以下成员的调用:

UserQuery createUserQuery();

LDAP集成的代码包含了如何实现这个的完整例子。

上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐