

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon SWF 中的子工作流程
<a name="swf-dev-adv-child-workflows"></a>

复杂的工作流可使用子工作流分解为更小、更可管理且有可能被重用的组件。子工作流是被另一个（上层）工作流执行启动的工作流执行。要启动子工作流，上层工作流的决策程序应使用 `StartChildWorkflowExecution` 决策。用此决策指定的输入数据可通过其历史记录提供给子工作流。

`StartChildWorkflowExecution` 决策的属性还会指定*子策略*，即 Amazon SWF 对父工作流执行在子工作流执行之前终止这种情况的处理方式。可能存在以下三种值：
+ TERMINATE；Amazon SWF 将终止子执行。
+ REQUEST\_CANCEL：Amazon SWF 将通过在子工作流执行历史中放置 `WorkflowExecutionCancelRequested` 事件来尝试取消子执行。
+ ABANDON：Amazon SWF 将不采取任何操作；子执行将继续运行。

子工作流执行启动后，其运行方式类似于常规执行。执行完成时，Amazon SWF 会将完成情况及其结果记录在父工作流执行的工作流历史中。子工作流的示例包括以下内容：
+ 在不同网站中被工作流所使用的处理子工作流的信号卡
+ 用于验证客户电子邮件地址、检查退出列表、发送电子邮件以及验证电子邮件未被退回或发送失败的电子邮件子工作流。
+ 将连接、设置、交易和验证进行组合的数据库存储和检索子工作流。
+ 将构建、包装和验证相结合的源代码编译子工作流。

在电子商务示例中，建议您将 Charge Credit Card 活动设为子工作流。为了实现这一操作，您可以注册一个新的 Verify Customer 工作流、注册 Verify Customer Address 和 Check Fraud DB 活动，并定义任务的协同逻辑。然后，Customer Order 工作流的决策程序可通过排定 `StartChildWorkflowExecution` 决策来指定此工作流类型，从而启动 Verify Customer 子工作流。

下图所示为客户订单工作流，其中包括一个新的 Verify Customer 子工作流，用于检验客户地址、欺诈数据库和用信用卡付费。

![子工作流程图](http://docs.amazonaws.cn/amazonswf/latest/developerguide/images/child-workflow.png)


多个工作流可使用同一种工作流类型创建子工作流执行。例如，Verify Customer 子工作流还能用在机构的其它部分。子工作流的事件包含在其自己的工作流历史中，而不包含在上层工作流历史中。

由于子工作流仅是由决策程序启动的工作流执行，所以它们还可作为正常的独立工作流执行启动。