

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

# 在 Step Functions 中使用工作流程工作室配置状态输入和输出
<a name="workflow-studio-process"></a>

**管理状态和转换数据**  
了解有关[使用变量在状态之间传递数据](workflow-variables.md)和[使用转换数据](transforming-data.md)的信息 JSONata。

每个状态都根据接收的输入做出决定或执行操作。在大多数情况下，该状态会将输出传递到其他状态。在 Workflow Studio 中，可以在 [检查器面板](workflow-studio.md#workflow-studio-components-formdefinition) 面板的**输入**和**输出**选项卡中配置状态如何筛选和操作其输入和输出数据。配置输入和输出时，使用**信息**链接访问上下文帮助。

![\[显示状态输入、输出和信息帮助面板的说明性屏幕截图\]](http://docs.aws.amazon.com/zh_cn/step-functions/latest/dg/images/wfs_input_output_01.png)


有关 Step Functions 如何处理输入和输入的详细信息，请参阅 [在 Step Functions 中处理输入和输出](concepts-input-output-filtering.md)。

## 配置状态的输入
<a name="workflow-studio-process-input"></a>

每个状态都以 JSON 形式接收来自前一个状态的输入。如果要筛选输入，可以使用 [检查器面板](workflow-studio.md#workflow-studio-components-formdefinition) 面板中**输入**选项卡下的 `InputPath` 筛选条件。`InputPath` 是一个以 `$` 开头的字符串，用于标识特定 JSON 节点。它们被称为[引用路径](amazon-states-language-paths.md)，它们遵循 JsonPath 语法。

要筛选输入，请进行以下操作：
+ 选择 “**筛选输入**” InputPath。
+ [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/)为`InputPath`筛选器输入有效的值。例如 **\$1.data**。

`InputPath` 筛选条件将添加到您的工作流中。

**Example 示例 1：在工作流工作室中使用 InputPath 过滤器**  
假设状态的输入包含以下 JSON 数据。  

```
{
  "comment": "Example for InputPath",
  "dataset1": {
    "val1": 1,
    "val2": 2,
    "val3": 3
  },
  "dataset2": {
    "val1": "a",
    "val2": "b",
    "val3": "c"
  }
}
```
要应用`InputPath`过滤器，请选择 “**筛选输入**” InputPath，然后输入相应的参考路径。如果您输入 **\$1.dataset2.val1**，则以下 JSON 将作为输入传递给状态。  

```
{"a"}
```
参考路径也可以选择值。如果您引用的数据是 `{ "a": [1, 2, 3, 4] }`，并且您应用引用路径 `$.a[0:2]` 作为 `InputPath` 筛选条件，则结果如下。  

```
[ 1, 2 ]
```

[Parallel 工作流程状态](state-parallel.md)、[Map 状态工作流程。](state-map.md) 和 [Pass 工作流程状态](state-pass.md) 流状态在其**输入**选项卡下还有一个名为 `Parameters` 的输入筛选选项。此过滤器在过滤 InputPath 器之后生效，可用于构造由一个或多个键值对组成的自定义 JSON 对象。每对的值可以是静态值，可从输入中选择，也可通过路径从[在 Step Functions 中从上下文对象访问执行数据](input-output-contextobject.md)中选择。

**注意**  
要指定参数使用引用路径指向输入中的 JSON 节点，请使用 `.$` 作为参数名称的结尾。

**Example 示例 2：为 Parallel 状态创建自定义 JSON 输入**  
假设以下 JSON 数据是一个 Parallel 状态的输入。  

```
{
  "comment": "Example for Parameters",
  "product": {
    "details": {
      "color": "blue",
      "size": "small",
      "material": "cotton"
    },
    "availability": "in stock",
    "sku": "2317",
    "cost": "$23"
  }
}
```

要选择该输入的一部分并传递带有静态值的附加键值对，可以在 **Parallel** 状态的**输入**选项卡下的**参数**字段中指定以下内容。

```
{
 "comment": "Selecting what I care about.",
 "MyDetails": {
    "size.$": "$.product.details.size",
    "exists.$": "$.product.availability",
    "StaticValue": "foo"
    }
 }
```

结果将是以下 JSON 数据。

```
{
  "comment": "Selecting what I care about.",
  "MyDetails": {
    "size": "small",
    "exists": "in stock",
    "StaticValue": "foo"
  }
}
```

## 配置状态的输出
<a name="workflow-studio-process-output"></a>

每个状态都会生成 JSON 输出，可以在将其传递到下一个状态之前对其进行筛选。有几个筛选条件可用，每个筛选条件对输出的影响都不一样。每种状态可用的输出筛选条件列在 **Inspector** 面板的**输出**选项卡下。对于 [Task 工作流程状态](state-task.md) 状态，您选择的任何输出筛选条件都将按以下顺序处理：

1.  `ResultSelector`：使用此筛选条件来操纵状态的结果。您可以使用部分结果构造一个新的 JSON 对象。

1.  `在 Step Functions ResultPath 中使用指定状态输出`：使用此筛选条件选择要传递到输出的状态输入和任务结果的组合。

1.  `使用 OutputPath 筛选状态输出`：使用此筛选条件筛选 JSON 输出，用于选择将结果中的哪些信息传递到下一个状态。

### 使用 ResultSelector
<a name="workflow-studio-process-output-resultselector"></a>

`ResultSelector` 是用于以下状态的可选输出筛选条件：
+  [Task 工作流程状态](state-task.md) 状态，即[状态浏览器](workflow-studio.md#workflow-studio-components-states)的**操作**选项卡中列出的所有状态。
+  [Map 状态工作流程。](state-map.md) 状态，在状态浏览器的**流**选项卡中。
+  [Parallel 工作流程状态](state-parallel.md) 状态，在状态浏览器的**流**选项卡中。

`ResultSelector` 可用于构造由一个或多个键值对组成的自定义 JSON 对象。每对值可以是静态值，也可以通过路径从状态的结果中选择。

**注意**  
要指定参数使用路径引用结果中的 JSON 节点，请使用 `.$` 作为参数名称的结尾。

**Example 使用 ResultSelector 过滤器的示例**  
在此示例中，您可以使用`ResultSelector`操作亚马逊 EMR CreateCluster API 调用对亚马逊 EMR 状态的响应。`CreateCluster`以下是 Amazon EMR `CreateCluster` API 调用的结果。  

```
{
  "resourceType": "elasticmapreduce",
  "resource": "createCluster.sync",
  "output": {
    "SdkHttpMetadata": {
      "HttpHeaders": {
        "Content-Length": "1112",
        "Content-Type": "application/x-amz-JSON-1.1",
        "Date": "Mon, 25 Nov 2019 19:41:29 GMT",
        "x-amzn-RequestId": "1234-5678-9012"
      },
      "HttpStatusCode": 200
    },
    "SdkResponseMetadata": {
      "RequestId": "1234-5678-9012"
    },
    "ClusterId": "AKIAIOSFODNN7EXAMPLE"
  }
}
```
要选择部分信息并传递带有静态值的附加键值对，请在状态的 “**输出**” 选项卡下的**ResultSelector**字段中指定以下内容。  

```
{
 "result": "found",
 "ClusterId.$": "$.output.ClusterId", 
 "ResourceType.$": "$.resourceType"
 }
```
使用 `ResultSelector` 会产生以下结果。  

```
{
 "result": "found",
 "ClusterId": "AKIAIOSFODNN7EXAMPLE",
 "ResourceType": "elasticmapreduce"
}
```

### 使用 ResultPath
<a name="workflow-studio-process-output-resultpath"></a>

状态的输出可以是状态输入的副本、状态生成的结果或状态输入和结果的组合。使用 `ResultPath` 可控制传递到状态输出的上述两种内容的组合。有关更多 `ResultPath` 的用例，请参阅 [在 Step Functions ResultPath 中使用指定状态输出](input-output-resultpath.md)。

`ResultPath` 是用于以下状态的可选输出筛选条件：
+  [Task 工作流程状态](state-task.md) 状态，即状态浏览器的**操作**选项卡中列出的所有状态。
+  [Map 状态工作流程。](state-map.md) 状态，在状态浏览器的**流**选项卡中。
+  [Parallel 工作流程状态](state-parallel.md) 状态，在状态浏览器的**流**选项卡中。
+  [Pass 工作流程状态](state-pass.md) 状态，在状态浏览器的**流**选项卡中。

`ResultPath` 可用于将结果添加到原始状态输入中。指定的路径表示添加结果的位置。

**Example 使用 ResultPath 过滤器的示例**  
假设以下是一个 Task 状态的输入。  

```
{
  "details": "Default example",
  "who": "AWS Step Functions"
}
```
该 Task 状态的结果为以下内容。  

```
Hello, AWS Step Functions
```
您可以通过应用 `ResultPath` 并输入指示在何处添加结果的参考[路径](amazon-states-language-paths.md)，来将此结果添加到该状态的输入中，例如 `$.taskresult`：  
借助此 `ResultPath`，以下是作为状态输出传递的 JSON。  

```
{
  "details": "Default example",
  "who": "AWS Step Functions",
  "taskresult": "Hello, AWS Step Functions!"
}
```

### 使用 OutputPath
<a name="workflow-studio-process-output-resultselector"></a>

`OutputPath` 筛选条件可用于筛选掉不需要的信息，而仅传递您需要的这部分 JSON。`OutputPath` 是一个以 `$` 开头的字符串，用于标识 JSON 文本中的节点。

**Example 使用 OutputPath 过滤器的示例**  
假设一个 Lambda 调用 API 调用除了返回 Lambda 函数的结果之外，还返回元数据。  

```
{
  "ExecutedVersion": "$LATEST",
  "Payload": {
     "foo": "bar",
     "colors": [
          "red",
          "blue",
          "green"    
     ],
     "car": {
          "year": 2008,
          "make": "Toyota",
          "model": "Matrix"
     }
   },
"SdkHttpMetadata": {
  "AllHttpHeaders": {
    "X-Amz-Executed-Version": ["$LATEST"]
...
```
您可以使用 `OutputPath` 筛选掉其他元数据。默认情况下，通过 Workflow Studio 创建的 Lambda Invoke 状态**OutputPath**筛选器的值为。`$.Payload`此默认值会删除额外的元数据，并返回相当于直接运行 Lambda 函数的输出。  
Lambda 调用任务结果示例和**输出**筛选条件的 `$.Payload` 值将以下 JSON 数据作为输出传递。  

```
{
 "foo": "bar",
 "colors": [
      "red",
      "blue",
      "green"    
 ],
 "car": {
      "year": 2008,
      "make": "Toyota",
      "model": "Matrix"
 }
}
```
`OutputPath` 筛选条件是最后一个生效的输出筛选条件，因此，如果您使用诸如 `ResultSelector` 或 `ResultPath` 之类的其它输出筛选条件，则应相应地修改 `OutputPath` 筛选条件的 `$.Payload` 默认值。