Example #1
0
        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.");
                }
            }
        }