---
schema_version: "1"
id: 363738f660e41ce86b9c7943e19e170ee145a98114526b11eb03603249cb6b71
title: Retail Order Save Customization Use Cases
collection: legacydeveloper
version: current
locale: en-us
portal_url: https://docs.salesforce.com/legacydeveloper/current/en-us/retail_api/retail_order_apex_save_customization.md
canonical_url: https://developer.salesforce.com/docs/atlas.en-us.retail_api.meta/retail_api/retail_order_apex_save_customization.htm
source_site: developer.salesforce.com
content_type: documentation
content_hash: d14838db4dfdd0b05615efe056c7b6d8db17b2eb61468280bf5d95bcc803fbfd
description: Here are the different Apex customization use cases for the retail order save process.
---
# Retail Order Save Customization Use Cases

Here are the different Apex customization use cases for the retail order save process.

## Change a managed package sObject field value

Here’s a sample Apex class that modifies the custom field text of an order.

global class RetailOrderSampleSaveCustomization implements System.Callable {
  public Object call(String m, Map<String, Object> params) {
    // Get the RE\_Order instance
    cgcloud.RE\_Order orderWrapper = (cgcloud.RE\_Order) params.get('order');

    // Update the Order\_\_c SObject field
    cgcloud\_\_Order\_\_c order = (cgcloud\_\_Order\_\_c) orderWrapper.getOrder()
      .getRecord();
    // Customer\_Order\_Id\_\_c field is part of the cgcloud managed package.
    order.cgcloud\_\_Customer\_Order\_Id\_\_c = 'customer-order-id';

    // Get the First Order\_Item\_\_c and update its Custom\_\_c field value
    cgcloud\_\_Order\_Item\_\_c orderItem = (cgcloud\_\_Order\_Item\_\_c) orderWrapper.getOrderItems()\[0\]
      .getRecord();
    // Custom\_\_c is a custom field created by the customer.
    orderItem.Custom\_\_c = 'My New custom text';

    return null;
  }
}

## Add a custom sObject

Here’s a sample Apex class that adds an additional sObject record to the order that is saved.

global class RetailOrderSaveCustomization implements System.Callable {
  public Object call(String m, Map<String, Object> params) {
    // Get the RE\_Order instance
    cgcloud.RE\_Order orderWrapper = (cgcloud.RE\_Order) params.get('order');

    // Get the Order\_\_c SObject
    cgcloud\_\_Order\_\_c order = (cgcloud\_\_Order\_\_c) orderWrapper.getOrder()
      .getRecord();

    /\*\*
     \* MyCustomSObject\_\_c is a custom object and it has a Custom\_\_c field.
     \* Use append method so that this new SObject will be created as part of the order save process.
     \*/
    MyCustomSObject\_\_c mySObject = new MyCustomSObject\_\_c();
    mySObject.Custom\_\_c = order.cgcloud\_\_Customer\_Order\_Id\_\_c;
    cgcloud.RE\_Order.Record myRecordWrapper = orderWrapper.append(mySObject);

    return null;
  }
}

![Note](https://developer.salesforce.com/docs/atlas.en-us.retail_api.meta/retail_api/images/icon_note.png)

#### Note

The RE\_Order class ensures that all the order-related sObjects are committed in an all-or-none fashion while encapsulating all operations in a transaction.

## Add a custom sObject and define a parent-child relationship

Here’s a sample Apex class that adds a custom sObject and relates it to the parent sObject.

global class RetailOrderSaveCustomization implements System.Callable {
  public Object call(String m, Map<String, Object> params) {
    cgcloud.RE\_Order orderWrapper = (cgcloud.RE\_Order) params.get('order');
    cgcloud\_\_Order\_\_c order = (cgcloud\_\_Order\_\_c) orderWrapper.getOrder().getRecord();

    // Append a new SObject to be saved
    MyCustomSObject\_\_c mySObject = new MyCustomSObject\_\_c();
    cgcloud.RE\_Order.Record myRecordWrapper = orderWrapper.append(mySObject);

    // Add relationship to the Order\_\_c record
    orderWrapper.addRelationship(
      myRecordWrapper,
      MyCustomSObject\_\_c.Order\_\_c,
      orderWrapper.getOrder()
    );

    // Append an additional Child SObject
    MyChildSObject\_\_c myChildSObject = new MyChildSObject\_\_c();
    cgcloud.RE\_Order.Record myChildRecordWrapper = orderWrapper.append(
      myChildSObject
    );

    // Relate the child object to the custom object
    orderWrapper.addRelationship(
      myChildRecordWrapper,
      MyChildSObject\_\_c.MyCustomSObject\_\_c,
      myRecordWrapper
    );

    return null;
  }
}

## Save custom data in the retail UI

Here’s a sample Apex class that saves the custom data along with the order data. In your callable class, you can access the custom state that was set as part of the order state.

global class RetailOrderSaveCustomization implements System.Callable {
  public Object call(String m, Map<String, Object> params) {
    // Get the RE\_Order instance
    cgcloud.RE\_Order orderWrapper = (cgcloud.RE\_Order) params.get('order');

    // Get the custom data serialized data
    String payloadString = (String) params.get('customState');

    if (payloadString != null && payloadString != '') {
      Map<String, Object> customPayload = (Map<String, Object>) JSON.deserializeUntyped(
        payloadString
      );

      // Append a new SObject to be saved
      MyCustomSObject\_\_c mySObject = new MyCustomSObject\_\_c();
      mySObject.Custom\_\_c = (String) customPayload.get('Custom\_\_c');
      mySObject.Duration\_\_c = (Integer) customPayload.get('Duration\_\_c');

      if (mySObject.Custom\_\_c != null && mySObject.Duration\_\_c != null) {
        cgcloud.RE\_Order.Record myRecordWrapper = orderWrapper.append(
          mySObject
        );

        // Add relationship to the Order\_\_c record
        orderWrapper.addRelationship(
          myRecordWrapper,
          MyCustomSObject\_\_c.Order\_\_c,
          orderWrapper.getOrder()
        );
      }
    }

    return null;
  }
}