protected override void ExecuteLogic() { var targetRef = (EntityReference)Context.InputParameters["Target"]; if (targetRef.LogicalName == CustomJobLog.EntityLogicalName) { Log.Log("Processing Log deletion ..."); var jobLog = new CustomJobLog { Id = targetRef.Id }; jobLog.LoadRelation(CustomJobLog.RelationNames.CustomJobFailedTargetsOfLogEntry, Service); var failures = jobLog.CustomJobFailedTargetsOfLogEntry; if (failures != null) { Log.Log($"Found {failures.Length} failed job entries."); foreach (var failure in failures) { Log.Log($"Deleting '{failure.Id}' ..."); Service.Delete(CustomJobFailedTarget.EntityLogicalName, failure.Id); Log.Log($"Deleted '{failure.Id}'."); } } } }
private void LogRunStatus(JobRunStatus runStatus) { if (!runStatus.IsSuccess && runStatus.RunTargetFailures?.Any() == true) { runStatus.LatestRunMessage = "Failed run.\r\n\r\nFirst Exception: " + runStatus.RunTargetFailures.FirstOrDefault()?.FailureMessage; } else { runStatus.LatestRunMessage = runStatus.LatestRunMessage ?? (runStatus.IsSuccess ? "Successful run." : "Failed run."); } log.Log($"Updating latest run message: '{runStatus.LatestRunMessage}' ...", LogLevel.Debug); log.Log($"Updating latest date: '{Job.TargetDate ?? DateTime.UtcNow}' UTC ...", LogLevel.Debug); Service.Update( new CustomJob { Id = Job.Id, LatestRunMessage = runStatus.LatestRunMessage, PreviousTargetDate = Job.TargetDate ?? DateTime.UtcNow }); log.Log($"Updated latest run message: '{runStatus.LatestRunMessage}'."); log.Log($"Updated latest date: '{Job.TargetDate ?? DateTime.UtcNow}' UTC."); if (Job.GenerateLogs == true) { log.Log("Creating log entry ...", LogLevel.Debug); var logEntry = new CustomJobLog { Message = DateTime.Now + ": " + (runStatus.IsSuccess ? "Successful run." : "Failed run."), ExecutionDate = Job.TargetDate ?? DateTime.UtcNow, ExecutionFullMessage = runStatus.LatestRunMessage, CustomJob = Job.Id, StatusReason = runStatus.IsSuccess ? CustomJobLog.StatusReasonEnum.Success : CustomJobLog.StatusReasonEnum.Failure }; if (runStatus.RunTargetFailures?.Any() == true) { runStatus.RunTargetFailures.ForEach(failure => failure.CustomJob = null); logEntry.CustomJobFailedTargetsOfLogEntry = runStatus.RunTargetFailures.ToArray(); } Service.Create(logEntry); log.Log("Created log entry."); if (runStatus.ParentId.HasValue) { logEntry.Message += " [Sub-Job]"; logEntry.CustomJob = runStatus.ParentId.Value; Service.Create(logEntry); log.Log("Created log entry in parent."); } } }