

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

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

Objek `TransactWriteItems` permintaan memungkinkan Anda memberi tahu fungsi AWS AppSync DynamoDB untuk membuat `TransactWriteItems` permintaan ke DynamoDB untuk menulis beberapa item, berpotensi ke beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan yang berikut:
+ Nama tabel tujuan dari setiap item permintaan
+ Pengoperasian setiap item permintaan untuk dilakukan. Ada empat jenis operasi yang didukung: *PutItem*, *UpdateItem*, *DeleteItem*, dan *ConditionCheck* 
+ Kunci dari setiap item permintaan untuk menulis

Batas DynamoDB `TransactWriteItems` berlaku.

Objek `TransactWriteItems` permintaan memiliki struktur berikut:

```
type DynamoDBTransactWriteItemsRequest = {
  operation: 'TransactWriteItems';
  transactItems: TransactItem[];
};
type TransactItem =
  | TransactWritePutItem
  | TransactWriteUpdateItem
  | TransactWriteDeleteItem
  | TransactWriteConditionCheckItem;
type TransactWritePutItem = {
  table: string;
  operation: 'PutItem';
  key: { [key: string]: any };
  attributeValues: { [key: string]: string};
  condition?: TransactConditionCheckExpression;
};
type TransactWriteUpdateItem = {
  table: string;
  operation: 'UpdateItem';
  key: { [key: string]: any };
  update: DynamoDBExpression;
  condition?: TransactConditionCheckExpression;
};
type TransactWriteDeleteItem = {
  table: string;
  operation: 'DeleteItem';
  key: { [key: string]: any };
  condition?: TransactConditionCheckExpression;
};
type TransactWriteConditionCheckItem = {
  table: string;
  operation: 'ConditionCheck';
  key: { [key: string]: any };
  condition?: TransactConditionCheckExpression;
};
type TransactConditionCheckExpression = {
  expression: string;
  expressionNames?: { [key: string]: string};
  expressionValues?: { [key: string]: any};
  returnValuesOnConditionCheckFailure: boolean;
};
```

## TransactWriteItems bidang
<a name="js-TransactWriteItems-list"></a>

### TransactWriteItems daftar bidang
<a name="js-TransactWriteItems-list-col"></a>

**Bidang didefinisikan sebagai berikut: **    
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `TransactWriteItems` DynamoDB, ini harus diatur ke. `TransactWriteItems` Nilai ini diperlukan.  
** `transactItems` **  
Item permintaan untuk disertakan. Nilainya adalah array item permintaan. Setidaknya satu item permintaan harus disediakan. `transactItems`Nilai ini diperlukan.  
Untuk`PutItem`, bidang didefinisikan sebagai berikut:    
** `table` **  
Tabel DynamoDB tujuan. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `PutItem` DynamoDB, ini harus diatur ke. `PutItem` Nilai ini diperlukan.  
** `key` **  
Kunci DynamoDB mewakili kunci utama item yang akan diletakkan. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Nilai ini diperlukan.  
** `attributeValues` **  
Sisa atribut item yang akan dimasukkan ke DynamoDB. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Bidang ini bersifat opsional.  
** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `PutItem` permintaan akan menimpa entri yang ada untuk item tersebut. Anda dapat menentukan apakah akan mengambil kembali item yang ada saat pemeriksaan kondisi gagal. Untuk informasi selengkapnya tentang kondisi transaksional, lihat Ekspresi [kondisi transaksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-transaction-condition-expressions). Nilai ini bersifat opsional.
Untuk`UpdateItem`, bidang didefinisikan sebagai berikut:    
** `table` **  
Tabel DynamoDB untuk memperbarui. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `UpdateItem` DynamoDB, ini harus diatur ke. `UpdateItem` Nilai ini diperlukan.  
** `key` **  
Kunci DynamoDB mewakili kunci utama item yang akan diperbarui. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Nilai ini diperlukan.  
** `update` **  
`update`Bagian ini memungkinkan Anda menentukan ekspresi pembaruan yang menjelaskan cara memperbarui item di DynamoDB. Untuk informasi selengkapnya tentang cara menulis ekspresi pembaruan, lihat dokumentasi [DynamoDB UpdateExpressions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html). Bagian ini diperlukan.  
** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `UpdateItem` permintaan akan memperbarui entri yang ada terlepas dari statusnya saat ini. Anda dapat menentukan apakah akan mengambil kembali item yang ada saat pemeriksaan kondisi gagal. Untuk informasi selengkapnya tentang kondisi transaksional, lihat Ekspresi [kondisi transaksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-transaction-condition-expressions). Nilai ini bersifat opsional.
Untuk`DeleteItem`, bidang didefinisikan sebagai berikut:    
** `table` **  
Tabel DynamoDB untuk menghapus item. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `DeleteItem` DynamoDB, ini harus diatur ke. `DeleteItem` Nilai ini diperlukan.  
** `key` **  
Tombol DynamoDB mewakili kunci utama item yang akan dihapus. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Nilai ini diperlukan.  
** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `DeleteItem` permintaan menghapus item terlepas dari keadaan saat ini. Anda dapat menentukan apakah akan mengambil kembali item yang ada saat pemeriksaan kondisi gagal. Untuk informasi selengkapnya tentang kondisi transaksional, lihat Ekspresi [kondisi transaksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-transaction-condition-expressions). Nilai ini bersifat opsional.
Untuk`ConditionCheck`, bidang didefinisikan sebagai berikut:    
** `table` **  
Tabel DynamoDB untuk memeriksa kondisi. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `ConditionCheck` DynamoDB, ini harus diatur ke. `ConditionCheck` Nilai ini diperlukan.  
** `key` **  
Kunci DynamoDB mewakili kunci utama item untuk pemeriksaan kondisi. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Nilai ini diperlukan.  
** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Anda dapat menentukan apakah akan mengambil kembali item yang ada saat pemeriksaan kondisi gagal. Untuk informasi selengkapnya tentang kondisi transaksional, lihat Ekspresi [kondisi transaksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-transaction-condition-expressions). Nilai ini diperlukan.

Hal-hal yang perlu diingat:
+ Hanya kunci item permintaan yang dikembalikan dalam respons, jika berhasil. Urutan kunci akan sama dengan urutan item permintaan.
+ Transaksi dilakukan dengan all-or-nothing cara tertentu. Jika ada item permintaan yang menyebabkan kesalahan, seluruh transaksi tidak akan dilakukan dan rincian kesalahan akan dikembalikan.
+ Tidak ada dua item permintaan yang dapat menargetkan item yang sama. Kalau tidak, mereka akan menyebabkan *TransactionCanceledException*kesalahan.
+ Jika kesalahan transaksi adalah *TransactionCanceledException*, `cancellationReasons` blok akan diisi. Jika pemeriksaan kondisi item permintaan gagal **dan** Anda tidak `returnValuesOnConditionCheckFailure` menentukan`false`, item yang ada di tabel akan diambil dan disimpan `item` di posisi `cancellationReasons` blok yang sesuai.
+  `TransactWriteItems`terbatas pada 100 item permintaan.
+ Operasi **ini tidak** didukung saat digunakan dengan deteksi konflik. Menggunakan keduanya secara bersamaan dapat mengakibatkan kesalahan.

Untuk contoh berikut fungsi request handler:

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

export function request(ctx) {
  const { authorId, postId, title, description, oldTitle, authorName } = ctx.args;
  return {
    operation: 'TransactWriteItems',
    transactItems: [
      {
        table: 'posts',
        operation: 'PutItem',
        key: util.dynamodb.toMapValues({ postId }),
        attributeValues: util.dynamodb.toMapValues({ title, description }),
        condition: util.transform.toDynamoDBConditionExpression({
          title: { eq: oldTitle },
        }),
      },
      {
        table: 'authors',
        operation: 'UpdateItem',
        key: util.dynamodb.toMapValues({ authorId }),
        update: {
          expression: 'SET authorName = :name',
          expressionValues: util.dynamodb.toMapValues({ ':name': authorName }),
        },
      },
    ],
  };
}
```

Jika transaksi berhasil, hasil pemanggilan yang tersedia `ctx.result` adalah sebagai berikut:

```
{
    "keys": [
       // Key of the PutItem request
       {
           "post_id": "p1",
       },
       // Key of the UpdateItem request
       {
           "author_id": "a1"
       }
    ],
    "cancellationReasons": null
}
```

Jika transaksi gagal karena kegagalan pemeriksaan kondisi `PutItem` permintaan, hasil pemanggilan yang tersedia `ctx.result` adalah sebagai berikut:

```
{
    "keys": null,
    "cancellationReasons": [
       {
           "item": {
               "post_id": "p1",
               "post_title": "Actual old title",
               "post_description": "Old description"
           },
           "type": "ConditionCheckFailed",
           "message": "The condition check failed."
       },
       {
           "type": "None",
           "message": "None"
       }
    ]
}
```

`ctx.error`Berisi rincian tentang kesalahan. Kunci **kunci** dan **CancellationReasons** dijamin akan ada di. `ctx.result`