

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

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

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

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

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

次のトランザクション `DeleteItem` 関数リクエストハンドラーには条件式がありません。その結果、DynamoDB の項目が削除されます。

```
import { util } from '@aws-appsync/utils';

export function request(ctx) {
  const { postId } = ctx.args;
  return {
    operation: 'TransactWriteItems',
    transactItems: [
      {
        table: 'posts',
        operation: 'DeleteItem',
        key: util.dynamodb.toMapValues({ postId }),
      }
    ],
  };
}
```

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

次のトランザクション `DeleteItem` 関数リクエストハンドラーには、その投稿の作成者が特定の名前に等しい場合にのみオペレーションが成功できるトランザクション条件式があります。

```
import { util } from '@aws-appsync/utils';

export function request(ctx) {
  const { postId, authorName} = ctx.args;
  return {
    operation: 'TransactWriteItems',
    transactItems: [
      {
        table: 'posts',
        operation: 'DeleteItem',
        key: util.dynamodb.toMapValues({ postId }),
        condition: util.transform.toDynamoDBConditionExpression({
          authorName: { eq: authorName },
        }),
      }
    ],
  };
}
```

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

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

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

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

```
type TransactConditionCheckExpression = {
  expression: string;
  expressionNames?: { [key: string]: string };
  expressionValues?: { [key: string]: string };
  returnValuesOnConditionCheckFailure: boolean;
};
```

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

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

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

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

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