public void UpdateProcessActivities(IWfProcess process)
        {
            process.NullCheck("process");

            WfProcessCurrentActivityCollection pcas = new WfProcessCurrentActivityCollection();

            foreach (IWfActivity activity in process.Activities)
            {
                pcas.Add(WfProcessCurrentActivity.FromActivity(activity));
            }

            Update(process.ID, pcas);
        }
        public void Update(string processID, WfProcessCurrentActivityCollection pcas)
        {
            processID.CheckStringIsNullOrEmpty("processID");
            pcas.NullCheck("pcas");

            StringBuilder      strB = new StringBuilder();
            InSqlClauseBuilder deleteActivityIDs = new InSqlClauseBuilder("ACTIVITY_ID");

            foreach (WfProcessCurrentActivity pca in pcas)
            {
                if (strB.Length > 0)
                {
                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);
                }

                strB.Append(ORMapping.GetInsertSql(pca, TSqlBuilder.Instance));

                deleteActivityIDs.AppendItem(pca.ActivityID);
            }

            WhereSqlClauseBuilder wBuilder = new WhereSqlClauseBuilder();

            wBuilder.AppendItem("PROCESS_ID", processID);
            wBuilder.AppendTenantCodeSqlClause(typeof(WfProcessCurrentActivity));

            string sqlDelete = string.Format("DELETE WF.PROCESS_CURRENT_ACTIVITIES WHERE {0}",
                                             wBuilder.ToSqlString(TSqlBuilder.Instance));

            if (deleteActivityIDs.Count > 0)
            {
                sqlDelete += string.Format(" AND {0}", deleteActivityIDs.ToSqlString(TSqlBuilder.Instance));
            }

            string sql = sqlDelete;

            if (strB.Length > 0)
            {
                sql += TSqlBuilder.Instance.DBStatementSeperator + strB.ToString();
            }

            DbHelper.RunSqlWithTransaction(sql, GetConnectionName());
        }
        /// <summary>
        /// 返回流程所有的已流转过的活动节点
        /// </summary>
        /// <param name="processID"></param>
        /// <returns></returns>
        public WfProcessCurrentActivityCollection Load(string processID)
        {
            processID.CheckStringIsNullOrEmpty(processID);

            WfProcessCurrentActivityCollection result = new WfProcessCurrentActivityCollection();

            WhereSqlClauseBuilder wBuilder = new WhereSqlClauseBuilder();

            wBuilder.AppendItem("PROCESS_ID", processID);
            wBuilder.AppendTenantCodeSqlClause(typeof(WfProcessCurrentActivity));

            string sql = string.Format("SELECT * FROM WF.PROCESS_CURRENT_ACTIVITIES WHERE {0}",
                                       wBuilder.ToSqlString(TSqlBuilder.Instance));

            DataTable table = DbHelper.RunSqlReturnDS(sql, GetConnectionName()).Tables[0];

            result.LoadFromDataView(table.DefaultView);

            return(result);
        }