public WfClientProcessCurrentInfoPageQueryResult QueryProcesses(WfClientProcessQueryCondition condition, int startRowIndex, int maximumRows, string orderBy, int totalCount)
        {
            condition.NullCheck("condition");

            OperationContext.Current.FillContextToOguServiceContext();

            WfProcessQueryCondition serverCondition = null;

            WfClientProcessQueryConditionConverter.Instance.ClientToServer(condition, ref serverCondition);

            if (orderBy.IsNullOrEmpty())
            {
                orderBy = "START_TIME DESC";
            }

            ConnectiveSqlClauseCollection connective = serverCondition.ToSqlBuilder();

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("COMMITTED", "1");
            builder.AppendTenantCode();

            connective.Add(builder);

            QueryCondition qc = new QueryCondition(startRowIndex, maximumRows,
                                                   ORMapping.GetSelectFieldsNameSql <WfProcessCurrentInfo>(),
                                                   ORMapping.GetMappingInfo(typeof(WfProcessCurrentInfo)).TableName,
                                                   orderBy);

            qc.WhereClause += connective.ToSqlString(TSqlBuilder.Instance);

            return(QueryProcessInfo(qc, totalCount));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="fillAssignees"></param>
        /// <param name="action"></param>
        /// <returns></returns>
        public WfProcessCurrentInfoCollection Load(bool fillAssignees, Action <WhereSqlClauseBuilder> action)
        {
            action.NullCheck("action");

            WfProcessCurrentInfoCollection result = new WfProcessCurrentInfoCollection();

            WhereSqlClauseBuilder whereBuilder = new WhereSqlClauseBuilder();

            action(whereBuilder);

            string fieldNames = ORMapping.GetSelectFieldsNameSql <WfProcessInstanceData>("Data");

            string sql = string.Format("SELECT {0} FROM WF.PROCESS_INSTANCES WHERE {1}",
                                       fieldNames,
                                       whereBuilder.ToSqlString(TSqlBuilder.Instance));

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

            result.LoadFromDataView(table.DefaultView);

            if (fillAssignees)
            {
                FillAssignees(result);
            }

            return(result);
        }
        /// <summary>
        /// 加载流程运行时的信息
        /// </summary>
        /// <param name="processIDs"></param>
        /// <returns></returns>
        public WfProcessCurrentInfoCollection Load(bool fillAssignees, params string[] processIDs)
        {
            processIDs.NullCheck("processIDs");

            WfProcessCurrentInfoCollection result = new WfProcessCurrentInfoCollection();

            InSqlClauseBuilder builder = new InSqlClauseBuilder();

            builder.AppendItem(processIDs);

            if (builder.Count > 0)
            {
                string fieldNames = ORMapping.GetSelectFieldsNameSql <WfProcessInstanceData>("Data");

                string sql = string.Format("SELECT {0} FROM WF.PROCESS_INSTANCES WHERE INSTANCE_ID {1}",
                                           fieldNames,
                                           builder.ToSqlStringWithInOperator(TSqlBuilder.Instance));

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

                result.LoadFromDataView(table.DefaultView);

                if (fillAssignees)
                {
                    FillAssignees(result);
                }
            }

            return(result);
        }
Beispiel #4
0
        public WfProcessDescriptorInfoCollection LoadWfProcessDescriptionInfos(Action <WhereSqlClauseBuilder> action, bool ignoreProcessData)
        {
            action.NullCheck("action");

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendTenantCode();
            action(builder);

            string sqlFieldStr = ignoreProcessData ? ORMapping.GetSelectFieldsNameSql <WfProcessDescriptorInfo>("DATA") : "*";

            string sql = string.Format("SELECT {0} FROM WF.PROCESS_DESCRIPTORS WHERE {1}",
                                       sqlFieldStr, builder.ToSqlString(TSqlBuilder.Instance));

            WfProcessDescriptorInfoCollection result = new WfProcessDescriptorInfoCollection();

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

            foreach (DataRow row in table.Rows)
            {
                WfProcessDescriptorInfo wfProcessDescInfo = new WfProcessDescriptorInfo();
                ORMapping.DataRowToObject(row, wfProcessDescInfo);

                result.Add(wfProcessDescInfo);
            }

            return(result);
        }
        protected override void OnBuildQueryCondition(QueryCondition qc)
        {
            qc.FromClause = "WF.PROCESS_INSTANCES (NOLOCK)";

            if (qc.OrderByClause.IsNullOrEmpty())
            {
                qc.OrderByClause = "CREATE_TIME DESC";
            }

            qc.SelectFields = ORMapping.GetSelectFieldsNameSql <WfProcessCurrentInfo>();
        }
        protected override void OnBuildQueryCondition(QueryCondition qc)
        {
            qc.FromClause = "WF.PROCESS_INSTANCES (NOLOCK)";

            if (qc.OrderByClause.IsNullOrEmpty())
            {
                qc.OrderByClause = "START_TIME DESC";
            }

            qc.SelectFields = ORMapping.GetSelectFieldsNameSql <WfProcessCurrentInfo>();

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("COMMITTED", "1");
            builder.AppendTenantCode();

            if (qc.WhereClause.IsNotEmpty())
            {
                qc.WhereClause += " AND ";
            }

            qc.WhereClause += builder.ToSqlString(TSqlBuilder.Instance);
        }
        /// <summary>
        /// 加载分支流程信息
        /// </summary>
        /// <param name="fillAssignees"></param>
        /// <param name="activityID"></param>
        /// <param name="templateKey"></param>
        /// <param name="includeAborted">是否包含已经作废的流程</param>
        /// <returns></returns>
        public WfProcessCurrentInfoCollection LoadByOwnerActivityID(bool fillAssignees, string activityID, string templateKey, bool includeAborted)
        {
            activityID.NullCheck("activityID");

            WfProcessCurrentInfoCollection result = new WfProcessCurrentInfoCollection();

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("OWNER_ACTIVITY_ID", activityID);

            if (templateKey.IsNotEmpty())
            {
                builder.AppendItem("OWNER_TEMPLATE_KEY", templateKey);
            }

            if (includeAborted == false)
            {
                builder.AppendItem("Status", WfProcessStatus.Aborted.ToString(), "<>");
            }

            string fieldNames = ORMapping.GetSelectFieldsNameSql <WfProcessCurrentInfo>();

            string sql = string.Format("SELECT {0} FROM WF.PROCESS_INSTANCES WHERE {1}",
                                       fieldNames,
                                       builder.ToSqlString(TSqlBuilder.Instance));

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

            result.LoadFromDataView(table.DefaultView);

            if (fillAssignees)
            {
                FillAssignees(result);
            }

            return(result);
        }
        /// <summary>
        /// 得到某个活动下的分支流程统计信息
        /// </summary>
        /// <param name="activityID">不可以为空</param>
        /// <param name="templateKey">可以为空,如果有值,则只统计某个模板的流程</param>
        /// <returns></returns>
        public Dictionary <WfProcessStatus, int> LoadStatisticsDataByOwnerActivityID(string activityID, string templateKey)
        {
            activityID.NullCheck("activityID");

            Dictionary <WfProcessStatus, int> result = new Dictionary <WfProcessStatus, int>();

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("OWNER_ACTIVITY_ID", activityID);

            if (templateKey.IsNotEmpty())
            {
                builder.AppendItem("OWNER_TEMPLATE_KEY", templateKey);
            }

            string fieldNames = ORMapping.GetSelectFieldsNameSql <WfProcessCurrentInfo>();

            string sql = string.Format("SELECT STATUS, COUNT(*) AS COUNT FROM WF.PROCESS_INSTANCES WHERE {0} GROUP BY STATUS",
                                       builder.ToSqlString(TSqlBuilder.Instance));

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

            foreach (DataRow row in table.Rows)
            {
                string statusText = row["STATUS"].ToString();

                WfProcessStatus status;

                if (Enum.TryParse(statusText, true, out status))
                {
                    result[status] = (int)row["COUNT"];
                }
            }

            return(result);
        }