Requirements :
The client wanted to add a member to campaign and when this happens the contact who's addedas a campainMember should create a dial-in-pin for a conference bridge so that a contact can dial in the bridge number and join a conference
Step 1 : The Trigger
This trigger calls the helper class method
/* * Name : TriggerOnCampainMember * Author : * Description : Trigger to update CampaignMember. * * Maintenance History: * 03/06/2015 - Piyush Singhal - 2.0 - Created * */ trigger TriggerOnCampainMember on CampaignMember (after update,after insert,before insert) { if(trigger.isAfter){ // Version 2.0 Start if(trigger.isInsert){ TriggerHelper.createBridgePinForValidCampainMenmbers(trigger.newmap); } // Version 2.0 End } }
Step 2 : The Helper Class
The Helper class method createBridgePinForValidCampainMenmbers(trigger.newmap);
/* * Description : Method to run batch class when campain members are inserted in a campain. * Param 1 : mapOfCampainMembers(map of inserted campain records) * Created : Created with version 2.0 */ public static void createBridgePinForValidCampainMenmbers(map<id,CampaignMember> mapOfCampainMembers){ list<CampaignMember> listOfCampainMembers = new list<CampaignMember>(); listOfCampainMembers = [SELECT Id,Contact.Dial_in_Unique_PIN__c,Campaign.RecordTypeID FROM CampaignMember WHERE id IN:mapOfCampainMembers.keyset()]; RecordType RecordTypeId = [SELECT id,name,SobjectType from RecordType WHERE SobjectType ='Campaign' AND name = ' Events' Limit 1]; list<string> listOfContactId = new list<string>(); for(CampaignMember eachCM:listOfCampainMembers){ system.debug('eachCM11111111'+eachCM); if((eachCM.Contact.Dial_in_Unique_PIN__c ==null||eachCM.Contact.Dial_in_Unique_PIN__c =='') && eachCM.Campaign.RecordTypeID == RecordTypeId.id){ listOfContactId.add(eachCM.ContactId); } } if(listOfContactId.size()>0){ Database.executeBatch(new BatchClassToGetTurboBridgePin(listOfContactId),1); } }
We are passing list of contactId to the constructor of the batch classStep 3 : The Batch Class
The batch Class method BatchClassToGetTurboBridgePin(listOfContactId)
/* * Name : BatchClassToGetTurboBridgePin * Author : * Description : Batch class to get TurboBridge pin for each contact. * Test Class : BatchClassGetTurboBridgePin_Test * Maintenance History: * 10/06/2015 - Piyush Singhal - 1.0 - Created */ global with sharing class BatchClassToGetTurboBridgePin implements Database.Batchable<sObject>,Database.AllowsCallouts,Database.stateful{ global list<id> listOfContactId = new list<id>(); global list<Contact> listOfContactToUpdate = new list <Contact>(); global BatchClassToGetTurboBridgePin(List<id> listOfContact){ listOfContactId = listOfContact ; } global Database.QueryLocator start(Database.BatchableContext BC){ return DataBase.getQueryLocator([SELECT Id,FirstName,LastName,Title,name,Dial_in_Unique_PIN__c,RecordTypeId,Account.name,TB_ToUpdateNameInTB__c FROM Contact WHERE Id IN: listOfContactId]); } global void execute(Database.BatchableContext BC,List<sObject> scope){ system.debug('Batch Class Execute'); system.debug('Batch Class Execute'+scope); for(sObject Eachscope:scope){ listOfContactToUpdate.add(TriggerHelper.insertUpdatePinInTurboBridge1((Contact)Eachscope)); } } global void finish(Database.BatchableContext BC){ try{ update listOfContactToUpdate; }catch(Exception ex){ System.debug('*****Excetion in batch class******'+ex); } system.debug('Batch Class Finish'); } }
Step 3 : The Callout method 1 - Getting last Inserted PIN
/* * Description : Does a callout on turbobridge to get the last inserted pin. * Exception : Handeling by try & catch * Created : Created with version 2.0 * Modification : Version 3.0 - updated the method to get the maximum number of inserted pin then * do a callout again with a parameter offst to get the last inserted pin * Callouts : 2 * API Doc : https://api.turbobridge.com/3.0/ * Return : Returns the last pin inserted on turbobridge as a string */ public static string getLastInsertedPin(){ AlgoWorks_TurboBridgeIntegration__c TB_variable = AlgoWorks_TurboBridgeIntegration__c.getValues('Value'); System.debug('TB_variable'+TB_variable); String body = 'outputFormat=json'; Integer offSetValue = 0 ; list<integer> listOfUserIdFromTB = new list<integer>(); if(TB_variable != null){ body = body +'&authAccountEmail='+TB_variable.TB_username__c; body = body +'&authAccountPassword='+TB_variable.TB_password__c; body = body +'&authAccountPartnerID=turbobridge'; body = body +'&authAccountAccountID='+TB_variable.TB_accountId__c; body = body +'&requestType=getBridgeUserIDs'; body = body +'&conferenceID='+TB_variable.TB_conferenceIdA__c; } HttpRequest req = new HttpRequest(); req.setEndpoint('https://api.turbobridge.com/Bridge'); req.setMethod('GET'); req.setBody(body); Http h = new Http(); HttpResponse res; if(test.isRunningTest()){ req.setEndpoint('https://www.google.com'); res =new Httpresponse(); } try{ res = h.send(req); }catch(Exception ex){ System.debug('*************Exception in callout*************'+ex); } if(!test.isRunningTest()){ //System.debug('values'+res.getBody()); } try{ AlgoWorks_TurboBrigeResponse response = (AlgoWorks_TurboBrigeResponse)JSON.deserialize(string.valueOf(res.getBody()), AlgoWorks_TurboBrigeResponse.class); for (AlgoWorks_TurboBrigeResponse.requestItem ri : response.responseList.requestItem) { System.debug('Piyush Result'+ri.result.totalResults); offSetValue = ri.result.totalResults; } }catch(Exception ex){ System.debug('**********Exception in deserializing the pin******** '+ex); } //Start Verion 3.0 Callout with offset body = body+'&startOffset='+string.valueOf(offSetValue-1)+'&'; body = body+'resultCount=1000'; system.debug('Piyush Body'+body); HttpRequest req2 = new HttpRequest(); req2.setEndpoint('https://api.turbobridge.com/Bridge'); req2.setMethod('GET'); req2.setBody(body); Http y = new Http(); HttpResponse res2; if(test.isRunningTest()){ req2.setEndpoint('https://www.google.com'); res2 =new Httpresponse(); } try{ res2 = y.send(req2); }catch(Exception ex){ System.debug('*************Exception in callout*************'+ex); } if(!test.isRunningTest()){ //System.debug('values'+res2.getBody()); } try{ AlgoWorks_TurboBrigeResponse response = (AlgoWorks_TurboBrigeResponse)JSON.deserialize(string.valueOf(res2.getBody()), AlgoWorks_TurboBrigeResponse.class); for (AlgoWorks_TurboBrigeResponse.requestItem ri : response.responseList.requestItem) { for (AlgoWorks_TurboBrigeResponse.bridgeUserID u : ri.result.bridgeUserID) { listOfUserIdFromTB.add(integer.valueOf(u.userID)); } } }catch(Exception ex){ System.debug('**********Exception in deserializing the pin******** '+ex); } //End Version 3.0 Callout with offset listOfUserIdFromTB.sort(); system.debug('listOfUserIdFromTB'+listOfUserIdFromTB); if(listOfUserIdFromTB.size()>0){ return string.valueOf((listOfUserIdFromTB.get(listOfUserIdFromTB.size()-1))+1); } else{ return null; } }
Step 3 : The Callout method 2 - Creating a pin for a bridge
/* * Description : Method to update ranking on campain members from Contacts. * Param 1 : contactToUpdate(list of contacts to add to turbobridge and update Pin) * Exception : Handeling by try & catch * Created : Created with version 1.0 * Callouts : 1 * API Doc : https://api.turbobridge.com/3.0/ * Return : returns the updated contact with the pin */ public static Contact insertUpdatePinInTurboBridge1(Contact contactToUpdate){ Contact con = contactToUpdate; system.debug('***TriggerClass**up*'+con.Dial_in_Unique_PIN__c+'>>>>>>>>>>>>>>>'+contactToUpdate); Database.SaveResult results ; RecordType contactRecordType = [SELECT id,name,SobjectType from RecordType WHERE SobjectType ='Contact' AND name = 'Industry Participant' Limit 1]; AlgoWorks_TurboBridgeIntegration__c TB_variable = AlgoWorks_TurboBridgeIntegration__c.getValues('Value'); if(!con.TB_ToUpdateNameInTB__c || con.Dial_in_Unique_PIN__c==null || con.Dial_in_Unique_PIN__c == ''){ con.Dial_in_Unique_PIN__c = getLastInsertedPin(); } else{ con.TB_ToUpdateNameInTB__c = false; } JSONGenerator gen = JSON.createGenerator(true); gen.writeStartObject(); gen.writeFieldName('request'); gen.writeStartObject(); gen.writeFieldName('authAccount'); gen.writeStartObject(); System.debug('>>>>>>>>>>>>>>>TB_variable'+TB_variable); System.debug('>>>>>>>>>>>>>>>TB_variable.TB_username__c'+TB_variable.TB_username__c); gen.writeStringField('email', TB_variable.TB_username__c); gen.writeStringField('password', TB_variable.TB_password__c); gen.writeStringField('partnerID', 'turbobridge'); gen.writeStringField('accountID', TB_variable.TB_accountId__c); gen.writeEndObject(); gen.writeFieldName('requestList'); gen.writeStartArray(); gen.writeStartObject(); gen.writeFieldName('setBridgeUserID'); gen.writeStartObject(); gen.writeStringField('conferenceID',TB_variable.TB_conferenceIdA__c); System.debug('>>>>>>>>>>>>>>>>>>>>>>>>>>contactToUpdate'+contactToUpdate); if(test.isRunningTest()){ contactToUpdate.Dial_in_Unique_PIN__c='1'; } gen.writeStringField('userID', contactToUpdate.Dial_in_Unique_PIN__c); gen.writeStringField('name', getValidNameForTurboBridgePin(contactToUpdate)); gen.writeStringField('hostFlag',(contactToUpdate.RecordTypeId==contactRecordType.id?'1':'0')); gen.writeEndObject(); gen.writeEndObject(); gen.writeStartObject(); gen.writeFieldName('setBridgeUserID'); gen.writeStartObject(); gen.writeStringField('conferenceID',TB_variable.TB__c); gen.writeStringField('userID', contactToUpdate.Dial_in_Unique_PIN__c); gen.writeStringField('name', getValidNameForTurboBridgePin(contactToUpdate)); gen.writeStringField('hostFlag',(contactToUpdate.RecordTypeId==contactRecordType.id?'1':'0')); gen.writeEndObject(); gen.writeEndObject(); //setBridge gen.writeEndArray(); gen.writeEndObject(); gen.writeEndObject(); String generate = gen.getAsString(); HttpRequest req = new HttpRequest(); req.setEndpoint('https://api.turbobridge.com/Bridge'); req.setHeader('Content-Type', 'application/json'); req.setMethod('POST'); req.setBody(generate); Http h = new Http(); HttpResponse res ; try{ res = h.send(req); }catch(exception ex){ System.debug('********Exception in callout************'+ex); } if(!test.isRunningTest()){ System.debug(res.getBody()); } system.debug('***TriggerClass***'+contactToUpdate.Dial_in_Unique_PIN__c); con.TB_ToUpdateNameInTB__c = false; return con; } /* * Description : Method to generate a name to be inserted in turbobridge. * Param 1 : contactVariable contact to be inserted in turbobridge. * Created : Created with version 2.0 * Return : Returns the name to be inserted as string. */ public static string getValidNameForTurboBridgePin(Contact contactVariable){ return contactVariable.FirstName+' '+contactVariable.LastName+' '+' ('+contactVariable.Account.name+' - '+contactVariable.Title+')'; }
No comments:
Post a Comment