Welcome to Zuora Product Documentation

Explore our rich library of product information

Use Multi-Org Plugin

As a Salesforce Administrator, use the Multi Org Plugin to filter records by the Currency field in Account or Opportunity objects. Customize the org selection process with the IMultiOrgSelectionPlugin interface.

  1. Create a global plugin interface that implements zqu.MultiOrgSelectionPlugin.IMultiOrgSelectionPlugin.
  2. Register and activate the plugin.
    1. Navigate to Zuora Config > Quote Studio Settings > Plugins.
    2. Enable the Multi Org Plugin toggle and add the class name of your custom plugin.
  3. Click Save.

    Sample code

    The following sample code filters the orgs based on the Currency field in Accounts and Opportunity objects, assuming these objects have a Currency field.
    /* Sample code is created with assumption that Account and Opportunity object has a Currency field */
    
    global class SampleMultiOrgPlugin implements 
    zqu.MultiOrgSelectionPlugin.IMultiOrgSelectionPlugin {
        global List<sobject>
    getOrganizations(zqu.MultiOrgSelectionPlugin.PluginContext pluginContext) {
            List<sobject> filteredOrgs = new List<Sobject>();
            system.debug('pluginContext.opportunityId :'+pluginContext.opportunityId);
            system.debug('pluginContext.sfdcAccountId :'+pluginContext.accountId);
            if(pluginContext.opportunityId != null && pluginContext.opportunityId != '') {
                String oppId = pluginContext.opportunityId;
                List<Opportunity> oppList =  [select id, zqu__Currency__c from Opportunity where Id = :oppId];
               
                if(oppList.size() > 0){
                    for (Sobject sobj : pluginContext.organizations) {
                        if (sobj.get('Zuora__Functional_Currency__c') == oppList[0].zqu__Currency__c)//Field that is being filtered should be in selection list of multi org list on popup(Zuora__Multi_Org_Display_Fields)
                        {
                            filteredOrgs.add(sobj);
                        }
                    }
                }
            }
            else if(pluginContext.accountId != null && pluginContext.accountId != '') {
                String accountId = pluginContext.accountId;
                List<Account> accList =  [select id, zqu__Currency__c from Account where Id = :accountId];
                if(accList.size() > 0){
                    for (Sobject sobj : pluginContext.organizations) {
                        if (sobj.get('Zuora__Functional_Currency__c') == accList[0].zqu__Currency__c) {
                            filteredOrgs.add(sobj);
                        }
                    }
                }
            }
                
            return filteredOrgs;
        }
    }
    Test Class for Sample Code
    @isTest
    public class SampleMultiOrgPluginTest {
        @testSetup
        private static void setup() {
            Zuora__Organization__c zuoraOrg = new Zuora__Organization__c();
            zuoraOrg.Name = 'Test Org';
            zuoraOrg.Zuora__External_Id__c = 'org-123';
            zuoraOrg.Zuora__Functional_Currency__c = 'USD';
            insert zuoraOrg;
            
            Account acct = new Account(Name = 'test Account');
            insert acct;
            
            Opportunity opp = new Opportunity(Name = 'test Opp', AccountId = acct.Id);
            opp.StageName = 'Closed Won';
            opp.CloseDate = System.today();
            insert opp;
        }
        
        @IsTest
        public static void testGetAvailableOrgOpp(){
            String oppId = [select id from Opportunity limit 1].Id;
            List<Zuora__Organization__c> lstOrgRecords = [select id,Zuora__Functional_Currency__c from Zuora__Organization__c];
            SampleMultiOrgPlugin pluginObj  = new SampleMultiOrgPlugin();
            MultiOrgSelectionPlugin.PluginContext pluginContext = new MultiOrgSelectionPlugin.PluginContext();
            pluginContext.accountId = null;
            pluginContext.opportunityId = oppId;
            pluginContext.organizations = lstOrgRecords;
            pluginObj.getOrganizations(pluginContext);
        }
        
        @IsTest
        public static void testGetAvailableOrg(){
            String accountId = [select id from Account limit 1].Id;
            List<Zuora__Organization__c> lstOrgRecords = [select id,Zuora__Functional_Currency__c from Zuora__Organization__c];
            SampleMultiOrgPlugin pluginObj  = new SampleMultiOrgPlugin();
            MultiOrgSelectionPlugin.PluginContext pluginContext = new MultiOrgSelectionPlugin.PluginContext();
            pluginContext.accountId = accountId;
            pluginContext.opportunityId = null;
            pluginContext.organizations = lstOrgRecords;
            pluginObj.getOrganizations(pluginContext);
        }
    }