public void Execute(IJobExecutionContext context) { var dataMap = context.JobDetail.JobDataMap; string apiKey = dataMap.GetString("APIKey"); int dayInterval = dataMap.GetIntValue("dayInterval"); //Check API Key exists if (string.IsNullOrWhiteSpace(apiKey)) { return; } //Check all the custom fields have been created for the SendGrid marketing campaign. bool fieldsExist = SyncHelper.CheckCustomFields(apiKey); if (!fieldsExist) { return; } var rockContext = new RockContext(); var previouslySyncedPersonAliasIds = new PersonAliasHistoryService(rockContext).Queryable().AsNoTracking().Select(a => a.PersonAliasId); var notYetSynced = SyncHelper.FindNotYetSyncedPersonAlises(rockContext, previouslySyncedPersonAliasIds); var historicSyncMarker = RockDateTime.Now.AddDays(-dayInterval); var needReSyncPersonAliases = SyncHelper.FindResyncCandidates(rockContext, historicSyncMarker); int synCount = SyncHelper.SyncContacts(notYetSynced, apiKey); int reSyncCount = 0; if (needReSyncPersonAliases.Any()) { reSyncCount = SyncHelper.SyncContacts(needReSyncPersonAliases, apiKey, true); } context.Result = string.Format("{0} people synced for the first time, {1} people updated", synCount, reSyncCount); }