

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

# TransactGetItems
<a name="js-aws-appsync-resolver-reference-dynamodb-transact-get-items"></a>

`TransactGetItems` リクエストオブジェクトを使用すると、 AWS AppSync DynamoDB 関数に、複数のテーブルにまたがる可能性のある複数の項目を取得するように DynamoDB に`TransactGetItems`リクエストするように指示できます。このリクエストオブジェクトでは、以下の情報を指定する必要があります。
+ 項目の取得元となる各リクエスト項目のテーブル名
+ 各テーブルから取得する各リクエスト項目のキー

DynamoDB の `TransactGetItems` 制限が適用されるため、**条件式を指定することはできません**。

`TransactGetItems` リクエストオブジェクトのノードの構造は次のとおりです。

```
type DynamoDBTransactGetItemsRequest = {
  operation: 'TransactGetItems';
  transactItems: { table: string; key: { [key: string]: any }; projection?: { expression: string; expressionNames?: { [key: string]: string }; }[];
  };
};
```

各フィールドの定義は以下のようになります。

## TransactGetItems フィールド
<a name="js-TransactGetItems-list"></a>

### TransactGetItems フィールドリスト
<a name="js-TransactGetItems-list-col"></a>

** `operation` **  
実行する DynamoDB の処理。`TransactGetItems` DynamoDB の処理を実行するには、これを `TransactGetItems` に設定する必要があります。この値は必須です。

** `transactItems` **  
含めるリクエスト項目。値はリクエスト項目の配列です。少なくとも 1 つのリクエスト項目を指定する必要があります。この `transactItems` の値は必須です。    
** `table` **  
項目の取得元となる DynamoDB テーブル。値はテーブル名の文字列です。この `table` の値は必須です。  
** `key` **  
取り出す項目のプライマリキーを表す DynamoDB キー。DynamoDB の項目には、単一のハッシュキー、またはハッシュキーとソートキーが含まれています。これはテーブルの構造によって変わります。「型付き値」を指定する方法の詳細については、「[型システム (リクエストマッピング)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request)」を参照してください。  
**`projection`**  
DynamoDB オペレーションから返される属性を指定するために使用されるプロジェクション。プロジェクションの詳細については、「[プロジェクション](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-projections)」を参照してください。このフィールドはオプションです。

覚えておくべきポイント:
+ トランザクションが成功すると、`items` ブロック内で取得された項目の順序はリクエスト項目の順序と同じになります。
+ トランザクションは、オールオアナッシング方式で実行されます。いずれかのリクエスト項目でエラーが発生した場合、トランザクション全体は実行されず、エラーの詳細が返されます。
+ リクエスト項目を取得できなくても、エラーではありません。代わりに、*null*要素が対応する位置の*項目*ブロックに表示されます。
+ トランザクションのエラーが *TransactionCanceledException* である場合、`cancellationReasons` ブロックに入力されます。`cancellationReasons` ブロック内のキャンセル理由の順序は、リクエスト項目の順序と同じになります。
+  `TransactGetItems` のリクエスト項目数は 100 個に制限されています。

次の例の関数リクエストハンドラーの場合:

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

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

トランザクションが成功し、最初にリクエストされた項目だけが取得された場合、`ctx.result` で使用できる呼び出し結果は次のようになります。

```
{
    "items": [
       {
           // Attributes of the first requested item
           "post_id": "p1",
           "post_title": "title",
           "post_description": "description"
       },
       // Could not retrieve the second requested item
       null,
    ],
    "cancellationReasons": null
}
```

最初のリクエスト項目によって発生した *TransactionCanceledException* が原因でトランザクションが失敗した場合、`ctx.result` で使用可能な呼び出し結果は次のようになります。

```
{
    "items": null,
    "cancellationReasons": [
       {
           "type":"Sample error type",
           "message":"Sample error message"
       },
       {
           "type":"None",
           "message":"None"
       }
    ]
}
```

`ctx.error` にエラーに関する詳細が含まれています。キー **items** と **cancellationReasons** は、`ctx.result` にあることが保証されています。