返回介绍

8.2.2 转移

发布于 2024-08-17 00:45:50 字数 1697 浏览 0 评论 0 收藏 0

正如我在前面所提到的,转移连接了流程中的状态。流程中除结束状态之外的每个状态,至少都需要一个转移,这样就能够知道一旦这个状态完成时流程要去向哪里。状态可以有多个转移,分别对应于当前状态结束时可以执行的不同的路径。

转移使用<transition>元素来进行定义,它会作为各种状态元素(<action-state>、<view-state>、<subflow-state>)的子元素。最简单的形式就是<transition>元素在流程中指定下一个状态:

属性to用于指定流程的下一个状态。如果<transition>只使用了to属性,那这个转移就会是当前状态的默认转移选项,如果没有其他可用转移的话,就会使用它。

更常见的转移定义是基于事件的触发来进行的。在视图状态,事件通常会是用户采取的动作。在行为状态,事件是评估表达式得到的结果。而在子流程状态,事件取决于子流程结束状态的ID。在任意的事件中(这里没有任何歧义),你可以使用on属性来指定触发转移的事件:

在本例中,如果触发了phoneEntered事件,流程将会进入lookupCustomer状态。

在抛出异常时,流程也可以进入另一个状态。例如,如果顾客的记录没有找到,你可能希望流程转移到一个展现注册表单的视图状态。以下的代码片段显示了这种类型的转移:

属性on-exception类似于on属性,只不过它指定了要发生转移的异常而不是一个事件。在本示例中,CustomerNotFoundException异常将导致流程转移到registrationForm状态。

全局转移

在创建完流程之后,你可能会发现有一些状态使用了一些通用的转移。例如,如果在整个流程中到处都有如下<transition>的话,我一点也不感觉意外:

与其在多个状态中都重复通用的转移,我们可以将<transition>元素作为<global-transitions>的子元素,把它们定义为全局转移。例如:

定义完这个全局转移后,流程中的所有状态都会默认拥有这个cancel转移。

我们已经讨论过了状态和转移。在我们开始编写流程之前,让我们看一下流程数据,这是Web流程三元素中的另一个成员。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文