Example #1
0
        private static string BuildRowsUsersSql(WfMatrixRowUsersCollection rowsUsers)
        {
            StringBuilder strB = new StringBuilder();

            foreach (WfMatrixRowUsers rowUsers in rowsUsers)
            {
                foreach (IUser user in rowUsers.Users)
                {
                    InsertSqlClauseBuilder builder = new InsertSqlClauseBuilder();

                    builder.AppendItem("MATRIX_ID", rowUsers.Row.Matrix.MatrixID);
                    builder.AppendItem("MATRIX_ROW_ID", rowUsers.Row.RowNumber);
                    builder.AppendItem("USER_ID", user.ID);
                    builder.AppendItem("USER_NAME", user.DisplayName);
                    builder.AppendTenantCode();

                    if (strB.Length > 0)
                    {
                        strB.Append(TSqlBuilder.Instance.DBStatementSeperator);
                    }

                    strB.AppendFormat("INSERT INTO WF.MATRIX_ROWS_USERS {0}", builder.ToSqlString(TSqlBuilder.Instance));
                }
            }

            return(strB.ToString());
        }
Example #2
0
        private static string GetUserTaskInsertSql(UserTask task, ORMappingItemCollection mapping, params string[] ignoreProperties)
        {
            InsertSqlClauseBuilder builder = ORMapping.GetInsertSqlClauseBuilder(task, mapping, ignoreProperties);

            builder.AppendTenantCode();

            return(string.Format("INSERT INTO {0} {1}", mapping.TableName, builder.ToSqlString(TSqlBuilder.Instance)));
        }
Example #3
0
        protected override string GetInsertSql(WfProcessDescriptorDimension data, ORMappingItemCollection mappings, Dictionary <string, object> context)
        {
            InsertSqlClauseBuilder iBuilder = ORMapping.GetInsertSqlClauseBuilder(data, mappings);

            iBuilder.AppendTenantCode();

            return(string.Format("INSERT INTO {0} {1}", mappings.TableName, iBuilder.ToSqlString(TSqlBuilder.Instance)));
        }
        /// <summary>
        /// 根据对象拼Insert语句时的方法
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="graph">对象</param>
        /// <param name="mapping">映射关系</param>
        /// <param name="ignoreProperties">忽略的字段</param>
        /// <returns>InsertSqlClauseBuilder对象,供拼Insert语句使用</returns>
        /// <remarks>
        /// 根据传入的对象和对象映射时需要忽略的字段,返回InsertSqlClauseBuilder对象,以供后续拼Insert语句的字段名称和Values部分
        /// <code source="..\Framework\TestProjects\DeluxeWorks.Library.Data.SqlBuilder.Test\ORMappingTest.cs" region="GetInsertSqlClauseBuilder" lang="cs" title="拼Insert语句"/>
        /// <see cref="MCS.Library.Data.Builder.InsertSqlClauseBuilder"/>
        /// </remarks>
        public static InsertSqlClauseBuilder GetInsertSqlClauseBuilder <T>(T graph, ORMappingItemCollection mapping, params string[] ignoreProperties)
        {
            ExceptionHelper.FalseThrow <ArgumentNullException>(graph != null, "graph");
            ExceptionHelper.FalseThrow <ArgumentNullException>(mapping != null, "mapping");

            InsertSqlClauseBuilder builder = new InsertSqlClauseBuilder();

            FillSqlClauseBuilder(builder, graph, mapping, ClauseBindingFlags.Insert,
                                 new DoSqlClauseBuilder <T>(DoInsertUpdateSqlClauseBuilder <T>), ignoreProperties);

            builder.AppendTenantCode(typeof(T));

            return(builder);
        }
Example #5
0
        private static string BuildInsertRowSql(string wfMatrixID, WfMatrixRow row)
        {
            StringBuilder          result        = new StringBuilder();
            InsertSqlClauseBuilder insertBuilder = new InsertSqlClauseBuilder();

            insertBuilder.AppendItem(DB_FIELD_MATRIX_ID, wfMatrixID);
            insertBuilder.AppendItem(DB_FIELD_MATRIX_ROW_ID, row.RowNumber);
            insertBuilder.AppendItem(DB_FIELD_OPERATOR_TYPE, (int)row.OperatorType);
            insertBuilder.AppendItem(DB_FIELD_OPERATOR, row.Operator);
            insertBuilder.AppendTenantCode();

            result.Append(INSERT_MR_SQL_CLAUSE_PREFIX);
            result.Append(insertBuilder.ToSqlString(TSqlBuilder.Instance));
            result.Append(TSqlBuilder.Instance.DBStatementSeperator);

            return(result.ToString());
        }
Example #6
0
        private static string BuildInsertCellSql(string wfMatrixID, WfMatrixRow row, WfMatrixCell cell)
        {
            StringBuilder          result        = new StringBuilder();
            InsertSqlClauseBuilder insertBuilder = new InsertSqlClauseBuilder();

            insertBuilder.AppendItem(DB_FIELD_MATRIX_ID, wfMatrixID);
            insertBuilder.AppendItem(DB_FIELD_MATRIX_ROW_ID, row.RowNumber);
            insertBuilder.AppendItem(DB_FIELD_DIMENSION_KEY, cell.Definition.DimensionKey);
            insertBuilder.AppendItem(DB_FIELD_STRING_VALUE, cell.StringValue);
            insertBuilder.AppendTenantCode();

            result.Append(INSERT_MC_SQL_CLAUSE_PREFIX);
            result.Append(insertBuilder.ToSqlString(TSqlBuilder.Instance));
            result.Append(TSqlBuilder.Instance.DBStatementSeperator);

            return(result.ToString());
        }
Example #7
0
        protected override void AfterInnerUpdate(JobBase data, Dictionary <string, object> context)
        {
            //更新任务-计划映射表JOB_SCHEDULES
            StringBuilder insertClause = new StringBuilder();

            insertClause.Append(GetJobSchedulesDeleteClause(data.JobID));
            insertClause.Append(TSqlBuilder.Instance.DBStatementSeperator);

            foreach (var schedule in data.Schedules)
            {
                InsertSqlClauseBuilder insertBuilder = new InsertSqlClauseBuilder();
                insertBuilder.AppendItem("JOB_ID", data.JobID);
                insertBuilder.AppendItem("SCHEDULE_ID", schedule.ID);
                insertBuilder.AppendTenantCode();

                insertClause.Append(INSERT_JOB_SCHEDULES_SQL_CLAUSE + insertBuilder.ToSqlString(TSqlBuilder.Instance));
                insertClause.Append(TSqlBuilder.Instance.DBStatementSeperator);
            }

            DbHelper.RunSql(insertClause.ToString(), GetConnectionName());
        }
        public void Update()
        {
            XElementFormatter formatter = new XElementFormatter();

            formatter.OutputShortType = WorkflowSettings.GetConfig().OutputShortType;

            string properties = formatter.Serialize(this).ToString();

            string updateSQL = string.Format("UPDATE WF.GLOBAL_PARAMETERS SET [PROPERTIES] = {0} WHERE {1}",
                                             TSqlBuilder.Instance.CheckQuotationMark(properties, true),
                                             GetWhereSqlClauseBuilder(this.Key).ToSqlString(TSqlBuilder.Instance));

            using (DbContext context = DbContext.GetContext(WorkflowSettings.GetConfig().ConnectionName))
            {
                using (TransactionScope scope = TransactionScopeFactory.Create())
                {
                    if (DbHelper.RunSql(updateSQL, WorkflowSettings.GetConfig().ConnectionName) == 0)
                    {
                        InsertSqlClauseBuilder iBuilder = new InsertSqlClauseBuilder();

                        iBuilder.AppendItem("[KEY]", this.Key);
                        iBuilder.AppendItem("[PROPERTIES]", properties);
                        iBuilder.AppendTenantCode(typeof(WfGlobalParameters));

                        string insertSQL = string.Format("INSERT INTO WF.GLOBAL_PARAMETERS {0}",
                                                         iBuilder.ToSqlString(TSqlBuilder.Instance));

                        DbHelper.RunSql(insertSQL, WorkflowSettings.GetConfig().ConnectionName);
                    }

                    scope.Complete();
                }
            }

            CacheNotifyData notifyData = new CacheNotifyData(typeof(WfGlobalParametersCache), CalculateCacheKey(this.Key), CacheNotifyType.Invalid);

            UdpCacheNotifier.Instance.SendNotifyAsync(notifyData);
            MmfCacheNotifier.Instance.SendNotify(notifyData);
        }
        private void PrepareRoleContainers(string roleID, SOARolePropertyRowRolesCollection rowsRoles, StringBuilder strB)
        {
            foreach (SOARolePropertyRowRoles rowRoles in rowsRoles)
            {
                foreach (IRole role in rowRoles.Roles)
                {
                    InsertSqlClauseBuilder builder = new InsertSqlClauseBuilder();

                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);

                    builder.AppendItem("ROLE_ID", roleID);
                    builder.AppendItem("ROW_NUMBER", rowRoles.Row.RowNumber);
                    builder.AppendItem("OPERATOR_TYPE", (int)rowRoles.Row.OperatorType);
                    builder.AppendItem("OPERATOR_ID", role.ID);
                    builder.AppendItem("OPERATOR_NAME", role.FullCodeName);

                    builder.AppendTenantCode();

                    string sql = string.Format("INSERT INTO WF.ROLE_PROPERTIES_USER_CONTAINERS {0}", builder.ToSqlString(TSqlBuilder.Instance));

                    strB.Append(sql);
                }
            }
        }
Example #10
0
        public void SaveProcess(IWfProcess process)
        {
            WfProcessInstanceData instanceData = WfProcessInstanceData.FromProcess(process);

            if (instanceData.Data.IsNotEmpty())
            {
                if (WorkflowSettings.GetConfig().Compressed)
                {
                    XElement extData = GetExtData(instanceData.ExtData);

                    PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("CompressProcess", () =>
                    {
                        instanceData.BinaryData = GetCompressedStream(instanceData.Data, Encoding.GetEncoding(extData.Attribute("encoding", "utf-8")));
                        instanceData.Data       = string.Empty;
                    });
                }
            }

            string sql = string.Empty;

            ORMappingItemCollection mapping = ORMapping.GetMappingInfo <WfProcessInstanceData>();

            if (process.LoadingType == DataLoadingType.External)
            {
                UpdateSqlClauseBuilder uBuilder = ORMapping.GetUpdateSqlClauseBuilder(instanceData, mapping);

                uBuilder.AppendItem("UPDATE_TAG", "UPDATE_TAG + 1", "=", true);
                uBuilder.AppendTenantCode();

                WhereSqlClauseBuilder whereBuilder = ORMapping.GetWhereSqlClauseBuilderByPrimaryKey(instanceData, mapping);

                whereBuilder.AppendItem("UPDATE_TAG", process.UpdateTag);

                sql = string.Format("UPDATE {0} SET {1} WHERE {2}",
                                    mapping.TableName, uBuilder.ToSqlString(TSqlBuilder.Instance), whereBuilder.ToSqlString(TSqlBuilder.Instance));
            }
            else
            {
                InsertSqlClauseBuilder iBuilder = ORMapping.GetInsertSqlClauseBuilder(instanceData, mapping);
                iBuilder.AppendTenantCode();

                sql = string.Format("INSERT INTO {0} {1}", mapping.TableName, iBuilder.ToSqlString(TSqlBuilder.Instance));
            }

            Dictionary <object, object> context = new Dictionary <object, object>();

            using (TransactionScope scope = TransactionScopeFactory.Create())
            {
                PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("WriteProcessToDB", () =>
                                                                                    (DbHelper.RunSql(sql, GetConnectionName()) > 0).FalseThrow <WfRuntimeException>(
                                                                                        Translator.Translate(Define.DefaultCulture, "更新流程{0}失败,流程状态已经改变", process.ID))
                                                                                    );

                PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("WriteProcessActivitiesToDB",
                                                                                    () => WfProcessCurrentActivityAdapter.Instance.UpdateProcessActivities(process));

                PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("WriteRelativeProcessInfoToDB", () =>
                {
                    WfRelativeProcessAdapter.Instance.Delete(new WfRelativeProcess()
                    {
                        ProcessID = process.ID
                    });

                    if (process.RelativeID.IsNotEmpty())
                    {
                        WfRelativeProcessAdapter.Instance.Update(new WfRelativeProcess()
                        {
                            Description = string.IsNullOrEmpty(process.Descriptor.Description) ? process.Descriptor.Name : process.Descriptor.Description,
                            ProcessID   = process.ID,
                            RelativeID  = process.RelativeID,
                            RelativeURL = process.RelativeURL
                        });
                    }
                });

                if (WorkflowSettings.GetConfig().SaveRelativeData)
                {
                    PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("WriteRelativeDataToDB",
                                                                                        () => WfExtraPersistenceSettings.GetConfig().GetPersisters().SaveData(process, context));
                }

                scope.Complete();
            }
        }
        private void PrepareRoleContainers(string roleID, SOARolePropertyRowRolesCollection rowsRoles, StringBuilder strB)
        {
            foreach (SOARolePropertyRowRoles rowRoles in rowsRoles)
            {
                foreach (IRole role in rowRoles.Roles)
                {
                    InsertSqlClauseBuilder builder = new InsertSqlClauseBuilder();

                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);

                    builder.AppendItem("ROLE_ID", roleID);
                    builder.AppendItem("ROW_NUMBER", rowRoles.Row.RowNumber);
                    builder.AppendItem("OPERATOR_TYPE", (int)rowRoles.Row.OperatorType);
                    builder.AppendItem("OPERATOR_ID", role.ID);
                    builder.AppendItem("OPERATOR_NAME", role.FullCodeName);

                    builder.AppendTenantCode();

                    string sql = string.Format("INSERT INTO WF.ROLE_PROPERTIES_USER_CONTAINERS {0}", builder.ToSqlString(TSqlBuilder.Instance));

                    strB.Append(sql);
                }
            }
        }