In-Flight Order Changes and Cancellation allows you to change or cancel orders after order confirmation and before fulfillment. Changes to orders come in the form of versioned amendments, to existing order line items that include modification of quantity, subscription dates, discounts, and other pricing parameters. You can achieve the following using the APIs:

  • Add a new order line item
  • Change an existing order line item
  • Revert the changes if required
  • Cancel an order and its order line items
  • Revert cancellation of an order

Using the AmendOrder() API, you can make subscription date changes on order line items of an "In Flight" order (an order with the status Pending, In Fulfillment, or Partially Fulfilled). For example, you may want to amend an order in a scenario when there is a delay in provisioning or fulfillment of the subscription after the order has been confirmed by the customer and before it is fulfilled.

The following diagram visually represents the workflow for In-Flight Order Changes

Refer to the Order Management for Administrators for complete steps to configure In-Flight Order Changes and Cancellation. At a minimum, the "Enable In-Flight Changes and Cancellation" custom setting must be enabled for any of the following APIs to function. You can also create workflow automation rules for in-flight order changes and cancellation using the execWorkflow() API.

In-Flight Changes and Cancellation APIs

Invoke the following APIs to make In-Flight Order Changes to orders (amendments) or to cancel an order.

Order and Order Line Item Behavior on Amendment

ActionBehavior

In-flight Order changes allowed

  • Change to Start Date and/or End Date
  • Change the term as needed based on new start date/end date
  • Recalculate Net Price as needed
  • Add a new Product (order line) for the existing order:
    For instance, after placing an order for salesforce licenses, you can add more products for the SFDC Admin Training.
  • Cancel an order line:
    Cancel a particular order line from an existing order and keep rest of the order lines unchanged.
  • Change an existing order line for the existing order:
    Change the quantity or start/end date for a particular order line on an existing order.
    Price and Term are recalculated after changing quantity and dates (start/End) respectively.

Order Versioning

  • New order and order line version created to make the in-flight change
  • The previous version superseded once the new change is confirmed

Delayed Asset Creation

  • Option added to “Create Assets on Order Activation” in Order System Properties. This option needs to be enabled for In-flight change capability. 
  • With this option, assets are created and activated only when the order/order line is activated
  • For bundles / multi-charge types, assets created/updated when last related option or charge type is fulfilled

Billing Changes

  • Billing can only be initiated after order/order line activation
  • “Initiate Billing on Order Activation” is not relevant for In-flight Order changes and is always treated as if the property is enabled.

Revenue Recognition

  • No impact on Revenue Recognition as scheduled, after activation

DRAFT or IN AMENDMENT Order

Setting Ready for Activation Date or (Ready for Billing Date) on Order Line Item on orders in Draft / In Amendment Order

When the orders are in "Draft" or "In Amendment" status, users can set "Ready for Activation Date" or "Ready for Billing Date" on the order or order line item level. This will not initiate order/order line item activation or billing while order stays in "Draft" or "In Amendment" status. 

If "Ready for Activation Date" is set on the order or order line item then this will become a trigger to activate order or order line item respectively when the order is accepted. 

ACCEPT ORDER / QUOTE

Order line item activation on Accept Order or Quote


When the order or quote is accepted, the system uses the following behavior on the order line items irrespective of delayed asset creation flag.

READY FOR ACTIVATION DATE ON THE ORDER HEADER

Mark all the line items as Fulfilled

Initiate logic for order line item activation, which will activate all the line items as well as order header. It will also create and activate assets. 

 INDEPENDENT LINE ITEM:

If ready for activation date is set on the order line item and the status of the order line is in “In Amendment” or “Draft”, then the system will mark the line item as “Fulfilled” and initiate “order line item activation logic

BUNDLES OR MULTI-CHARGE TYPES WHEN Create Asset on Order Activation = TRUE

 If ready for activation date is set and the status of the order line is in “In Amendment” or “Draft”, then the system will mark the line item as “Fulfilled”

Initiate activation logic, if the current fulfilled item is the last item in the bundle or multi-charge items

BUNDLES OR MULTI-CHARGE TYPES WHEN Create Asset on Order Activation = FALSE

 If ready for activation date is set and the status of the order line is in “In Amendment” or “Draft”, the system will mark the line item as “Fulfilled”

Initiate activation even if there are other items in the bundle or multi-charge types that are still NOT in “Fulfilled” status

PENDING / IN FULFILLMENT / PARTIALLY FULFILLED ORDERS


Activating Order Line Items




READY FOR ACTIVATION DATE ON THE ORDER HEADER

  • Mark all the line items as Fulfilled
  • Initiate logic for order line item activation

INDEPENDENT LINE ITEM:

  • If ready for activation date is set on the order line item and the status of the order line is in “Pending” or “In Fulfillment”, then the system will mark the line item as “Fulfilled” and initiate “order line item activation logic
  • If Fulfilled Quantity >= Delta Quantity and the status of the order line is in “Pending” or “In Fulfillment” or “Partially Fulfilled”, then mark the line item as “Fulfilled” and initiate “order line item activation logic

BUNDLES OR MULTI-CHARGE TYPES WHEN Create Asset on Order Activation = TRUE

  • If ready for activation date is set and the status of the order line is in “Pending” or “In Fulfillment”, then mark the line item as “Fulfilled”
  • If Fulfilled Quantity >= Delta Quantity and the status of the order line is in “Pending” or “In Fulfillment” or “Partially Fulfilled”, then mark the line item as “Fulfilled”
  • Initiate activation logic, if the current fulfilled item is the last item in the bundle or multi-charge items

BUNDLES OR MULTI-CHARGE TYPES WHEN Create Asset on Order Activation = FALSE

  • If ready for activation date is set and the status of the order line is in “Pending” or “In Fulfillment”, then mark the line item as “Fulfilled”
  • If Fulfilled Quantity >= Delta Quantity and the status of the order line is in “Pending” or “In Fulfillment” or “Partially Fulfilled”, then mark the line item as “Fulfilled”
  • Initiate activation logic, activates the order line item only if all the order line items in the bundle or multi-charge types are in the 'Fulfilled' state.

Use Cases for Changing In-Flight orders

This section highlights the use cases when you would make changes to an In-Flight order, For example, delay in the provisioning of Subscription from a confirmed order, impacts the subscription effective dates, duration, and Price. Accordingly on provisioning, change In-Flight order, order line item, asset, and other related data. 

New Subscription

Change in subscription dates without changing Term/Duration or Quantity

New subscription start is delayed by a month due to provisioning delay.

Ordered subscription: 01-Jan-2017 to 31-Dec-2017

Provisioned subscription: 01-Feb-2017 to 31-Jan-2018

Amend Subscription

Change amendment start date without changing the End Date and Quantity

Provisioning of an add-on order on an existing subscription is delayed by a month.

Ordered subscription: 01-Aug-2017 to 31-Jan-2018

Provisioned subscription: 01-Sep-2017 to 31-Jan-2018

Terminate Subscription

Change termination date of subscription

Termination of an existing subscription is delayed by a month due to provisioning delay

Ordered subscription Termination: End Date: 31-Oct-2017

Provisioned subscription Termination: End Date: 30-Nov-2017

Swap Subscription

Change start date of upgrade and thus change termination date of original subscription

Start date of the upgrade of an existing subscription is delayed by a month due to provisioning delay. Accordingly, termination of existing subscription also need to be delayed

Ordered subscription Upgrade:

Gold Warranty: End Date: 31-July-2017

Platinum Warranty: 01-Aug-2017 to 31-Jan-2018

Provisioned subscription Upgrade:

Gold Warranty: End Date: 31-Aug-2017

Platinum Warranty: 01-Sep-2017 to 31-Jan-2018

Add a new order line

Addition of n number of products to the existing order

Addition of Dimond Warranty to the existing order

Add new order line to the existing order by adding Dimond warranty
Cancel an existing Order Line

Canceling Gold Warranty for the existing order

Gold Warranty Status is Cancelled.
Change an existing order line

Provisioning of an add-on order on an existing subscription is shifted by a month and quantity needs to be increased from 1 to 2

Ordered subscription: 01-Aug-2017 to 31-Jan-2018

Provisioned subscription: 01-Sep-2017 to 31- Feb -2018 (Quantity: 2)

Calculate the end date by providing a start date, selling term and selling frequency

Provide your input for start date, selling term, selling frequency to the order line item and ensure that the end date on order line item must be null while passing the API.

Code Sample:

for(Apttus_Config2_OrderLineItem_c oli: orderLineList) { oli.Apttus_Config2__EndDate__c = null; oli.Apttus_Config2__StartDate__c = oli.Apttus_Config2__StartDate__c.addMonths(4); oli.Apttus_Config2__SellingTerm__c = 24; oli.Apttus_Config2__SellingFrequency__c = 'Monthly'; oli.Apttus_Config2__Quantity__c = oli.Apttus_Config2__Quantity__c; }
Calculate the selling term by providing a start date, end date, and selling frequency

Provide your input for start date, end date, selling frequency to the order line item and ensure that the selling term on order line item must be "0" while passing the API.

Code Sample:

for(Apttus_Config2_OrderLineItem_c oli: orderLineList) { oli.Apttus_Config2__SellingTerm__c = 0; oli.Apttus_Config2__EndDate__c = oli.Apttus_Config2__EndDate__c.addMonths(4); oli.Apttus_Config2__StartDate__c = oli.Apttus_Config2__StartDate__c; oli.Apttus_Config2__SellingFrequency__c = 'Monthly'; oli.Apttus_Config2__Quantity__c = oli.Apttus_Config2__Quantity__c; }