

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Step Functions 中使用 Workflow Studio 設定狀態輸入和輸出
<a name="workflow-studio-process"></a>

**管理狀態和轉換資料**  
了解如何[使用變數在狀態與使用 JSONata 轉換資料之間傳遞資料](workflow-variables.md)。 [ JSONata](transforming-data.md)

每個狀態都會根據收到的輸入做出決策或執行動作。在大多數情況下，它會將輸出傳遞至其他狀態。在 Workflow Studio 中，您可以設定狀態在[Inspector 面板](workflow-studio.md#workflow-studio-components-formdefinition)面板的輸入和輸出索引標籤中篩選和操作其**輸入**和**輸出**資料的方式。設定輸入和輸出時，請使用**資訊**連結來存取內容說明。

![\[顯示狀態輸入、輸出和資訊說明面板的說明螢幕擷取畫面\]](http://docs.aws.amazon.com/zh_tw/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 的形式接收先前狀態的輸入。如果您想要篩選輸入，您可以使用[Inspector 面板](workflow-studio.md#workflow-studio-components-formdefinition)面板中**輸入**索引標籤下的`InputPath`篩選條件。`InputPath` 是以 開頭的字串`$`，可識別特定的 JSON 節點。這些稱為[參考路徑](amazon-states-language-paths.md)，它們遵循 JsonPath 語法。

若要篩選輸入：
+ 選擇**使用 InputPath 篩選輸入**。
+ 輸入`InputPath`篩選條件的有效 [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/)。例如 **\$1.data**。

您的`InputPath`篩選條件將新增至您的工作流程。

**Example 範例 1：在 Workflow Studio 中使用 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 ]
```

[平行工作流程狀態](state-parallel.md)[映射工作流程狀態](state-map.md)、 和 [傳遞工作流程狀態](state-pass.md)流程狀態在其輸入索引標籤`Parameters`下有一個名為 的額外**輸入**篩選選項。此篩選條件在 InputPath 篩選條件之後生效，可用於建構由一或多個鍵值對組成的自訂 JSON 物件。每個對的值可以是靜態值、可以從輸入中選取，也可以從[從 Step Functions 中的內容物件存取執行資料](input-output-contextobject.md)具有路徑的 中選取。

**注意**  
若要指定參數使用參考路徑指向輸入中的 JSON 節點，參數名稱必須以 結尾`.$`。

**Example 範例 2：建立平行狀態的自訂 JSON 輸入**  
假設下列 JSON 資料是平行狀態的輸入。  

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

若要選取此輸入的一部分並傳遞具有靜態值的其他鍵值對，您可以在**平行**狀態的**輸入**索引標籤下的**參數**欄位中指定下列項目。

```
{
 "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 **面板的**輸出**索引標籤下。對於[任務工作流程狀態](state-task.md)狀態，您選取的任何輸出篩選條件都會依此順序處理：

1.  `ResultSelector`：使用此篩選條件來操作狀態的結果。您可以使用部分結果建構新的 JSON 物件。

1.  `在 Step Functions 中使用 ResultPath 指定狀態輸出`：使用此篩選條件來選取要傳遞至輸出的狀態輸入和任務結果的組合。

1.  `使用 OutputPath 篩選狀態輸出`：使用此篩選條件篩選 JSON 輸出，以從結果中選擇哪些資訊將傳遞至下一個狀態。

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

`ResultSelector` 是下列狀態的選用輸出篩選條件：
+  [任務工作流程狀態](state-task.md) 狀態，這些狀態都列在 **的動作**索引標籤中[狀態瀏覽器](workflow-studio.md#workflow-studio-components-states)。
+  [映射工作流程狀態](state-map.md) 狀態，在狀態瀏覽器的流程****索引標籤中。
+  [平行工作流程狀態](state-parallel.md) 狀態，在狀態瀏覽器的流程****索引標籤中。

`ResultSelector` 可用來建構由一或多個鍵值對組成的自訂 JSON 物件。每個對的值可以是靜態值，或從具有路徑的狀態結果中選取。

**注意**  
若要指定參數使用路徑來參考結果中的 JSON 節點，參數名稱必須以 結尾`.$`。

**Example 使用 ResultSelector 篩選條件的範例**  
在此範例中，您會使用 從 Amazon EMR CreateCluster API 呼叫`ResultSelector`操作 Amazon 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` 是下列狀態的選用輸出篩選條件：
+  [任務工作流程狀態](state-task.md) 狀態，這些狀態都列在狀態瀏覽器**的動作**索引標籤中。
+  [映射工作流程狀態](state-map.md) 狀態，在狀態瀏覽器的流程****索引標籤中。
+  [平行工作流程狀態](state-parallel.md) 狀態，在狀態瀏覽器的流程****索引標籤中。
+  [傳遞工作流程狀態](state-pass.md) 狀態，在狀態瀏覽器的流程****索引標籤中。

`ResultPath` 可用來將結果新增至原始狀態輸入。指定的路徑會指出新增結果的位置。

**Example 使用 ResultPath 篩選條件的範例**  
假設以下是任務狀態的輸入。  

```
{
  "details": "Default example",
  "who": "AWS Step Functions"
}
```
任務狀態的結果如下。  

```
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 函數的結果之外，Lambda 調用 API 呼叫還會傳回中繼資料。  

```
{
  "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 調用狀態的 **OutputPath** 篩選條件值為 `$.Payload`。此預設值會移除其他中繼資料，並傳回相當於直接執行 Lambda 函數的輸出。  
Lambda 調用任務結果範例和**輸出**篩選條件`$.Payload`的 值，會傳遞下列 JSON 資料做為輸出。  

```
{
 "foo": "bar",
 "colors": [
      "red",
      "blue",
      "green"    
 ],
 "car": {
      "year": 2008,
      "make": "Toyota",
      "model": "Matrix"
 }
}
```
`OutputPath` 篩選條件是最後一個要生效的輸出篩選條件，因此如果您使用其他輸出篩選條件，例如 `ResultSelector`或 `ResultPath`，您應該相應地修改`OutputPath`篩選條件`$.Payload`的預設值 。