关于While循环
Cordys C3版本中,While循环解释如下:
While循环是BPMN组构造,用于一组活动或子流程执行所满足的While条件。在每个循环体开始,进行测试条件,如果测试结果为“假”是则不执行。因此,这组活动或子流程将执行0或多次。While结构用于执行多次循环或根本不执行;也就说,从开始条件是假,将不执行循环。当在循环体内迭代循环,当前循环的打破也是下一次循环迭代的开始。打破循环功能有助于打破或退出循环,继续执行循环体后续活动环节。While结构代表图例如下图1所示。
图1
While循环特点如下:
- While循环的特点类似于Java的While循环定义;
- While循环入口节点:节点只有出口,没有入口;While循环结束出口:节点只有入口,没有出口;
- While循环只有一个入口,可以有多个出口。
While循环流程实践
(1)新建BPM流程
新建流程,流程命名为TestWhileBPM。
图2
(2)新建While组(Group as While)
按上图2所示,第1步,选定多个活动“Actively”,并在选中活动环节上点击鼠标右键,弹出菜单;第2步,在菜单中选中“Group as”功能;第3步,再在又弹出菜单中选中“While”功能。则形成如下图3所示的分组为While的流程图活动环节组。
图3
接着,调整流程中活动关联线,按下图4所示,拖拽线移除循环体到外,变成连接线与While循环体关联。
图4
(3)准备While循环实践XForm表单
这里简单定义一个While测试的Input1输入框。
图5
(4)创建Message传递While循环条件
如下图6所示,创建Message,名称为While_Msg,其中只有一个元素(Element)为While_Decision。
图6
图7
(5)绑定表单传递While条件变化
图8
(6)配置While循环条件
双击或鼠标邮件While循环体,打开While属性界面(Properties),编辑属性内容“General”。
图9
While属性内容,主要是设置Select Conditions,其中,需要点击此选项最后的选择框,弹出如下图10所示XPath Editor界面,编辑While循环条件表达式,最后的XPath为:bpm:while_Msg/bpm:while_Decison/text()=1,表达含义是循环判断条件是1,也就是Start启动输入为1或者表单Form输入为1时,直接跳过或打破循环体,其他的直接继续执行。
图10
如上图10所示,从左侧的Message map树中拖拽消息元素(Element)While_Decision到右侧XPath编辑窗口中,进行XPath表达式验证、测试。
(7)设置启动Start节点传入Message
设置在启动流程,也就是通过Start节点传入Message所需要的参数,本案例传入的是Decision条件。
图11
(8)发布流程
直接在流程建模界面发布流程(Publish to Organization)或者回到Workspace界面发布流程都可以。
测试流程
(1)测试“Execution/Run”
图12
(2)启动流程
输入Message参数,把PARAMETER替换为“1”。
图13
(3)进入Process Instance Manager(流程实例管理)界面
在下图14中选中所进行的测试流程“TestWhileBPM”,点击Waiting列中红色“1”,弹出图15所示界面,进行流程Debugger。
图14
通过下图15,选中待处理流程实例,点击Open Debugger图标,进行流程调试界面。
图15
(4)单步Debug流程
按下图16所示,逐个活动环节跟踪,当前状态是第一次进入While循环体(原因:启动流程时PARAMETER参数输入为1)。
图16
如下图17所示,界面交互输入测试条件值。
第一步:在弹出输入Form窗口“WhileTest2”,输入非1值,这里输入0;
第二步:点击此窗口上的对好,完成执行操作;
第三步:再进行Process Debugger操作,到下一活动环节;
完成上述操作时,While循环体执行完成退出。
图17
(5)完成测试工作
如下图18所示,While循环体执行两次循环操作。
图18
注意:虽然系统在BPM Service Container里可以配置死循环最高限制,但是也需要防止出现死循环问题,因为这样的循环将影响系统的性能。
由于作者水平有限,欢迎反馈讨论。
详尽操作参见:
Cordys BOP 4平台开发入门实战演练——流程建模开发(BPM) 肖永威 2015.4