public void AddTrigger(JobTrigger trigger) { UnitOfWork.JobTriggerRepository.Insert(trigger); UnitOfWork.Save(); //DateTimeOffset runDate = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow); //DateTimeOffset runDate = DateBuilder.TodayAt(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second); //var jobkey = new JobKey(trigger.Job.JOB_NAME, trigger.Job.JOB_GROUP); //ITrigger triggerBuilder = TriggerBuilder.Create() // .StartAt(runDate) // .ForJob(jobkey) // .Build(); //Scheduler.ScheduleJob(triggerBuilder); }
public void AddJob(Job job, JobTrigger jobTrigger) { IJobDetail jobDetail = JobBuilder.Create<SqlScheduledJob>() .WithIdentity(job.JOB_NAME, job.JOB_GROUP) .Build(); jobDetail.JobDataMap.Put("TriggerId",job.JobId); DateTimeOffset runDate = DateBuilder.TodayAt(((DateTime)jobTrigger.StartExecutionDate).Hour, ((DateTime)jobTrigger.StartExecutionDate).Minute, ((DateTime)jobTrigger.StartExecutionDate).Second); ITrigger trigger = TriggerBuilder.Create() .StartAt(runDate) .Build(); Scheduler.ScheduleJob(jobDetail, trigger); }
public void AddQuartzJob(Job job, JobTrigger jobTrigger) { var jobDetail = JobBuilder.Create<SqlScheduledJob>() .WithIdentity(job.JobId.ToString(), jobTrigger.JobTriggerId.ToString()) .Build(); jobDetail.JobDataMap.Put("TriggerId", jobTrigger.JobTriggerId.ToString()); DateTimeOffset runDate = DateBuilder.TodayAt((jobTrigger.ScheduledStartExecutionDate).Hour, (jobTrigger.ScheduledStartExecutionDate).Minute, (jobTrigger.ScheduledStartExecutionDate).Second); ITrigger trigger = TriggerBuilder.Create() .WithIdentity(jobTrigger.JobTriggerId.ToString()) .ForJob(jobDetail) .StartAt(runDate) .Build(); if (Status() == SchedulerStatus.Apagado) throw new QuartzException("El servicio scheduler se encuentra apagado"); Scheduler.ScheduleJob(jobDetail, trigger); }
/// <summary> /// Si el job es de tipo Automático crea un trigger en CGControlPanel y en Quartz. Se ejecuta automáticamente. /// Si el job es de tipo manual se crea un trigger DESHABILITADO en CGControlPanel. Se ejecutará luego manualmente desde el menú contextual correspondiente -que disparará ExecuteManualJob-. /// </summary> /// <param name="job"></param> /// <param name="trigger"></param> public void AddTrigger(Job job, JobTrigger trigger) { // OJO: Si el trigger viene deshabilitado NO se lo debe agregar al Quartz, es el caso de agendamiento de un job manual job.Triggers.Add(trigger); trigger.Job = job; trigger.JobId = job.JobId; if (trigger.Validate()) { UnitOfWork.JobTriggerRepository.Insert(trigger); UnitOfWork.JobsRepository.Update(job); UnitOfWork.Save(); if (trigger.Enabled) { AddQuartzJob(job, trigger); } } else { Utils.Validation.Helper.BuildValidationErrors(trigger.ValidationErrors); } }
protected void FillUI(JobTrigger jobTrigger) { var sqlJobTrigger = (SqlJobTrigger)jobTrigger; lblProcessName.Text = "Proceso: " + jobTrigger.Job.JobId + " - " + jobTrigger.Job.Name; lblProcessOwner.Text = "Usuario: " + jobTrigger.Job.CreatedBy; lblDescription.Text = "Descripción: " + jobTrigger.Job.Description; txtInputValues.Text = sqlJobTrigger.Job.FixedParametersProcedure + sqlJobTrigger.XmlFormInputValues; lblTrigger.Text = "Trigger: " + jobTrigger.JobTriggerId; lblRecords.Text = "Registros: " + sqlJobTrigger.RecordsAffected.ToString() + "/" + sqlJobTrigger.RecordsProcessed.ToString(); lblDaily.Text = "Frecuencia: " + (sqlJobTrigger.Job.IsDaily ? "DIARIA" : ""); lblComments.Text = "Comentarios: " + sqlJobTrigger.Job.Comments; lblProcessType.Text = "Tipo de Proceso: " + sqlJobTrigger.Job.JobType; // AREA DE INFORMACION DE EJECUCION if (!sqlJobTrigger.StartExecutionDate.HasValue) { tabControl.ActiveTabPage.Visible = false; tabControl.ActiveTabIndex = 0; if (Request.QueryString["delete"] != "1") { btnDeleteTrigger.Visible = false; } } // TODO: Poner un tag en el xmlResultado para mostrar datos luego de que arme la tabla. // InputValues es el resultado de la ejecución del stored de Configuración que arma el Form Dinámico txtXmlTableInputParameters.Text= sqlJobTrigger.XmlTableInput; txtXmlTableOutput.Text = sqlJobTrigger.XmlTableOutput; txtExecutionLog.Text = sqlJobTrigger.XmlTableExecutionLog; Utils.UI.Helper.BuildASPTable(sqlJobTrigger.XmlResult, tblResult); lblStartExecutionDate.Text = "Ejecución: " + ((sqlJobTrigger.StartExecutionDate.HasValue) ? sqlJobTrigger.StartExecutionDate.Value.ToString("dd/MM/yyyy hh:mm:ss") : ""); lblEndExecutionDate.Text = ((sqlJobTrigger.EndExecutionDate.HasValue) ? sqlJobTrigger.EndExecutionDate.Value.ToString("dd/MM/yyyy hh:mm:ss") : ""); }
protected void FillReport(JobTrigger jobTrigger) { var sqlJobTrigger = (SqlJobTrigger)jobTrigger; /* DATOS JOB */ lblProcessName.Text = jobTrigger.Job.Name + " (" + jobTrigger.Job.Group + ") - " + jobTrigger.Job.JobId + " -" ; lblProcessOwner.Text = jobTrigger.Job.CreatedBy; lblDescription.Text = jobTrigger.Job.Description; lblInputValues.Text = Utils.UI.Helper.FormatXml(sqlJobTrigger.Job.InputXmlFixedParameters + sqlJobTrigger.InputFormXmlValues); lblComments.Text = sqlJobTrigger.Job.Comments; lblProcessType.Text = sqlJobTrigger.Job.JobType.ToString(); Weekdays weekdays = new Weekdays(); weekdays.AllDays = Convert.ToByte(((SqlJob)sqlJobTrigger.Job).Weekdays); if (weekdays.AllDays == 0) lblWeekDays.Text = "No Diaria"; else lblWeekDays.Text = Utils.UI.Helper.BuildPopulateDaysLegend(weekdays); lblServerName.Text = ((SqlJob)sqlJobTrigger.Job).ServerName; lblDataBaseName.Text = ((SqlJob)sqlJobTrigger.Job).DatabaseName; lblStoredProcedure.Text = ((SqlJob)sqlJobTrigger.Job).ExecProcedure; lblInputXmlFixedParameters.Text = Utils.UI.Helper.FormatXml(sqlJobTrigger.Job.InputXmlFixedParameters); lblInputXmlFixedParameters.Text = lblInputXmlFixedParameters.Text.Replace("<ROOT>", "").Replace("</ROOT>", ""); if (sqlJobTrigger.Job.JobType == JobType.Automático) { lblScheduledStartExecutionDate.Text = sqlJobTrigger.ScheduledStartExecutionDate.ToString("dd/MM/yyyy HH:mm:ss"); if (sqlJobTrigger.Job.AutomaticProcessTime.HasValue && sqlJobTrigger.Job.Weekdays != 0) { lblAutomaticProcessTime.Text = "Hora Ejecución: " + sqlJobTrigger.Job.AutomaticProcessTime.Value.ToString("HH:mm:ss"); } else lblAutomaticProcessTime.Text = "-"; } else { lblScheduledStartExecutionDate.Text = sqlJobTrigger.ScheduledStartExecutionDate.ToString("dd/MM/yyyy"); lblInputSchemaProcedure.Text = sqlJobTrigger.Job.InputSchemaProcedure; lblAutomaticProcessTime.Text = "-"; } /* FIN DATOS JOB */ /* DATOS JOBTRIGGER */ if (String.IsNullOrEmpty(sqlJobTrigger.OutputExecutionStatus)) lblOutputStatus.Text = "NO Ejecutado"; else lblOutputStatus.Text = sqlJobTrigger.OutputExecutionStatus; lblTrigger.Text = jobTrigger.JobTriggerId.ToString(); if ((sqlJobTrigger.RecordsAffected == 0) && (sqlJobTrigger.RecordsProcessed == 0)) lblRecords.Text = "- / -"; else lblRecords.Text = sqlJobTrigger.RecordsAffected.ToString() + "/" + sqlJobTrigger.RecordsProcessed.ToString(); lblOuputExecutionLog.Text = string.IsNullOrEmpty(sqlJobTrigger.OutputExecutionLog) ? "SIN DATOS PARA MOSTRAR" : sqlJobTrigger.OutputExecutionLog; lblOutputResult.Text = string.IsNullOrEmpty(sqlJobTrigger.OutputExecutionResult) ? "SIN DATOS PARA MOSTRAR" : sqlJobTrigger.OutputExecutionResult; lblOutputExecutionTrace.Text = string.IsNullOrEmpty(sqlJobTrigger.OutputExecutionTrace) ? "SIN DATOS PARA MOSTRAR" : sqlJobTrigger.OutputExecutionTrace; lblJobTriggerStatus.Text = sqlJobTrigger.JobTriggerStatus.ToString().ToUpper(); lblStartExecutionDate.Text = ((sqlJobTrigger.StartExecutionDate.HasValue) ? sqlJobTrigger.StartExecutionDate.Value.ToString("dd/MM/yyyy HH:mm:ss") : ""); lblEndExecutionDate.Text = ((sqlJobTrigger.EndExecutionDate.HasValue) ? sqlJobTrigger.EndExecutionDate.Value.ToString("dd/MM/yyyy HH:mm:ss") : ""); /* FIN DATOS JOBTRIGGER */ }
public void DeleteTrigger(JobTrigger trigger) { UnitOfWork.JobTriggerRepository.Delete(trigger); }
public void KillProcess(JobTrigger jobTrigger) { }
/// <summary> /// Utilizado para proceso manual agendado previamente (mediante Windows Service o desde las grillas usando el método Agendar -que disparó el método AddTrigger- sobre procesos Manuales). /// El método hace un UPDATE del trigger de deshabilitado a habilitado mas otros datos, actualmente ya viene cambiado, y lo crea en Quartz para que se ejecute inmediatamente. /// </summary> /// <param name="trigger"></param> public void ExecuteManualJob(JobTrigger trigger) { trigger.Enabled = true; trigger.ScheduledStartExecutionDate = DateTime.Now; var job = trigger.Job; UnitOfWork.JobTriggerRepository.Update(trigger); UnitOfWork.Save(); AddQuartzJob(job, trigger); }
public void DeleteTrigger(JobTrigger trigger) { throw new NotImplementedException(); }
public void AddTrigger(Job job, JobTrigger trigger) { }
public void AddQuartzJob(Job job, JobTrigger trigger) { }
public void KillProcess(JobTrigger jobTrigger) { Helper.KillProcess((SqlJobTrigger)jobTrigger); }
/// <summary> /// Utilizado para proceso manual que no ha sido agendado previamente, se crea el trigger en CGControlPanel y en Quartz. /// </summary> /// <param name="job">Job Manual</param> /// <param name="trigger"></param> public void ExecuteManualJob(Job job, JobTrigger trigger) { trigger.ScheduledStartExecutionDate = DateTime.Now; job.Triggers.Add(trigger); UnitOfWork.JobsRepository.Update(job); UnitOfWork.Save(); AddQuartzJob(job, trigger); }
public void DeleteTrigger(JobTrigger trigger) { }
public void AddJob(Job job, JobTrigger trigger) { throw new NotImplementedException(); }
public void ExecuteManualJob(Job job, JobTrigger trigger) { }
protected void FillUI(JobTrigger jobTrigger) { var sqlJobTrigger = (SqlJobTrigger)jobTrigger; ltrlProcessType.Text = sqlJobTrigger.Job.JobType.ToString(); /* DATOS JOB */ lblProcessName.Text = "ID: " + jobTrigger.Job.JobId + " - Proceso: " + jobTrigger.Job.Name + " - Grupo: " + jobTrigger.Job.Group; lblProcessOwner.Text = "Usuario: " + jobTrigger.Job.CreatedBy; lblDescription.Text = "Descripción: " + jobTrigger.Job.Description; // Formatea los datos con el estilo XML que muestra Internet Explorer txtInputValues.Text = Utils.UI.Helper.FormatXml(sqlJobTrigger.Job.InputXmlFixedParameters + sqlJobTrigger.InputFormXmlValues); lblComments.Text = "Comentarios: " + sqlJobTrigger.Job.Comments; lblProcessType.Text = "Tipo de Proceso: " + sqlJobTrigger.Job.JobType; Weekdays weekdays = new Weekdays(); weekdays.AllDays = Convert.ToByte(((SqlJob)sqlJobTrigger.Job).Weekdays); if (weekdays.AllDays == 0) lblWeekDays.Text = "Frecuencia: No Diaria"; else lblWeekDays.Text = "Frecuencia: " + Utils.UI.Helper.BuildPopulateDaysLegend(weekdays); lblServerName.Text = "Nombre Servidor: " + ((SqlJob)sqlJobTrigger.Job).ServerName; lblDataBaseName.Text = "Nombre BD: " + ((SqlJob)sqlJobTrigger.Job).DatabaseName; lblStoredProcedure.Text = "Stored de Ejecución: " + ((SqlJob)sqlJobTrigger.Job).ExecProcedure; lblInputXmlFixedParameters.Text = "Valores Fijos: " + sqlJobTrigger.Job.InputXmlFixedParameters; if (sqlJobTrigger.Job.JobType == JobType.Automático) { lblScheduledStartExecutionDate.Text = "Agendado el: " + sqlJobTrigger.ScheduledStartExecutionDate.ToString("dd/MM/yyyy HH:mm"); lblInputSchemaProcedure.Text = "Stored de Config: -"; if (sqlJobTrigger.Job.AutomaticProcessTime.HasValue && sqlJobTrigger.Job.Weekdays != 0) { lblAutomaticProcessTime.Text = "Hora Ejecución: " + sqlJobTrigger.Job.AutomaticProcessTime.Value.ToString("HH:mm:ss"); } else divAutomaticProcessTime.Visible = false; } else { lblScheduledStartExecutionDate.Text = "Agendado el: " + sqlJobTrigger.ScheduledStartExecutionDate.ToString("dd/MM/yyyy"); lblInputSchemaProcedure.Text = "Stored de Config: " + sqlJobTrigger.Job.InputSchemaProcedure; divInputSchemaProcedure.Visible = true; divAutomaticProcessTime.Visible = false; } /* FIN DATOS JOB */ /* DATOS JOBTRIGGER */ if (String.IsNullOrEmpty(sqlJobTrigger.OutputExecutionStatus)) lblOutputStatus.Text = "Estado de la Salida: NO Ejecutado"; else lblOutputStatus.Text = "Estado de la Salida: " + sqlJobTrigger.OutputExecutionStatus; lblTrigger.Text = "Trigger: " + jobTrigger.JobTriggerId; if ((sqlJobTrigger.RecordsAffected == 0) && (sqlJobTrigger.RecordsProcessed == 0)) lblRecords.Text = "Registros: - / -"; else lblRecords.Text = "Registros: " + sqlJobTrigger.RecordsAffected.ToString() + "/" + sqlJobTrigger.RecordsProcessed.ToString(); switch (jobTrigger.JobTriggerStatus) { case JobTriggerStatus.Agendado: btnDelete.Visible = true; btnKillProcess.Visible = false; break; case JobTriggerStatus.Ejecutando: btnDelete.Visible = false; btnKillProcess.Visible = true; break; default: btnDelete.Visible = false; btnKillProcess.Visible = false; break; } // TODO: Poner un tag en el xmlResultado para mostrar datos luego de que arme la tabla. // InputValues es el resultado de la ejecución del stored de Configuración que arma el Form Dinámico txtXmlInputTable.Text= sqlJobTrigger.InputXmlTable; txtXmlOutputTable.Text = sqlJobTrigger.OutputXmlTable; ltrlOuputExecutionLog.Text = string.IsNullOrEmpty(sqlJobTrigger.OutputExecutionLog) ? "SIN DATOS PARA MOSTRAR" : sqlJobTrigger.OutputExecutionLog; ltrlOutputResult.Text = string.IsNullOrEmpty(sqlJobTrigger.OutputExecutionResult) ? "SIN DATOS PARA MOSTRAR" : sqlJobTrigger.OutputExecutionResult; ltrlOutputExecutionTrace.Text = string.IsNullOrEmpty(sqlJobTrigger.OutputExecutionTrace) ? "SIN DATOS PARA MOSTRAR" : sqlJobTrigger.OutputExecutionTrace; lblJobTriggerStatus.Text = "Estado del Proceso: " + sqlJobTrigger.JobTriggerStatus.ToString().ToUpper(); lblStartExecutionDate.Text = "Inicio Ejecución: " + ((sqlJobTrigger.StartExecutionDate.HasValue) ? sqlJobTrigger.StartExecutionDate.Value.ToString("dd/MM/yyyy hh:mm:ss") : ""); lblEndExecutionDate.Text = "Fin Ejecución: " + ((sqlJobTrigger.EndExecutionDate.HasValue) ? sqlJobTrigger.EndExecutionDate.Value.ToString("dd/MM/yyyy hh:mm:ss") : ""); /* FIN DATOS JOBTRIGGER */ lnkPrint.HRef = "/Reports/JobTriggerInfo.aspx?triggerId=" + jobTrigger.JobTriggerId; }
public void DeleteTrigger(JobTrigger trigger) { if(trigger.JobTriggerStatus != JobTriggerStatus.Ejecutado) { trigger.Deleted = true; trigger.DeletedDate = DateTime.Now; if (Status() == SchedulerStatus.Apagado) throw new QuartzException("El servicio scheduler se encuentra apagado"); if (trigger.Validate()) { UnitOfWork.JobTriggerRepository.Update(trigger); UnitOfWork.Save(); Scheduler.UnscheduleJob(new TriggerKey(trigger.JobTriggerId.ToString())); return; } UnitOfWork.Save(); Utils.Validation.Helper.BuildValidationErrors(trigger.ValidationErrors); Scheduler.UnscheduleJob(new TriggerKey(trigger.JobTriggerId.ToString())); return; } throw new Exception("Procesos ya ejecutados no pueden ser eliminados."); }