# Extend the Ship From address

You can choose to override the Ship From Address at either the order level or the item level. If you override at the order level, there will be one ship from address for the entire order. If you override at the item level, each physical item in the cart will be assigned a ship from address. Digital items will not have a ship from address.

## Order level Ship From Address extension:

The current version of the Salesforce Lightning app provides an extension point for setting the **Ship From Address** (warehouse location) based on the client’s business requirements. After implementation, this extension point will override the **Ship From Address** attributes specified in the Digital River App settings.

The Digital River app provides two [configurations](https://docs.digitalriver.com/salesforce-lightning/salesforce-lightning-b2b-commerce-app-1.4/integrate-the-salesforce-lightning-app/step-2-configure-the-digital-river-app) called the **Ship From Address – Scope** and **Ship From Address - Provider Name**. If the **Ship From Address – Scope** is the default, it is expected that the **Ship From Address - Provider Name** configuration is empty. In this case, the application uses the Ship From Address static configuration defined in other fields of the Digital River app.

To override the address at the order level, set the **Ship From Address – Scope** to “Order Level Scope”. An administrator can implement an Apex interface that the Digital River application delivers as part of the package, `DRB2B_CheckoutFromAddressProvider`. The Apex class that implements this interface can be specified as a provider of Ship from Address information for the checkout flow. This class should then be specified as the **Ship From Address - Provider Name** configuration.

An example of such a class is `CustomCheckoutShipFromAddressProvider`.

### Sample code for this class

```
global class CustomCheckoutShipFromAddressProvider implements 
digitalriverv3.DRB2B_CheckoutFromAddressProvider {
    global digitalriverv3.DRB2B_Address 
    getAddress(digitalriverv3.DRB2B_CheckoutContext context) {
        digitalriverv3.DRB2B_Address address = new 
        digitalriverv3.DRB2B_Address ();
 
  Id cartId = context.cartId;

        // Add business logic
        address.country = 'US';
        address.state = 'NY';
        address.postalCode = '31232';
        address.city = 'New York';
        address. line1 = '123 Main St.';
 
        return address;
    }
}
```

<figure><img src="https://474794349-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlKR9Leh9OBazVU7KgFio%2Fuploads%2FXHjYhHbahH7fFxe48g4w%2FLightning%201.3%20replace%20screen%20shot%20Extend%20shipfrom%20addr.png?alt=media&#x26;token=e55b0c66-cfed-4b69-beaf-5e9656ca3c59" alt=""><figcaption></figcaption></figure>

The `getAddress` (context) method takes in a checkout context as input as shown above.

Currently, the `CartId` is passed in the Checkout context. The `Cartid` is obtained by using `context.cartId`.

The name of the class can be specified in the `Ship from Address - Provider Name` field of the Digital River App configuration.

## Item level Ship From Address extension

To override the address at the item level, set the **Ship From Address – Scope** to “Item Level Scope”. When the scope is set to item level, the connector specifies a shipFrom address for each physical CartItem in the WebCart.

To configure the Digital River app for Ship from Address at Item level,  you must populate the following fields on the CartItem object for each physical item in the cart:

* `digitalriverv3_ShipFrom_City__c`
* `digitalriverv3_ShipFrom_Country__c`
* `digitalriverv3_ShipFrom_Postal_code__c`
* `digitalriverv3_ShipFrom_State__c`
* `digitalriverv3_ShipFrom_Street__c`

You create a trigger, flow, or another mechanism to automate the population of shipfrom address based on the Item added to the Cart.
