From f90c63155656928b86f1ce1d91a134de3d12d2b9 Mon Sep 17 00:00:00 2001
From: Li Jun <buli@deloitte.com.cn>
Date: 星期三, 27 四月 2022 18:26:41 +0800
Subject: [PATCH] SyncAContact0427
---
force-app/main/default/classes/SyncAccountContactToAWS.cls | 61 ++++++++++++++++++++++++++----
1 files changed, 53 insertions(+), 8 deletions(-)
diff --git a/force-app/main/default/classes/SyncAccountContactToAWS.cls b/force-app/main/default/classes/SyncAccountContactToAWS.cls
index 476cdba..50e9478 100644
--- a/force-app/main/default/classes/SyncAccountContactToAWS.cls
+++ b/force-app/main/default/classes/SyncAccountContactToAWS.cls
@@ -7,25 +7,35 @@
* 04/22/2022 - Bubba Li - Initial Code.
*
* */
-global class SyncAccountContactToAWS implements Database.Batchable<SObject>,Database.AllowsCallouts{
+global class SyncAccountContactToAWS implements Schedulable,Database.Batchable<SObject>,Database.AllowsCallouts{
+
global String query;
-
+ global String scheduleId{set;get;}
global SyncAccountContactToAWS(String query) {
this.query = query;
}
global SyncAccountContactToAWS() {
- this.query = 'SELECT id,Doctor_Division1__c,Doctor_Division1_Encrypted__c,Name,Name_Encrypted__c,Type__c,Type_Encrypted__c,AWS_Data_Id__c,Contact__c, Contact__r.Doctor_Division1_Encrypted__c,Contact__r.LastName_Encrypted__c, Contact__r.Type_Encrypted__c FROM Agency_Contact__c WHERE AWS_Data_Id__c =\'\' And Contact__c != null';
+ this.query = 'SELECT id,Doctor_Division1__c,Doctor_Division1_Encrypted__c,Name,Name_Encrypted__c,Type__c,Type_Encrypted__c,AWS_Data_Id__c,Contact__c, Contact__r.Doctor_Division1_Encrypted__c,Contact__r.LastName_Encrypted__c, Contact__r.Type_Encrypted__c FROM Agency_Contact__c WHERE AWS_Data_Id__c =\'\' And Contact__c != null order by lastmodifieddate desc';
+ }
+ global SyncAccountContactToAWS(String query,String scId) {
+ if(String.isBlank(query)||String.isEmpty(query)){
+ this.query = 'SELECT id,Doctor_Division1__c,Doctor_Division1_Encrypted__c,Name,Name_Encrypted__c,Type__c,Type_Encrypted__c,AWS_Data_Id__c,Contact__c, Contact__r.Doctor_Division1_Encrypted__c,Contact__r.LastName_Encrypted__c, Contact__r.Type_Encrypted__c FROM Agency_Contact__c WHERE AWS_Data_Id__c =\'\' And Contact__c != null order by lastmodifieddate desc';
+ }else{
+ this.query = query;
+ }
+ system.debug('This query from Batch:'+this.query);
+ this.scheduleId = scId;
}
global Database.QueryLocator start(Database.BatchableContext bc) {
- system.debug('Query by custom soql:'+this.query);
+ system.debug('Query by custom soql:'+this.query);
return Database.getQueryLocator(this.query);
}
global void execute(Database.BatchableContext BC, list<Agency_Contact__c> scope) {
if(scope!=null && scope.size()>0){
for(Agency_Contact__c aContact:scope){
- aContact.Doctor_Division1_Encrypted__c = aContact.Contact__r.Doctor_Division1_Encrypted__c;
- aContact.Name_Encrypted__c = aContact.Contact__r.LastName_Encrypted__c;
- aContact.Type_Encrypted__c = aContact.Contact__r.Type_Encrypted__c;
+ aContact.Doctor_Division1_Encrypted__c = aContact.Contact__c!=null&&aContact.Contact__r.Doctor_Division1_Encrypted__c!=''?aContact.Contact__r.Doctor_Division1_Encrypted__c:'';
+ aContact.Name_Encrypted__c = aContact.Contact__c!=null&&aContact.Contact__r.LastName_Encrypted__c!=''?aContact.Contact__r.LastName_Encrypted__c:'';
+ aContact.Type_Encrypted__c = aContact.Contact__c!=null&&aContact.Contact__r.Type_Encrypted__c!=''?aContact.Contact__r.Type_Encrypted__c:'';
aContact.AWS_Data_Id__c = '';
}
system.debug('Agency Contact Info to AWS:'+JSON.serialize(scope));
@@ -33,7 +43,42 @@
}
}
+ global void execute(SchedulableContext SC) {
+ system.debug('this query from schedule execute method:'+this.query);
+ Id execBTId = Database.executeBatch(new SyncAccountContactToAWS(this.query,SC.getTriggerId()), 1);
+ system.debug('Batch Job Id:'+execBTId);
+ }
+
+ public static void assignOnceOneMinuteLater(List<Agency_Contact__c> acList) {
+ system.debug('ACList:'+JSON.serialize(acList));
+ String hour = String.valueOf(Datetime.now().hour());
+ String min = String.valueOf(Datetime.now().minute() + 1);
+ String ss = String.valueOf(Datetime.now().second());
+ //parse to cron expression
+ String nextFireTime = ss + ' ' + min + ' ' + hour + ' * * ?';
+ //Prepare the soql to agency account
+ String soqlForAgencyAccount = '';
+ if(acList!=null && acList.size()>0){
+ soqlForAgencyAccount = 'SELECT id,Doctor_Division1__c,Doctor_Division1_Encrypted__c,Name,Name_Encrypted__c,Type__c,Type_Encrypted__c,AWS_Data_Id__c,Contact__c, Contact__r.Doctor_Division1_Encrypted__c,Contact__r.LastName_Encrypted__c, Contact__r.Type_Encrypted__c FROM Agency_Contact__c WHERE id in ';
+ List<String> acIds = new List<String>();
+ for(Agency_Contact__c ac:acList ){
+ acIds.add(ac.Id);
+ }
+ soqlForAgencyAccount = soqlForAgencyAccount + '(\'' + String.join(acIds, '\', \'') + '\')';
+ }
+ system.debug('SOQL for agency:'+soqlForAgencyAccount);
+ SyncAccountContactToAWS s = new SyncAccountContactToAWS(soqlForAgencyAccount);
+ System.schedule('SyncAccountContactToAWS:' + String.valueOf(Datetime.now()), nextFireTime, s);
+ }
+
global void finish(Database.BatchableContext BC) {
-
+ system.debug('Finish batch job Id:'+BC.getJobId());
+ AsyncApexJob a = [SELECT Id, Status, NumberOfErrors, JobItemsProcessed, TotalJobItems, CreatedBy.Email FROM AsyncApexJob WHERE Id = :BC.getJobId()];
+ //then use the active job id and abort it
+ system.abortJob(a.id);
+ system.debug('Finish schedule job Id:'+scheduleId);
+ if(scheduleId!=null&&scheduleId!=''){
+ system.abortJob(scheduleId);
+ }
}
}
\ No newline at end of file
--
Gitblit v1.9.1