UFLO 2 : 3.1.设计流程模版

      我们设计的请假流程相对简单,总共有六个步骤,分别是填写请假单、部门经理审批、判断请假天数、总经理审批、人事确认及结束。如下图所示。

       对于所有请假人员来说,需要做的第一步就是填写请假单,对于流程来说,填写请假单也就是请假流程的开始,也就是流程的开始节点,在UFLO当中,开始节点可以生成一个人工任务,以实现类似我们请假流程当中的填写请假单之类的操作。因为填写请假单的开始节点要产生任务,所以可以在填写请假单时进行填单的暂存,或审批时的驳回修改之类操作。对应的,如果不允许在开始节点产生人工任务,要完成上述操作我们只能再添加一个新的人工任务节点,以完成本该开始节点完成的工作。

       请假人员填好请假单好,即可提交给其所在的部门经理审批,部门经理在审批时,如果觉得请假单有问题可以进行驳回修改操作,以让填单人重新修改。如果部门经理审批同意,那么下一步要判断请假人的请假天数,如果大于10天,那么还需要总经理审批,小于等于10天则直接做人事确认即可,人事确认后,请假流程也就完成了。

       开始节点表单配置如下图所示:

       可以看到,我们的请假单只有三个字段,分别是请假的标题,天数及备注,同时我们还要启动包含uflo-core及uflo-console两模块的标准的web项目,启动成功后就可以在表单配置里选择渲染当前定义的这三个字段的页面的URL,单击“渲染表单模版”的选择按钮,在弹出窗口中输入如下格式地址:

      http://localhost:8080/uflo-test/dorado/uflo/list.handler

      UFLO中流程模版定义的所有选择都是与我们的web服务关联,通过连接远程web服务,来获取定义好的合适的值,上述“渲染表单模版”的URL选择就是这样,关于“渲染表单模版”后面会有详细介绍。地址输入正确后,下一步后就可以看以可供选择的两个URL,我们这里选择默认的,如下图所示:

       在后面的几个人工任务节点中,在它们的表单配置当中,全部选择在开始节点中定义的这三个字段,同时设置他们的访问类型为只读,“渲染表单模版”的URL全部采用与开始节点相同的URL。这里需要指出的是,对于当前流程模版当中唯一的决策节点“判断请假天数”,在其“决策配置”中,我们采用条件表达式方式,在其中输入下面的表达式:

          ${dayCount>10?"大于10天":"小于等于10天"}

          上面的表达式表示将取名为dayCount的流程变量,并判断它的值是否大于10,如果是由走名为“大于10天”的连接,让总经理审批,否则走“小天等于10天”直接由人事确认。如下图所示:

          设计好的流程模版的XML内容如下:

请假流程模版XML内容
<?xml version="1.0" encoding="UTF-8"?>
<uflo-process name="leave-process">
   <start g="60,38,65,62" name="填写请假单" form-template="com.bstek.uflo.console.view.template.DefaultFormTemplate.d">
      <sequence-flow to="部门经理审批"/>
      <form-element authority="ReadAndWrite" data-type="String" name="title" caption="标题" required="true" editor-type="TextEditor"/>
      <form-element authority="ReadAndWrite" data-type="int" name="dayCount" caption="请假天数" required="true" editor-type="TextEditor"/>
      <form-element authority="ReadAndWrite" data-type="String" name="cmnt" caption="备注" required="true" editor-type="TextArea"/>
   </start>
   <task g="221,44,129,50" allow-specify-assignee="false" assignment-type="ProcessPromoter" task-type="Normal" name="部门经理审批" form-template="com.bstek.uflo.console.view.template.DefaultFormTemplate.d">
      <sequence-flow to="判断请假天数"/>
      <form-element authority="Read" data-type="String" name="title" caption="标题" required="true" editor-type="TextEditor"/>
      <form-element authority="Read" data-type="int" name="dayCount" caption="请假天数" required="true" editor-type="TextEditor"/>
      <form-element authority="Read" data-type="String" name="cmnt" caption="备注" required="true" editor-type="TextArea"/>
   </task>
   <decision expression="${dayCount&gt;10?&quot;大于10天&quot;:&quot;小于等于10天&quot;}" g="461,38,81,62" name="判断请假天数" decision-type="Expression">
      <sequence-flow to="总经理审批" g="-58,-20" name="大于10天"/>
      <sequence-flow to="人事确认" g="-3,-19" name="小于等于10天"/>
   </decision>
   <task g="223,233,115,50" allow-specify-assignee="false" assignment-type="ProcessPromoter" task-type="Normal" name="总经理审批" form-template="com.bstek.uflo.console.view.template.DefaultFormTemplate.d">
      <sequence-flow to="人事确认" g="-76,-20" name="to 人工任务3"/>
      <form-element authority="Read" data-type="String" name="title" caption="标题" required="true" editor-type="TextEditor"/>
      <form-element authority="Read" data-type="int" name="dayCount" caption="请假天数" required="true" editor-type="TextEditor"/>
      <form-element authority="Read" data-type="String" name="cmnt" caption="备注" required="true" editor-type="TextArea"/>
   </task>
   <task g="491,233,115,50" allow-specify-assignee="false" assignment-type="ProcessPromoter" task-type="Normal" name="人事确认" form-template="com.bstek.uflo.console.view.template.DefaultFormTemplate.d">
      <sequence-flow to="审批结束"/>
      <form-element authority="Read" data-type="String" name="title" caption="标题" required="true" editor-type="TextEditor"/>
      <form-element authority="Read" data-type="int" name="dayCount" caption="请假天数" required="true" editor-type="TextEditor"/>
      <form-element authority="Read" data-type="String" name="cmnt" caption="备注" required="true" editor-type="TextArea"/>
   </task>
   <end g="523,394,54,62" terminate="true" name="审批结束"/>
</uflo-process>

       值得注意的是,这里为了简单起见,我们所有人工任务节点的处理人皆为默认的流程开启人,也就是谁开启谁处理,同时,我们可以看到,开始节点的人工任务,能配置的只有处理页面的URL及任务名称,不提供任务处理人之类配置,这是因为开始节点的任务处理人,引擎认为肯定是由流程开启人自己处理,而不会是其它人,所以不允许配置。

       流程模版配置完成后,我们可以右键选择部署流程或点击工具栏上的部署流程模版的按钮,在弹出的窗口中输入如下所示的URL格式:

       http://localhost:8080/uflo-test/dorado/uflo/deploy.process

       当然在部署前还可以验证当前流程模版是否正确,无误后再部署到服务器。成功部署流程后可以在我们应用的如下格式的URL中看到部署成功的流程模版:

       http://localhost:8080/uflo-test/com.bstek.uflo.console.view.ProcessMaintain.d

       这个名为ProcessMaintain页面,是一个采用dorado7开发的流程模版的维护页面,在其中不仅可以看到我们部署成功的流程模版,还可以利用这个模版开始新的实现,完成产生的任务或删除流程实例、流程模版等操作。接下来我们就可以利用这个页面,对设计好的流程模版进行流转验证了。

Attachments:

leave-process.png (image/png)
form-config.png (image/png)
url.png (image/png)
decision-config.png (image/png)