二、设计流程
我们学习的内容以“请假流程”为例。
1. 设计流程
开始->提交申请->部门经理审批->结束:
开始 | |
为其添加一个名称为“提交申请”的Task,设置它的Assignment的Actor为“#{applicantActorId}”。 | |
为其添加一个名称为“审批”的Task,设置它的Assignment的handler为“cn.itcast.oa.process.leave.DeptManagerAssignmentHandler”。 | |
结束 |
DeptManagerAssignmentHandler类的实现明天再列出,将上面设计的流程部署到OA项目中。然后编写测试类对流程进行测试。因为使用JBPM流程在前边已经讲过了,所以在些就不详细列出了。上面的流程执行过程为,开始:创建流程实例à办理任务:提交申请à办理任务:部门经理审批à结束。
三、表单实例
我们已经将流程定义、表单定义搞定了和测试执行流程,接下来我们应该生成表单实例。将表单实例入到流程中进行流转处理。
通过第一部分的全景图我们知道:FormDefinition、FormInstance、ApproveInfo与Employee之间的关系。
FormDefinition:表单定义,能过定义生成实例。
FormInstance:表单实例,一个流程中只能有一个表单实例。
ApproveInfo:审批信息,一个流程中可以具有多个审批。
Employee:职员
FormInstance:
public class FormInstance { // 表单状态常量 public static final String STATUS_PROCESSING = "正在审批中"; public static final String STATUS_APPROVED = "已通过审批"; public static final String STATUS_NOT_APPROVED = "未通过审批";
private Long id; private FormDefinition formDefinition;// 使用的表单定义 private Map<String, Serializable> propertyMap = new HashMap<String, Serializable>();// 表单信息
private Employee applicant; // 申请人 private Date applyTime; // 申请时间 private String title; // 标题 private String status; // 状态 private Set<ApproveInfo> approveInfos = new HashSet<ApproveInfo>();// 审批信息 private Long processInstanceId; // 流程实例ID //setters and getters… } |
ApproveInfo:
public class ApproveInfo { private Long id; private Employee approver;//审批人 private Date approveTime;//审批时间 private FormInstance formInstance;//表单实例 private boolean approval;//是否同意 private String comment;//意见 private Long taskInstanceId;//任务实例ID //setters and getters… } |
现在看一看什么才是最重要的?就是这些实体,实体体现了业务逻辑。把业务逻辑搞明白了,实体设计出来了。实现上没有什么太难的。
明日将学习具体生成表单实例并应用到流程中,生成审批信息等。我们也可以查看自己的申请和待我申请等与审批模块相关的操作信息。