Guest User

Untitled

a guest
Jan 11th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.62 KB | None | 0 0
  1. String query;
  2. String sObjectName;
  3. Map <String, List <String>> sObjectEmaiLFieldsMap = new Map <String, List <String>>();
  4.  
  5. //Call this method from the class that implements the SandboxPostCopy Interface or from Developer console
  6. global static void executeBatch() {
  7. Map <String, List <String>> sObjectEmaiLFieldsMap = getsObjectEmaiLFields();
  8.  
  9. if(!sObjectEmaiLFieldsMap.isEmpty()) {
  10. Database.executeBatch(new PrepareSandboxPostCopy_Batch(sObjectEmaiLFieldsMap));
  11. }
  12. }
  13.  
  14. /** BATCHABLE INTERFACE IMPLEMENTATION STARTS **/
  15. global PrepareSandboxPostCopy_Batch(Map <String, List <String>> sObjectFieldsMap) {
  16. //Get First Key In Map
  17. sObjectName = new List<String> (sObjectFieldsMap.keySet()).get(0);
  18.  
  19. sObjectEmaiLFieldsMap = sObjectFieldsMap;
  20. query = getSOQLString(sObjectName, sObjectEmaiLFieldsMap.get(sObjectName));
  21. }
  22.  
  23. global Database.QueryLocator start(Database.BatchableContext BC) {
  24. // system.debug('hellooo'+query);
  25.  
  26. return Database.getQueryLocator(query);
  27. }
  28.  
  29. global void execute(Database.BatchableContext BC, List<sObject> scope) {
  30.  
  31. for(sObject thisRecord : scope) {
  32. for(String thisField : sObjectEmaiLFieldsMap.get(sObjectName)) {
  33. String email = (String) thisRecord.get(thisField);
  34. if(String.isEmpty(email) || email.contains('.invalid') || email.contains('.noemail')) continue; //If empty or if contains .invalid then do not update
  35. thisRecord.put(thisField, email + '.invalid'); //Append invalid to the email
  36. }
  37. }
  38. Database.update(scope, false); //allow partial success
  39. }
  40.  
  41. global void finish(Database.BatchableContext BC) {
  42. //Remove the sObject (First Key) once the records for the sObject processed successfully
  43. sObjectEmaiLFieldsMap.remove(sObjectName);
  44. executeBatch(sObjectEmaiLFieldsMap);
  45. }
  46. /** BATCHABLE INTERFACE IMPLEMENTATION ENDS **/
  47.  
  48. public static Boolean isSandbox() {
  49. return [SELECT IsSandbox FROM Organization WHERE Id =: UserInfo.getOrganizationId()].IsSandbox;
  50. }
  51.  
  52. private static void executeBatch(Map <String, List <String>> sObjectFieldsMap) {
  53. if(!sObjectFieldsMap.isEmpty()) {
  54. Database.executeBatch(new PrepareSandboxPostCopy_Batch(sObjectFieldsMap));
  55. }
  56. }
  57.  
  58. private static String getSOQLString(String sObjectName, List<String> sObjectFields) {
  59.  
  60. String soqlQuery = 'SELECT {!sObjectFields} FROM {!objectTypeName} WHERE {!conditionals}';
  61.  
  62. List<String> conditionals = new List <String>();
  63. for (String thisField: sObjectFields) {
  64. conditionals.add(thisField + ' != NULL');
  65. }
  66.  
  67. soqlQuery = soqlQuery.replace('{!sObjectFields}', String.join(sObjectFields, ' ,'));
  68. soqlQuery = soqlQuery.replace('{!objectTypeName}', sObjectName);
  69. soqlQuery = soqlQuery.replace('{!conditionals}', String.join(conditionals, ' OR '));
  70.  
  71. if(!isSandbox()) soqlQuery = soqlQuery + ' LIMIT 0'; //For Non Sandbox (Production) Instance Do Not Update Records
  72. return soqlQuery;
  73. }
  74.  
  75. //Get all Queryable Objects and it's email fields
  76. private static Map <String, List <String>> getsObjectEmaiLFields() {
  77.  
  78. Map <String, List <String>> sObjectEmailFieldMap = new Map <String, List <String>>();
  79.  
  80. //Only pass the selected object, dynamically getting all objects may exceed APEX CPU Limit
  81. List<SObjectType> sObjectsToUpdate = new List<SObjectType>{ Account.SObjectType,
  82. Contact.SObjectType,
  83. Case.SObjectType,
  84. CampaignMember.SObjectType,
  85. Lead.SObjectType,
  86. Opportunity.SObjectType,
  87. Quote.SObjectType };
  88.  
  89. for(SObjectType sObjectType : sObjectsToUpdate) {
  90.  
  91. //Describe sObject
  92. DescribeSObjectResult sObjectDescribe = sObjectType.getDescribe();
  93.  
  94. String objectTypeName = sObjectDescribe.getName();
  95.  
  96. //Skip objects we cannot query or update
  97. if(!sObjectDescribe.isQueryable() || !sObjectDescribe.isUpdateable()) continue;
  98.  
  99. for(SObjectField sObjectField: sObjectDescribe.fields.getMap().values()) {
  100.  
  101. DescribeFieldResult thisField = sObjectField.getDescribe();
  102.  
  103. //Skip all non email fields
  104. if(thisField.getType() != Schema.DisplayType.EMAIL || !thisField.isFilterable() || !thisField.isUpdateable()) continue;
  105.  
  106. if(sObjectEmailFieldMap.containsKey(objectTypeName)) {
  107. sObjectEmailFieldMap.get(objectTypeName).add(thisField.getName());
  108. }
  109. else {
  110. sObjectEmailFieldMap.put(objectTypeName, new List <String> {thisField.getName()});
  111. }
  112. }
  113. }
  114. return sObjectEmailFieldMap;
  115. }
  116.  
  117. Contact conVar = new Contact();
  118. conVar.LastName ='Contact Test';
  119. conVar.AccountId =accVar.Id;
  120. conVar.Email = 'test@gmail.com';
  121. conVar.Other_Email__c = 'testother@gmail.com';
  122. INSERT conVar;
  123.  
  124. Case casVar = new Case();
  125. casVar.Origin ='Email';
  126. casVar.Status = 'New';
  127. // casVar.ContactEmail = 'test@gmail.com';
  128. casVar.SuppliedEmail = 'testother@gmail.com';
  129. INSERT casVar;
  130.  
  131. Campaign camVar = new Campaign();
  132. camVar.Name ='test';
  133. INSERT camVar;
  134.  
  135. CampaignMember newMemberVar = new CampaignMember();
  136. newMemberVar.CampaignId = camVar.Id;
  137. newMemberVar.ContactId = conVar.Id;
  138. // newMember.Email = 'test@gmail.com';
  139. INSERT newMemberVar;
  140.  
  141. Lead leadVar = new Lead();
  142. leadVar.LastName = 'testsds';
  143. leadVar.Status = 'New';
  144. leadVar.Company = 'test';
  145. leadVar.Email = 'test@gmail.com';
  146. INSERT leadVar;
  147.  
  148. Opportunity oppVar = new Opportunity();
  149. oppVar.Name = 'testsds';
  150. oppVar.AccountId = accVar.Id;
  151. oppVar.CloseDate = date.today();
  152. oppVar.StageName = 'Proposal';
  153. INSERT oppVar;
  154.  
  155. Quote quoteVar = new Quote();
  156. quoteVar.Name = 'testsds';
  157. // quoteVar.Account = accVar.Id;
  158. quoteVar.OpportunityId = oppVar.Id;
  159.  
  160.  
  161. Test.startTest();
  162.  
  163. Map<String, List<String>> sObjectFieldsMap = new Map<String, List<String>>();
  164. sObjectFieldsMap.put('Contact', new List<String>{'Email'});
  165. // sObjectFieldsMap.put('Lead', new List<String>{'Email'});
  166.  
  167. PrepareSandboxPostCopy_Batch obj = new PrepareSandboxPostCopy_Batch(sObjectFieldsMap);
  168. PrepareSandboxPostCopy_Batch.executeBatch();
  169. Id batchId = Database.executeBatch(obj);
  170.  
  171.  
  172. Contact ldVar = [Select Id, LastName, Email FROM Contact WHERE Id =: conVar.Id];
  173. system.debug('Contact ldVar Email'+ldVar.Email);
  174. //system.assertEquals('test@gmail.com.invalid', ldVar.Email);
  175.  
  176. Test.stopTest();
  177. }
Add Comment
Please, Sign In to add comment