TransactWriteItems

Description

This function asynchronously writes up to 25 action requests in a group.

The actions are completed atomically so that either all of them succeed, or all of them fail. They are defined by the following objects:

  • Put
  • Update
  • Delete
  • ConditionCheck

For more information, see TransactWriteItems.

Category

History

ColdFusion (2021 release): Added this function.

Syntax

serviceHandle.transactWriteItems(requestParameters)

Parameters

See request parameters of TransactWriteItems.

Example

<cfscript> 
    cred = { 
        "credentialAlias" : "myalias", 
        "vendorName" : "AWS", 
        "region" : "us-east-2", 
        "secretAccessKey" : "xxxxx", 
        "accessKeyId" : "xxxx" 
  } 
    config = { 
        "serviceName" = "DYNAMODB" 
      } 
    dynamo = getCloudService(cred, config) 
  
    // create table Customer 
    createTable_customers = { 
        "TableName": "CustomerUpd", 
        "KeySchema": [ 
            { 
                "AttributeName": "CustomerId", 
                "KeyType": "HASH" 
            } 
        ], 
        "AttributeDefinitions": [ 
            { 
                "AttributeName": "CustomerId", 
                "AttributeType": "S" 
            } 
        ], 
        "ProvisionedThroughput": { 
            "ReadCapacityUnits": 10, 
            "WriteCapacityUnits": 10 
        } 
    } 
  
    // create table product 
    createTable_product = { 
        "TableName": "Product", 
        "KeySchema": [ 
            { 
                "AttributeName": "ProductId", 
                "KeyType": "HASH" 
            } 
        ], 
        "AttributeDefinitions": [ 
            { 
                "AttributeName": "ProductId", 
                "AttributeType": "N" 
            } 
        ], 
        "ProvisionedThroughput": { 
            "ReadCapacityUnits": 10, 
            "WriteCapacityUnits": 10 
        } 
    } 
  
    // create table Orders 
    createTable_orders = { 
        "TableName": "Orders", 
        "KeySchema": [ 
            { 
                "AttributeName": "OrderId", 
                "KeyType": "HASH" 
            } 
        ], 
        "AttributeDefinitions": [ 
            { 
                "AttributeName": "OrderId", 
                "AttributeType": "N" 
            } 
        ], 
        "ProvisionedThroughput": { 
            "ReadCapacityUnits": 10, 
            "WriteCapacityUnits": 10 
        } 
    } 
  
    // create all three tables 
    dynamo.createTable(createTable_customers) 
    dynamo.createTable(createTable_product) 
    dynamo.createTable(createTable_orders) 
  
    // define structs for items to be inserted into the tables 
    strct_putItem1 = { 
        "TableName": "CustomerUpd", 
        "Item":{ 
            "CustomerId": { 
                "S": "09e8e9c8-ec48" 
            } 
        } 
    } 
  
    strct_putItem2 = { 
        "TableName": "Product", 
        "Item":{ 
            "ProductId": { 
                "N": 1234 
            }, 
            "producttatus": { 
                "S": "IN_STOCK" 
            } 
        } 
    } 
  
    // put items in the tables 
    dynamo.putItem(strct_putItem1, {"hasType": true}) 
    dynamo.putItem(strct_putItem2, {"hasType": true}) 
  
    //STORE DATA IN TABLE AFTER TRANSACTION 
    CUSTOMER_TABLE_NAME = "CustomerUpd"; 
    CUSTOMER_PARTITION_KEY = "CustomerId"; 
    customerId = "09e8e9c8-ec48"; 
    conditionCheck = { 
        "TableName": CUSTOMER_TABLE_NAME, 
        "Key": { 
            "#CUSTOMER_PARTITION_KEY#": { 
                "S": customerId 
            } 
        }, 
        "ConditionExpression": "attribute_exists(#CUSTOMER_PARTITION_KEY#)", 
        "ReturnValuesOnConditionCheckFailure": "ALL_OLD" 
    } 
  
    PRODUCT_TABLE_NAME = "Product"; 
    PRODUCT_PARTITION_KEY = "ProductId"; 
    PRODUCT_PARTITION_KEY_VALUE = 1234; 
    updateproducttatus = { 
        "TableName": PRODUCT_TABLE_NAME, 
        "Key": { 
            "#PRODUCT_PARTITION_KEY#": { 
                "N": PRODUCT_PARTITION_KEY_VALUE 
            } 
        }, 
        "UpdateExpression": "SET producttatus = :new_status", 
        "ExpressionAttributeValues": { 
            ":new_status": { 
                "S": "SOLD" 
            }, 
            ":expected_status": { 
                "S": "IN_STOCK" 
            } 
        }, 
        "ConditionExpression": "producttatus = :expected_status", 
        "ReturnValuesOnConditionCheckFailure": "ALL_OLD" 
    } 
  
    ORDER_PARTITION_KEY = "OrderId"; 
    ORDER_TABLE_NAME = "Orders"; 
    ORDER_PARTITION_KEY_VALUE = 740; 
    createOrder = { 
        "TableName": ORDER_TABLE_NAME, 
        "Item": { 
            "#ORDER_PARTITION_KEY#": { 
                "N": ORDER_PARTITION_KEY_VALUE 
            }, 
            "#PRODUCT_PARTITION_KEY#": { 
                "N": PRODUCT_PARTITION_KEY_VALUE 
            }, 
            "#CUSTOMER_PARTITION_KEY#": { 
                "S": customerId 
            }, 
            "OrderStatus": { 
                "S": "CONFIRMED" 
            }, 
            "OrderTotal": { 
                "N": 100 
            } 
        }, 
        "ReturnValuesOnConditionCheckFailure": "ALL_OLD", 
        "ConditionExpression": "attribute_not_exists(#ORDER_PARTITION_KEY#)" 
    } 
  
    transactWriteItems = { 
        "TransactItems": [{  
            "ConditionCheck": conditionCheck 
        }, { 
            "Update": updateproducttatus 
        }, { 
            "Put": createOrder 
        }], 
        "ReturnConsumedCapacity": "TOTAL" 
    } 
  
    //READ DATA AFTER TRANSACTION COMPLETES 
    readproductold = { 
        "TableName": PRODUCT_TABLE_NAME, 
        "Key": { 
            "#PRODUCT_PARTITION_KEY#": { 
                "N": PRODUCT_PARTITION_KEY_VALUE 
            } 
        } 
    } 
  
    readCreatedOrder = { 
        "TableName": ORDER_TABLE_NAME, 
        "Key": { 
            "#ORDER_PARTITION_KEY#": { 
                "N": ORDER_PARTITION_KEY_VALUE 
            } 
        } 
    } 
  
    transactGetItems = { 
        "TransactItems": [ 
            { 
                "Get": readproductold 
            }, 
            { 
                "Get": readCreatedOrder 
            } 
        ], 
        "ReturnConsumedCapacity": "TOTAL" 
    } 
  
    // Transact write items 
    try{ 
        resultWrite = dynamo.transactWriteItems(transactWriteItems, {"hasType":true}) 
        writeOutput("TransactionWriteItems Successful") 
        writeDump(resultWrite) 
    } 
    catch (any e){ 
        writeDump(e) 
    } 
  
    // Transact get items 
    try{ 
        resultGet=dynamo.transactGetItems(transactGetItems,{"hasType":true}) 
        writeDump(resultGet) 
    } 
    catch (any e){ 
        writeDump(e) 
    } 
</cfscript>

 Adobe

Get help faster and easier

New user?

Adobe MAX 2024

Adobe MAX
The Creativity Conference

Oct 14–16 Miami Beach and online

Adobe MAX

The Creativity Conference

Oct 14–16 Miami Beach and online

Adobe MAX 2024

Adobe MAX
The Creativity Conference

Oct 14–16 Miami Beach and online

Adobe MAX

The Creativity Conference

Oct 14–16 Miami Beach and online