执行websale示例流程
现在我们将使用示例web应用程序来执行部署在JBoss jBPM中的websale示例流程(如图3所示). 记住你自己的web应用程序可能和在此展示的示例相似, 也可能会提供完全不同的用户界面.
图3. 部署在JBoss jBPM中的websale示例流程
第一步登录. 选择用户列表中的”cookie monster”, 单击”login in”按钮, 页面跳转到此用户的主页(Home page), 如图4所示. 主页中有一个”Tasklist”任务列表(当前为空)和开始新流程列表”Start New Process Execution”(图4). 请注意下面的开始新流程(Start New Process Execution)列表不仅包括开始流程链接(Start Process Link), 还显示流程名(Process)”websale”和版本号(Version)” 1”.
图4. 包括任务列表(Tasklist)和开始新流程(Start New Process Execution)列表的主页
单击“Create new web sale order”。web应用程序将调用Jboss jBPM创建一个新的websale流程实例。图5是任务页, 此页右边流程图中的红框说明流程进行到哪一步,左边供用户填写信息的表格。表格中的变量(item,quantity和address)也是websale流程的流程变量。
图5. 任务页,右边的流程图显示当前的流程步骤
Item填入“cookie”,quantity填入“ 1 ” ,address置空。选择"Save and Close Task"完成任务。然后web应用程序将把输入的流程变量值通知Jboss jBPM以推动websale流程. JBoss jBPM审核流程的下一个状态, 决定由谁执行流程下一节点的任务. 页面转到home页, 如图6所示.
图6. 保存任务之后转到的Home页
注意此页中的提示信息”A new task has been assigned to ‘ernie’”, 即”有一个新的任务指派给了’ernie’”. 在任务指派给’ernie’的同时创建了一个计时器. 切换到控制台窗口, 窗口中也有一个给’ernie’的提示信息, 如图7所示. 这个计时器调用一个Java业务类发送email提示信息来执行其他业务功能.
图7. JBoss jBPM控制台显示提示”ernie”有任务等待其处理的提示信息.
让我们回到浏览器页面. 单击页面右上脚的” Login as another user”, 选择”ernie”, 单击”Login”登录.主页中的任务列表中显示有一个任务”evaluate web order”, 即审核web订单, 如图7所示.
图7. 审核web订单的任务(两个图7, 呵呵)
单击“evaluate web order”. 将显示任务页面, 如图8. 现在, “ernie”正在审核刚才输入的数据. 因为”address”地址栏为空, 所以”comment”栏输入”need address”, 再单击”more info needed”按钮.
图8. 审核web订单的任务页
Web应用程序通知JBoss jBPM沿着”more info needed”路径执行. JBoss jBPM将审核流程的下一节点” fix web order data”, 即确定web订单数据节点.下一个web页面是home页, 其中信息提示有一个任务等待最初输入订单数据的“cookie monster”处理. 单击” Login as another user”, 以“cookie monster”身份登录. Home页显示” fix web order data”任务, 如图9所示.
图9. 有一个” fix web order data”任务的home页.
选择” fix web order data”. 任务页显示” need address”的说明(comment). 输入一个地址, 如” 123 main st”, 选择” save and close task”, 即保存结束任务.
图10. 有” fix web order data”任务的任务页
Web应用程序通知JBoss jBPM使流程进入下一状态. 流程进入到” evaluate web order”节点并指派一个任务给“ernie”. 选择“Login as another user”, 选择“ernie”用户名登录. Home页显示” evaluate web order”任务. 选择此任务, 任务页显示更新后的数据, 如图11所示. 现在数据已经完整正确, 所以删除”comment”说明, 单击”ok”按钮.
图11. 已输入地址的任务页.
Web应用程序通知JBoss jBPM使流程沿着”ok”路径进行. 流程的下一节点是”fork”分支节点, 此节点无web交互, 仅仅在控制台窗口显示提示信息, 如图12所示.
图12. JBoss jBPM控制台窗口中的信息.
对支付(payment)分支, 下一节点是等待货款(wait for money), JBoss jBPM把任务指派给”bert”. 选择” login as another user”, 以”bert”身份登录, 选择” wait for money”任务. 任务页显示一个新字段”money received”, 如图13所示. 输入” 23.00” , 选择” save and close task”.
图13. “wait for money”的任务页
Web应用程序通知JBoss jBPM使流程向前进入下一状态. JBoss jBPM决定流程进入下一节点” update books”. 此节点和web应用程序没有交互, 它只是在控制台窗口显示信息, 如图14所示.
图14. JBoss jBPM控制台显示”updating the accounting books”信息
流程继续向前进行, 在这个点上“fork”的两个分支都已经完成, 所以下一状态是结束(end)状态. Web应用程序Home页的信息”The process has finished”说明流程已经结束, 如图15所示.
图15. Home页显示流程已结束.
管理正在执行的流程
到目前为止, 我们已经通过web应用程序和JBoss jBPM交互创建了一个流程示例, 填入流程变量和通知流程以使其流动直到流程结束. 现在我们来看看执行中的流程并以管理员(administrator)的身份使其流动. 首先, 我们需要正在执行的一个流程实例. 所以, 我们将重复刚才的部分步骤:
以“cookie monster”身份创建一个websale订单, item输入”candy”. 下一任务将指派给“ernie”.
以“ernie” 身份审核web订单, 选择 “more info needed”. 下一任务将等待“cookie monster”处理.
以“cookie monster”身份添加address项, 确定web订单, 下一任务将等待“ernie”处理.
现在有一个等待“ernie”审核的流程. 我们假设“ernie”不能执行此任务. 那么现在我们如何让流程继续流动呢? 选择页面左边导航栏的监视(Monitoring)项, 显示Monitoring页, 见图16.
图16. 监视搜索页
在此页中我们可以查找所有的流程实例, 通过流程变量查找流程实例, 或者通过id找到特定实例. 单击“Process Definitions List” , 可以看到部署在JBoss jBPM的所有流程.
图17. 流程定义列表页
单击”instances”列的” 2” , 可以看到websale流程实例的列表, 见图18.
图18. 流程实例列表页
列表中是我们刚创建的两个流程. 第一个是已经完成的流程所以有结束日期(end date). 第二个正等待ernie处理所以没有结束日期. 单击id列的” 2” , 就可以看到流程实例的详细信息页, 见图19和图20.
图19. 流程实例详细信息页顶部.
图20. 流程实例详细信息页底部.
在此页我们可以看到:
作为部分流程实例的已被创建任务
与流程实例相关的流程变量
流程实例的令牌(tokens) , 这些令牌表明当前流程执行到哪一步
流程和当前流程所在节点的图形化表示.
既然”ernie”不能执行任务, 我们自己让流程继续. 单击任务列表中第三行中的“End Task”. 此节点有很多变迁(transitions), 所以单击“End Task”后出现可用的变迁列表页.
图21. 可用的变迁页.
既然订单数据正确, 单击列表第一行最后一项的”select”, 出现流程实例详细信息页,见图22和图23.
图22. 流程实例详细信息页顶部.
图23. 流程实例详细信息页底部.
注意现在有一个等待”bert”处理的新任务, fork节点的每一个分支都有两个新的令牌(token). 现在流程已准备好, 等待”bert”进入结束它. 发现流程实例的另一种方式是通过流程变量查找. 单击页面左边菜单上的”Monitoring”标签, 再单击” Search Process Instances”, 将出现查找流程实例页, 见图24.
图24. 查找流程实例页.
变量名(variable name)输入”item”, 变量值(variable value)输入”cookie”. 流程实例详细信息页将显示满足条件的流程实例信息, 见图25. 如果有多个流程实例满足条件, 将出现流程实例列表页显示所有的流程实例.
图25. item变量值为”cookie”的流程实例详细信息页