

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# トランザクション条件式
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-transaction-condition-expressions"></a>

トランザクション条件式は、`TransactWriteItems` の 4 つのタイプのオペレーション (`PutItem`、`DeleteItem`、`UpdateItem`、`ConditionCheck`) すべてに対応するリクエストマッピングテンプレートで使用できます。

`PutItem`、`DeleteItem`、および `UpdateItem` の場合、トランザクション条件式はオプションです。`ConditionCheck` の場合、トランザクション条件式が必要です。

## 例 1
<a name="id22"></a>

次のトランザクション `DeleteItem` マッピングドキュメントには条件式がありません。その結果、DynamoDB の項目が削除されます。

```
{
   "version": "2018-05-29",
   "operation": "TransactWriteItems",
   "transactItems": [
      {
         "table": "posts",
         "operation": "DeleteItem",
         "key": {
            "id": { "S" : "1" }
         }
      }
   ]
}
```

## 例 2
<a name="id23"></a>

次のトランザクション `DeleteItem` マッピングドキュメントには、その投稿の作成者が特定の名前に等しい場合にのみオペレーションが成功できるトランザクション条件式があります。

```
{
   "version": "2018-05-29",
   "operation": "TransactWriteItems",
   "transactItems": [
      {
         "table": "posts",
         "operation": "DeleteItem",
         "key": {
            "id": { "S" : "1" }
         }
         "condition": {
            "expression": "author = :author",
            "expressionValues": {
               ":author": { "S" : "Chunyan" }
            }
         }
      }
   ]
}
```

条件チェックが失敗すると、`TransactionCanceledException` が発生し、エラーの詳細が `$ctx.result.cancellationReasons` で返されます。デフォルトでは、その条件チェックの失敗となった DynamoDB の古い項目は `$ctx.result.cancellationReasons` で返されます。

## 条件を指定する
<a name="id24"></a>

`PutItem`、`UpdateItem`、および `DeleteItem` の各リクエストマッピングドキュメントはすべて、オプションで `condition` セクションが指定できます。省略した場合、条件チェックは実行されません。指定した場合、処理が成功するには、条件が true となる必要があります。`ConditionCheck` では、`condition` セクションを指定する必要があります。トランザクション全体が成功するためには、条件が true でなければなりません。

`condition` セクションは以下の構造を持ちます。

```
"condition": {
    "expression": "someExpression",
    "expressionNames": {
        "#foo": "foo"
    },
    "expressionValues": {
        ":bar": ... typed value
    },
    "returnValuesOnConditionCheckFailure": false
}
```

以下のフィールドに条件を指定します。

** `expression` **  
更新式そのものを指定します。条件式の記述方法の詳細については、[DynamoDB ConditionExpressions のドキュメント](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html)を参照してください。このフィールドの指定は必須です。

** `expressionNames` **  
式の属性名のプレースホルダーを示します。キー - 値のペアの形式になります。キーは *expression* で使用される名前のプレースホルダーに対応し、値は DynamoDB の項目の属性名と一致する文字列でなければなりません。このフィールドはオプションであり、*expression* で使用される式の属性名のプレースホルダーのみを入力します。

** `expressionValues` **  
式の属性値のプレースホルダーを示します。キー - 値のペアの形式になります。キーは expression で使用される値のプレースホルダーに対応し、値は型付き値でなければなりません。「型付き値」を指定する方法の詳細については、「型システム (リクエストマッピング)」を参照してください。この指定は必須です。このフィールドはオプションであり、expression で使用される式の属性値のプレースホルダーのみを入力します。

** `returnValuesOnConditionCheckFailure` **  
条件チェックが失敗した場合に、DynamoDB の項目を取得し直すかどうかを指定します。取得された項目は `$ctx.result.cancellationReasons[$index].item` にあります。ここで `$index` は、条件チェックに失敗したリクエスト項目のインデックスです。この値のデフォルト値は true です。