

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.

# Expresiones de condición de transacción
<a name="js-aws-appsync-resolver-reference-dynamodb-transaction-condition-expressions"></a>

Las expresiones de condición de transacción están disponibles en las solicitudes de los cuatro tipos de operaciones en `TransactWriteItems`, a saber, `PutItem`, `DeleteItem`, `UpdateItem` y `ConditionCheck`.

Para `PutItem`, `DeleteItem` y `UpdateItem`, la expresión de condición de transacción es opcional. Para `ConditionCheck`, se requiere la expresión de condición de transacción.

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

El siguiente controlador de solicitudes de función `DeleteItem` de carácter transaccional no tiene una expresión de condición. Como resultado, elimina el elemento en 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 }),
      }
    ],
  };
}
```

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

El siguiente controlador de solicitudes de función `DeleteItem` de carácter transaccional tiene una expresión de condición de transacción que permite que la operación tenga éxito únicamente si el autor de esa publicación es igual a un nombre determinado.

```
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 },
        }),
      }
    ],
  };
}
```

Si la comprobación de condición no se realiza correctamente, provocará la excepción `TransactionCanceledException` y se devolverá el detalle del error en `ctx.result.cancellationReasons`. Tenga en cuenta que, de forma predeterminada, el elemento anterior de DynamoDB que provocó el error en esa comprobación de condición se devolverá en `ctx.result.cancellationReasons`.

## Especificación de una condición
<a name="js-id24"></a>

Todos los objetos de solicitud `PutItem`, `UpdateItem` y `DeleteItem` permiten especificar una sección `condition` opcional. Si se omite, no se comprobará ninguna condición. Si se especifica, la condición debe ser true para que la operación se lleve a cabo correctamente. `ConditionCheck` debe tener una sección `condition` sección para especificarla. La condición debe ser verdadera para que toda la transacción se realice correctamente.

Las secciones `condition` tienen la siguiente estructura:

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

Los campos siguientes especifican la condición:

** `expression` **  
La misma expresión de actualización. Para obtener más información sobre cómo escribir expresiones de condiciones, consulte la documentación de [ ConditionExpressions DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html). Este campo debe especificarse.

** `expressionNames` **  
Las sustituciones de los marcadores de posición de nombre de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de nombre usado en la *expresión*, y el valor tiene que ser una cadena que corresponda al nombre de atributo del elemento en DynamoDB. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de nombre de atributo de expresión que se usen en la *expresión*.

** `expressionValues` **  
Las sustituciones de los marcadores de posición de valor de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de valor usado en la expresión y el valor tiene que ser un valor con tipo. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte [Sistema de tipos (mapeo de solicitud)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Este valor debe especificarse. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de valor de atributo de expresión que se usen en la expresión.

** `returnValuesOnConditionCheckFailure` **  
Especifique si desea recuperar el elemento en DynamoDB cuando se produzca un error en la comprobación de condición. El elemento recuperado estará en `ctx.result.cancellationReasons[<index>].item`, donde `<index>` es el índice del elemento de solicitud que no ha superado la comprobación de condición. Este valor se establece de forma predeterminada en true.