阅读(2564) (3)

7.与BDF2的集成

2022-07-24 11:22:02 更新

        BDF是Bstek推出的一款基于Dorado7的J2EE开发框架,其项目首页地址为http://bsdn.org/projects/bdf,在BDF当中提供了权限、报表等各种企业应用常用功能,使用BDF,通过一些简单的属性配置,即可实现业务系统框架的快速搭建。

在BDF2当中提供了一个集成UFLO的名为bdf2-uflo的项目,在这个项目当中,提供可很好适配BDF2环境的EnvironmentProvider接口实现类,实现了将BDF2中用户、部门、岗位信息与流程模版设计时所需要的任务分配人结合,使用bdf2-uflo模块,在设计UFLO流程模版时可直接使用BDF2中的用户、部门、岗位信息,如下图所示。


在上图当中,红框内就是bdf2-uflo项目中集成的可供选择的BDF2中的用户、部门、岗位,我们知道,UFLO中任务处理人选择定义需要实现com.bstek.uflo.process.assign.AssigneeProvider接口,所以这里五种任务处理人类型,实际上分别对应五个AssigneeProvider接口实现类,通过这五个AssigneeProvider接口实现类,将BDF2中采用的用户、部门、岗位信息提供给UFLO中人工任务处理人选择使用。

如果要使用bdf2-uflo项目,那么默认就需要有bdf2的核心包,也就是需要使用bdf2,如果您是从头开始创建新的项目,那么可以到bdf2提供的在线项目创建向导中创建一个maven或dynamic webproject项目,在创建时要勾选项目模块列表中的bdf2-uflo项目,这样您创建的项目当中就包含bdf2-uflo项目了,同时bdf2-uflo项目支持时所依赖的uflo-core及uflo-console项目也会添加到我们要创建的项目当中。如果您的bdf2项目已创建好,那么只需要在项目的pom.xml中添加如下依赖配置即可(针对Maven项目):

bdf2-uflo项目依赖配置

<dependency>   <groupId>com.bstek.bdf2</groupId>   <artifactId>bdf2-uflo</artifactId>   <version>[version]</version>
</dependency>

添加bdf2-uflo项目注意事项bdf2-uflo项目在运行时,需要依赖uflo-core及uflo-console两个项目,所以如果搭建的项目采用Maven来管理的话,那么在添加上述bdf2-uflo依赖信息后,Maven会自动为我们下载bdf2-uflo项目所依赖的uflo-core及uflo-console两项目;但如果您采用的是传统的Dynamic web project项目时,在使用bdf2-uflo模块时,除了要将bdf2-uflo的jar添加到项目当中来以外,还需要将uflo-core及uflo-console两项目的jar以及这两个项目运行时依赖的第三方的jar添加到项目当中。

在实际使用过程当中,需要在一个已有的传统的Dynamic web project项目bdf2项目中添加uflo支持,我们推荐采用bdf2提供的在线项目创建向导先创建好一个包含bdf2-uflo的Dynamic webproject项目,然后将生成项目中的jar复制到现有项目当中即可,这样我们就可避免自己手动下载各种jar拼装项目的繁琐。

在使用bdf2-uflo项目时,可以通过在WEB-INF/dorado-home目录下的configure.properties文件中配置下面这些属性实现对bdf2-uflo项目的细节控制。

属性名

类型

描述

bdf2.uflo.dataSourceName

字符串

指定UFLO数据库对应的BDF2中配置的数据源的名称,默认值为空,表示取BDF2框架的系统默认数据源

bdf2.uflo.transactionManager

字符串

指定UFLO引擎在运行时采用哪个事务管理器,默认值为bdf2.transactionManager,如果你的BDF2项目当中没有ID为bdf2.transactionManager的TransactionManager,那么需要覆盖该属性以指定实际存在的并且可以与bdf2.uflo.dataSourceName属性指定数据源对应的TransactionManager。

bdf2.uflo.defaultCategoryId

字符串

在BDF2当中,每个可以登录到BDF2中的用户都必须有一个companyId属性,用以实现不同公司的人登录BDF2应用加载不同数据的功能。其实在UFLO当中也有一个类似属性用以对应BDF2中用户的companyId属性,这个属性就是我们在定义流程模版时看到的“分类ID”属性。

在bdf2-uflo项目当中,在实现EnvironmentProvider接口时,getCategoryId返回的值是从ContextHolder中到的当前BDF2登录用户的的companyId属性值,但在我们设计流程模版时,需要通过远程访问bdf2-uflo项目中定义的任务分配人,但这时并没有任务登录用户,这时EnvironmentProvider接口实现的getCategoryId方法就会返回null,这个null值作为companyId肯定取不到任务BDF2中用户、部门、岗位信息的,所以需要定义这个属性值,为设计器远程访问任务处理人时提供companyId值,通常情况下,只需要将这个属性值定义为BDF2应用登录人的companyId的值即可,否则在设计器中取任务处理人时将看不到任务BDF2中用户、部门、岗位信息。该属性只在用户未登录的情况下用于EnvironmentProvider接口实现的getCategoryId方法的返回值,如果用户登录,那么getCategoryId方法将返回登录用户的companyId属性值。

bdf2.uflo.disabledUserAssigneeProvider

Boolean

是否禁用bdf2-uflo中提供的返回BDF2中用户这个任务处理人提供器,默认值false,表示不禁用,如果设置为,那么设计器在选择任务处理人的列表中就看不到“指定应用中的某个用户”这一项。

bdf2.uflo.disabledDeptAssigneeProvider

Boolean

是否禁用bdf2-uflo中提供的返回BDF2中部门这个任务处理人提供器,默认值false,表示不禁用,如果设置为,那么设计器在选择任务处理人的列表中就看不到“指定应用中的某个部门”这一项。

bdf2.uflo.disabledDeptUserAssigneeProvider

Boolean

是否禁用bdf2-uflo中提供的返回BDF2中部门与用户组合这个任务处理人提供器,默认值false,表示不禁用,如果设置为,那么设计器在选择任务处理人的列表中就看不到“指定应用中的某个部门下的用户”这一项。

bdf2.uflo.disabledPositionAssigneeProvider

Boolean

是否禁用bdf2-uflo中提供的返回BDF2中岗位这个任务处理人提供器,默认值false,表示不禁用,如果设置为,那么设计器在选择任务处理人的列表中就看不到“指定应用中的某个岗位”这一项。

bdf2.uflo.disabledPositionUserAssigneeProvider

Boolean

是否禁用bdf2-uflo中提供的返回BDF2中岗位与用户组合这个任务处理人提供器,默认值false,表示不禁用,如果设置为,那么设计器在选择任务处理人的列表中就看不到“指定应用中的某个岗位下的用户”这一项。

bdf2.uflo.disabledFetchTodoTaskCountShortcutRegister

Boolean

一旦我们的BDF2项目当中加入了bdf2-uflo模块,那么在我们的操作主界面当中会自动注册一个提供当前登录用户是否有待办任务的提示功能,这个属性就是让我们决定是否要禁用这个提示功能的,默认为false,表示启用。

bdf2.uflo.fetchInternalTodoTaskCountInterval

数字

在bdf2.uflo.disabledFetchTodoTaskCountShortcutRegister属性值为false的情况下,用来决定每隔多长时间检测当前登录用户是否有待办任务,默认值为600000,单位为毫秒,600000也就是10分钟。

bdf2.uflo.listTodoTaskUrl

字符串

指定bdf2-uflo项目中定义的待办任务列表页面是哪一个,默认值为com.bstek.uflo.console.view.TodoTaskMaintain.d,表示采用uflo-console项目中定义的待办任务列表页面。

      在使用bdf2-uflo时,除了可以通过覆盖上述属性外,还可以覆盖UFLO中各属性,UFLO中提供的属性可以2.安装与配置中查看。另外,在bdf2-uflo项目当中,还提供了com.bstek.bdf2.core.business.IMenuGenerator接口实现,用于创建uflo-console模块中提供个各个页面导航的URL,所以在我们的项目当中加入bdf2-uflo模块后,登录成功后,可以访问generate.system.menu.action这个URL(关于此URL解释见1.项目创建与配置中描述),一旦访问成功,再次回到我们的主界面就可以看到uflo-console中提供的各页面的导航URL了,如下图所示:

在通过bdf2-uflo项目使用UFLO时,我们就不需要在项目的SessionFactory构建配置当中通过添加packagesToScan属性来扫描com.bstek.uflo.model*包下UFLO持久化所需要的Hibernate实体对象,这是因为在bdf2-uflo项目中,已通过在其Spring配置文件中添加了如下所示的Bean:

bdf2-uflo项目中配置的UFLO中用于Hibernate持久化的实体Bean的位置

<bean class="com.bstek.bdf2.core.orm.AnnotationPackages">  <property name="scanPackages">
    <list>      <value>com.bstek.uflo.model*</value>
   </list>
 </property>
<property name="dataSourceRegisterName" value="${bdf2.uflo.dataSourceName}"></property>
</bean>

上述Bean配置采用的是bdf2提供的机制,Hibernate SessionFactory在构建时会自动扫描com.bstek.bdf2.core.orm.AnnotationPackages类对应的Bean,将其下定义的包或实体Bean纳入到Hibernate的SessionFactory当中。所以我们在使用了bdf2-uflo项目后,就不需要在我们的datasources.xml中配置这一扫描信息了。