コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        public void SaveSequence(SequenceDetail sequenceDetail)
        {
            sequenceDetail.Sequence.StepCount = sequenceDetail.CalculateStepCount();

            using (WebHawkDataProvider data = new WebHawkDataProvider(ConnectionString))
            {
                data.SaveSequence(sequenceDetail);
            }
        }
コード例 #4
0
 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();
         }
     }
 }
コード例 #5
0
 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();
         }
     }
 }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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";
            }
        }
コード例 #9
0
        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);
        }
コード例 #10
0
 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);
         }
     }
 }
コード例 #11
0
        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));
                }
            }
        }
コード例 #12
0
        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;
            }
        }
コード例 #13
0
        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);
        }