Beispiel #1
0
        public override void PrepareAction(WfActionParams actionParams)
        {
            IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

            if (currentActivity != null)
            {
                //找到当前流程所有的待办,然后转为已办
                UserTaskCollection currentProcessTasks =
                    UserTaskAdapter.Instance.LoadUserTasks(builder => builder.AppendItem("PROCESS_ID",
                                                                                         currentActivity.Process.ID));

                UserTaskCollection toAccomplishedTasks = new UserTaskCollection();
                UserTaskCollection toDeletedTasks      = new UserTaskCollection();

                currentProcessTasks.ForEach(u =>
                {
                    if (u.Status == TaskStatus.Ban)
                    {
                        toAccomplishedTasks.Add(u);
                    }
                    else
                    {
                        toDeletedTasks.Add(u);
                    }
                });

                WfRuntime.ProcessContext.DeletedUserTasks.CopyFromNotExistedTaskID(toDeletedTasks);

                UserTaskCollection userTasksInContext = RemoveTasksInContext(actionParams);

                //将上下文中的待办转到已办中
                userTasksInContext.ForEach(t => toAccomplishedTasks.Add(t));

                //将上下文中标记为已删除的从准备转已办的记录中删除
                toAccomplishedTasks.RemoveExistedTasks(WfRuntime.ProcessContext.DeletedUserTasks);

                //将待办转到已办中,便于事后恢复
                toAccomplishedTasks.ForEach(u => LeaveActivityUserTaskAction.ChangeUserTaskToAccomplishedTasks(currentActivity, u));

                WfRuntime.ProcessContext.AccomplishedUserTasks.CopyFromNotExistedTaskID(toAccomplishedTasks);

                //暂时对当前活动的处理人发送通知
                UserTaskCollection notifyTasks = BuildUserNotifiesFromActivity(currentActivity);
                AppendResourcesToNotifiers(currentActivity, notifyTasks, currentActivity.Descriptor.Process.CancelEventReceivers);

                foreach (UserTask task in notifyTasks)
                {
                    task.Status    = TaskStatus.Yue;
                    task.TaskTitle = Translator.Translate(Define.DefaultCulture,
                                                          currentActivity.Process.Descriptor.Properties.GetValue("DefaultCancelTaskPrefix", "流程被取消:")) + task.TaskTitle;
                }

                WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);

                WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());
                WfRuntime.ProcessContext.AbortedProcesses.AddOrReplace(currentActivity.Process);
                WfRuntime.ProcessContext.FireCancelProcessPrepareAction();
            }
        }
        public override void PrepareAction(WfActionParams actionParams)
        {
            IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

            if (currentActivity != null)
            {
                //找到当前流程所有的待办,然后转为已办
                UserTaskCollection currentProcessTasks =
                        UserTaskAdapter.Instance.LoadUserTasks(builder => builder.AppendItem("PROCESS_ID",
                            currentActivity.Process.ID));

                WfRuntime.ProcessContext.DeletedUserTasks.CopyFromNotExistedTaskID(currentProcessTasks);

                UserTaskCollection toAccomplishedTasks = new UserTaskCollection();

                currentProcessTasks.ForEach(u =>
                {
                    if (u.Status == TaskStatus.Ban)
                        toAccomplishedTasks.Add(u);
                });

                UserTaskCollection userTasksInContext = RemoveTasksInContext(actionParams);

                //将上下文中的待办转到已办中
                userTasksInContext.ForEach(t => toAccomplishedTasks.Add(t));

                //将上下文中标记为已删除的从准备转已办的记录中删除
                toAccomplishedTasks.RemoveExistedTasks(WfRuntime.ProcessContext.DeletedUserTasks);

                //将待办转到已办中,便于事后恢复
                toAccomplishedTasks.ForEach(u => LeaveActivityUserTaskAction.ChangeUserTaskToAccomplishedTasks(currentActivity, u));

                WfRuntime.ProcessContext.AccomplishedUserTasks.CopyFromNotExistedTaskID(toAccomplishedTasks);

                //暂时对当前活动的处理人发送通知
                UserTaskCollection notifyTasks = BuildUserNotifiesFromActivity(currentActivity);
                AppendResourcesToNotifiers(currentActivity, notifyTasks, currentActivity.Descriptor.Process.CancelEventReceivers);

                foreach (UserTask task in notifyTasks)
                {
                    task.Status = TaskStatus.Yue;
                    task.TaskTitle = Translator.Translate(Define.DefaultCulture,
                        currentActivity.Process.Descriptor.Properties.GetValue("DefaultCancelTaskPrefix", "流程被取消:")) + task.TaskTitle;
                }

                WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);

                WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());
                WfRuntime.ProcessContext.AbortedProcesses.AddOrReplace(currentActivity.Process);
                WfRuntime.ProcessContext.FireCancelProcessPrepareAction();
            }
        }
		public UserTaskCollection LoadUserTasksByActivity(string activityID, Action<InSqlClauseBuilder> action)
		{
			action.NullCheck("action");

			InSqlClauseBuilder builder = new InSqlClauseBuilder();

			action(builder);

			string sql = string.Format("SELECT * FROM WF.USER_TASK WHERE ACTIVITY_ID = {0}",
				TSqlBuilder.Instance.CheckUnicodeQuotationMark(activityID));

			if (builder.Count > 0)
				sql += " AND " + builder.ToSqlStringWithInOperator(TSqlBuilder.Instance);

			UserTaskCollection result = new UserTaskCollection();

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

			foreach (DataRow row in table.Rows)
			{
				UserTask task = new UserTask();

				ORMapping.DataRowToObject(row, task);

				result.Add(task);
			}

			return result;
		}
		/// <summary>
		/// 如果请求是提醒对话框的,则处理该请求,显示提醒对话框的内容
		/// </summary>
		private void DoNotifyDialog()
		{
			if (HttpContext.Current.Request.RequestType == "POST")
			{
				string taskID = HttpContext.Current.Request.QueryString["taskID"];
				string taskSource = WebUtility.GetRequestFormString("taskSource", "userTask");

				if (string.IsNullOrEmpty(taskID) == false && GetAutoTransferToCompletedTask())
				{
					UserTask task = new UserTask();
					task.TaskID = taskID;
					UserTaskCollection tasks = new UserTaskCollection();
					tasks.Add(task);
					if (taskSource == "userTask")
						UserTaskAdapter.Instance.DeleteUserTasks(tasks);
					else
						UserTaskAdapter.Instance.DeleteUserAccomplishedTasks(tasks);
				}

				SaveAutoTransferToCompletedTaskFlag();

				//WebUtility.ResponseRefreshParentWindowScriptBlock();
				HttpContext.Current.Response.Write(ExtScriptHelper.GetRefreshBridgeScript());
				WebUtility.ResponseTimeoutScriptBlock("top.close();", ExtScriptHelper.DefaultResponseTimeout);

				HttpContext.Current.Response.End();
			}
			else
			{
				Page page = new Page();

				HtmlGenericControl html = new HtmlGenericControl("html");
				WebUtility.SetCurrentPage(page);
				page.Controls.Add(html);

				HtmlHead head = new HtmlHead();
				html.Controls.Add(head);

				HtmlTitle title = new HtmlTitle();
				title.Text = Translator.Translate(Define.DefaultCulture, "提醒消息");
				head.Controls.Add(title);

				HtmlGenericControl body = new HtmlGenericControl("body");
				html.Controls.Add(body);

				WebUtility.AttachPageModules(page);

				string temmplate = GetNotifyDialogHtml();
				string pageHtml = InitNotifyDialogPage(temmplate);

				body.Controls.Add(new LiteralControl(pageHtml));

				((IHttpHandler)page).ProcessRequest(HttpContext.Current);

				HttpContext.Current.Response.End();
			}
		}
Beispiel #5
0
        internal static void AppendResourcesToNotifiers(IWfActivity currentActivity, UserTaskCollection notifyTasks, WfResourceDescriptorCollection resources)
        {
            foreach (IUser user in resources.ToUsers())
            {
                UserTask task = BuildOneUserNotifyFromActivity(currentActivity);

                task.SendToUserID   = user.ID;
                task.SendToUserName = user.DisplayName;

                notifyTasks.Add(task);
            }
        }
Beispiel #6
0
        private static UserTaskCollection FilterCurrentUserTasks(UserTaskCollection sourceTasks)
        {
            UserTaskCollection result = new UserTaskCollection();

            foreach (UserTask task in sourceTasks)
            {
                if (string.Compare(task.SourceID, DeluxeIdentity.CurrentUser.ID, true) == 0)
                {
                    result.Add(task);
                }
            }
            return(result);
        }
Beispiel #7
0
        /// <summary>
        /// 删除当前在上下文中的待办
        /// </summary>
        /// <param name="actionParams"></param>
        /// <returns></returns>
        private static UserTaskCollection RemoveTasksInContext(WfActionParams actionParams)
        {
            UserTaskCollection result = new UserTaskCollection();

            actionParams.Context.MoveToUserTasks.Remove(t =>
            {
                bool remove = string.Compare(t.ProcessID, actionParams.Context.CurrentProcess.ID, true) == 0;

                if (remove)
                {
                    result.Add(t);
                }

                return(remove);
            });

            return(result);
        }
        /// <summary>
        /// 给管里员批量发送待办
        /// </summary>
        /// <param name="allUsers"></param>
        /// <param name="itemUserTask"></param>
        public static void SendUserTask(IEnumerable <IUser> allUsers, UserTask itemUserTask, string notificationID)
        {
            UserTaskCollection senuserTasks = new UserTaskCollection();

            foreach (IUser user in allUsers)
            {
                UserTask item = itemUserTask.Clone();
                item.TaskID         = UuidHelper.NewUuidString();
                item.ProcessID      = item.TaskID;
                item.ResourceID     = item.TaskID;
                item.Url            = string.Format(item.Url, notificationID, item.TaskID);
                item.SendToUserID   = user.ID;
                item.SendToUserName = user.Name;

                senuserTasks.Add(item);
            }

            UserTaskAdapter.Instance.SendUserTasks(senuserTasks);
        }
        private static UserTaskCollection CreateNewUserTasks(UserTaskCollection originalTasks, IEnumerable <IUser> targetUsers)
        {
            UserTaskCollection result = new UserTaskCollection();

            foreach (UserTask task in originalTasks)
            {
                foreach (IUser user in targetUsers)
                {
                    UserTask newTask = task.Clone();

                    newTask.TaskID         = UuidHelper.NewUuidString();
                    newTask.SendToUserID   = user.ID;
                    newTask.SendToUserName = user.DisplayName;
                    newTask.TaskStartTime  = DateTime.Now;
                    result.Add(newTask);
                }
            }

            return(result);
        }
Beispiel #10
0
        protected void Submitbtn_Click(object sender, EventArgs e)
        {
            try
            {
                UserTask           clonedUserTask = UserTaskAdapter.Instance.LoadSingleUserTaskByID(this.UserTaskID);
                UserTaskCollection tasks          = new UserTaskCollection();
                tasks.Add(clonedUserTask);
                UserTaskAdapter.Instance.SetUserTasksAccomplished(tasks);
                UserTaskAdapter.Instance.DeleteUserTasks(tasks);

                /*
                 * ORMappingItemCollection mapping = ORMapping.GetMappingInfo<UserTask>().Clone();
                 * mapping.TableName = "WF.USER_ACCOMPLISHED_TASK";
                 * clonedUserTask.Url = UriHelper.ReplaceUriParams(clonedUserTask.Url, nvs =>
                 * {
                 *      nvs["isTask"] = "false";
                 * });
                 *
                 * mapping.Remove("CATEGORY_GUID");
                 * mapping.Remove("TOP_FLAG");
                 *
                 * StringBuilder sqlBuilder = new StringBuilder();
                 *
                 * sqlBuilder.Append(ORMapping.GetInsertSql(clonedUserTask, mapping, TSqlBuilder.Instance));
                 * sqlBuilder.Append(TSqlBuilder.Instance.DBStatementSeperator);
                 * sqlBuilder.AppendFormat("DELETE FROM WF.USER_TASK WHERE  TASK_GUID =N'{0}'", clonedUserTask.TaskID);
                 *
                 * DbHelper.RunSqlWithTransaction(sqlBuilder.ToString()); */

                Page.ClientScript.RegisterStartupScript(this.GetType(), "关闭当前窗口",
                                                        string.Format("top.close();"),
                                                        true);
            }
            catch (Exception ex)
            {
                WebUtility.ShowClientError(ex.Message, ex.StackTrace, "错误");
            }
        }
        private static UserTaskCollection CreateUserTasksFromTemplate(UserTaskCollection originalTasks, IEnumerable <IUser> targetUsers)
        {
            UserTaskCollection result = new UserTaskCollection();

            foreach (UserTask task in originalTasks)
            {
                foreach (IUser user in targetUsers)
                {
                    UserTask newTask = task.Clone();

                    newTask.TaskID         = UuidHelper.NewUuidString();
                    newTask.SendToUserID   = user.ID;
                    newTask.SendToUserName = user.DisplayName;
                    newTask.TaskStartTime  = SNTPClient.AdjustedTime;

                    UserTaskActionBase.AddTaskContextParameters(newTask);

                    result.Add(newTask);
                }
            }

            return(result);
        }
Beispiel #12
0
        internal static UserTaskCollection BuildUserTasksFromActivity(IWfActivity activity, IEnumerable <IUser> users, TaskStatus status)
        {
            UserTaskCollection tasks = new UserTaskCollection();

            foreach (IUser user in users)
            {
                UserTask task = BuildOneUserTaskFromActivity(activity, status);

                task.SendToUserID   = user.ID;
                task.SendToUserName = user.DisplayName;
                task.Emergency      = WfRuntime.ProcessContext.Emergency;
                task.Purpose        = WfRuntime.ProcessContext.Purpose;

                task.Context["OperationType"] = WfRuntime.ProcessContext.OperationType;

                string opName = WfRuntime.ProcessContext.OperationType.ToDescription();

                switch (WfRuntime.ProcessContext.OperationType)
                {
                case WfControlOperationType.MoveTo:
                case WfControlOperationType.ObligeEnd:
                case WfControlOperationType.Return:
                case WfControlOperationType.AddApprover:
                case WfControlOperationType.ChangeApprover:
                case WfControlOperationType.Circulate:
                case WfControlOperationType.Consign:
                    opName = WfRuntime.ProcessContext.CurrentProcess.ApplicationRuntimeParameters.GetValue("CurrentTransitionName", opName);
                    break;
                }

                task.Context["OperationName"] = opName;

                tasks.Add(task);
            }

            return(tasks);
        }
        internal static UserTaskCollection BuildUserTasksFromActivity(IWfActivity activity, IEnumerable<IUser> users, TaskStatus status)
        {
            UserTaskCollection tasks = new UserTaskCollection();

            foreach (IUser user in users)
            {
                UserTask task = BuildOneUserTaskFromActivity(activity, status);

                task.SendToUserID = user.ID;
                task.SendToUserName = user.DisplayName;
                task.Emergency = WfRuntime.ProcessContext.Emergency;
                task.Purpose = WfRuntime.ProcessContext.Purpose;

                task.Context["OperationType"] = WfRuntime.ProcessContext.OperationType;

                string opName = WfRuntime.ProcessContext.OperationType.ToDescription();

                switch (WfRuntime.ProcessContext.OperationType)
                {
                    case WfControlOperationType.MoveTo:
                    case WfControlOperationType.ObligeEnd:
                    case WfControlOperationType.Return:
                    case WfControlOperationType.AddApprover:
                    case WfControlOperationType.ChangeApprover:
                    case WfControlOperationType.Circulate:
                    case WfControlOperationType.Consign:
                        opName = WfRuntime.ProcessContext.CurrentProcess.ApplicationRuntimeParameters.GetValue("CurrentTransitionName", opName);
                        break;
                }

                task.Context["OperationName"] = opName;

                tasks.Add(task);
            }

            return tasks;
        }
        private static UserTaskCollection CreateUserTasksFromTemplate(UserTaskCollection originalTasks, IEnumerable<IUser> targetUsers)
        {
            UserTaskCollection result = new UserTaskCollection();

            foreach (UserTask task in originalTasks)
            {
                foreach (IUser user in targetUsers)
                {
                    UserTask newTask = task.Clone();

                    newTask.TaskID = UuidHelper.NewUuidString();
                    newTask.SendToUserID = user.ID;
                    newTask.SendToUserName = user.DisplayName;
                    newTask.TaskStartTime = DateTime.Now;

                    result.Add(newTask);
                }
            }

            return result;
        }
		/// <summary>
		/// 给管里员批量发送待办
		/// </summary>
		/// <param name="allUsers"></param>
		/// <param name="itemUserTask"></param>
		public static void SendUserTask(IEnumerable<IUser> allUsers, UserTask itemUserTask, string notificationID)
		{
			UserTaskCollection senuserTasks = new UserTaskCollection();
			foreach (IUser user in allUsers)
			{
				UserTask item = itemUserTask.Clone();
				item.TaskID = UuidHelper.NewUuidString();
				item.ProcessID = item.TaskID;
				item.ResourceID = item.TaskID;
				item.Url = string.Format(item.Url, notificationID, item.TaskID);
				item.SendToUserID = user.ID;
				item.SendToUserName = user.Name;

				senuserTasks.Add(item);
			}

			UserTaskAdapter.Instance.SendUserTasks(senuserTasks);
		}
		private static UserTaskCollection FilterCurrentUserTasks(UserTaskCollection sourceTasks)
		{
			UserTaskCollection result = new UserTaskCollection();

			foreach (UserTask task in sourceTasks)
			{
				if (string.Compare(task.SourceID, DeluxeIdentity.CurrentUser.ID, true) == 0)
				{
					result.Add(task);
				}
			}
			return result;
		}
		protected void Submitbtn_Click(object sender, EventArgs e)
		{
			try
			{
				UserTask clonedUserTask = UserTaskAdapter.Instance.LoadSingleUserTaskByID(this.UserTaskID);
				UserTaskCollection tasks= new UserTaskCollection();
				tasks.Add(clonedUserTask);
				UserTaskAdapter.Instance.SetUserTasksAccomplished(tasks);
				UserTaskAdapter.Instance.DeleteUserTasks(tasks);
				
				/*
				ORMappingItemCollection mapping = ORMapping.GetMappingInfo<UserTask>().Clone();
				mapping.TableName = "WF.USER_ACCOMPLISHED_TASK";
				clonedUserTask.Url = UriHelper.ReplaceUriParams(clonedUserTask.Url, nvs =>
				{
					nvs["isTask"] = "false";
				});

				mapping.Remove("CATEGORY_GUID");
				mapping.Remove("TOP_FLAG");

				StringBuilder sqlBuilder = new StringBuilder();

				sqlBuilder.Append(ORMapping.GetInsertSql(clonedUserTask, mapping, TSqlBuilder.Instance));
				sqlBuilder.Append(TSqlBuilder.Instance.DBStatementSeperator);
				sqlBuilder.AppendFormat("DELETE FROM WF.USER_TASK WHERE  TASK_GUID =N'{0}'", clonedUserTask.TaskID);

				DbHelper.RunSqlWithTransaction(sqlBuilder.ToString()); */

				Page.ClientScript.RegisterStartupScript(this.GetType(), "关闭当前窗口",
				string.Format("top.close();"),
				true);
			}
			catch (Exception ex)
			{
				WebUtility.ShowClientError(ex.Message, ex.StackTrace, "错误");
			}
		}
		public UserTaskCollection LoadUserTasks(Action<WhereSqlClauseBuilder> action)
		{
			action.NullCheck("action");

			WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

			action(builder);

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

			UserTaskCollection result = new UserTaskCollection();

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

			foreach (DataRow row in table.Rows)
			{
				UserTask task = new UserTask();

				ORMapping.DataRowToObject(row, task);

				result.Add(task);
			}

			return result;
		}
		public UserTaskCollection GetUserAccomplishedTasks(UserTaskIDType idType, UserTaskFieldDefine returnFields, bool nolock, params string[] ids)
		{
			ExceptionHelper.FalseThrow<ArgumentNullException>(ids != null, "ids");

			UserTaskCollection utc = new UserTaskCollection();

			if (ids.Length > 0)
			{
				ORMappingItem keyItem = GetMappingItemFromIDType(idType);

				InSqlClauseBuilder iBuilder = new InSqlClauseBuilder();

				iBuilder.AppendItem(ids);

				string sql = string.Format("SELECT {0} FROM WF.USER_ACCOMPLISHED_TASK{1} WHERE {2} {3}",
					GetUserTaskSelectFields(returnFields),
					nolock ? "(NOLOCK)" : string.Empty,
					GetMappingItemFromIDType(idType).DataFieldName,
					iBuilder.ToSqlStringWithInOperator(TSqlBuilder.Instance));

				using (DbContext dbi = DbHelper.GetDBContext(GetConnectionName()))
				{
					Database db = DatabaseFactory.Create(dbi);

					using (IDataReader dr = db.ExecuteReader(CommandType.Text, sql))
					{
						while (dr.Read())
						{
							UserTask ut = new UserTask();

							ORMapping.DataReaderToObject(dr, ut);

							utc.Add(ut);
						}
					}
				}
			}

			return utc;
		}
        /// <summary>
        /// 删除当前在上下文中的待办
        /// </summary>
        /// <param name="actionParams"></param>
        /// <returns></returns>
        private static UserTaskCollection RemoveTasksInContext(WfActionParams actionParams)
        {
            UserTaskCollection result = new UserTaskCollection();

            actionParams.Context.MoveToUserTasks.Remove(t =>
            {
                bool remove = string.Compare(t.ProcessID, actionParams.Context.CurrentProcess.ID, true) == 0;

                if (remove)
                    result.Add(t);

                return remove;
            });

            return result;
        }
Beispiel #21
0
        internal static UserTaskCollection BuildUserTasksFromActivity(IWfActivity activity, IEnumerable <IUser> users, TaskStatus status)
        {
            UserTaskCollection tasks = new UserTaskCollection();

            foreach (IUser user in users)
            {
                UserTask task = BuildOneUserTaskFromActivity(activity, status);

                task.SendToUserID   = user.ID;
                task.SendToUserName = user.DisplayName;
                task.Emergency      = WfRuntime.ProcessContext.Emergency;
                task.Purpose        = WfRuntime.ProcessContext.Purpose;

                AddTaskContextParameters(task);

                string opName = WfRuntime.ProcessContext.OperationType.ToDescription();

                switch (WfRuntime.ProcessContext.OperationType)
                {
                case WfControlOperationType.MoveTo:
                case WfControlOperationType.ObligeEnd:
                case WfControlOperationType.Return:
                case WfControlOperationType.AddApprover:
                case WfControlOperationType.ChangeApprover:
                case WfControlOperationType.Circulate:
                case WfControlOperationType.Consign:
                    opName = WfRuntime.ProcessContext.CurrentProcess.ApplicationRuntimeParameters.GetValue("CurrentTransitionName", opName);
                    break;
                }

                task.Context["OperationName"] = opName;

                IWfTransitionDescriptor fromTransition = activity.FromTransitionDescriptor;

                if (fromTransition != null)
                {
                    task.Context["IsReturn"] = fromTransition.IsBackward;

                    //退回线标记为批退
                    if (fromTransition.IsBackward)
                    {
                        task.Context["ApprovalResult"] = false;
                    }
                    else
                    {
                        //线属性决定是否为批退
                        if (fromTransition.AffectProcessReturnValue)
                        {
                            task.Context["ApprovalResult"] = fromTransition.AffectedProcessReturnValue;
                        }
                        else
                        {
                            task.Context["ApprovalResult"] = true;
                        }
                    }
                }

                task.Context["AllowBatchMove"] = activity.Descriptor.Properties.GetValue("AllowBatchMove", false);

                tasks.Add(task);
            }

            return(tasks);
        }
        internal static void AppendResourcesToNotifiers(IWfActivity currentActivity, UserTaskCollection notifyTasks, WfResourceDescriptorCollection resources)
        {
            foreach (IUser user in resources.ToUsers())
            {
                UserTask task = BuildOneUserNotifyFromActivity(currentActivity);

                task.SendToUserID = user.ID;
                task.SendToUserName = user.DisplayName;

                notifyTasks.Add(task);
            }
        }
        /// <summary>
        /// 如果请求是提醒对话框的,则处理该请求,显示提醒对话框的内容
        /// </summary>
        private void DoNotifyDialog()
        {
            if (HttpContext.Current.Request.RequestType == "POST")
            {
                string taskID     = HttpContext.Current.Request.QueryString["taskID"];
                string taskSource = WebUtility.GetRequestFormString("taskSource", "userTask");

                if (string.IsNullOrEmpty(taskID) == false && GetAutoTransferToCompletedTask())
                {
                    UserTask task = new UserTask();
                    task.TaskID = taskID;
                    UserTaskCollection tasks = new UserTaskCollection();
                    tasks.Add(task);
                    if (taskSource == "userTask")
                    {
                        UserTaskAdapter.Instance.DeleteUserTasks(tasks);
                    }
                    else
                    {
                        UserTaskAdapter.Instance.DeleteUserAccomplishedTasks(tasks);
                    }
                }

                SaveAutoTransferToCompletedTaskFlag();

                //WebUtility.ResponseRefreshParentWindowScriptBlock();
                HttpContext.Current.Response.Write(ExtScriptHelper.GetRefreshBridgeScript());
                WebUtility.ResponseTimeoutScriptBlock("top.close();", ExtScriptHelper.DefaultResponseTimeout);

                HttpContext.Current.Response.End();
            }
            else
            {
                Page page = new Page();

                HtmlGenericControl html = new HtmlGenericControl("html");
                WebUtility.SetCurrentPage(page);
                page.Controls.Add(html);

                HtmlHead head = new HtmlHead();
                html.Controls.Add(head);

                HtmlTitle title = new HtmlTitle();
                title.Text = Translator.Translate(Define.DefaultCulture, "提醒消息");
                head.Controls.Add(title);

                HtmlGenericControl body = new HtmlGenericControl("body");
                html.Controls.Add(body);

                WebUtility.AttachPageModules(page);

                string temmplate = GetNotifyDialogHtml();
                string pageHtml  = InitNotifyDialogPage(temmplate);

                body.Controls.Add(new LiteralControl(pageHtml));

                ((IHttpHandler)page).ProcessRequest(HttpContext.Current);

                HttpContext.Current.Response.End();
            }
        }
		public UserTaskCollection LoadUserTasks(string tableName, IConnectiveSqlClause builder)
		{
			UserTaskCollection result = new UserTaskCollection();

			if (builder.IsEmpty == false)
			{
				string sql = string.Format("SELECT * FROM {0} WHERE {1}",
					tableName, builder.ToSqlString(TSqlBuilder.Instance));

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

				foreach (DataRow row in table.Rows)
				{
					UserTask task = new UserTask();

					ORMapping.DataRowToObject(row, task);

					result.Add(task);
				}
			}

			return result;
		}
		/// <summary>
		/// 根据TaskGuid得到UserAccomplishedTask
		/// </summary>
		/// <param name="strTaskGuid"></param>
		/// <returns></returns>
		public UserTaskCollection GetUserAccomplishedTasks(params string[] strTaskGuid)
		{
			UserTaskCollection utc = new UserTaskCollection();

			if (strTaskGuid.Length > 0)
			{

				InSqlClauseBuilder builder = new InSqlClauseBuilder();
				builder.AppendItem(strTaskGuid);

				string strSql = "SELECT * FROM WF.USER_ACCOMPLISHED_TASK WHERE (TASK_GUID " + builder.ToSqlStringWithInOperator(TSqlBuilder.Instance) + ")";
				using (DbContext dbi = DbHelper.GetDBContext(GetConnectionName()))
				{
					Database db = DatabaseFactory.Create(dbi);

					using (IDataReader dr = db.ExecuteReader(CommandType.Text, strSql))
					{
						while (dr.Read())
						{
							UserTask ut = new UserTask();

							ORMapping.DataReaderToObject(dr, ut);

							utc.Add(ut);
						}
					}
				}
			}

			return utc;
		}