When Renewal Execution Mode is set to OnDemand, CPQ automatically renews all assets on the account (possibly from different quotes) based on the defined Renewal Lead Time after you click a custom button on the account. You may want to renew an existing opportunity in OnDemand renewal mode:

  • During one-time legacy asset data migrations
  • During one time renewal quote creation for existing active asset base
  • When minimal changes are required on the renewal quotes because of any ABO changes

The following diagram describes the flow of OnDemand renewals. In this diagram, Renewal Lead Time is 120 days.

Over a period of time, you sell some products/services through different quotes, which might have varying end dates. After the original quotes are converted into orders and the order are activated, assets are generated. All assets are visible on the account. When you want to renew the assets that will expire in 120 days from today, you click the custom button on the account. CPQ compares the asset line items' end dates with the Renewal Lead Time defined and triggers the creation of renewal quotes for all those assets (from different quotes) that will expire in 120 days.


  • Set the Renewal Business Object Type to Proposal.
  • Set the Renewal Execution Mode to OnDemand.
  • Create the custom button on the account.
  • Define the Renewal Lead Time.
  • Define the Renewal Group Fields.
  • Schedule the AssetRenewalJobScheduler batch job.
  • Navigate to Quote/Proposal and create a new link, set the content source as VF page and select Apttus_Config2__AssetRenewalSubmit as the VF page and click Save.
  • To do this for multiple accounts, create a custom controller and VF page.

    Enter the following code in the custom controller. Create a reference for the custom controller in the VF page.

    List<ID> accountIds =new List<ID>();
    // gather account ids
    // instantiate the OOTB controller and pass in the account ids
    Apttus_Config2.AssetRenewalSubmitController baseController = new Apttus_Config2.AssetRenewalSubmitController(accountIds);
    // submit the job
    ID jobId = baseController.doSubmitJob();

For more information, see Configuring Renewal Settings.