public List <ValkWFStep> LoadChildSteps(ValkWFStep CurrentStep)
        {
            List <ValkWFStep> Children = new List <ValkWFStep>();
            DataTable         dt       = SQLConnHandler.ExecuteDataTableSP("LoadChildSteps",
                                                                           new SQLParameter()
            {
                ParamName = "@WFTemplateID", ParamValue = CurrentStep.WFTemplateID
            },
                                                                           new SQLParameter()
            {
                ParamName = "@WFTemplateStepID", ParamValue = CurrentStep.WFTemplateStepID
            });

            foreach (DataRow Row in dt.Rows)
            {
                ValkWFStep Step = new ValkWFStep();
                Step.WFTemplateID     = CurrentStep.WFTemplateID;
                Step.HandleCategory   = Row["OnExecuteCall"].ToString();
                Step.StepName         = Row["Name"].ToString();
                Step.WFTemplateStepID = int.Parse(Row["WFTEmplateStepID_To"].ToString());
                Step.SyncCount        = int.Parse(Row["SyncCount"].ToString());
                Step.GroupID          = int.Parse(Row["GroupID"].ToString());
                Step.ParentStep       = CurrentStep;
                Step.InstanceKey      = CurrentStep.InstanceKey;
                Children.Add(Step);
            }
            return(Children);
        }
 public void StartWFInstance(int WFInstanceID)
 {
     SQLConnHandler.ExecuteNonQuerySP("StartWFInstance",
                                      new SQLParameter()
     {
         ParamName = "@WFInstanceID", ParamValue = WFInstanceID
     });
 }
        public WFTemplateLoadingData LoadWFTemplates()
        {
            WFTemplateLoadingData LoadingData = new WFTemplateLoadingData();
            DataTable             dt          = SQLConnHandler.ExecuteDataTableSP("LoadWFTemplates");

            if (dt != null)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    if (dr["InProduction"].ToString() == "True")
                    {
                        if (LoadingData.LoadedActiveInstanceByType.ContainsKey(dr["WFType"].ToString()))
                        {
                            //warning, already here
                        }
                        LoadingData.LoadedActiveInstanceByType[dr["WFType"].ToString()] = int.Parse(dr["WFTemplateID"].ToString());
                    }

                    ValkWFStep FirstStep = new ValkWFStep();
                    FirstStep.WFTemplateID = int.Parse(dr["WFTemplateID"].ToString());
                    LoadingData.WFsToLoad.Add(FirstStep);

                    DataTable steps =
                        SQLConnHandler.ExecuteDataTableSP("LoadWFTemplateFirstStep",
                                                          new SQLParameter()
                    {
                        ParamName = "@WFTemplateID", ParamValue = dr["WFTemplateID"].ToString()
                    });
                    if (steps.Rows.Count > 0)
                    {
                        LoadingData.WFsToLoad[LoadingData.WFsToLoad.Count - 1].HandleCategory   = steps.Rows[0]["OnExecuteCall"].ToString();
                        LoadingData.WFsToLoad[LoadingData.WFsToLoad.Count - 1].StepName         = steps.Rows[0]["Name"].ToString();
                        LoadingData.WFsToLoad[LoadingData.WFsToLoad.Count - 1].WFTemplateStepID = int.Parse(steps.Rows[0]["WFTemplateStepID"].ToString());
                        LoadingData.WFsToLoad[LoadingData.WFsToLoad.Count - 1].SyncCount        = int.Parse(steps.Rows[0]["SyncCount"].ToString());
                        LoadingData.WFsToLoad[LoadingData.WFsToLoad.Count - 1].GroupID          = int.Parse(steps.Rows[0]["GroupID"].ToString());
                    }
                    else
                    {
                        //todo: error, no first step for this WF
                    }
                }
            }
            else
            {
                //todo: no templates!
            }
            return(LoadingData);
        }
        public void InsertWFInstance(SortedDictionary <int, ValkWFStep> ToInsert)
        {
            SQLTransactionData TransData = SQLConnHandler.StartTransaction("InsertWFInstance");

            foreach (KeyValuePair <int, ValkWFStep> Step in ToInsert)
            {
                SQLConnHandler.ExecuteNonQuerySPTrans(TransData,
                                                      new SQLParameter()
                {
                    ParamName = "@InstanceKey", ParamValue = Step.Value.InstanceKey
                },
                                                      new SQLParameter()
                {
                    ParamName = "@WFTemplateID", ParamValue = Step.Value.WFTemplateID
                },
                                                      new SQLParameter()
                {
                    ParamName = "@Status", ParamValue = "inactive"
                },
                                                      new SQLParameter()
                {
                    ParamName = "@WFTemplateStepID", ParamValue = Step.Value.WFTemplateStepID
                },
                                                      new SQLParameter()
                {
                    ParamName = "@UserID", ParamValue = 1
                },
                                                      new SQLParameter()
                {
                    ParamName = "@StartTime", ParamValue = SqlDateTime.MinValue
                },
                                                      new SQLParameter()
                {
                    ParamName = "@SyncCount", ParamValue = Step.Value.SyncCount
                },
                                                      new SQLParameter()
                {
                    ParamName = "@ExceptionID", ParamValue = -1
                }
                                                      );
            }

            SQLConnHandler.EndTransaction(TransData);
        }
        public void UpdateSteps(List <ValkQueueWFMessage> Updates)
        {
            //insert all the pending updates
            SQLTransactionData TransData = SQLConnHandler.StartTransaction("InsertUpdates");

            foreach (ValkQueueWFMessage Step in Updates)
            {
                SQLConnHandler.ExecuteNonQuerySPTrans(TransData,
                                                      new SQLParameter()
                {
                    ParamName = "@InstanceKey", ParamValue = Step.InstanceKey
                },
                                                      new SQLParameter()
                {
                    ParamName = "@WFTemplateID", ParamValue = Step.Step.WFTemplateID
                },
                                                      new SQLParameter()
                {
                    ParamName = "@NewStatus", ParamValue = Step.Step.Status
                },
                                                      new SQLParameter()
                {
                    ParamName = "@WFTemplateStepID", ParamValue = Step.Step.WFTemplateStepID
                }
                                                      );
            }

            //temporarily replace command so we can run a different one
            //run updates in SQL
            SqlCommand command = new SqlCommand("RunUpdates", TransData.SQLConn);

            command.Transaction = TransData.Transaction;
            TransData.Command   = command;
            SQLConnHandler.ExecuteNonQuerySPTrans(TransData);

            SQLConnHandler.EndTransaction(TransData);
        }
 public DataTable GetPendingWFInstances()
 {
     return(SQLConnHandler.ExecuteDataTableSP("GetPendingWFInstances"));
 }