

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# PutItem
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-putitem"></a>

El documento de mapeo de `PutItem` solicitudes le permite indicar al solucionador de AWS AppSync DynamoDB que realice `PutItem` una solicitud a DynamoDB y le permite especificar lo siguiente:
+ La clave del elemento de DynamoDB
+ El contenido completo del elemento (compuesto de `key` y `attributeValues`).
+ Condiciones para que la operación se lleve a cabo correctamente.

El documento de mapeo de `PutItem` tiene la siguiente estructura:

```
{
    "version" : "2018-05-29",
    "operation" : "PutItem",
    "customPartitionKey" : "foo",
    "populateIndexFields" : boolean value,
    "key": {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "attributeValues" : {
        "baz" : ... typed value
    },
    "condition" : {
       ...
    },
    "_version" : 1
}
```

Los campos se definen de la siguiente manera:

## PutItem campos
<a name="putitem-list"></a>

### PutItem lista de campos
<a name="putitem-list-col"></a>

 **`version`**   
La versión de la definición de plantilla `2017-02-28` y `2018-05-29` se admiten actualmente. Este valor es obligatorio.

 **`operation`**   
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB `PutItem`, este valor se debe establecer en `PutItem`. Este valor es obligatorio.

 **`key`**   
La clave del elemento de DynamoDB. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte [Sistema de tipos (mapeo de solicitud)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Este valor es obligatorio.

 **`attributeValues`**   
El resto de los atributos del elemento que debe colocarse en DynamoDB. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte [Sistema de tipos (mapeo de solicitud)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Este campo es opcional.

 **`condition`**   
Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud `PutItem` sobrescribe todas las entradas existentes para dicho elemento. Para obtener más información sobre las condiciones, consulte [Expresiones de condición](aws-appsync-resolver-mapping-template-reference-dynamodb-condition-expressions.md). Este valor es opcional.

 **`_version`**   
Valor numérico que representa la última versión conocida de un elemento. Este valor es opcional. Este campo se utiliza para *detectar conflictos* y solo se admite en orígenes de datos con control de versiones.

**`customPartitionKey`**  
Cuando está activado, este valor de cadena modifica el formato `ds_sk` y los `ds_pk` registros que utiliza la tabla de sincronización delta cuando se ha activado el control de versiones (para obtener más información, consulte [Detección de conflictos y sincronización](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) en la *Guía para AWS AppSync desarrolladores*). Cuando se habilita, también lo hace el procesamiento de la entrada `populateIndexFields`. Este campo es opcional.

**`populateIndexFields`**  
Valor booleano que, cuando se habilita **junto con la `customPartitionKey`**, crea nuevas entradas para cada registro de la tabla Delta Sync, específicamente en las columnas `gsi_ds_pk` y `gsi_ds_sk`. Para obtener más información, consulte el artículo sobre [detección de conflictos y sincronización](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) en la *Guía para desarrolladores de AWS AppSync *. Este campo es opcional. 

El elemento que se escribe en DynamoDB se convierte automáticamente a los tipos primitivos de GraphQL y JSON, y está disponible en el contexto de mapeo (`$context.result`).

Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección [Sistema de tipos (mapeo de respuestas)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md).

Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte [Información general sobre las plantillas de mapeo de solucionador](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

## Ejemplo 1
<a name="example-1"></a>

El siguiente ejemplo muestra una plantilla de mapeo de una mutación de GraphQL `updateThing(foo: String!, bar: String!, name: String!, version: Int!)`.

Si no existe ningún elemento con la clave especificada, dicho elemento se crea. Si ya existe un elemento con la clave especificada, dicho elemento se sobrescribe.

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo),
        "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar)
    },
    "attributeValues" : {
        "name"    : $util.dynamodb.toDynamoDBJson($ctx.args.name),
        "version" : $util.dynamodb.toDynamoDBJson($ctx.args.version)
    }
}
```

## Ejemplo 2
<a name="example-2"></a>

El siguiente ejemplo muestra una plantilla de mapeo de una mutación de GraphQL `updateThing(foo: String!, bar: String!, name: String!, expectedVersion: Int!)`.

En este ejemplo se comprueba que el elemento que actualmente se encuentra en DynamoDB tenga en el campo `version` definido con el valor `expectedVersion`.

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo),
        "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar)
    },
    "attributeValues" : {
        "name"    : $util.dynamodb.toDynamoDBJson($ctx.args.name),
        #set( $newVersion = $context.arguments.expectedVersion + 1 )
        "version" : $util.dynamodb.toDynamoDBJson($newVersion)
    },
    "condition" : {
        "expression" : "version = :expectedVersion",
        "expressionValues" : {
            ":expectedVersion" : $util.dynamodb.toDynamoDBJson($expectedVersion)
        }
    }
}
```

Para obtener más información sobre la API `PutItem` de DynamoDB, consulte la [documentación de la API de DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html).