Guest User

Untitled

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