

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Workflow-Status „Auswahl“
<a name="state-choice"></a>

**Status verwalten und Daten transformieren**  
Erfahren Sie mehr über das [Übergeben von Daten zwischen Zuständen mithilfe von Variablen](workflow-variables.md) und das [Transformieren von Daten mit JSONata](transforming-data.md).

Ein `Choice` Zustand (`"Type": "Choice"`) fügt einer Zustandsmaschine bedingte Logik hinzu.

Zusätzlich zu den meisten [gängigen Statusfeldern](statemachine-structure.md#amazon-states-language-common-fields) enthält `Choice` states die folgenden zusätzlichen Felder.

**`Choices` (Erforderlich)**  
Ein Array von [Auswahlregeln](#state-choice-rules), die bestimmen, in welchen Zustand der Zustandsautomat als nächstes übergeht. Sie müssen mindestens eine Regel im `Choice` Bundesstaat definieren.  
Wenn ein `Choice` Status ausgeführt wird, bewertet Step Functions jede **Auswahlregel** als wahr oder falsch. Basierend auf dem Ergebnis wechselt Step Functions zum nächsten Status im Workflow. 

**`Default` (optional, empfohlen)**  
Der Name des Status, zu dem der Übergang erfolgen soll, wenn keine **Auswahlregel** als wahr ausgewertet wird. 

**Wichtig**  
 `Choice`-Zustände unterstützen nicht das Feld `End`. Außerdem verwenden sie `Next` nur innerhalb ihres `Choices`-Felds.  
Wenn bei der Ausführung des Workflows keine **Auswahlmöglichkeiten** als wahr ausgewertet werden und kein **Standard** angegeben ist, gibt die Zustandsmaschine einen **Fehler** aus, da *der Übergang aus dem Status* nicht möglich ist.

## Auswahlregeln (JSONata)
<a name="state-choice-rules"></a>

Ein `Choice` Bundesstaat muss ein `Choices` Feld haben, dessen Wert ein nicht leeres Array von Choice Rules ist, die bei Verwendung von JSonata die folgenden Felder enthalten:
+ **`Condition`field** — ein JSONata-Ausdruck, der zu ausgewertet wird. true/false
+ **`Next`Feld** — ein Wert, der mit einem Zustandsnamen in der Zustandsmaschine übereinstimmen muss.
+ **`Assign`Feld** (optional) — weist Variablen zu, wenn diese spezielle Auswahlregel zutrifft. Jede Auswahlregel kann ihren eigenen `Assign` Block haben, sodass Sie je nach eingeschlagenem Pfad unterschiedliche Variablen festlegen können. Sie können auch einen `Assign` Block auf Bundesstaatsebene angeben, der unabhängig davon gilt, welche Auswahlregel zutrifft.

Im folgenden Beispiel wird geprüft, ob der numerische Wert gleich `1` ist.

```
{
  "Condition": "{% $foo = 1 %}",
  "Next": "NumericMatchState"
}
```

Im folgenden Beispiel wird geprüft, ob die `type` Variable gleich ist`local`.

```
{
  "Condition": "{% $type = 'local' %}",
  "Next": "StringMatchState"
}
```

Im folgenden Beispiel wird geprüft, ob die Zeichenfolge größer als `MyStringABC` ist.

```
{
  "Condition": "{% $foo > 'MyStringABC' %}",
  "Next": "StringGreaterMatchState"
}
```

Im folgenden Beispiel wird geprüft, ob die Zeichenfolge nicht Null ist.

```
{
 "Condition" : "{% $possiblyNullValue != null and $possiblyNullValue = 42 %}",
 "Next": "NotNullAnd42"
}
```

Das folgende Beispiel zeigt einen `Choice` Status mit regelspezifischen `Assign` Blöcken, die auf der Grundlage der übereinstimmenden Bedingung unterschiedliche Variablen festlegen:

```
{
  "Type": "Choice",
  "Choices": [
    {
      "Condition": "{% $states.input.category = 'premium' %}",
      "Next": "PremiumPath",
      "Assign": {
        "discount": 20
      }
    },
    {
      "Condition": "{% $states.input.category = 'standard' %}",
      "Next": "StandardPath",
      "Assign": {
        "discount": 5
      }
    }
  ],
  "Default": "DefaultPath",
  "Assign": {
    "discount": 0
  }
}
```

## Die Verwendung von „Mit Auswahl zuweisen“ gibt Folgendes an
<a name="state-choice-assign"></a>

Sie können das `Assign` Feld in einem Auswahlstatus auf zwei Ebenen verwenden:
+ **Oberste Ebene** — Wird direkt im Status „Auswahl“ definiert, unabhängig von einer Auswahlregel.
+ **Innerhalb einer Auswahlregel** — Definiert innerhalb einer einzelnen Regel im `Choices` Array.

Diese beiden Platzierungen schließen sich zur Laufzeit gegenseitig aus. Wenn eine Auswahlregel zutrifft, bewertet Step Functions nur das `Assign` Feld dieser Regel und nicht das Feld der obersten Ebene`Assign`. Step Functions wertet die oberste Ebene `Assign` nur aus, wenn keine Auswahlregel zutrifft und der Workflow in den Status übergeht. `Default`

Das folgende Beispiel zeigt beide Platzierungen.

```
{
  "Type": "Choice",
  "Assign": {
    "outputValue": "{% 'default path taken' %}"
  },
  "Choices": [
    {
      "Condition": "{% $score > 90 %}",
      "Assign": {
        "outputValue": "{% 'high score' %}"
      },
      "Next": "HighScoreState"
    },
    {
      "Condition": "{% $score > 50 %}",
      "Next": "MediumScoreState"
    }
  ],
  "Default": "LowScoreState"
}
```

Wenn in diesem Beispiel größer als 90 `$score` ist, weist Step Functions `outputValue` zu `"high score"` und wechselt zu`HighScoreState`. Die oberste Ebene `Assign` wird nicht ausgewertet. Wenn keine Regel zutrifft, wertet Step Functions die oberste Ebene aus `Assign` und wechselt zu. `LowScoreState`

## Auswahlregeln (JsonPath)
<a name="state-choice-rules-jsonpath"></a>

Ein `Choice` Bundesstaat muss über ein `Choices` Feld verfügen, dessen Wert ein nicht leeres Array von Choice Rules ist, die bei Verwendung von JSONPath die folgenden Felder enthalten:
+ Ein **Vergleich** — Zwei Felder, die eine zu vergleichende Eingabevariable, die Art des Vergleichs und den Wert angeben, mit dem die Variable verglichen werden soll. Auswahlregeln unterstützen den Vergleich zwischen zwei Variablen. Innerhalb einer Auswahlregel kann der Wert einer Variablen mit einem anderen Wert aus der Statuseingabe verglichen werden, indem er `Path` an die Namen der unterstützten Vergleichsoperatoren angehängt wird. Die Werte der Felder `Variable` und Pfad in einem Vergleich müssen gültige [Referenzpfade](amazon-states-language-paths.md#amazon-states-language-reference-paths) sein.
+ Ein **`Next`Feld** — Der Wert dieses Felds muss mit einem Zustandsnamen in der Zustandsmaschine übereinstimmen.

Im folgenden Beispiel wird geprüft, ob der numerische Wert gleich `1` ist.

```
{
  "Variable": "$.foo",
  "NumericEquals": 1,
  "Next": "FirstMatchState"
}
```

Im folgenden Beispiel wird geprüft, ob die Zeichenfolge gleich `MyString` ist.

```
{
  "Variable": "$.foo",
  "StringEquals": "MyString",
  "Next": "FirstMatchState"
}
```

Im folgenden Beispiel wird geprüft, ob die Zeichenfolge größer als `MyStringABC` ist.

```
{
  "Variable": "$.foo",
  "StringGreaterThan": "MyStringABC",
  "Next": "FirstMatchState"
}
```

Im folgenden Beispiel wird geprüft, ob die Zeichenfolge Null ist.

```
{
 "Variable": "$.possiblyNullValue",
 "IsNull": true
}
```

Das folgende Beispiel zeigt, wie die StringEquals Regel nur ausgewertet wird, wenn sie aufgrund der vorherigen `IsPresent` Auswahlregel `$.keyThatMightNotExist` existiert.

```
"And": [
 {
 "Variable": "$.keyThatMightNotExist",
 "IsPresent": true
 },
 {
 "Variable": "$.keyThatMightNotExist",
 "StringEquals": "foo"
 }
]
```

Im folgenden Beispiel wird geprüft, ob ein Muster mit einem Platzhalter übereinstimmt.

```
{
 "Variable": "$.foo",
 "StringMatches": "log-*.txt"
}
```

Im folgenden Beispiel wird geprüft, ob der Zeitstempel gleich `2001-01-01T12:00:00Z` ist.

```
{
  "Variable": "$.foo",
  "TimestampEquals": "2001-01-01T12:00:00Z",
  "Next": "FirstMatchState"
}
```

Im folgenden Beispiel wird eine Variable mit einem anderen Wert aus der Statuseingabe verglichen.

```
{
 "Variable": "$.foo",
 "StringEqualsPath": "$.bar"
}
```

Step Functions untersucht jede der Auswahlregeln in der Reihenfolge, die im `Choices` Feld aufgeführt ist. Anschließend wechselt es in den Zustand, der im Feld `Next` der ersten Auswahlregel angegeben ist, in der die Variable mit dem Wert entsprechend dem Vergleichsoperator übereinstimmt.

Die folgenden Vergleichsoperatoren werden unterstützt:
+ `And`
+ `BooleanEquals`,`BooleanEqualsPath`
+ `IsBoolean`
+ `IsNull`
+ `IsNumeric`
+ `IsPresent`
+ `IsString`
+ `IsTimestamp`
+ `Not`
+ `NumericEquals`,`NumericEqualsPath`
+ `NumericGreaterThan`,`NumericGreaterThanPath`
+ `NumericGreaterThanEquals`,`NumericGreaterThanEqualsPath`
+ `NumericLessThan`,`NumericLessThanPath`
+ `NumericLessThanEquals`,`NumericLessThanEqualsPath`
+ `Or`
+ `StringEquals`,`StringEqualsPath`
+ `StringGreaterThan`,`StringGreaterThanPath`
+ `StringGreaterThanEquals`,`StringGreaterThanEqualsPath`
+ `StringLessThan`,`StringLessThanPath`
+ `StringLessThanEquals`,`StringLessThanEqualsPath`
+ `StringMatches`
+ `TimestampEquals`,`TimestampEqualsPath`
+ `TimestampGreaterThan`,`TimestampGreaterThanPath`
+ `TimestampGreaterThanEquals`,`TimestampGreaterThanEqualsPath`
+ `TimestampLessThan`,`TimestampLessThanPath`
+ `TimestampLessThanEquals`,`TimestampLessThanEqualsPath`

Für jeden dieser Operatoren muss der entsprechende Wert vom entsprechenden Typ sein: Zeichenfolge, Zahl, Boolean oder Zeitstempel. Step Functions versucht nicht, ein numerisches Feld einem Zeichenkettenwert zuzuordnen. Da Zeitstempelfelder jedoch logisch gesehen Zeichenfolgen sind, ist es möglich, dass ein Feld, das als Zeitstempel gilt, mit einem Vergleichsoperator `StringEquals` übereinstimmt.

**Anmerkung**  
Gehen Sie aus Gründen der Interoperabilität nicht davon aus, dass numerische Vergleiche mit Werten außerhalb der Größenordnung oder Präzision funktionieren, die der [IEEE 754-2008 `binary64`-Datentyp](https://en.wikipedia.org/wiki/IEEE_754#Basic_and_interchange_formats) repräsentiert. Insbesondere Ganzzahlen außerhalb des Bereichs `[-253+1, 253-1]` können möglicherweise nicht in der erwarteten Weise verglichen werden.  
Zeitstempel (z. B. `2016-08-18T17:33:00Z`) müssen [RFC3339-Profil ISO 8601](https://www.ietf.org/rfc/rfc3339.txt) entsprechen, mit weiteren Beschränkungen:  
Ein großes `T` muss die Teile Datum und Uhrzeit trennen.
Ein großes `Z` muss kennzeichnen, dass keine numerische Zeitzonenabweichung besteht.
Informationen zum Verständnis des Verhaltens bei Vergleichen von Zeichenfolgen finden Sie in der [Java `compareTo`-Dokumentation](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#compareTo-java.lang.String-).  
Die Werte der Operatoren `And` und `Or` müssen nicht leere Arrays von Auswahlregeln sein, die selbst keine `Next`-Felder enthalten dürfen. Ebenso muss der Wert eines `Not`-Operators eine einzelne Auswahlregel sein, die kein `Next`-Feld enthalten darf.  
Sie können komplexe, verschachtelte Auswahlregeln mithilfe von `And`, `Not` und `Or` erstellen. Das Feld `Next` darf jedoch nur in einer Auswahlregel des obersten Levels erscheinen.  
Der Vergleich von Zeichenketten mit Mustern mit einem oder mehreren Platzhaltern („\*“) kann mit dem StringMatches Vergleichsoperator durchgeführt werden. Das Platzhalterzeichen wird mithilfe des Standards maskiert. `\\ (Ex: “\\*”)` Keine anderen Zeichen als „\*“ haben beim Abgleich eine besondere Bedeutung.