Пример #1
0
        /// <summary>
        /// 创建一个缺省的审批流模板
        /// </summary>
        /// <param name="key"></param>
        /// <param name="processDespKey">流程描述的Key</param>
        /// <param name="execSequence"></param>
        /// <param name="blockingType"></param>
        /// <param name="users"></param>
        /// <returns></returns>
        public static IWfBranchProcessTemplateDescriptor CreateDefaultApprovalTemplate(
            string key,
            string processDespKey,
            WfBranchProcessExecuteSequence execSequence,
            WfBranchProcessBlockingType blockingType,
            IEnumerable <IUser> users)
        {
            key.CheckStringIsNullOrEmpty("key");
            users.NullCheck("users");

            WfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor(key);

            template.BranchProcessKey = WfProcessDescriptorManager.DefaultApprovalProcessKey;
            template.ExecuteSequence  = execSequence;
            template.BlockingType     = blockingType;

            users = users.Distinct(new OguObjectIDEqualityComparer <IUser>());

            foreach (IUser user in users)
            {
                template.Resources.Add(new WfUserResourceDescriptor(user));
            }

            return(template);
        }
Пример #2
0
        private HomogenousNGrams(IEnumerable <NGram <T> > grams, int n)
        {
            grams.NullCheck();

            this.nGrams = grams;
            this.N      = n;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="operatorActivity">操作人所在的Activity,可以为null</param>
        /// <param name="targetActivity">需要替换人员的目标活动</param>
        /// <param name="originalAssignee"></param>
        /// <param name="targetAssignees"></param>
        public WfReplaceAssigneesExecutor(IWfActivity operatorActivity, IWfActivity targetActivity, IUser originalAssignee, IEnumerable <IUser> targetAssignees)
            : base(operatorActivity, WfControlOperationType.ReplaceAssignees)
        {
            targetActivity.NullCheck("targetActivity");
            targetAssignees.NullCheck("targetAssignees");

            if (originalAssignee != null)
            {
                this._OriginalAssignees.Add(originalAssignee);
            }
            else
            {
                this._OriginalAssignees.CopyFrom(targetActivity.Assignees.ToUsers());

                if (this._OriginalAssignees.Count == 0)
                {
                    this._OriginalAssignees.CopyFrom(targetActivity.Candidates.ToUsers());
                }
            }

            this.TargetAssignees = targetAssignees;
            this.TargetActivity  = targetActivity;

            if (OperatorActivity == null)
            {
                OperatorActivity = this.TargetActivity;
            }
        }
Пример #4
0
        /// <summary>
        /// 将活动矩阵与审批矩阵进行合并,以第一个矩阵的列定义为准
        /// </summary>
        /// <param name="amRows"></param>
        /// <param name="amDefinitions"></param>
        /// <param name="apRows"></param>
        /// <param name="apDefinitions"></param>
        public static void MergeActivityMatrix(this SOARolePropertyRowCollection amRows, SOARolePropertyDefinitionCollection amDefinitions, IEnumerable <SOARolePropertyRow> apRows, SOARolePropertyDefinitionCollection apDefinitions)
        {
            amDefinitions.NullCheck("amDefinitions");
            amRows.NullCheck("amRows");
            apDefinitions.NullCheck("apDefinitions");
            apRows.NullCheck("apRows");

            int maxRowNumber = GetMaxRowNumber(amRows);

            foreach (SOARolePropertyRow apRow in apRows)
            {
                SOARolePropertyRow newRow = new SOARolePropertyRow(amRows.Role);

                newRow.RowNumber    = ++maxRowNumber;
                newRow.OperatorType = apRow.OperatorType;
                newRow.Operator     = apRow.Operator;

                foreach (SOARolePropertyValue srv in apRow.Values)
                {
                    if (amDefinitions.ContainsKey(srv.Column.Name))
                    {
                        SOARolePropertyValue newValue = new SOARolePropertyValue(amDefinitions[srv.Column.Name]);

                        newValue.Value = srv.Value;

                        newRow.Values.Add(newValue);
                    }
                }
            }
        }
Пример #5
0
        /// <summary>
        /// 在一个事件下增加频道(UI上用于频道列表)
        /// </summary>
        /// <param name="eventID"></param>
        /// <param name="channelIDs"></param>
        /// <returns></returns>
        public int AddChannel(string eventID, IEnumerable <string> channelIDs)
        {
            eventID.CheckStringIsNullOrEmpty("eventID");
            channelIDs.NullCheck("channelIDs");

            StringBuilder strB = new StringBuilder();

            AMSEventChannel eventChannel = new AMSEventChannel();

            eventChannel.EventID   = eventID;
            eventChannel.State     = AMSEventState.NotStart;
            eventChannel.IsDefault = false;

            foreach (string channelID in channelIDs)
            {
                eventChannel.ChannelID = channelID;

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

                strB.Append(ORMapping.GetInsertSql(eventChannel, TSqlBuilder.Instance));
            }

            int result = 0;

            if (strB.Length > 0)
            {
                result = DbHelper.RunSqlWithTransaction(strB.ToString(), this.GetConnectionName());
            }

            return(result);
        }
Пример #6
0
        /// <summary>
        /// 删除某个事件下的频道(UI上用于频道列表)
        /// </summary>
        /// <param name="eventID"></param>
        /// <param name="channelIDs"></param>
        /// <param name="includeDefault">是否包含默认频道</param>
        public int DeleteChannels(string eventID, IEnumerable <string> channelIDs, bool includeDefault = false)
        {
            eventID.CheckStringIsNullOrEmpty("eventID");
            channelIDs.NullCheck("channelIDs");

            InSqlClauseBuilder builder = new InSqlClauseBuilder("ChannelID");

            channelIDs.ForEach(channelID => builder.AppendItem(channelID));

            ORMappingItemCollection mappings = ORMapping.GetMappingInfo(typeof(AMSEventChannel));

            string sql = string.Format("DELETE {0} WHERE {1}", mappings.TableName, builder.ToSqlStringWithInOperator(TSqlBuilder.Instance));

            int result = 0;

            if (builder.IsEmpty == false)
            {
                if (includeDefault == false)
                {
                    sql += " AND IsDefault <> 1";
                }

                result = DbHelper.RunSql(sql, this.GetConnectionName());
            }

            return(result);
        }
Пример #7
0
 public static IEnumerable <T> NonEmpties <T>(this IEnumerable <T> source) where T : class
 {
     return(source
            .NullCheck()
            .Where(x => x != null)
            .Where(x => !(x is string) || !string.IsNullOrEmpty(x.As <string>())));
 }
Пример #8
0
        /// <summary>
        /// 将活动矩阵与审批矩阵进行合并,以第一个矩阵的列定义为准
        /// </summary>
        /// <param name="amRows"></param>
        /// <param name="amDefinitions"></param>
        /// <param name="apRows"></param>
        /// <param name="apDefinitions"></param>
        public static void MergeActivityMatrix(this SOARolePropertyRowCollection amRows, SOARolePropertyDefinitionCollection amDefinitions, IEnumerable<SOARolePropertyRow> apRows, SOARolePropertyDefinitionCollection apDefinitions)
        {
            amDefinitions.NullCheck("amDefinitions");
            amRows.NullCheck("amRows");
            apDefinitions.NullCheck("apDefinitions");
            apRows.NullCheck("apRows");

            int maxRowNumber = GetMaxRowNumber(amRows);

            foreach (SOARolePropertyRow apRow in apRows)
            {
                SOARolePropertyRow newRow = new SOARolePropertyRow(amRows.Role);

                newRow.RowNumber = ++maxRowNumber;
                newRow.OperatorType = apRow.OperatorType;
                newRow.Operator = apRow.Operator;

                foreach (SOARolePropertyValue srv in apRow.Values)
                {
                    if (amDefinitions.ContainsKey(srv.Column.Name))
                    {
                        SOARolePropertyValue newValue = new SOARolePropertyValue(amDefinitions[srv.Column.Name]);

                        newValue.Value = srv.Value;

                        newRow.Values.Add(newValue);
                    }
                }
            }
        }
        public void UpdateProcessStatus(IEnumerable <IWfProcess> processes)
        {
            processes.NullCheck("processes");

            StringBuilder strB = new StringBuilder();

            foreach (IWfProcess process in processes)
            {
                if (process.SearchID.IsNotEmpty())
                {
                    if (strB.Length > 0)
                    {
                        strB.Append(TSqlBuilder.Instance.DBStatementSeperator);
                    }

                    WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

                    builder.AppendItem("RESOURCE_ID", process.SearchID);
                    builder.AppendTenantCode(typeof(AppCommonInfo));

                    strB.AppendFormat("UPDATE WF.APPLICATIONS_COMMON_INFO SET COMPLETED_FLAG = {0} WHERE {1}",
                                      (int)AppCommonInfo.ConvertProcessStatusToCompletedFlag(process.Status),
                                      builder.ToSqlString(TSqlBuilder.Instance));
                }
            }

            if (strB.Length > 0)
            {
                DbHelper.RunSqlWithTransaction(strB.ToString(), this.GetConnectionName());
            }
        }
        public AMSChannelInEventExecutorBase(string eventID, IEnumerable <string> channelIDs, AMSOperationType operationType) : base(operationType)
        {
            eventID.CheckStringIsNullOrEmpty("eventID");
            channelIDs.NullCheck("channelIDs");

            this.EventID    = eventID;
            this.ChannelIDs = channelIDs;
        }
Пример #11
0
 public static string JoinNonEmpties(this IEnumerable <string> source, string separator)
 {
     return(source
            .NullCheck()
            .Where(x => x != null)
            .Where(x => !string.IsNullOrEmpty(x.Trim()))
            .Join(separator));
 }
        public void ClientToServer(IEnumerable<KeyValuePair<string, object>> client, IDictionary<string, object> server)
        {
            client.NullCheck("client");
            server.NullCheck("server");

            foreach (KeyValuePair<string, object> kp in client)
                server[kp.Key] = ClientObjectToServer(kp.Value);
        }
Пример #13
0
        public void InitFromProperties(IEnumerable <PropertyInfo> properties)
        {
            properties.NullCheck("properties");

            this.Clear();

            properties.ForEach(pi => this.Add(new TableColumnDescription(pi)));
        }
        public void ServerToClient(IEnumerable<KeyValuePair<string, object>> server, IDictionary<string, object> client)
        {
            client.NullCheck("client");
            server.NullCheck("server");

            foreach (KeyValuePair<string, object> kp in server)
                client[kp.Key] = ServerObjectToClient(kp.Value);
        }
Пример #15
0
        public WfCirculateExecutor(IWfActivity operatorActivity,
                                IWfActivity targetActivity,
                                IEnumerable<IUser> circulators)
            : base(operatorActivity, targetActivity, WfControlOperationType.Circulate)
        {
            circulators.NullCheck("circulators");

            this.Circulators = circulators;
        }
        /// <summary>
        /// 从意见ID加载
        /// </summary>
        /// <param name="opinionIDs"></param>
        /// <returns></returns>
        public GenericOpinionCollection LoadByIDs(IEnumerable <string> opinionIDs)
        {
            opinionIDs.NullCheck("opinionIDs");

            return(this.LoadByInBuilder(new InLoadingCondition(
                                            inBuilder => opinionIDs.ForEach(oID => inBuilder.AppendItem(oID)),
                                            orderBuilder => orderBuilder.AppendItem("ISSUE_DATETIME", FieldSortDirection.Ascending),
                                            "ID")));
        }
        public AMSChannelInEventExecutorBase(string eventID, IEnumerable<string> channelIDs, AMSOperationType operationType)
            : base(operationType)
        {
            eventID.CheckStringIsNullOrEmpty("eventID");
            channelIDs.NullCheck("channelIDs");

            this.EventID = eventID;
            this.ChannelIDs = channelIDs;
        }
Пример #18
0
        public WfCirculateExecutor(IWfActivity operatorActivity,
                                   IWfActivity targetActivity,
                                   IEnumerable <IUser> circulators)
            : base(operatorActivity, targetActivity, WfControlOperationType.Circulate)
        {
            circulators.NullCheck("circulators");

            this.Circulators = circulators;
        }
Пример #19
0
        public WfClientBranchProcessTransferParams(WfClientBranchProcessTemplateDescriptor template, IEnumerable <ClientOguUser> users)
        {
            template.NullCheck("template");
            users.NullCheck("users");
            this._Template = template;
            WfClientBranchProcessStartupParams branch = new WfClientBranchProcessStartupParams(users);

            this.BranchParams.Add(branch);
        }
        /// <summary>
        /// 从DataRow构造行信息
        /// </summary>
        /// <param name="rows"></param>
        /// <param name="definitions"></param>
        /// <param name="func"></param>
        public void FromDataTable(DataRowCollection rows, IEnumerable <SOARolePropertyDefinition> definitions, Func <DataRow, SOARolePropertyRow, bool> func = null)
        {
            rows.NullCheck("rows");
            definitions.NullCheck("definitions");

            this.Clear();

            int rowIndex = 1;

            foreach (DataRow row in rows)
            {
                SOARolePropertyRow mRow = new SOARolePropertyRow()
                {
                    RowNumber = rowIndex++
                };

                foreach (SOARolePropertyDefinition definition in definitions)
                {
                    if (row.Table.Columns.Contains(definition.Name))
                    {
                        SOARolePropertyValue mCell = new SOARolePropertyValue(definition);
                        mCell.Value = row[definition.Name].ToString();

                        switch (definition.Name)
                        {
                        case SOARolePropertyDefinition.OperatorColumn:
                            mRow.Operator = row[definition.Name].ToString();
                            break;

                        case SOARolePropertyDefinition.OperatorTypeColumn:
                            SOARoleOperatorType opType = SOARoleOperatorType.User;
                            Enum.TryParse(row[definition.Name].ToString(), out opType);
                            mRow.OperatorType = opType;
                            break;

                        default:
                            break;
                        }

                        mRow.Values.Add(mCell);
                    }
                }

                bool canAdd = true;

                if (func != null)
                {
                    canAdd = func(row, mRow);
                }

                if (canAdd)
                {
                    this.Add(mRow);
                }
            }
        }
Пример #21
0
        public void ClientToServer(IEnumerable <KeyValuePair <string, object> > client, IDictionary <string, object> server)
        {
            client.NullCheck("client");
            server.NullCheck("server");

            foreach (KeyValuePair <string, object> kp in client)
            {
                server[kp.Key] = ClientObjectToServer(kp.Value);
            }
        }
Пример #22
0
        public static IEnumerable <double> Normalize(this IEnumerable <double> l)
        {
            l.NullCheck();
            double max = l.Max();

            foreach (var item in l)
            {
                yield return(item / max);
            }
        }
Пример #23
0
        public void ServerToClient(IEnumerable <KeyValuePair <string, object> > server, IDictionary <string, object> client)
        {
            client.NullCheck("client");
            server.NullCheck("server");

            foreach (KeyValuePair <string, object> kp in server)
            {
                client[kp.Key] = ServerObjectToClient(kp.Value);
            }
        }
Пример #24
0
        public static AMSChannelCollection ToAMSChannels(this IEnumerable <IChannel> channels)
        {
            channels.NullCheck("channels");

            AMSChannelCollection result = new AMSChannelCollection();

            channels.AsEnumerable().ForEach(c => result.Add(c.ToAMSChannel()));

            return(result);
        }
Пример #25
0
    public static IEnumerable <T> Each <T>(this IEnumerable <T> source, Action <T> action)
    {
        var array = source.NullCheck().ToArray();

        foreach (var item in array)
        {
            action(item);
        }
        return(array);
    }
Пример #26
0
    public static IEnumerable <T> Each <T>(this IEnumerable <T> source, Action <T, int> action)
    {
        var array = source.NullCheck().ToArray();

        for (int i = 0; i < array.Length; i++)
        {
            action(array[i], i);
        }
        return(array);
    }
        /// <summary>
        /// 仅复制目标集合中已有的属性
        /// </summary>
        /// <param name="cpvc"></param>
        /// <param name="pvc"></param>
        public void ClientToServer(IEnumerable<ClientPropertyValue> cpvc, PropertyValueCollection pvc)
        {
            cpvc.NullCheck("cpvc");
            pvc.NullCheck("pvc");

            foreach (ClientPropertyValue cpv in cpvc)
            {
                if (pvc.ContainsKey(cpv.Key))
                    ClientPropertyValueConverter.Instance.ClientToServer(cpv, pvc[cpv.Key]);
            }
        }
Пример #28
0
        /// <summary>
        /// 从意见ID加载
        /// </summary>
        /// <param name="opinionIDs"></param>
        /// <returns></returns>
        public GenericOpinionCollection LoadByIDs(IEnumerable <string> opinionIDs)
        {
            opinionIDs.NullCheck("opinionIDs");

            return(LoadByInBuilder(inBuilder =>
            {
                inBuilder.DataField = "ID";
                opinionIDs.ForEach(oID => inBuilder.AppendItem(oID));
            },
                                   orderBuilder => orderBuilder.AppendItem("ISSUE_DATETIME", FieldSortDirection.Ascending)));
        }
Пример #29
0
        public static ReadOnlyCollection <T> AsReadOnly <T>(this IEnumerable <T> source)
        {
            var readOnly = source as ReadOnlyCollection <T>;

            if (readOnly != null)
            {
                return(readOnly);
            }

            var list = source as IList <T> ?? source.NullCheck().ToArray();

            return(new ReadOnlyCollection <T>(list));
        }
        /// <summary>
        /// 仅复制目标集合中已有的属性
        /// </summary>
        /// <param name="cpvc"></param>
        /// <param name="pvc"></param>
        public void ClientToServer(IEnumerable <ClientPropertyValue> cpvc, PropertyValueCollection pvc)
        {
            cpvc.NullCheck("cpvc");
            pvc.NullCheck("pvc");

            foreach (ClientPropertyValue cpv in cpvc)
            {
                if (pvc.ContainsKey(cpv.Key))
                {
                    ClientPropertyValueConverter.Instance.ClientToServer(cpv, pvc[cpv.Key]);
                }
            }
        }
Пример #31
0
        public void ClientToServer(IEnumerable <WfClientTransitionDescriptor> client, ICollection <IWfTransitionDescriptor> server)
        {
            client.NullCheck("client");

            foreach (WfClientTransitionDescriptor ct in client)
            {
                WfTransitionDescriptor st = null;

                WfClientTransitionDescriptorConverter.Instance.ClientToServer(ct, ref st);

                server.Add(st);
            }
        }
Пример #32
0
        public void ServerToClient(IEnumerable <IWfTransitionDescriptor> server, ICollection <WfClientTransitionDescriptor> client)
        {
            server.NullCheck("server");

            foreach (WfTransitionDescriptor st in server)
            {
                WfClientTransitionDescriptor ct = null;

                WfClientTransitionDescriptorConverter.Instance.ServerToClient(st, ref ct);

                client.Add(ct);
            }
        }
Пример #33
0
        public void ServerToClient(IEnumerable <WfBranchProcessStartupParams> server, ICollection <WfClientBranchProcessStartupParams> client)
        {
            server.NullCheck("server");

            foreach (WfBranchProcessStartupParams st in server)
            {
                WfClientBranchProcessStartupParams ct = null;

                WfClientBranchProcessStartupParamsConverter.Instance.ServerToClient(st, ref ct);

                client.Add(ct);
            }
        }
        public void ClientToServer(IEnumerable<WfClientBranchProcessStartupParams> client, ICollection<WfBranchProcessStartupParams> server)
        {
            client.NullCheck("client");

            foreach (WfClientBranchProcessStartupParams ct in client)
            {
                WfBranchProcessStartupParams st = null;

                WfClientBranchProcessStartupParamsConverter.Instance.ClientToServer(ct, ref st);

                server.Add(st);
            }
        }
Пример #35
0
        public void ClientToServer(IEnumerable <WfClientBranchProcessTransferParams> client, ICollection <WfBranchProcessTransferParams> server)
        {
            client.NullCheck("client");

            foreach (WfClientBranchProcessTransferParams ct in client)
            {
                WfBranchProcessTransferParams st = null;

                WfClientBranchProcessTransferParamsConverter.Instance.ClientToServer(ct, ref st);

                server.Add(st);
            }
        }
Пример #36
0
        /// <summary>
        /// 构造方法。根据分支流程模板以及传递进来的人员初始化BranchParams
        /// </summary>
        /// <param name="template"></param>
        /// <param name="users"></param>
        public WfBranchProcessTransferParams(IWfBranchProcessTemplateDescriptor template, IEnumerable <IUser> users)
        {
            template.NullCheck("template");
            users.NullCheck("users");

            this._Template = template;
            this.BranchParams.Add(users);

            if (template.DefaultTaskTitle.IsNotEmpty())
            {
                this.BranchParams.ForEach(b => b.DefaultTaskTitle = template.DefaultTaskTitle);
            }
        }
Пример #37
0
        public static int Count <T>(this IEnumerable <T> t, Func <T, int> func)
        {
            t.NullCheck();
            func.NullCheck();

            int count = 0;

            foreach (var item in t)
            {
                count += func(item);
            }

            return(count);
        }
        /// <summary>
        /// 如果目标集合中不存在,则添加一项
        /// </summary>
        /// <param name="pvc"></param>
        /// <param name="cpvc"></param>
        public void ServerToClient(IEnumerable<PropertyValue> pvc, ClientPropertyValueCollection cpvc)
        {
            pvc.NullCheck("pvc");
            cpvc.NullCheck("cpvc");

            foreach (PropertyValue pv in pvc)
            {
                ClientPropertyValue cpv = cpvc[pv.Definition.Name];

                if (cpv == null)
                {
                    cpv = new ClientPropertyValue(pv.Definition.Name);
                    cpvc.Add(cpv);
                }
                ClientPropertyValueConverter.Instance.ServerToClient(pv, cpv);
            }
        }
        public WfClientUserOperationLogCollection ServerToClient(IEnumerable<UserOperationLog> server)
        {
            server.NullCheck("server");

            WfClientUserOperationLogCollection client = new WfClientUserOperationLogCollection();

            foreach (UserOperationLog serverItem in server)
            {
                WfClientUserOperationLog clientItem = null;

                this.ServerToClient(serverItem, ref clientItem);

                client.Add(clientItem);
            }

            return client;
        }
Пример #40
0
        public async void Play(IEnumerable<NGram<Chord>> enumerable)
        {
            Task.Factory.StartNew(() =>
                {
                    enumerable.NullCheck();

                    this.Playing = true;

                    var many = enumerable.SelectMany(x => x);
                    var count = many.Count(item => item.MidiChunk.Count);

                    foreach (var item in many)
                    {
                        foreach (var note in item.MidiChunk.Where(x => x.MidiMessage is ChannelMessage))
                        {
                            if (!Playing)
                            {
                                return;
                            }
                            var message = note.MidiMessage as ChannelMessage;
                            this.outDevice.Send(message);
                            if (note.DeltaTicks != 0)
                            {

                                float kSecondsPerTick = note.DeltaTicks / (OutputConstants.TicksPerQuarter * 1000000.0f);
                                float deltaTimeInMilliSeconds = note.DeltaTicks * kSecondsPerTick * 10000;
                                if (deltaTimeInMilliSeconds < 2000)
                                {
                                    this.wait = (int)deltaTimeInMilliSeconds;
                                    Thread.Sleep(this.wait);
                                }
                                else
                                {
                                    this.wait = OutputConstants.GotoSleepTImeInMilliseconds;
                                    Thread.Sleep(OutputConstants.GotoSleepTImeInMilliseconds);
                                }
                            }
                            else if (null != message && message.Command == ChannelCommand.NoteOn)
                            {
                                Thread.Sleep(OutputConstants.GotoSleepTImeInMilliseconds);
                            }
                        }
                    }
                });
        }
		/// <summary>
		/// 批量更新
		/// </summary>
		/// <param name="ownerID"></param>
		/// <param name="users"></param>
		public void UpdateBatch(string ownerID, IEnumerable<SchemaObjectBase> users)
		{
			ownerID.CheckStringIsNullOrEmpty("ownerID");
			users.NullCheck("users");

			StringBuilder strB = new StringBuilder();

			strB.Append(GetDeleteConditionCalculateResultSql(ownerID));

			foreach (SchemaObjectBase user in users)
			{
				strB.Append(TSqlBuilder.Instance.DBStatementSeperator);

				strB.Append(GetInsertConditionCalculateResultSql(ownerID, user.ID));
			}

			DbHelper.RunSqlWithTransaction(strB.ToString(), this.GetConnectionName());
		}
		public void Update(string ownerID, IEnumerable<SchemaObjectBase> users)
		{
			ownerID.CheckStringIsNullOrEmpty("ownerID");
			users.NullCheck("users");

			using (DbContext context = DbContext.GetContext(this.GetConnectionName()))
			{
				DbHelper.RunSqlWithTransaction(GetDeleteConditionCalculateResultSql(ownerID), this.GetConnectionName());

				StringBuilder strB = new StringBuilder();

				foreach (SchemaObjectBase user in users)
					DbHelper.RunSql(GetInsertConditionCalculateResultSql(ownerID, user.ID), this.GetConnectionName());

				ProcessProgress.Current.Increment();
				ProcessProgress.Current.Response();
			}
		}
Пример #43
0
		public WfConsignExecutor(IWfActivity operatorActivity,
								IWfActivity targetActivity,
								WfAssigneeCollection assignees,
								IEnumerable<IUser> consignUsers,
								IEnumerable<IUser> circulateUsers,
								WfBranchProcessBlockingType blockingType,
								WfBranchProcessExecuteSequence sequence)
			: base(operatorActivity, targetActivity, WfControlOperationType.Consign)
		{
			assignees.NullCheck("assignees");
			consignUsers.NullCheck("users");

			(consignUsers.Count() > 0).FalseThrow<WfRuntimeException>("参与会签的用户数必须大于零");

			this.Assignees.CopyFrom(assignees);
			this.ConsignUsers = consignUsers;
			this.CirculateUsers = circulateUsers;
			this.BlockingType = blockingType;
			this.Sequence = sequence;
		}
Пример #44
0
		/// <summary>
		/// 得到参数名称和方法参数的匹配度
		/// </summary>
		/// <param name="mi"></param>
		/// <param name="parameterNames"></param>
		/// <returns></returns>
		public static int GetParamsMatchedLevel(this MethodBase mi, IEnumerable<string> parameterNames)
		{
			mi.NullCheck("mi");
			parameterNames.NullCheck("parameterNames");

			int result = 0;

			List<string> parameterNameListInMethod = new List<string>();

			CollectMethodParameterNames(mi, parameterNameListInMethod);

			foreach (string pNameInMethod in parameterNameListInMethod)
			{
				if (parameterNames.Any(pn => string.Compare(pn, pNameInMethod, true) == 0))
					result++;
			}

			result -= Math.Abs(parameterNameListInMethod.Count - result);	//方法参数的个数减去匹配程度,形成新的匹配度

			return result;
		}
        /// <summary>
        /// 
        /// </summary>
        /// <param name="operatorActivity">操作人所在的Activity,可以为null</param>
        /// <param name="targetActivity">需要替换人员的目标活动</param>
        /// <param name="originalAssignee"></param>
        /// <param name="targetAssignees"></param>
        public WfReplaceAssigneesExecutor(IWfActivity operatorActivity, IWfActivity targetActivity, IUser originalAssignee, IEnumerable<IUser> targetAssignees)
            : base(operatorActivity, WfControlOperationType.ReplaceAssignees)
        {
            targetActivity.NullCheck("targetActivity");
            targetAssignees.NullCheck("targetAssignees");

            if (originalAssignee != null)
                this._OriginalAssignees.Add(originalAssignee);
            else
            {
                this._OriginalAssignees.CopyFrom(targetActivity.Assignees.ToUsers());

                if (this._OriginalAssignees.Count == 0)
                    this._OriginalAssignees.CopyFrom(targetActivity.Candidates.ToUsers());
            }

            this.TargetAssignees = targetAssignees;
            this.TargetActivity = targetActivity;

            if (OperatorActivity == null)
                OperatorActivity = this.TargetActivity;
        }
        public InstrumentChannelMessengerProducer(IEnumerable<Sequence> sequences)
        {
            sequences.NullCheck();

            HashSet<Sequence> unique = new HashSet<Sequence>(sequences);

            var instruments = from sequence in sequences
                              from item in sequence
                              where item.Iterator().Count(x => x.MidiMessage is ChannelMessage) > 0
                              group item by (item.Iterator().FirstOrDefault(x => x.MidiMessage is ChannelMessage).MidiMessage as ChannelMessage).Instrument() into group1
                              select group1;

            this.channelMessageByInstrument = new Dictionary<GeneralMidiInstrument, IReadOnlyList<ChannelMessage>>();

            if (instruments.Any())
            {
                foreach (var group in instruments)
                {
                    if (group.Any())
                    {
                        List<ChannelMessage> message = new List<ChannelMessage>();

                        var instrument = group.First().Iterator().Where(x => x.MidiMessage is ChannelMessage).Select(y => y.MidiMessage as ChannelMessage).First().Instrument();
                        foreach (var track in group)
                        {
                            var query = track.Iterator().Where(x => x.MidiMessage is ChannelMessage).Select(y => y.MidiMessage as ChannelMessage);
                            if (query.Any())
                            {
                                foreach (var item in query)
                                {
                                    message.Add(item);
                                }
                            }
                        }
                        this.channelMessageByInstrument.Add(instrument, message.AsReadOnly());
                    }
                }
            }
        }
Пример #47
0
		/// <summary>
		/// 构造缺省的会签模板
		/// </summary>
		/// <param name="key"></param>
		/// <param name="blockingType"></param>
		/// <returns></returns>
		public static IWfBranchProcessTemplateDescriptor CreateDefaultConsignTemplate(
			string key, 
			WfBranchProcessExecuteSequence execSequence,
			WfBranchProcessBlockingType blockingType,
			IEnumerable<IUser> users)
		{
			key.CheckStringIsNullOrEmpty("key");
			users.NullCheck("users");

			WfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor(key);

			template.BranchProcessKey = WfProcessDescriptorManager.DefaultConsignProcessKey;
			template.ExecuteSequence = execSequence;
			template.BlockingType = blockingType;

			users = users.Distinct(new OguObjectIDEqualityComparer<IUser>());

			foreach (IUser user in users)
				template.Resources.Add(new WfUserResourceDescriptor(user));
			
			return template;
		}
Пример #48
0
        public void Send(IEnumerable<EmailMessage> messages, SmtpParameters sp)
        {
            messages.NullCheck("messages");
            sp.NullCheck("sp");

            sp.CheckParameters();

            using (SmtpClient client = sp.ToSmtpClient())
            {
                foreach (EmailMessage message in messages)
                {
                    EmailMessage clonedMessage = message.Clone();

                    if (clonedMessage.From == null)
                        clonedMessage.From = sp.DefaultSender;

                    try
                    {
                        clonedMessage.Attachments.ForEach(ea => ea.PrepareContent());
                        client.Send(clonedMessage.ToMailMessage());
                        clonedMessage.Status = EmailMessageStatus.Sent;
                    }
                    catch (System.Exception ex)
                    {
                        clonedMessage.Status = EmailMessageStatus.Fail;
                        clonedMessage.StatusText = ex.ToString();
                    }

                    if (sp.AfterSentOP == EmailMessageAfterSentOP.MoveToSentTable ||
                        (sp.AfterSentOP == EmailMessageAfterSentOP.OnlyPersistErrorMessages && clonedMessage.Status == EmailMessageStatus.Fail))
                    {
                        InsertSentMessage(clonedMessage);
                    }
                }
            }
        }
        public void ServerToClient(IEnumerable<WfBranchProcessStartupParams> server, ICollection<WfClientBranchProcessStartupParams> client)
        {
            server.NullCheck("server");

            foreach (WfBranchProcessStartupParams st in server)
            {
                WfClientBranchProcessStartupParams ct = null;

                WfClientBranchProcessStartupParamsConverter.Instance.ServerToClient(st, ref ct);

                client.Add(ct);
            }
        }
Пример #50
0
        /// <summary>
        /// 将活动矩阵与审批矩阵进行合并
        /// </summary>
        /// <param name="amRows"></param>
        /// <param name="amDefinitions"></param>
        /// <param name="apRows"></param>
        /// <param name="apDefinitions"></param>
        public static void MergeApprovalMatrix(this SOARolePropertyRowCollection amRows, SOARolePropertyDefinitionCollection amDefinitions, IEnumerable<SOARolePropertyRow> apRows, SOARolePropertyDefinitionCollection apDefinitions)
        {
            amDefinitions.NullCheck("amDefinitions");
            amRows.NullCheck("amRows");
            apDefinitions.NullCheck("apDefinitions");
            apRows.NullCheck("apRows");

            int maxActivitySN = GetMaxActivitySN(amRows);
            int maxRowNumber = GetMaxRowNumber(amRows);

            List<SOARolePropertyRow> newAmRows = new List<SOARolePropertyRow>();

            foreach (SOARolePropertyRow apRow in apRows)
            {
                int columnIndex = 1;

                while (columnIndex < apDefinitions.Count)
                {
                    List<SOARolePropertyRow> amUserRows = FindMatchedActivityMatrixUserRows(amRows, apDefinitions[columnIndex].Name, apRow);
                    List<SOARolePropertyRow> amTemplateRows = FindMatchedActivityMatrixTemplateRows(amRows, apDefinitions[columnIndex].Name, apRow);

                    string apUser = apRow.Values.GetValue(apDefinitions[columnIndex].Name, string.Empty);

                    if (amUserRows.Count == 0 && apUser.IsNotEmpty())
                    {
                        SOARolePropertyRow templateRow = amTemplateRows.LastOrDefault();

                        maxActivitySN += 10;
                        SOARolePropertyRow amRow = CreateNewActivityMatrixRow(maxActivitySN, ++maxRowNumber, amDefinitions, templateRow);

                        newAmRows.Add(amRow);

                        MergeToActivityMatrixRow(amRow, amDefinitions, apUser);
                    }
                    else
                    {
                        foreach (SOARolePropertyRow amRow in amUserRows)
                            MergeToActivityMatrixRow(amRow, amDefinitions, apUser);
                    }

                    columnIndex++;
                }
            }

            amRows.CopyFrom(newAmRows);
        }
Пример #51
0
        public static SOARoleContext CreateContext(IEnumerable<SOARolePropertiesQueryParam> queryParams, IWfProcess process)
        {
            queryParams.NullCheck("queryParams");

            ObjectContextCache.Instance.ContainsKey(CacheKey).TrueThrow("SOARoleContext已经在使用中,不能嵌套使用");

            SOARoleContext context = new SOARoleContext();

            context._Process = process;
            context.QueryParams.CopyFrom(queryParams);

            ObjectContextCache.Instance.Add(CacheKey, context);

            return context;
        }
        public UserOperationLogCollection ClientToServer(IEnumerable<WfClientUserOperationLog> client)
        {
            client.NullCheck("client");

            UserOperationLogCollection server = new UserOperationLogCollection();

            foreach (WfClientUserOperationLog clientItem in client)
            {
                UserOperationLog serverItem = null;

                this.ClientToServer(clientItem, ref serverItem);

                server.Add(serverItem);
            }

            return server;
        }
        public void ServerToClient(IEnumerable<IWfMainStreamActivityDescriptor> server, WfClientMainStreamActivityDescriptorCollection client)
        {
            server.NullCheck("server");
            client.NullCheck("client");

            client.Clear();

            foreach (IWfMainStreamActivityDescriptor msActDesp in server)
            {
                WfClientMainStreamActivityDescriptor clientMSActDesp = null;

                WfClientMainStreamActivityDescriptorConverter.Instance.ServerToClient(msActDesp, ref clientMSActDesp);

                client.Add(clientMSActDesp);
            }
        }
Пример #54
0
        public void Insert(IEnumerable<EmailMessage> messages)
        {
            messages.NullCheck("messages");

            messages.ForEach(m => m.Attachments.ForEach(ea => ea.PrepareContent()));

            StringBuilder strB = new StringBuilder(2048);

            using (StringWriter writer = new StringWriter(strB))
            {
                messages.ForEach(m => WriteInsertMessageSql(writer, m));
            }

            DbHelper.RunSqlWithTransaction(strB.ToString(), GetConnectionName());
        }
        /// <summary>
        /// 根据角色ID判断哪些角色有了扩展属性定义
        /// </summary>
        /// <param name="roleIDs"></param>
        /// <returns></returns>
        public Dictionary<string, bool> AreExist(IEnumerable<string> roleIDs)
        {
            roleIDs.NullCheck("roleIDs");

            Dictionary<string, bool> result = new Dictionary<string, bool>();

            InSqlClauseBuilder builder = new InSqlClauseBuilder();

            foreach (string roleID in roleIDs)
            {
                if (result.ContainsKey(roleID) == false)
                {
                    result.Add(roleID, false);
                    builder.AppendItem(roleID);
                }
            }

            if (result.Count > 0)
            {
                WhereSqlClauseBuilder tenantBuilder = new WhereSqlClauseBuilder();

                tenantBuilder.AppendTenantCode();

                string tenantCriteria = string.Empty;

                if (tenantBuilder.IsEmpty == false)
                    tenantCriteria = " AND " + tenantBuilder.ToSqlString(TSqlBuilder.Instance);

                string sql = string.Format("SELECT ROLE_ID FROM WF.ROLE_PROPERTIES_DEFINITIONS WHERE ROLE_ID IN ({0}){1} GROUP BY ROLE_ID",
                    builder.ToSqlString(TSqlBuilder.Instance), tenantCriteria);

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

                foreach (DataRow row in table.Rows)
                    result[row["ROLE_ID"].ToString()] = true;
            }

            return result;
        }