本案例中使用了多个数据上下文中的数据,在页面流调用查询逻辑流处设置断点,通过调试,结合图1-6分析各个数据上下文的生命周期和数据的流转情况。
1. 在资源管理器视图中展开“EOSTrippingcom.primeton.relationmgr展现页面流com.primeton.relationmgr”,双击下面的relationmgr.flowx,选中页面流编辑视图中“查询操作”,按F4设置断点。
2. 右键单击relationmgr.flowx,在弹出的菜单中选择“复制URL”,并粘贴至IE浏览器的整个地址栏中,回车,运行程序。如图4-34所示。
3. 在员工姓名中输入“张”,性别选择“男”,点击【查询】,这时发起一次HTTP请求,页面流引擎分析HTTP请求(com.primeton.relationmgr.relationmgr.flow),确定被调用的是relationmgr.flowx页面流,转到该页面流中,由于设置了断点,EOS Studio会自动打开调试透视图,程序停留在断点处(“查询操作”图元)。从右上角的“EOS变量”视图中可以查看到页面上的查询条件criteria和分页信息page,已经传到页面流上下文flowContext中,页面流引擎也根据request的对象信息产生了请求上下文requestContext。由于是在一次会话中,还有会话上下文sessionContext,因为“模拟登录”已经执行完,sessionContext中已存在userRole和userOrgID的值,如图4-39所示。
4. 点击左边调试中的单步跳入按钮“”,程序进入到逻辑流中,停留在“开始”图元处,这时“EOS变量”中产生MUO数据上下文muoContext和逻辑流上下文bizContext,页面流中flowContext中的criteria和page传到bizContext中。由于在EOS Governor中配置了MUO对象,页面流中sessionContext的serRole和userOrgID也传到逻辑流中的muoContext中,点击单步跳过按钮“”,程序运行到“角色判断”,再次点击单步跳过按钮“”,由于serRole符合系统管理员的条件,程序直接停留在“查询员工和机构信息”处,“EOS变量”中的数据如图4-40所示。
5. 继续点击单步跳过按钮“”,程序运行完查询到“结束”图元处。由于运算逻辑可以访问它所在的逻辑流的数据上下文数据,bizContext数据区中的criteria和page作为输入参数传入运算逻辑中,执行完查询后,运算逻辑将查询结果设置在bizContext中的list变量中,查询后也会产生分页信息,比如记录的总条数,是否是首页等,page对象会自动更新这些信息。如图4-41所示。
6. 再次点击单步跳过按钮“”,程序回到页面流,停留在“结束”图元处。逻辑流执行结束后muoContext和bizContext被销毁。逻辑流中bizContext数据区的list被页面流的requestContext区中的list对象数组所接收,页面流的flowContext中的criteria和page也会被bizContext中的criteria和page相应更新,muoContext中的userRole和userOrgID也会自动返回到sessionContext中。如图4-42所示。
7. 页面流中“结束”图元设置的是“/relationmgr/relationmgr_view0.jsp”,即最后会由relationmgr_view0.jsp来响应HTTP请求。根据该页面中的EOS标签的scope属性决定从requestContext,flowContext或sessionContext中获取数据,根据标签本身的作用来决定是直接显示数据还是迭代循环数据。最后形成HTML返回给浏览器。点击调试工具中的单步跳过按钮“”或者继续按钮“”,程序运行结束。页面流中的requestContext和lowContext被销毁,但是因为仍在一个HTTP会话中,sessionContext还存在。打开IE浏览器可以看到,数据已经显示出来。如图4-35所示。