Skip to main content

Use Multi-Org Plugin

Zuora

Use Multi-Org Plugin

As a Salesforce Administrator, you can use the Multi Org Plugin to filter records based on the Account or Opportunity record field. Use the IMultiOrgSelectionPlugin in the MultiOrgSelectionPlugin component to customize the org selection process.

Procedure

  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(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) {
                        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);
    }
}