Sample code for Multi Org plugin
This document provides sample code for a Multi Org plugin that filters organizations based on the Currency field in Account and Opportunity objects.
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);
}
}