5.7.2 流程
API: processEngines.processDefinitionId(processDefinitionId)
返回有关部署的流程定义的详细信息,可按”id”、”name”、”version”或”deploymentTime”来排序。BPMN2.0 XML流程图的名称是在”resourceName”属性给出的,结合”deploymentId”属性可以由上文中的获取部署资源的REST API调用得到这一名称。如果流程中有启动的表单,那么它是由”
startFormResourceKey”属性给出的。流程的启动表单可以从获取启动流程表单的REST API调用来获取。
API: processEngines.startProcessInstanceById(businessKey, variables) 通过流程定义Id来启动流程实例,可以在variables中添加附加的启动信息,businessKey是流程包含的业务Id。
5.7.3 任务
API: processEnginesgetTaskService().createTaskQuery().listPage() 返回任务的分页列表,其中可以按\\或\进行排序。该列表必须基于特定角色的用户:代理人(列出了分配给用户的任务)或候选者(列出了用户可以认领的任务)或候选组(列出了组中成员可以认领的任务)。如果任务中存在表单,那么是在\属性给出的。任务的表单可以从获取任务表单的REST API调用获得。
API: ProcessEngines.getTaskService().start(taskId) 执行任务上的操作(认领或完成)。
5.7.4 用户身份认证
API:identityService().checkPassword(userId, password)
对用户进行认证。如果用户和密码与请求不匹配,就会返回403状态码。如果认证成功,会返回状态码200的响应
API: identityService().createUserQuery().userId(userId).singleResult(); 返回关于用户的详细信息。
API: identityService().xxx(userId[, groupType])
返回用户所在组的分页列表,其中可按\或\进行排序。要想只获得某类型的组,需要使用”type”参数。
5.7.5 作业
29
API: processEngines.createJobQuery().xxx().listPage()
返回作业的分页列表,可按\\或者任何某个自定义属性的id 对其进行排序。该列表也可以通过流程实例的id 进行过滤,或者如果作业被重操作过,或它们是可执行的或者它们只有消息或定时器,这时也可以通过到期时间对其进行过滤。
API: processEngines.getManagementService().executeJob(jobId) 执行作业。
30
第六章 测试与应用
6.1 测试环境
ABPM系统延续了Activiti工作流引擎性能强大、简单易用的特点,系统可伸缩性强,可以满足各种复杂使用场景,不同规模应用系统的需要。在论文的最后,我们用实验的方式对ABPM系统的性能进行测试。测试环境如下:
表6.1 测试环境
CPU 内存大小 硬盘大小 操作系统 应用服务器 数据库 工作模式
Intel(R) Core(TM) i3-2350M 4核CPU 4.00GB 320GB Windows7 Ultimate 64位 Weblogic Oracle10g 单机独立部署 6.2 测试脚本
系统的测试场景为一个请假流程,员工请假需要在系统中首先向组长提交请假申请单,组长审批通过则提交给项目经理审批,组长审批不通过则退回员工修改;项目经理审批通过则提交给经理审批,项目经理审批不通过,则流程中止,返回审批结果给员工查看;经理审批通过,请假通过,流程结束;经理审批不通过,流程中止,返回审批结果给员工。具体的流程图如下:
31
图6-1 请假流程图
设计完流程之后,下一步工作就是创建数据库表, 定义公文Leaverecord 及其映射文件Leaverecord.hbm.xml
public class Leaverecord implements Serializable{ /**
* 属性recordid */
private String recordid; /**
* 属性applicant */
private String applicant;
32
/**
* 属性leavetype */
private String leavetype; /**
* 属性reason */
private String reason; /**
* 属性begintime */
private Date begintime; /**
* 属性endtime */
private Date endtime; /**
* 属性isapproved */
private String isapproved; /**
* 属性annotation */
private String annotation; /**
* 属性approvedby */
private String approvedby; /**
* 属性insertperson */
private String insertperson; /**
* 属性ismanager */
private Integer ismanager; 33