private void zDesignSequence(Sequence sequence) { if (sequence != null) { string sequenceTabKey = zGetSequenceTabKey(sequence); if (tabControl1.TabPages.ContainsKey(sequenceTabKey)) { tabControl1.SelectTab(sequenceTabKey); } else { SequenceDetail sequenceDetail = WebHawkAppContext.AutomationController.GetSequenceDetail(sequence.SequenceId); TabPageEx tpEditSequence = new TabPageEx(sequence.Name); tpEditSequence.Name = sequenceTabKey; tpEditSequence.Tag = sequence; tpEditSequence.ContextMenuStrip = tabMenu; SequenceRecorder recorder = new SequenceRecorder(sequenceDetail.SequenceSteps); recorder.Dock = DockStyle.Fill; tpEditSequence.Controls.Add(recorder); recorder.SequenceChanged += recorder_SequenceChanged; recorder.ExecutionStart += recorder_ExecutionStart; recorder.ExecutionStop += recorder_ExecutionStop; tabControl1.TabPages.Add(tpEditSequence); tabControl1.SelectedTab = tpEditSequence; recorder.ExecuteSequence(1); } } }
private SequenceDetail zMapToSequenceDetail(dataAccess.DataReaderHelper reader) { Sequence sequence = zMapToSequence(reader); List <Step> sequenceSteps = Converter.FromBinary <List <Step> >(reader.GetFieldValue <byte[]>("Sequence")); SequenceDetail sequenceDetail = new SequenceDetail(sequence, sequenceSteps); return(sequenceDetail); }
public void SaveSequence(SequenceDetail sequenceDetail) { sequenceDetail.Sequence.StepCount = sequenceDetail.CalculateStepCount(); using (WebHawkDataProvider data = new WebHawkDataProvider(ConnectionString)) { data.SaveSequence(sequenceDetail); } }
private void zEditSequenceProperties(Sequence sequence) { if (sequence != null) { SequenceDetail sequenceDetail = WebHawkAppContext.AutomationController.GetSequenceDetail(sequence.SequenceId); frmSequenceProperties frm = new frmSequenceProperties(sequenceDetail, false); if (frm.ShowDialog() == DialogResult.OK) { WebHawkAppContext.AutomationController.SaveSequence(sequenceDetail); zRefreshSequences(); } } }
private void zCloneSequence(Sequence sequence) { if (sequence != null) { SequenceDetail sequenceDetail = WebHawkAppContext.AutomationController.GetSequenceDetail(sequence.SequenceId); frmCloneSequence frm = new frmCloneSequence(sequenceDetail.Sequence.Name); if (frm.ShowDialog() == DialogResult.OK) { sequenceDetail.Sequence.SequenceId = default(long); sequenceDetail.Sequence.Name = frm.NewName; WebHawkAppContext.AutomationController.SaveSequence(sequenceDetail); zRefreshSequences(); } } }
private void newSequenceToolStripMenuItem_Click(object sender, EventArgs e) { Sequence newSequence = new Sequence() { Name = "New Sequence", SequenceType = SequenceType.Custom }; SequenceDetail newSequenceDetail = new SequenceDetail(newSequence); frmSequenceProperties frm = new frmSequenceProperties(newSequenceDetail, true); if (frm.ShowDialog() == DialogResult.OK) { WebHawkAppContext.AutomationController.SaveSequence(newSequenceDetail); zRefreshSequences(); zDesignSequence(newSequence); } }
public SequenceDetail GetSequenceDetail(long sequenceId, DeletedInclusion deletedInclusion = DeletedInclusion.NotDeletedOnly) { SequenceDetail sequenceDetail = null; m_DataAccess.ExecuteQueryReader(dataAccess.CommandType.StoredProcedure, "usp_Seq_GetSequenceDetail", paramBuilder => new List <DbParameter>() { paramBuilder.CreateParameter("@sequenceId", sequenceId), paramBuilder.CreateParameter("@isDeleted", deletedInclusion.ToBoolean()) }, reader => { while (reader.Read()) { sequenceDetail = zMapToSequenceDetail(reader); } }); return(sequenceDetail); }
public frmSequenceProperties(SequenceDetail sequenceDetail, bool isNewSequence) : this() { m_SequenceDetail = sequenceDetail; m_IsNewSequence = isNewSequence; if (m_IsNewSequence) { this.Text = "New Sequence"; btnSave.Text = "Create"; groupBox1.Text = "Create New Sequence"; } else { this.Text = "Sequence Properties"; btnSave.Text = "Save"; groupBox1.Text = "Edit Sequence Properties"; } }
private bool zSaveSequence(Sequence sequence) { if (sequence != null) { SequenceRecorder recorder = zGetSequenceRecorder(sequence); SequenceDetail sequenceDetail = new SequenceDetail(sequence, recorder.SequenceSteps); WebHawkAppContext.AutomationController.SaveSequence(sequenceDetail); recorder.ResetIsDirtyFlag(); if (recorder == zGetSequenceRecorder(tabControl1.SelectedTab)) { toolStripButtonSave.Enabled = false; } zRefreshSequences(); return(true); } return(false); }
private void zGetXSLT(Sequence sequence) { if (sequence != null) { SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "XSLT Files (*.xslt)|*.xslt"; dlg.FileName = String.Format("{0}.xslt", sequence.Name); if (dlg.ShowDialog() == DialogResult.OK) { SequenceDetail sequenceDetail = WebHawkAppContext.AutomationController.GetSequenceDetail(sequence.SequenceId); ISequenceTranslator translator = SequenceTranslatorFactory.GetSequenceTranslator(SequenceTranslationType.XSLT); string xslt = translator.Translate(sequenceDetail.SequenceSteps).ToString(); File.WriteAllText(dlg.FileName, xslt); MessageBox.Show(String.Format("XSLT translation of sequence \"{0}\" successfully saved to \"{1}\".", sequence.Name, dlg.FileName), "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }
public void SaveSequence(SequenceDetail sequenceDetail) { if (sequenceDetail != null) { long count = (long)m_DataAccess.ExecuteScalar(dataAccess.CommandType.StoredProcedure, "usp_Seq_SequenceIdExists", paramBuilder => new List <DbParameter>() { paramBuilder.CreateParameter("@sequenceId", sequenceDetail.Sequence.SequenceId) }).Value; if (count == 0) { //Insert long sequenceId = (long)m_DataAccess.ExecuteScalar(dataAccess.CommandType.StoredProcedure, "usp_Seq_InsertSequenceDetail", paramBuilder => zMapFromSequenceDetail(paramBuilder, sequenceDetail, false)).Value; sequenceDetail.Sequence.SequenceId = sequenceId; } else { //Update m_DataAccess.ExecuteNonQuery(dataAccess.CommandType.StoredProcedure, "usp_Seq_UpdateSequenceDetail", paramBuilder => zMapFromSequenceDetail(paramBuilder, sequenceDetail, true)); } } }
public void Execute(IJobExecutionContext context) { ThreadSynchronizer threadSynchronizer = null; frmAutomation frmAutomation = null; try { m_JobKey = context.JobDetail.Key; m_Logger.InfoFormat("ExecuteSequenceJob {0} executing at {1}.", m_JobKey, DateTime.Now.ToString("r")); string connectionString = (string)context.MergedJobDataMap["connectionString"]; AutomationController automationController = new AutomationController(connectionString); SchedulingController schedulingController = new SchedulingController(connectionString); long scheduledTaskId = (long)context.MergedJobDataMap["scheduledTaskId"]; ScheduledTask scheduledTask = schedulingController.GetScheduledTask(scheduledTaskId, DeletedInclusion.All); SequenceDetail sequenceDetail = automationController.GetSequenceDetail(scheduledTask.TaskSequence.SequenceId); threadSynchronizer = (ThreadSynchronizer)context.MergedJobDataMap["threadSynchronizer"]; threadSynchronizer.RunOnSynchronizedThread(() => frmAutomation = new frmAutomation(), true); using (AutomationEngine automationEngine = new AutomationEngine(frmAutomation.Browser)) { automationEngine.SetSequence(sequenceDetail.SequenceSteps); Dictionary <string, IStateVariable> persistedData = automationController.GetSequencePersistedData(sequenceDetail.Sequence.SequenceId); automationEngine.DataContext.LoadPersistedVariables(persistedData); automationEngine.ExecutionComplete += automationEngine_ExecutionComplete; using (m_ExecutionWaitHandle = new AutoResetEvent(false)) { automationEngine.ExecuteSequence(); if (!m_ExecutionWaitHandle.WaitOne(scheduledTask.RunDurationLimit.HasValue ? scheduledTask.RunDurationLimit.Value : TimeSpan.FromMilliseconds(-1))) { throw new TimeoutException( String.Format("Scheduled sequence execution timed out because it reached the specified Run Duration Limit of {0}.", scheduledTask.RunDurationLimit)); } } automationEngine.ExecutionComplete -= automationEngine_ExecutionComplete; persistedData = automationEngine.DataContext.GetPersistedVariables(); automationController.SetSequencePersistedData(sequenceDetail.Sequence.SequenceId, persistedData); } ExecuteSequenceJobResult result = new ExecuteSequenceJobResult( zGetScheduledTaskStatusFromExecutionState(m_ExecutionCompleteEventArgs.RunResult), ""); //TODO: get error from ExecutionCompleteEventArgs context.Result = result; } catch (Exception ex) { JobExecutionException jobEx = new JobExecutionException(ex, false); throw jobEx; } finally { //Clean up try { if (frmAutomation != null) { threadSynchronizer.RunOnSynchronizedThread(() => frmAutomation.Dispose(), true); } } catch (Exception ex) { if (m_Logger != null) { m_Logger.ErrorFormat("Cleanup failed for ExecuteSequenceJob {0}: {1}", m_JobKey, ex.Message); } } //Dereference global variables m_Logger = null; m_JobKey = null; m_ExecutionCompleteEventArgs = null; m_ExecutionWaitHandle = null; } }
private List <DbParameter> zMapFromSequenceDetail(dataAccess.ParameterBuilder paramBuilder, SequenceDetail sequenceDetail, bool includeSequenceId) { List <DbParameter> parameters = zMapFromSequence(paramBuilder, sequenceDetail.Sequence, includeSequenceId); parameters.Add(paramBuilder.CreateParameter("@sequence", Converter.ToBinary(sequenceDetail.SequenceSteps))); return(parameters); }