private void BindDataGrid()
        {
            WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(this.UserUploadCondition);

            if (this.processUsers.ReadOnly)
            {
                this.ObjectDataSourceUploadLogs.Condition = builder;
            }
            else
            {
                ConnectiveSqlClauseCollection collection = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);
                collection.Add(builder);

                WhereSqlClauseBuilder userwherebuilder = new WhereSqlClauseBuilder();
                userwherebuilder.LogicOperator = LogicOperatorDefine.Or;
                foreach (var item in this.processUsers.SelectedOuUserData)
                {
                    userwherebuilder.AppendItem("OPERATOR_ID", item.ID);
                }
                collection.Add(userwherebuilder);

                this.ObjectDataSourceUploadLogs.Condition = collection.ToSqlString(TSqlBuilder.Instance);
            }
            this.ObjectDataSourceUploadLogs.LastQueryRowCount = -1;

            this.DeluxeGridUploadLog.PageIndex = 0;
            this.DeluxeGridUploadLog.SelectedKeys.Clear();
            this.DeluxeGridUploadLog.DataBind();
        }
		private void BindDataGrid()
		{
			WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(this.UserUploadCondition);

			if (this.processUsers.ReadOnly)
			{
				this.ObjectDataSourceUploadLogs.Condition = builder;
			}
			else
			{
				ConnectiveSqlClauseCollection collection = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);
				collection.Add(builder);

				WhereSqlClauseBuilder userwherebuilder = new WhereSqlClauseBuilder();
				userwherebuilder.LogicOperator = LogicOperatorDefine.Or;
				foreach (var item in this.processUsers.SelectedOuUserData)
				{
					userwherebuilder.AppendItem("OPERATOR_ID", item.ID);
				}
				collection.Add(userwherebuilder);

				this.ObjectDataSourceUploadLogs.Condition = collection.ToSqlString(TSqlBuilder.Instance);
			}
			this.ObjectDataSourceUploadLogs.LastQueryRowCount = -1;

			this.DeluxeGridUploadLog.PageIndex = 0;
			this.DeluxeGridUploadLog.SelectedKeys.Clear();
			this.DeluxeGridUploadLog.DataBind();
		}
		protected override void OnConnectConditions(ConnectiveSqlClauseCollection allConditions)
		{
			base.OnConnectConditions(allConditions);
			allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("OU."));
			allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O."));
			WhereSqlClauseBuilder where1 = new WhereSqlClauseBuilder();
			where1.AppendItem("OU.Status", (int)SchemaObjectStatus.Normal);
			where1.AppendItem("O.Status", (int)SchemaObjectStatus.Normal);
			allConditions.Add(where1);
		}
        public ConnectiveSqlClauseCollection ToSqlBuilder()
        {
            ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);

            connectiveBuilder.Add(ConditionMapping.GetWhereSqlClauseBuilder(this));
            connectiveBuilder.Add(GetCurrentAssigneesSubQuery());
            connectiveBuilder.Add(GetAssigneeExceptionSubQuery());

            return(connectiveBuilder);
        }
        protected override void OnConnectConditions(ConnectiveSqlClauseCollection allConditions)
        {
            base.OnConnectConditions(allConditions);
            allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("OU."));
            allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O."));
            WhereSqlClauseBuilder where1 = new WhereSqlClauseBuilder();

            where1.AppendItem("OU.Status", (int)SchemaObjectStatus.Normal);
            where1.AppendItem("O.Status", (int)SchemaObjectStatus.Normal);
            allConditions.Add(where1);
        }
        /// <summary>
        /// 根据指定的CodeName和Schema类型载入对象
        /// </summary>
        /// <param name="schemas">指定包含的schemas</param>
        /// <param name="codeNames">指定包含的codeName</param>
        /// <param name="normalOnly">表示是否查找所有状态的对象</param>
        /// <param name="ignoreVersions">表示是否忽略时间版本因素</param>
        /// <param name="timePoint">当<paramref name="ignoreVersions"/>为<see langword="true"/>时,表示指定的时间点版本</param>
        /// <returns>如果为<see langword="true"/>表示存在,或<see langword="true"/>表示不存在</returns>
        public SchemaObjectCollection LoadByCodeNameAndSchema(string[] schemas, string[] codeNames, bool normalOnly, bool ignoreVersions, DateTime timePoint)
        {
            if (schemas == null || schemas.Length == 0)
            {
                throw new ArgumentNullException("schemas");
            }
            if (codeNames == null || codeNames.Length == 0)
            {
                throw new ArgumentNullException("codeNames");
            }

            WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();

            where.AppendItem("1", (int)1);

            if (normalOnly)
            {
                where.AppendItem("O.Status", (int)SchemaObjectStatus.Normal);
            }

            ConnectiveSqlClauseCollection conditions = new ConnectiveSqlClauseCollection(where);

            if (ignoreVersions == false)
            {
                conditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "S."));
                conditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "O."));
            }

            if (schemas.Length > 1)
            {
                var inSchemas = new InSqlClauseBuilder("S.SchemaType");
                inSchemas.AppendItem(schemas);
            }
            else
            {
                where.AppendItem("S.SchemaType", schemas[0]);
            }

            if (codeNames.Length > 1)
            {
                var inCodeName = new InSqlClauseBuilder("S.CodeName");
                inCodeName.AppendItem(codeNames);
                conditions.Add(inCodeName);
            }
            else
            {
                where.AppendItem("S.CodeName", codeNames[0]);
            }

            return(this.LoadByCodeNameInner(conditions));
        }
Exemple #7
0
        protected override void OnBuildQueryCondition(QueryCondition qc)
        {
            qc.FromClause = (TimePointContext.Current.UseCurrentTime ?
                             "SC.SchemaGroupSnapshot_Current G INNER JOIN SC.SchemaRelationObjectsSnapshot_Current R ON G.ID = R.ObjectID "
                                : "SC.SchemaGroupSnapshot G INNER JOIN SC.SchemaRelationObjectsSnapshot R ON G.ID = R.ObjectID ");

            if (this.fileterRole)
            {
                qc.FromClause += TimePointContext.Current.UseCurrentTime ?
                                 " LEFT JOIN SC.Acl_Current AC ON AC.ContainerID = R.ParentID INNER JOIN SC.SchemaRoleSnapshot_Current RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot_Current UC ON RS.ID = UC.ContainerID " :
                                 " LEFT JOIN SC.Acl AC ON AC.ContainerID = R.ParentID INNER JOIN SC.SchemaRoleSnapshot RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot UC ON RS.ID = UC.ContainerID ";
            }

            qc.SelectFields = "G.*,R.ParentID";
            if (qc.OrderByClause.IsNullOrEmpty())
            {
                qc.OrderByClause = "R.InnerSort DESC";
            }

            qc.WhereClause.IsNotEmpty((s) => qc.WhereClause += " AND ");

            var timeConditionS = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("G.");

            var timeConditionR = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("R.Status", (int)SchemaObjectStatus.Normal);
            builder.AppendItem("G.Status", (int)SchemaObjectStatus.Normal);

            var allConditions = new ConnectiveSqlClauseCollection(timeConditionS, timeConditionR, builder);

            if (this.fileterRole)
            {
                allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("AC."));
                allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("RS."));
                allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("UC."));
                builder.AppendItem("AC.Status", (int)SchemaObjectStatus.Normal);
                builder.AppendItem("RS.Status", (int)SchemaObjectStatus.Normal);
                builder.AppendItem("UC.Status", (int)SchemaObjectStatus.Normal);
                builder.AppendItem("UC.UserID", this.userID);

                InSqlClauseBuilder inSql1 = new InSqlClauseBuilder("AC.ContainerPermission");
                inSql1.AppendItem(this.parentPermissions);
                allConditions.Add(inSql1);
            }

            qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
        }
Exemple #8
0
 private static ConnectiveSqlClauseCollection SchemaStrict(ConnectiveSqlClauseCollection c, string prefix, PC.StandardObjectSchemaType schema)
 {
     WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
     where.AppendItem(prefix + "SchemaType", schema);
     c.Add(where);
     return(c);
 }
        /// <summary>
        /// 根据类型上的TenantRelativeObjectAttribute以及TenantContext.Current.Enabled决定是否在某个条件子句添加租户编码的过滤字段
        /// </summary>
        /// <param name="connective"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static ConnectiveSqlClauseCollection AppendTenantCodeSqlClause(this IConnectiveSqlClause connective, Type type)
        {
            ConnectiveSqlClauseCollection result = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);

            if (connective != null)
            {
                WhereSqlClauseBuilder wBuilder = new WhereSqlClauseBuilder();

                wBuilder.AppendTenantCode(type);

                result.Add(connective);
                result.Add(wBuilder);
            }

            return(result);
        }
        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>
        /// 从Tenant上下文中获取TenantCode并且在某个条件子句添加租户编码的过滤字段
        /// </summary>
        /// <param name="connective"></param>
        /// <param name="tenantCodeFieldName"></param>
        /// <returns></returns>
        public static ConnectiveSqlClauseCollection AppendTenantCodeSqlClause(this IConnectiveSqlClause connective, string tenantCodeFieldName = "TENANT_CODE")
        {
            ConnectiveSqlClauseCollection result = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);

            if (connective != null)
            {
                WhereSqlClauseBuilder wBuilder = new WhereSqlClauseBuilder();

                wBuilder.AppendTenantCode(tenantCodeFieldName);

                result.Add(connective);
                result.Add(wBuilder);
            }

            return(result);
        }
        /// <summary>
        /// 扫描整个集合,生成带所有APPLICATION_NAME和PROGRAM_NAME的的ConnectiveSqlClauseCollection,条件之间使用运算符OR。用于筛选出用户可以看的到的列表
        /// </summary>
        /// <param name="appFieldName">APPLICATION_NAME的字段名</param>
        /// <param name="progFieldName">PROGRAM_NAME的字段名</param>
        /// <returns></returns>
        public ConnectiveSqlClauseCollection GetApplicationAndProgramBuilder(string appFieldName, string progFieldName)
        {
            ConnectiveSqlClauseCollection result = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);

            Dictionary <string, string> addedKey = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);

            foreach (WfApplicationAuth authData in this)
            {
                string key = CalculateKey(authData.ApplicationName, authData.ProgramName);

                if (addedKey.ContainsKey(key) == false)
                {
                    WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder(LogicOperatorDefine.And);

                    builder.AppendItem(appFieldName, authData.ApplicationName);
                    builder.AppendItem(progFieldName, authData.ProgramName);

                    addedKey.Add(key, key);

                    result.Add(builder);
                }
            }

            result = result.AppendTenantCodeSqlClause(typeof(WfApplicationAuth));

            return(result);
        }
Exemple #13
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="whereAction"></param>
        /// <param name="timePoint">时间点</param>
        /// <param name="mappings"></param>
        /// <returns></returns>
        public bool Exists(Action <WhereSqlClauseBuilder> whereAction, DateTime timePoint, ORMappingItemCollection mappings = null)
        {
            whereAction.NullCheck("whereAction");

            if (mappings == null)
            {
                mappings = this.GetQueryMappingInfo();
            }

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            whereAction(builder);
            builder.AppendTenantCode(typeof(T));

            ConnectiveSqlClauseCollection timePointBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);

            timePointBuilder.Add(builder);

            string sql = string.Format("SELECT TOP 1 * FROM {0}", GetQueryTableName(mappings, timePoint));

            if (builder.Count > 0)
            {
                sql = sql + string.Format(" WHERE {0}", timePointBuilder.ToSqlString(TSqlBuilder.Instance));
            }

            return((int)DbHelper.RunSqlReturnDS(sql, GetConnectionName()).Tables[0].Rows.Count > 0);
        }
        public int GetMaxInnerSort(string id, string[] childSchemaTypes, DateTime timePoint)
        {
            IConnectiveSqlClause timeBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);

            WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
            where.AppendItem("ParentID", id);

            InSqlClauseBuilder inSql = null;

            if (childSchemaTypes != null && childSchemaTypes.Length > 0)
            {
                inSql = new InSqlClauseBuilder("ChildSchemaType").AppendItem(childSchemaTypes);
            }

            ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(where, timeBuilder);

            if (inSql != null)
            {
                connectiveBuilder.Add(inSql);
            }


            string sql = "SELECT ISNULL(MAX(InnerSort), 0) AS C FROM " + GetMappingInfo().TableName + " WHERE " + connectiveBuilder.ToSqlString(TSqlBuilder.Instance);

            int result = (int)DbHelper.RunSqlReturnScalar(sql, this.GetConnectionName());

            return(result);
        }
Exemple #15
0
        protected void dataSourceMain_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
        {
            var allConditions = new ConnectiveSqlClauseCollection(this.DeluxeSearch.GetCondition());

            var condition = this.CurrentAdvancedSearchCondition;

            WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(condition);

            string categoryID = Request.QueryString["categoryID"];

            if (!string.IsNullOrEmpty(categoryID))
            {
                //DECategory dcg = CategoryAdapter.Instance.GetByID(categoryID);

                //dcg.FullPath += "%";
                if (categoryID != "undefined")
                {
                    builder.AppendItem("SchemaType", categoryID);
                }
            }

            allConditions.Add(builder);

            this.dataSourceMain.Condition = allConditions;
        }
Exemple #16
0
        /// <summary>
        /// 根据<see cref="IConnectiveSqlClause"/>指定的条件和时间点载入对象
        /// </summary>
        /// <param name="condition">表示条件的<see cref="IConnectiveSqlClause"/></param>
        /// <param name="timePoint">时间点 - 或 - <see cref="DateTime.MinValue"/>表示当前时间</param>
        /// <returns>一个<see cref="DESchemaObjectCollection"/>,包含条件指定的对象。</returns>
        public DESchemaObjectCollection Load(IConnectiveSqlClause condition, DateTime timePoint, bool loadNormalStatus = true)
        {
            var timePointBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);

            DESchemaObjectCollection result = new DESchemaObjectCollection();

            if (condition.IsEmpty == false)
            {
                ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(condition, timePointBuilder);

                if (loadNormalStatus)
                {
                    WhereSqlClauseBuilder statusBuilder = new WhereSqlClauseBuilder();
                    statusBuilder.AppendItem("Status", (int)SchemaObjectStatus.Normal);
                    connectiveBuilder.Add(statusBuilder);
                }

                using (DbContext context = DbContext.GetContext(this.GetConnectionName()))
                {
                    VersionedObjectAdapterHelper.Instance.FillData(GetMappingInfo().TableName, connectiveBuilder, this.GetConnectionName(),
                                                                   reader =>
                    {
                        result.LoadFromDataReader(reader);
                    });
                }
            }

            return(result);
        }
 private static ConnectiveSqlClauseCollection SchemaStrict(ConnectiveSqlClauseCollection c, string prefix, PC.StandardObjectSchemaType schema)
 {
     WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
     where.AppendItem(prefix + "SchemaType", schema);
     c.Add(where);
     return c;
 }
        /// <summary>
        /// 产生时间类型的
        /// </summary>
        /// <param name="connectiveSqlClauses"></param>
        /// <param name="condtion"></param>
        /// <param name="table"></param>
        public static WhereSqlClauseBuilder GetCondition(this ConnectiveSqlClauseCollection connectiveSqlClauses, object condtion, string table = null)
        {
            Type t       = condtion.GetType();
            var  builder = new WhereSqlClauseBuilder();
            var  items   = ConditionMapping.GetMappingInfo(t);

            if (table == null)
            {
                table = ORMapping.GetMappingInfo(t).TableName;
            }
            string tablename = string.Format("{0}.", table);

            foreach (ConditionMappingItem item in items)
            {
                if (string.IsNullOrWhiteSpace(item.SubClassPropertyName) == false)
                {
                    continue;
                }
                object data;
                bool   b = condtion.IsTypeDefaultValue(item, out data);
                if (b)
                {
                    continue;
                }
                string field = string.Format(item.DataFieldName, tablename);
                if (field.Contains(tablename) == false)
                {
                    field = string.Format("{0} {1}", tablename, item.DataFieldName);
                }

                builder.AppendItem(field, data, item.Operation, item.Template, item.IsExpression);
            }
            connectiveSqlClauses.Add(builder);
            return(builder);
        }
		protected override void OnBuildQueryCondition(QueryCondition qc)
		{
			qc.FromClause = (TimePointContext.Current.UseCurrentTime ?
				"SC.SchemaGroupSnapshot_Current G INNER JOIN SC.SchemaRelationObjectsSnapshot_Current R ON G.ID = R.ObjectID "
				: "SC.SchemaGroupSnapshot G INNER JOIN SC.SchemaRelationObjectsSnapshot R ON G.ID = R.ObjectID ");

			if (this.fileterRole)
			{
				qc.FromClause += TimePointContext.Current.UseCurrentTime ?
					" LEFT JOIN SC.Acl_Current AC ON AC.ContainerID = R.ParentID INNER JOIN SC.SchemaRoleSnapshot_Current RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot_Current UC ON RS.ID = UC.ContainerID " :
					" LEFT JOIN SC.Acl AC ON AC.ContainerID = R.ParentID INNER JOIN SC.SchemaRoleSnapshot RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot UC ON RS.ID = UC.ContainerID ";
			}

			qc.SelectFields = "G.*,R.ParentID";
			if (qc.OrderByClause.IsNullOrEmpty())
				qc.OrderByClause = "R.InnerSort DESC";

			qc.WhereClause.IsNotEmpty((s) => qc.WhereClause += " AND ");

			var timeConditionS = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("G.");

			var timeConditionR = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");

			WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

			builder.AppendItem("R.Status", (int)SchemaObjectStatus.Normal);
			builder.AppendItem("G.Status", (int)SchemaObjectStatus.Normal);

			var allConditions = new ConnectiveSqlClauseCollection(timeConditionS, timeConditionR, builder);

			if (this.fileterRole)
			{
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("AC."));
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("RS."));
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("UC."));
				builder.AppendItem("AC.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("RS.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("UC.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("UC.UserID", this.userID);

				InSqlClauseBuilder inSql1 = new InSqlClauseBuilder("AC.ContainerPermission");
				inSql1.AppendItem(this.parentPermissions);
				allConditions.Add(inSql1);
			}

			qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
		}
        private static ClientSchemaObjectBase[] GetObjectByIDInner(string[] ids, string[] objectSchemaTypes, bool normalOnly)
        {
            objectSchemaTypes.NullCheck("objectSchemaTypes");

            ClientSchemaObjectBase[] result;

            bool noIDMatch = ids != null && ids.Length == 0;

            if (noIDMatch)
            {
                result = new ClientSchemaObjectBase[0];
            }
            else
            {
                ConnectiveSqlClauseCollection builder = new ConnectiveSqlClauseCollection();
                if (ids != null)
                {
                    InSqlClauseBuilder idInBuilder = new InSqlClauseBuilder("ID");
                    idInBuilder.AppendItem(ids);

                    builder.Add(idInBuilder);
                }

                if (objectSchemaTypes != null)
                {
                    InSqlClauseBuilder typeInBuilder = new InSqlClauseBuilder("SchemaType");
                    typeInBuilder.AppendItem(objectSchemaTypes);
                    builder.Add(typeInBuilder);
                }

                if (normalOnly)
                {
                    builder.Add((IConnectiveSqlClause) new WhereSqlClauseBuilder().AppendItem("Status", (int)SchemaObjectStatus.Normal));
                }

                if (builder.IsEmpty == false)
                {
                    result = SchemaObjectAdapter.Instance.Load(builder, SimpleRequestSoapMessage.Current.TimePoint).ToClientSCBaseObjectArray();
                }
                else
                {
                    result = new ClientSchemaObjectBase[0];
                }
            }

            return(result);
        }
        protected override void OnBuildQueryCondition(QueryCondition qc)
        {
            qc.FromClause = TimePointContext.Current.UseCurrentTime ? "SC.SchemaOrganizationSnapshot_Current O INNER JOIN SC.SchemaRelationObjectsSnapshot_Current R ON O.ID = R.ObjectID" : "SC.SchemaOrganizationSnapshot O INNER JOIN SC.SchemaRelationObjectsSnapshot R ON O.ID = R.ObjectID";

            if (this.fileterRole)
            {
                qc.FromClause += TimePointContext.Current.UseCurrentTime ?
                                 " INNER JOIN SC.Acl_Current AC ON AC.ContainerID = O.ID INNER JOIN SC.SchemaRoleSnapshot_Current RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot_Current UC ON RS.ID = UC.ContainerID "
                                        : " INNER JOIN SC.Acl AC ON AC.ContainerID = O.ID INNER JOIN SC.SchemaRoleSnapshot RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot UC ON RS.ID = UC.ContainerID ";
            }

            qc.SelectFields = "DISTINCT O.*,R.FullPath";

            if (string.IsNullOrEmpty(qc.OrderByClause))
            {
                qc.OrderByClause = "R.InnerSort ASC";
            }

            qc.WhereClause.IsNotEmpty((s) => qc.WhereClause += " AND ");

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("R.Status", (int)SchemaObjectStatus.Normal);
            builder.AppendItem("O.Status", (int)SchemaObjectStatus.Normal);
            var timeCondition   = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");
            var timeCondition2  = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O.");
            var schemaCondition = DataSourceUtil.SchemaTypeCondition("R.ChildSchemaType", "Organizations");
            var allConditions   = new ConnectiveSqlClauseCollection(builder, timeCondition, timeCondition2, schemaCondition);

            if (this.fileterRole && this.userID != null && this.permissions != null)
            {
                allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("AC."));
                allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("RS."));
                allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("UC."));
                builder.AppendItem("AC.Status", (int)SchemaObjectStatus.Normal);
                builder.AppendItem("RS.Status", (int)SchemaObjectStatus.Normal);
                builder.AppendItem("UC.Status", (int)SchemaObjectStatus.Normal);
                builder.AppendItem("UC.UserID", this.userID);

                InSqlClauseBuilder inSql1 = new InSqlClauseBuilder("AC.ContainerPermission");
                inSql1.AppendItem(this.permissions);
                allConditions.Add(inSql1);
            }

            qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
        }
        /// <summary>
        /// 通过实体的CodeName加载实体字段对象集合
        /// </summary>
        /// <param name="codeName">实体的CodeName</param>
        /// <returns>该CodeName对应的实体字段对象集合</returns>
        public List <DynamicEntityField> LoadByRefferanceCodeName(string codeName)
        {
            List <DynamicEntityField> entityFields = new List <DynamicEntityField>();

            string.IsNullOrEmpty(codeName).TrueThrow("codeName不得为空");

            InSqlClauseBuilder inbuilder = new InSqlClauseBuilder("ReferenceEntityCodeName");

            inbuilder.AppendItem(codeName);

            WhereSqlClauseBuilder wherebuilder = new WhereSqlClauseBuilder();

            wherebuilder.AppendItem("Status", 1);

            ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);

            connectiveBuilder.Add(inbuilder);
            connectiveBuilder.Add(wherebuilder);


            var timePointBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder();

            connectiveBuilder.Add(timePointBuilder);

            StringBuilder sql = new StringBuilder();

            sql.AppendFormat(@"SELECT ID FROM {0} WHERE {1}",
                             TableName,
                             connectiveBuilder.ToSqlString(TSqlBuilder.Instance)
                             );

            DataSet fieldIDs = DbHelper.RunSqlReturnDS(sql.ToString(), this.GetConnectionName());

            if (fieldIDs.Tables.Count != 0)
            {
                foreach (DataRow item in fieldIDs.Tables[0].Rows)
                {
                    var id       = item[0].ToString();
                    var dbResult = DESchemaObjectAdapter.Instance.Load(id) as DynamicEntityField;
                    entityFields.Add(dbResult);
                }
            }

            return(entityFields);
        }
Exemple #23
0
        protected void dataSourceMain_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
        {
            ConnectiveSqlClauseCollection condition = new ConnectiveSqlClauseCollection();
            WhereSqlClauseBuilder         builder   = new WhereSqlClauseBuilder();

            builder.AppendItem(" r.ContainerID ", Request.QueryString["ID"].Trim());
            condition.Add(builder);
            this.dataSourceMain.Condition = condition;
        }
        private WhereSqlClauseBuilder GetCurrentAssigneesSubQuery()
        {
            InSqlClauseBuilder inBuilder = new InSqlClauseBuilder("USER_ID");

            this.CurrentAssignees.ForEach(u => inBuilder.AppendItem(u.ID));

            WhereSqlClauseBuilder wBuilder = new WhereSqlClauseBuilder();

            if (this.AssigneesUserName.IsNotEmpty())
            {
                wBuilder.AppendItem("USER_NAME", TSqlBuilder.Instance.EscapeLikeString(this.AssigneesUserName) + "%", "LIKE");
            }

            ConnectiveSqlClauseCollection subQueryBuilder = new ConnectiveSqlClauseCollection();

            subQueryBuilder.Add(inBuilder);
            subQueryBuilder.Add(wBuilder);

            WhereSqlClauseBuilder resultBuilder = new WhereSqlClauseBuilder();

            if (subQueryBuilder.IsEmpty == false)
            {
                string processCondition = string.Empty;

                switch (this.AssigneesSelectType)
                {
                case WfAssigneesFilterType.CurrentActivity:
                    processCondition = "CA.ACTIVITY_ID = CURRENT_ACTIVITY_ID";
                    break;

                case WfAssigneesFilterType.AllActivities:
                    processCondition = "CA.PROCESS_ID = INSTANCE_ID";
                    break;
                }

                string subQuery = string.Format("EXISTS(SELECT USER_ID FROM WF.PROCESS_CURRENT_ASSIGNEES CA (NOLOCK) WHERE {0} AND {1})",
                                                processCondition, subQueryBuilder.ToSqlString(TSqlBuilder.Instance));

                resultBuilder.AppendItem("CurrentAssignees", subQuery, "=", "${Data}$", true);
            }

            return(resultBuilder);
        }
		protected override void OnBuildQueryCondition(QueryCondition qc)
		{
			qc.FromClause = TimePointContext.Current.UseCurrentTime ? "SC.SchemaOrganizationSnapshot_Current O INNER JOIN SC.SchemaRelationObjectsSnapshot_Current R ON O.ID = R.ObjectID" : "SC.SchemaOrganizationSnapshot O INNER JOIN SC.SchemaRelationObjectsSnapshot R ON O.ID = R.ObjectID";

			if (this.fileterRole)
			{
				qc.FromClause += TimePointContext.Current.UseCurrentTime ?
					" INNER JOIN SC.Acl_Current AC ON AC.ContainerID = O.ID INNER JOIN SC.SchemaRoleSnapshot_Current RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot_Current UC ON RS.ID = UC.ContainerID "
					: " INNER JOIN SC.Acl AC ON AC.ContainerID = O.ID INNER JOIN SC.SchemaRoleSnapshot RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot UC ON RS.ID = UC.ContainerID ";
			}

			qc.SelectFields = "DISTINCT O.*,R.FullPath";

			if (string.IsNullOrEmpty(qc.OrderByClause))
				qc.OrderByClause = "R.InnerSort ASC";

			qc.WhereClause.IsNotEmpty((s) => qc.WhereClause += " AND ");

			WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();
			builder.AppendItem("R.Status", (int)SchemaObjectStatus.Normal);
			builder.AppendItem("O.Status", (int)SchemaObjectStatus.Normal);
			var timeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");
			var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O.");
			var schemaCondition = DataSourceUtil.SchemaTypeCondition("R.ChildSchemaType", "Organizations");
			var allConditions = new ConnectiveSqlClauseCollection(builder, timeCondition, timeCondition2, schemaCondition);

			if (this.fileterRole && this.userID != null && this.permissions != null)
			{
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("AC."));
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("RS."));
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("UC."));
				builder.AppendItem("AC.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("RS.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("UC.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("UC.UserID", this.userID);

				InSqlClauseBuilder inSql1 = new InSqlClauseBuilder("AC.ContainerPermission");
				inSql1.AppendItem(this.permissions);
				allConditions.Add(inSql1);
			}

			qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
		}
Exemple #26
0
        public PagedQueryResult <UserTaskModel, UserTaskModelCollection> LoadUserTasks(IPageRequestParams prp, UserTaskQueryCriteria condition, IEnumerable <IOrderByRequestItem> orderByBuilder)
        {
            ConnectiveSqlClauseCollection sqlCollection = new ConnectiveSqlClauseCollection();

            sqlCollection.Add(ConditionMapping.GetConnectiveClauseBuilder(condition));

            string sqlBuilder = sqlCollection.ToSqlString(TSqlBuilder.Instance);
            var    result     = Query(prp, sqlBuilder, orderByBuilder);

            return(result);
        }
        /// <summary>
        /// 获得条件
        /// </summary>
        /// <returns></returns>
        public ConnectiveSqlClauseCollection GetCondition()
        {
            ConnectiveSqlClauseCollection result = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);

            foreach (var whereSqlClause in WhereSqlClauses)
            {
                result.Add(whereSqlClause);
            }

            return(result);
        }
        private DynamicEntity LoadByCodeNameInner(string codeName, DateTime timePoint)
        {
            string.IsNullOrEmpty(codeName).TrueThrow("codeName不得为空");

            InSqlClauseBuilder inbuilder = new InSqlClauseBuilder("CodeName");

            inbuilder.AppendItem(codeName);

            WhereSqlClauseBuilder wherebuilder = new WhereSqlClauseBuilder();

            wherebuilder.AppendItem("Status", 1);

            ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);

            connectiveBuilder.Add(inbuilder);
            connectiveBuilder.Add(wherebuilder);


            var timePointBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);

            connectiveBuilder.Add(timePointBuilder);

            StringBuilder sql = new StringBuilder();

            sql.AppendFormat(@"SELECT TOP 1 ID FROM {0} WHERE {1}",
                             "DE.SchemaObjectSnapshot",
                             connectiveBuilder.ToSqlString(TSqlBuilder.Instance)
                             );


            string _EntityID = Convert.ToString(DbHelper.RunSqlReturnScalar(sql.ToString(), this.GetConnectionName()));

            DynamicEntity entity = null;

            if (_EntityID.IsNotEmpty())
            {
                entity = this.LoadWithCache(_EntityID);
            }

            return(entity);
        }
		private static ClientSchemaObjectBase[] GetObjectByIDInner(string[] ids, string[] objectSchemaTypes, bool normalOnly)
		{
			ClientSchemaObjectBase[] result;
			objectSchemaTypes.NullCheck("objectSchemaTypes");

			bool noIDMatch = ids != null && ids.Length == 0;

			if (noIDMatch)
			{
				result = new ClientSchemaObjectBase[0];
			}
			else
			{
				ConnectiveSqlClauseCollection builder = new ConnectiveSqlClauseCollection();
				if (ids != null)
				{
					InSqlClauseBuilder idInBuilder = new InSqlClauseBuilder("ID");
					idInBuilder.AppendItem(ids);

					builder.Add(idInBuilder);
				}

				if (objectSchemaTypes != null)
				{
					InSqlClauseBuilder typeInBuilder = new InSqlClauseBuilder("SchemaType");
					typeInBuilder.AppendItem(objectSchemaTypes);
					builder.Add(typeInBuilder);
				}

				if (normalOnly)
					builder.Add((IConnectiveSqlClause)new WhereSqlClauseBuilder().AppendItem("Status", (int)SchemaObjectStatus.Normal));

				if (builder.IsEmpty == false)
					result = AUCommon.DoDbProcess(() => SchemaObjectAdapter.Instance.Load(builder, SimpleRequestSoapMessage.Current.TimePoint).ToClientSchemaObjectBaseObjectArray());
				else
					result = new ClientSchemaObjectBase[0];
			}

			return result;
		}
Exemple #30
0
        private static string BuilderSubSqlClause(WfMatrixQueryParam para, string wfMatrixID, string inSql)
        {
            WhereSqlClauseBuilder matrixIdBuilder = new WhereSqlClauseBuilder();

            matrixIdBuilder.AppendItem(DB_FIELD_MATRIX_ID, wfMatrixID);
            matrixIdBuilder.AppendTenantCode();

            WhereSqlClauseBuilder fieldBuilder = new WhereSqlClauseBuilder();

            fieldBuilder.AppendItem(DB_FIELD_DIMENSION_KEY, para.QueryName);
            fieldBuilder.AppendItem(DB_FIELD_STRING_VALUE, para.QueryValue);
            fieldBuilder.AppendTenantCode();

            WhereSqlClauseBuilder fieldEmptyBuilder = new WhereSqlClauseBuilder();

            fieldEmptyBuilder.AppendItem(DB_FIELD_DIMENSION_KEY, para.QueryName);
            fieldEmptyBuilder.AppendItem(DB_FIELD_STRING_VALUE, "");
            fieldEmptyBuilder.AppendTenantCode();

            ConnectiveSqlClauseCollection fieldClauseConnector = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);

            fieldClauseConnector.Add(fieldBuilder);
            fieldClauseConnector.Add(fieldEmptyBuilder);

            ConnectiveSqlClauseCollection matrixIdConnector = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);

            matrixIdConnector.Add(matrixIdBuilder);
            matrixIdConnector.Add(fieldClauseConnector);

            StringBuilder strBuilder = new StringBuilder(SELECT_MC_CLAUSE);

            strBuilder.Append(matrixIdConnector.ToSqlString(TSqlBuilder.Instance));

            if (!string.IsNullOrEmpty(inSql))
            {
                strBuilder.AppendFormat(" AND {0} IN ({1})", DB_FIELD_MATRIX_ROW_ID, inSql);
            }

            return(strBuilder.ToString());
        }
        protected void dataSourceMain_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
        {
            var allConditions = new ConnectiveSqlClauseCollection(this.DeluxeSearch.GetCondition());

            var filter = this.GetCurrentFilterType();

            if (filter != FilterSchemaType.All)
            {
                int count = 0;
                var v     = (int)filter;
                for (int i = sizeof(FilterSchemaType) * 8 - 1; i >= 0; i--)
                {
                    if ((v & 1) == 1)
                    {
                        count++;
                    }

                    v >>= 1;                     // 计算有几个位被置一
                }

                string[] categories = new string[count];
                v = 0;

                if ((filter & FilterSchemaType.User) == FilterSchemaType.User)
                {
                    categories[v++] = "Users";
                }

                if ((filter & FilterSchemaType.Group) == FilterSchemaType.Group)
                {
                    categories[v++] = "Groups";
                }

                if ((filter & FilterSchemaType.Organization) == FilterSchemaType.Organization)
                {
                    categories[v++] = "Organizations";
                }

                e.InputParameters["schemaTypes"] = SchemaInfo.FilterByCategory(categories).ToSchemaNames();
            }

            //if (this.AdvanceSearchEnabled)
            {
                var condition = this.CurrentAdvancedSearchCondition;

                WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(condition);

                allConditions.Add(builder);
            }

            this.dataSourceMain.Condition = allConditions;
        }
        public static void GetVersionTimeCondion <T>(this ConnectiveSqlClauseCollection connectiveSqlClauses, string dateTimeField, string tableAls = null)
        {
            var table = tableAls;

            if (string.IsNullOrWhiteSpace(table))
            {
                table = ORMapping.GetMappingInfo <T>().TableName;
            }
            WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
            where.AppendItem(string.Format("{0}.VersionStartTime", table), dateTimeField, "<=", true);
            where.AppendItem(string.Format("{0}.VersionEndTime", table), dateTimeField, ">", "ISNULL(${DataField}$,'99990909 00:00:00.000') ${Operation}$ ${Data}$", true);
            connectiveSqlClauses.Add(where);
        }
Exemple #33
0
        public static PC.SchemaObjectCollection QuerySchemaObjectsById(string[] pIds)
        {
            if (pIds == null)
            {
                throw new ArgumentNullException("pIds");
            }

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("Status", (int)SchemaObjectStatus.Normal);

            InSqlClauseBuilder inBuilder = new InSqlClauseBuilder("ID");

            inBuilder.AppendItem(pIds);

            ConnectiveSqlClauseCollection connBuilder = new ConnectiveSqlClauseCollection();

            connBuilder.Add(builder);
            connBuilder.Add(inBuilder);

            return(PC.Adapters.SchemaObjectAdapter.Instance.Load(connBuilder));
        }
Exemple #34
0
        public ConnectiveSqlClauseCollection GetAclQueryConditionsByUser(string userID)
        {
            ConnectiveSqlClauseCollection result = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);

            WhereSqlClauseBuilder builderUser = new WhereSqlClauseBuilder();

            builderUser.AppendItem("OBJECT_ID", userID);
            builderUser.AppendTenantCode();

            result.Add(builderUser);

            return(result);
        }
Exemple #35
0
        /// <summary>
        /// 根据TimePoint和状态来生成Builder
        /// </summary>
        /// <param name="includingDeleted"></param>
        /// <param name="timePoint"></param>
        /// <param name="tablePrefixes"></param>
        /// <returns></returns>
        private IConnectiveSqlClause CreateStatusAndTimePointBuilder(bool includingDeleted, DateTime timePoint, params string[] tablePrefixes)
        {
            ConnectiveSqlClauseCollection result = new ConnectiveSqlClauseCollection();

            foreach (string tablePrefix in tablePrefixes)
            {
                IConnectiveSqlClause timePointBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, tablePrefix);

                result.Add(timePointBuilder);

                WhereSqlClauseBuilder statusBuilder = new WhereSqlClauseBuilder();

                if (includingDeleted == false)
                {
                    statusBuilder.AppendItem(tablePrefix + "Status", (int)SchemaObjectStatus.Normal);
                }

                result.Add(statusBuilder);
            }

            return(result);
        }
Exemple #36
0
        private IConnectiveSqlClause GetCommonCondition()
        {
            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("SEND_TO_USER", DeluxeIdentity.CurrentUser.ID);

            WhereSqlClauseBuilder wBuilder1 = new WhereSqlClauseBuilder();

            wBuilder1.AppendItem("EXPIRE_TIME", "null", "is", true);
            WhereSqlClauseBuilder wBuilder2 = new WhereSqlClauseBuilder();

            wBuilder2.AppendItem("EXPIRE_TIME", "not null", "is", true);
            wBuilder2.AppendItem("EXPIRE_TIME", "getdate()", ">", true);
            ConnectiveSqlClauseCollection collection = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);

            collection.Add(wBuilder1);
            collection.Add(wBuilder2);

            WhereSqlClauseBuilder wBuilder3 = new WhereSqlClauseBuilder();

            wBuilder3.AppendItem("STATUS", TaskStatus.Yue.ToString("d"));

            ConnectiveSqlClauseCollection collection1 = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);

            collection1.Add(wBuilder3);
            collection1.Add(collection);

            ConnectiveSqlClauseCollection collection2 = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);
            WhereSqlClauseBuilder         wBuilder4   = new WhereSqlClauseBuilder();

            wBuilder4.AppendItem("STATUS", TaskStatus.Ban.ToString("d"));
            collection2.Add(collection1);
            collection2.Add(wBuilder4);

            return(new ConnectiveSqlClauseCollection(builder, collection2));
        }
        /// <summary>
        /// 获得指定附件的副本
        /// </summary>
        /// <param name="materials">附件集合</param>
        /// <returns>指定附件对应的副本集合</returns>
        internal MaterialList LoadCopyVersionMaterial(MaterialList materials)
        {
            ExceptionHelper.TrueThrow<ArgumentNullException>(materials == null, "materials");

            MaterialList copyVersionMaterials = new MaterialList();

            if (materials.Count != 0)
            {
                ConnectiveSqlClauseCollection orClause = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);

                foreach (Material material in materials)
                {
                    WhereSqlClauseBuilder whereSqlClause = new WhereSqlClauseBuilder();

                    whereSqlClause.AppendItem("PARENT_ID", material.ID);
                    whereSqlClause.AppendItem("WF_ACTIVITY_ID", material.WfActivityID);
                    whereSqlClause.AppendItem("VERSION_TYPE", (int)MaterialVersionType.CopyVersion);

                    orClause.Add(whereSqlClause);
                }

                string sql = string.Format("SELECT * FROM WF.MATERIAL WHERE {0}",
                    orClause.AppendTenantCodeSqlClause(typeof(Material)).ToSqlString(TSqlBuilder.Instance));

                using (DbContext dbi = DbHelper.GetDBContext(GetConnectionName()))
                {
                    using (IDataReader dr = DbHelper.RunSqlReturnDR(sql, GetConnectionName()))
                    {
                        while (dr.Read())
                        {
                            Material material = new Material();

                            ORMapping.DataReaderToObject(dr, material);

                            copyVersionMaterials.Add(material);
                        }
                    }
                }

                DecorateMaterials(copyVersionMaterials);
            }

            return copyVersionMaterials;
        }
		protected void dataSourceMain_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
		{
			var allConditions = new ConnectiveSqlClauseCollection(this.DeluxeSearch.GetCondition());

			var filter = this.GetCurrentFilterType();
			if (filter != FilterSchemaType.All)
			{
				int count = 0;
				var v = (int)filter;
				for (int i = sizeof(FilterSchemaType) * 8 - 1; i >= 0; i--)
				{
					if ((v & 1) == 1)
					{
						count++;
					}

					v >>= 1; // 计算有几个位被置一
				}

				string[] categories = new string[count];
				v = 0;

				if ((filter & FilterSchemaType.User) == FilterSchemaType.User)
				{
					categories[v++] = "Users";
				}

				if ((filter & FilterSchemaType.Group) == FilterSchemaType.Group)
				{
					categories[v++] = "Groups";
				}

				if ((filter & FilterSchemaType.Organization) == FilterSchemaType.Organization)
				{
					categories[v++] = "Organizations";
				}

				e.InputParameters["schemaTypes"] = SchemaInfo.FilterByCategory(categories).ToSchemaNames();
			}

			//if (this.AdvanceSearchEnabled)
			{
				var condition = this.CurrentAdvancedSearchCondition;

				WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(condition);

				allConditions.Add(builder);
			}

			this.dataSourceMain.Condition = allConditions;
		}
        private WhereSqlClauseBuilder GetCurrentAssigneesSubQuery()
        {
            InSqlClauseBuilder inBuilder = new InSqlClauseBuilder("USER_ID");

            this.CurrentAssignees.ForEach(u => inBuilder.AppendItem(u.ID));

            WhereSqlClauseBuilder wBuilder = new WhereSqlClauseBuilder();

            if (this.AssigneesUserName.IsNotEmpty())
                wBuilder.AppendItem("USER_NAME", TSqlBuilder.Instance.EscapeLikeString(this.AssigneesUserName) + "%", "LIKE");

            ConnectiveSqlClauseCollection subQueryBuilder = new ConnectiveSqlClauseCollection();

            subQueryBuilder.Add(inBuilder);
            subQueryBuilder.Add(wBuilder);

            WhereSqlClauseBuilder resultBuilder = new WhereSqlClauseBuilder();

            if (subQueryBuilder.IsEmpty == false)
            {
                string processCondition = string.Empty;

                switch (this.AssigneesSelectType)
                {
                    case WfAssigneesFilterType.CurrentActivity:
                        processCondition = "CA.ACTIVITY_ID = CURRENT_ACTIVITY_ID";
                        break;
                    case WfAssigneesFilterType.AllActivities:
                        processCondition = "CA.PROCESS_ID = INSTANCE_ID";
                        break;
                }

                string subQuery = string.Format("EXISTS(SELECT USER_ID FROM WF.PROCESS_CURRENT_ASSIGNEES CA (NOLOCK) WHERE {0} AND {1})",
                    processCondition, subQueryBuilder.ToSqlString(TSqlBuilder.Instance));

                resultBuilder.AppendItem("CurrentAssignees", subQuery, "=", "${Data}$", true);
            }

            return resultBuilder;
        }
		protected override void OnBuildQueryCondition(QueryCondition qc)
		{
			qc.SelectFields = "U.*,ParentID='' ";
			qc.FromClause = TimePointContext.Current.UseCurrentTime ? "SC.SchemaUserSnapshot_Current U " : "SC.SchemaUserSnapshot U ";

			if (qc.OrderByClause.IsNullOrEmpty())
				qc.OrderByClause = "U.VersionStartTime DESC";

			if (this.fileterRole && this.parentPermissions != null)
			{
				var joinClause = TimePointContext.Current.UseCurrentTime ?
					@" INNER JOIN SC.SchemaRelationObjectsSnapshot_Current R ON R.ObjectID = U.ID INNER JOIN SC.Acl_Current AC ON AC.ContainerID = R.ParentID INNER JOIN SC.SchemaRoleSnapshot_Current RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot_Current UC ON RS.ID = UC.ContainerID "
					:
					@" INNER JOIN SC.SchemaRelationObjectsSnapshot R ON R.ObjectID = U.ID INNER JOIN SC.Acl AC ON AC.ContainerID = R.ParentID INNER JOIN SC.SchemaRoleSnapshot RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot UC ON RS.ID = UC.ContainerID ";
				qc.FromClause += joinClause;
			}

			qc.WhereClause.IsNotEmpty((s) => qc.WhereClause += " AND ");

			WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();
			builder.AppendItem("U.Status", (int)SchemaObjectStatus.Normal);

			var timeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("U.");

			var allConditions = new ConnectiveSqlClauseCollection(builder, timeCondition);

			if (this.fileterRole && this.logonUserID != null && this.parentPermissions != null)
			{
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("AC."));
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("RS."));
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("UC."));
				builder.AppendItem("AC.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("RS.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("UC.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("UC.UserID", this.logonUserID);

				allConditions.Add(DataSourceUtil.SchemaTypeCondition("R.ParentSchemaType", SchemaInfo.FilterByCategory("Organizations").ToSchemaNames()));

				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R."));
				if (parentPermissions.Length > 0)
				{
					InSqlClauseBuilder inSql1 = new InSqlClauseBuilder("AC.ContainerPermission");
					inSql1.AppendItem(this.parentPermissions);
					allConditions.Add(inSql1);
				}
			}

			if (this.excludeID != null)
			{
				builder.AppendItem("U.ID", this.excludeID, "<>");
			}

			if (this.defaultOnly)
			{
				builder.AppendItem("R.IsDefault", 1);
			}

			if (this.dissociate)
			{
				var timeConditionIn = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("RR.");

				WhereSqlClauseBuilder innerWhere = new WhereSqlClauseBuilder();
				innerWhere.AppendItem("RR.Status", (int)SchemaObjectStatus.Normal);

				InSqlClauseBuilder innerInParent = new InSqlClauseBuilder("RR.ParentSchemaType");
				innerInParent.AppendItem(SchemaInfo.FilterByCategory("Organizations").ToSchemaNames());

				allConditions.Add(new ExistExpressionBuilder(true, string.Format(@"SELECT TOP 1 1 FROM SC.SchemaRelationObjects RR WHERE 
RR.ObjectID = U.ID AND RR.ChildSchemaType = U.SchemaType AND {0}", new ConnectiveSqlClauseCollection(timeConditionIn, innerWhere, innerInParent).ToSqlString(TSqlBuilder.Instance))));
			}

			qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
		}
		/// <summary>
		/// 将时间点有关的SQL条件填充到ConnectiveSqlClauseCollection
		/// </summary>
		/// <param name="builder"></param>
		/// <param name="timePoint"></param>
		/// <param name="fieldPrefix">字段前缀。如果是表空间或Schema,不要忘记后面的'.'</param>
		public void FillTimePointInBuilder(ConnectiveSqlClauseCollection builder, DateTime timePoint, string fieldPrefix)
		{
			//输出结果应该是
			//VersionStartTime <= getdate() AND (VersionEndTime > getdate() OR VersionEndTime IS NULL)
			builder.NullCheck("builder");

			string timeString = TSqlBuilder.Instance.DBCurrentTimeFunction;

			if (timePoint == DateTime.MinValue && this._UseSimulatedTime && TimePointContext.Current.UseCurrentTime == false)
				timePoint = TimePointContext.Current.SimulatedTime;

			if (timePoint != DateTime.MinValue)
				timeString = TSqlBuilder.Instance.FormatDateTime(timePoint);

			WhereSqlClauseBuilder sBuilder = new WhereSqlClauseBuilder();

			string vsFieldName = JoinFieldName(fieldPrefix, this.VersionStartTimeFieldName);

			sBuilder.AppendItem(vsFieldName, timeString, "<=", true);

			WhereSqlClauseBuilder eBuilder = new WhereSqlClauseBuilder(LogicOperatorDefine.Or);

			string veFieldName = JoinFieldName(fieldPrefix, this.VersionEndTimeFieldName);

			eBuilder.AppendItem(veFieldName, timeString, ">", true).AppendItem(veFieldName, "NULL", "IS", true);

			builder.LogicOperator = LogicOperatorDefine.And;

			builder.Add(sBuilder).Add(eBuilder);
		}
		private IConnectiveSqlClause GetCommonCondition()
		{
			WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();
			builder.AppendItem("SEND_TO_USER", DeluxeIdentity.CurrentUser.ID);

			WhereSqlClauseBuilder wBuilder1 = new WhereSqlClauseBuilder();
			wBuilder1.AppendItem("EXPIRE_TIME", "null", "is", true);
			WhereSqlClauseBuilder wBuilder2 = new WhereSqlClauseBuilder();
			wBuilder2.AppendItem("EXPIRE_TIME", "not null", "is", true);
			wBuilder2.AppendItem("EXPIRE_TIME", "getdate()", ">", true);
			ConnectiveSqlClauseCollection collection = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);
			collection.Add(wBuilder1);
			collection.Add(wBuilder2);

			WhereSqlClauseBuilder wBuilder3 = new WhereSqlClauseBuilder();
			wBuilder3.AppendItem("STATUS", TaskStatus.Yue.ToString("d"));

			ConnectiveSqlClauseCollection collection1 = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);
			collection1.Add(wBuilder3);
			collection1.Add(collection);

			ConnectiveSqlClauseCollection collection2 = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);
			WhereSqlClauseBuilder wBuilder4 = new WhereSqlClauseBuilder();
			wBuilder4.AppendItem("STATUS", TaskStatus.Ban.ToString("d"));
			collection2.Add(collection1);
			collection2.Add(wBuilder4);

			return new ConnectiveSqlClauseCollection(builder, collection2);
		}
        /// <summary>
        /// 获得条件
        /// </summary>
        /// <returns></returns>
        public ConnectiveSqlClauseCollection GetCondition()
        {
            ConnectiveSqlClauseCollection result = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);

            foreach (var whereSqlClause in WhereSqlClauses)
                result.Add(whereSqlClause);

            return result;
        }
		private void ExecQuery()
		{
			InitPageSize();

			bindingControl.CollectData();

			WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(QueryCondition,
				new AdjustConditionValueDelegate(AdjustQueryConditionValue));

			builder.AppendItem("UT.STATUS", (int)TaskStatus.Ban);

			//// LDM 流转中数据的获取
			//if (null != Request.QueryString["process_status"] && Request.QueryString["process_status"] == "Running")
			//    builder.AppendItem("PN.STATUS", "Running");

			////  LDM 已办结数据的获取
			//if (null != Request.QueryString["process_status"] && Request.QueryString["process_status"] == "Completed")
			//    builder.AppendItem("ISNULL(PN.STATUS,N'Completed')", "Completed");

			if (QueryCondition.ApplicationName == "全部")
			{
				QueryCondition.ApplicationName = "";
			}

			string subjectQueryString = string.Empty;

			if (string.IsNullOrEmpty(QueryCondition.TaskTitle) == false)
			{
				StringBuilder subjectSB = new StringBuilder();
				//关键词分割符为全角或半角空格
				char[] separators = new char[] { ' ', ' ' };
				string[] wordsSplitted = QueryCondition.TaskTitle.Split(separators, StringSplitOptions.RemoveEmptyEntries);
				//将关键词构造为谓词查询格式
				for (int i = 0; i < wordsSplitted.Length; i++)
				{
					if (i > 0)
					{
						subjectSB.Append(" AND ");
					}

					subjectSB.Append("\"");
					subjectSB.Append(wordsSplitted[i].Replace("\"", "\"\""));
					subjectSB.Append("\"");
				}
				subjectQueryString = string.Format("CONTAINS(TASK_TITLE,{0})", TSqlBuilder.Instance.CheckQuotationMark(subjectSB.ToString(), true));
			}

			WhereSqlClauseBuilder processStatusBuilder = new WhereSqlClauseBuilder(LogicOperatorDefine.Or);

			switch (WebUtility.GetRequestQueryString("process_status", "Running"))
			{
				case "Running":
					processStatusBuilder.AppendItem("PN.STATUS", "Running");
					processStatusBuilder.AppendItem("PN.STATUS", "Maintaining");
					break;
				case "Completed":
					processStatusBuilder.AppendItem("PN.STATUS", "Completed");
					processStatusBuilder.AppendItem("PN.STATUS", "Aborted");
					break;
			}

			ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection();

			connectiveBuilder.Add(builder).Add(processStatusBuilder);

			if (connectiveBuilder.IsEmpty)
				whereCondition.Value = subjectQueryString;
			else if (subjectQueryString == string.Empty)
				whereCondition.Value = connectiveBuilder.ToSqlString(TSqlBuilder.Instance);
			else
				whereCondition.Value = connectiveBuilder.ToSqlString(TSqlBuilder.Instance) + " AND " + subjectQueryString;

			if (QueryCondition.DraftDepartmentName != string.Empty)
			{
				whereCondition.Value += string.Format(" AND CONTAINS(DRAFT_DEPARTMENT_NAME,'\"*"
					+ TSqlBuilder.Instance.CheckQuotationMark(QueryCondition.DraftDepartmentName, false) + "*\"')");
			}

			whereCondition.Value += string.Format(" AND SEND_TO_USER = {0}",
										   TSqlBuilder.Instance.CheckQuotationMark(DeluxeIdentity.CurrentUser.ID, true));
			LastQueryRowCount = -1;
			this.GridViewTask.PageIndex = 0;
		}
		private void ExecQuery()
		{
			// AddPersonQueryStringFromOrganizations();添加组织结构人员

			bindingControl.CollectData();
			WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(QueryCondition,
				new AdjustConditionValueDelegate(AdjustQueryConditionValue));

			if (QueryCondition.ApplicationName == "全部")
			{
				QueryCondition.ApplicationName = "";
			}

			//builder.AppendItem("STATUS", (int)TaskStatus.Ban);
			builder.AppendItem("SEND_TO_USER", DeluxeIdentity.CurrentUser.ID);

			WhereSqlClauseBuilder wBuilder1 = new WhereSqlClauseBuilder();
			wBuilder1.AppendItem("EXPIRE_TIME", "null", "is", true);
			WhereSqlClauseBuilder wBuilder2 = new WhereSqlClauseBuilder();
			wBuilder2.AppendItem("EXPIRE_TIME", "not null", "is", true);
			wBuilder2.AppendItem("EXPIRE_TIME", "getdate()", ">", true);
			ConnectiveSqlClauseCollection collection = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);
			collection.Add(wBuilder1);
			collection.Add(wBuilder2);

			WhereSqlClauseBuilder wBuilder3 = new WhereSqlClauseBuilder();
			wBuilder3.AppendItem("STATUS", TaskStatus.Yue.ToString("d"));

			ConnectiveSqlClauseCollection collection1 = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);
			collection1.Add(wBuilder3);
			collection1.Add(collection);

			ConnectiveSqlClauseCollection collection2 = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);
			WhereSqlClauseBuilder wBuilder4 = new WhereSqlClauseBuilder();
			wBuilder4.AppendItem("STATUS", TaskStatus.Ban.ToString("d"));
			collection2.Add(collection1);
			collection2.Add(wBuilder4);

			ConnectiveSqlClauseCollection collection3 = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);
			collection3.Add(builder);
			collection3.Add(collection2);

			whereCondition.Value = collection3.ToSqlString(TSqlBuilder.Instance);

			if (QueryCondition.DraftDepartmentName != string.Empty)
			{
				whereCondition.Value += string.Format(" AND CONTAINS(DRAFT_DEPARTMENT_NAME,'\"*"
					+ TSqlBuilder.Instance.CheckQuotationMark(QueryCondition.DraftDepartmentName, false) + "*\"')");
			}

			if (QueryCondition.TaskTitle != string.Empty)
			{
				whereCondition.Value += string.Format(" AND CONTAINS(TASK_TITLE,'\"*"
					+ TSqlBuilder.Instance.CheckQuotationMark(QueryCondition.TaskTitle, false) + "*\"')");

			}

			LastQueryRowCount = -1;
			this.GridViewTask.SelectedKeys.Clear();
			this.GridViewTask.PageIndex = 0;
		}
		protected void ObjectDataSourceSelecting(object sender, ObjectDataSourceSelectingEventArgs e)
		{
			if (e.ExecutingSelectCount == false)
			{
				e.InputParameters["authType"] = (WfApplicationAuthType)int.Parse(this.rdoList.SelectedValue);
				if (views.ActiveViewIndex == 1)
				{
					if (string.IsNullOrEmpty(this.lastUser.Value))
					{
						e.Cancel = true;
					}
					else
					{
						e.InputParameters["appName"] = null;
						e.InputParameters["programName"] = null;
						e.InputParameters["authType"] = WfApplicationAuthType.None;

						WfApplicationAuthCollection authInfo = WfApplicationAuthAdapter.Instance.GetUserApplicationAuthInfo(new OguUser(lastUser.Value));

						string condition = "1=2";

						if (authInfo.Count > 0)
						{
							ConnectiveSqlClauseCollection allMatch = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);

							foreach (var item in authInfo)
							{
								WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
								where.AppendItem("APPLICATION_NAME", item.ApplicationName);
								where.AppendItem("PROGRAM_NAME", item.ProgramName);
								where.AppendItem("AUTH_TYPE", item.AuthType);
								allMatch.Add(where);
							}

							condition = allMatch.ToSqlString(TSqlBuilder.Instance);
						}
						else
						{
							e.Cancel = true;
						}

						e.InputParameters["where"] = condition;
					}
				}
			}
		}
		/// <summary>
		/// 根据TimePoint和状态来生成Builder
		/// </summary>
		/// <param name="includingDeleted"></param>
		/// <param name="timePoint"></param>
		/// <param name="tablePrefixes"></param>
		/// <returns></returns>
		private IConnectiveSqlClause CreateStatusAndTimePointBuilder(bool includingDeleted, DateTime timePoint, params string[] tablePrefixes)
		{
			ConnectiveSqlClauseCollection result = new ConnectiveSqlClauseCollection();

			foreach (string tablePrefix in tablePrefixes)
			{
				IConnectiveSqlClause timePointBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, tablePrefix);

				result.Add(timePointBuilder);

				WhereSqlClauseBuilder statusBuilder = new WhereSqlClauseBuilder();

				if (includingDeleted == false)
					statusBuilder.AppendItem(tablePrefix + "Status", (int)SchemaObjectStatus.Normal);

				result.Add(statusBuilder);
			}

			return result;
		}
        public ConnectiveSqlClauseCollection ToSqlBuilder()
        {
            ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);

            connectiveBuilder.Add(ConditionMapping.GetWhereSqlClauseBuilder(this));
            connectiveBuilder.Add(GetCurrentAssigneesSubQuery());
            connectiveBuilder.Add(GetAssigneeExceptionSubQuery());

            return connectiveBuilder;
        }
		protected void dataSourceMain_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
		{
			var conditons = this.DeluxeSearch.GetCondition();

			var allConditions = new ConnectiveSqlClauseCollection(conditons);

			//if (this.AdvanceSearchEnabled)
			{
				var condition = this.CurrentAdvancedSearchCondition;

				WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(condition);

				allConditions.Add(builder);
			}

			var subtreeLimit = this.Request.QueryString["superOf"];

			if (subtreeLimit != null)
			{
				var orgRelation = PC.Adapters.SchemaRelationObjectAdapter.Instance.LoadByObjectID(subtreeLimit)[0];
				WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
				where.AppendItem("R.FullPath", orgRelation.FullPath + "%", "NOT LIKE");

				allConditions.Add(where);
			}
			else
			{
				subtreeLimit = this.Request.QueryString["exceptOrg"];
				if (subtreeLimit != null)
				{
					if (subtreeLimit != PC.SCOrganization.RootOrganizationID)
					{
						var orgRelation = PC.Adapters.SchemaRelationObjectAdapter.Instance.LoadByObjectID(subtreeLimit)[0];
						WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
						where.AppendItem("R.FullPath", orgRelation.FullPath, "<>");

						allConditions.Add(where);
					}
				}
			}

			if (this.hfExcludes.Value.Length > 0)
			{
				string[] ids = MCS.Web.Library.Script.JSONSerializerExecute.Deserialize<string[]>(this.hfExcludes.Value);

				InSqlClauseBuilder inSql = new InSqlClauseBuilder("R.ObjectID");
				inSql.IsNotIn = true;
				inSql.AppendItem(ids);

				allConditions.Add(inSql);
			}

			var permissions = Request.QueryString.GetValues("permission");

			if (permissions != null && Util.SuperVisiorMode == false)
			{
				e.InputParameters["userID"] = Util.CurrentUser.ID;
				e.InputParameters["orgPermissions"] = permissions;
				this.dataSourceMain.Condition = allConditions;
			}
			else
			{
				this.dataSourceMain.Condition = allConditions;
			}
		}