SelectBillingAccount Component
The SelectBillingAccount component allows you to select an existing Zuora billing account or create a new billing account when creating quotes. The component supports the following:
- Has customizable page name and description.
- Allows user to choose a new billing account vs. an existing billing account.
- When the existing billing account option is chosen, allows the user to choose an existing billing account, and displays the billing account details in a table.
- Allows user to choose a Quote Type: New Subscription, Amendment, Renewal, and Cancellation.
- When amending, renewing, or cancelling, allows user to choose a subscription.
- When amending, renewing, or cancelling, all the subscriptions and subscription products for the account are listed.
- Contains the Next and Cancel buttons. The target URL or an action for both buttons is configurable.
Based on the Get Billing Accounts from 360 Quote Configuration Setting in the Zuora Config tab, the following limits apply to the number of billing accounts listed by the SelectBillingAccount component:
- If the setting is selected, up to 5000 billing accounts can be listed.
- If the setting is not selected, up to 2000 billing accounts can be listed.
The SelectBillingAccount component is available in the Versions 5.100 and later of Zuora Quotes.
SelectBillingAccount Component Attributes
The following attributes are supported for the SelectBillingAccount component.
Attribute | Type | Required | Default Value | Description |
---|---|---|---|---|
amendQuotePage | String | No | Page.ZQAmendment |
The quote create page for amendment quote. |
backButtonLabel | String | No |
Label. |
The label text on the Back button. The value is automatically determined from the quote wizard configuration if left unspecified and used within the valid quote wizard context. |
cancelQuotePage | String | No | Page.ZQCancellation |
The quote create page for cancelation quote. |
crmAccountId | ID | Yes | N/A | CRM Account Id used to create quotes |
disableBackButton | Boolean | No |
False |
Indicates whether or not to disable the Back button of the component. The value is automatically determined from the quote wizard configuration if left unspecified and used within the valid quote wizard context. |
existingQuoteId | ID | N/A | If the quote already exists, use this attribute to set the Id. | |
goBackPage | String | No |
None |
The component redirects to this URL if the Back button is clicked. |
newQuotePage | String | No | Page.ZQQuoteEdit |
The quote creation page for new subscription quotes. User will be directed to this page upon clicking Continue. |
nextButtonLabel | String | No |
Label.Next
|
Text value rendered in the Next button. |
opportunityId | ID | Yes | N/A |
The opportunity that the quote will link with. The account linked with this opportunity must have a Zuora billing account linked by CRM ID. |
renderBackButton | Boolean | No |
False |
Indicates whether or not to render the Back button of the component. The value is automatically determined from the quote wizard configuration if left unspecified and used within the valid quote wizard context. |
renewalQuotePage | String | No | Page.ZQRenewal |
The quote create page for renewal quote. |
subTitle | String | No | N/A | The sub title of this component |
title | String | No | N/A | Page title that will be displayed in the component |
Component Plugin
Customize Billing Account Plugin
Use the ICustomizeBillingAccountPlugin on the SelectBillingAccount component to customize the Select Billing Account process. The following customizations are available:
- For billing account selection
- Set the default billing account type to New or Existing
- Filter billing accounts
- Set the default billing account
- For quote type selection
- Set the default quote type
- Control whether users can change the default quote type
- Set the default subscription being amended, renewed, or canceled
The plugin interface is defined as:
global zqu.SelectBillingAccountComponentOptions.ICustomizeBillingAccountPlugin
The plugin contains the following interface methods.
Return Type | Method | Input Parameters |
---|---|---|
zqu.JsRemoteController.BillingAccountObjects | getAvailableBillingAccounts | zqu.JsRemoteController. BillingAccountObjects |
zqu.JsRemoteController.QuoteTypeObjects | getAvailableQuoteTypes | zqu.JsRemoteController. QuoteTypeObjects |
zqu.JsRemoteController.SubscriptionObjects | getAvailableSubscriptions | zqu.JsRemoteController. SubscriptionObjects |
Sample Code
The following is a code sample of the SelectBillingAccount component and a code sample for the Billing Account Plugin.
<c:SelectBillingAccount title="New Quote" subTitle="Select Billing Account" opportunityId="{!$CurrentPage.parameters.Id}" newQuotePage="/apex/testNewQuote" amendQuotePage="/apex/testNewAmend" renewalQuotePage="/apex/testNewRenewal">
Sample Code for Customizing Billing Account Plugin
global class SampleSelectBillingAccountPlugin implements zqu.SelectBillingAccountComponentOptions.ICustomizeBillingAccountPlugin { global zqu.JSRemoteController.BillingAccountObjects getAvailableBillingAccounts( zqu.JSRemoteController.BillingAccountObjects accountObjs){ //'accountObjs.billingAccountTypes' contains // a list of billing account types : 'new', 'existing' // Remove the 'new' account type // to disallow new account creation if(accountObjs.opportunityId == '001o000000VNv02AAD'){ accountObjs.billingAccountTypes.remove(0); } // Set the default selected billing account type accountObjs.defaultBillingAccountType = 'existing'; // 'accountObjs.billingAccounts.dataObjects' contains // a list of billing account objects : List<Map<String, Object>> // Use this attribute to filter the billing accounts // Remove the first one accountObjs.billingAccounts.dataObjects.remove(0); // Set the default selected billing account accountObjs.defaultBillingAccountId = '2c92c0f94e001371014e00b527bf17a4'; return accountObjs; } global zqu.JSRemoteController.QuoteTypeObjects getAvailableQuoteTypes( zqu.JSRemoteController.QuoteTypeObjects quoteTypeObjs){ // 'quoteTypeObjs.quoteTypes' contains a list of all quote types: // 'new', 'amend', 'renew', 'cancel' // Remove the 'new' quote type to disallow // New Subscription quote being created if( quoteTypeObjs.billingAccountId == '2c92c0f94e001371014e00b527bf17a4'){ quoteTypeObjs.quoteTypes.remove(0); } // Set the default quote type to 'renew' quoteTypeObjs.defaultQuoteType = 'renew'; return quoteTypeObjs; } global zqu.JSRemoteController.SubscriptionObjects getAvailableSubscriptions( zqu.JSRemoteController.SubscriptionObjects subscriptionObjs){ // 'subscriptionObjs.subscriptions.dataObjects' contains // a list of subscription objects : List<Map<String, Object>> // Use this attribute to filter the subcriptions // Remove the last one subscriptionObjs.subscriptions.dataObjects.remove( subscriptionObjs.subscriptions.dataObjects.size() - 1); // Set the default subscription based on billing account if( subscriptionObjs.billingAccountId == '2c92c0f94e001371014e00b527bf17a4'){ subscriptionObjs.defaultSubscriptionId = '2c92c0f84e2efd45014e3e121c6e1a0b'; } // Set the default subscription based on the quote type if (subscriptionObjs.selectedSubscriptionType == 'renew') { subscriptionObjs.defaultSubscriptionId = '2c92c0f84e2efd45014e3e121c6e1a0c'; } return subscriptionObjs; } }
Test Class for Billing Account Plugin
The following is a APEX test class code sample for Billing Account Plugin. You can use the test class to achieve code coverage on the plugin in Salesforce.
@isTest public class SampleSelectBillingAccountPluginTest { @isTest static void testAvailableBillingAccounts() { Account acc = new Account(name='Test Account'); insert acc; Contact billTo = new Contact(FirstName = 'BillToFName', LastName = 'BillToLName'); billTo.accountId = acc.Id; Contact soldTo = new Contact(FirstName = 'SoldToFName', LastName = 'SoldToLName'); soldTo.accountId = acc.Id; Contact[] contacts = new List<Contact>{ billTo, soldTo }; insert contacts; zqu.JSRemoteController.ListData listData = new zqu.JSRemoteController.ListData(); listData.dataObjects = new List<Map<String, Object>>(); Map<String,Object> maptest = new Map<String,Object>(); maptest.put('Account',acc); listData.dataObjects.add(maptest); zqu.JsRemoteController.BillingAccountObjects accountObjects = new zqu.JsRemoteController.BillingAccountObjects(); accountObjects.billingAccounts = listData; accountObjects.opportunityId = '001o000000VNv02AAD'; accountObjects.billingAccountTypes = new List<String>{'amend','renew'}; accountObjects.sfdcAccountId = acc.Id; SampleSelectBillingAccountPlugin selectBAPlugin = new SampleSelectBillingAccountPlugin(); selectBAPlugin.getAvailableBillingAccounts(accountObjects); } @isTest static void testAvailableQuoteTypes() { Account acc = new Account(name='Test Account'); insert acc; zqu.JsRemoteController.QuoteTypeObjects quoteTypeObjs = new zqu.JsRemoteController.QuoteTypeObjects(); quoteTypeObjs.sfdcAccountId = acc.Id; quoteTypeObjs.billingAccountId = '2c92c0f94e001371014e00b527bf17a4'; quoteTypeObjs.quoteTypes = new List<String>{'amend','renew'}; SampleSelectBillingAccountPlugin selectBAPlugin = new SampleSelectBillingAccountPlugin(); selectBAPlugin.getAvailableQuoteTypes(quoteTypeObjs); } @isTest static void testAvailableSubscriptions() { Account acc = new Account(name='Test Account'); insert acc; zqu.JSRemoteController.ListData listData = new zqu.JSRemoteController.ListData(); listData.dataObjects = new List<Map<String, Object>>(); Map<String,Object> maptest = new Map<String,Object>(); maptest.put(String.valueOf(acc.Id),acc); listData.dataObjects.add(maptest); zqu.JsRemoteController.SubscriptionObjects subObjs = new zqu.JsRemoteController.SubscriptionObjects(); subObjs.sfdcAccountId = acc.Id; subObjs.selectedSubscriptionType = 'renew'; subObjs.billingAccountId = '2c92c0f94e001371014e00b527bf17a4'; subObjs.subscriptions = listData; SampleSelectBillingAccountPlugin selectBAPlugin = new SampleSelectBillingAccountPlugin(); selectBAPlugin.getAvailableSubscriptions(subObjs); } }