コード例 #1
0
        public void ReplaceAssigneeExecutorTestReplay()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptor();

            IWfActivityDescriptor normalActDesp = processDesp.Activities["NormalActivity"];

            IUser originalApprover = (IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver1.ToString()].Object;

            normalActDesp.Resources.Clear();
            normalActDesp.Resources.Add(new WfUserResourceDescriptor(originalApprover));

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            WfProcessTestCommon.MoveToNextDefaultActivityWithExecutor(process);

            process = WfRuntime.GetProcessByProcessID(process.ID);

            IUser newApprover = (IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver2.ToString()].Object;

            WfReplaceAssigneesExecutor executor = new WfReplaceAssigneesExecutor(process.CurrentActivity, process.CurrentActivity, originalApprover, new IUser[] { newApprover });

            executor.Execute();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            UserTaskCollection tasks = UserTaskAdapter.Instance.LoadUserTasks(build => build.AppendItem("ACTIVITY_ID", process.CurrentActivity.ID));

            Assert.AreEqual(1, tasks.Count);
            Assert.AreEqual(newApprover.ID, tasks[0].SendToUserID);
        }
コード例 #2
0
        protected override void OnPrepareMoveToTasks(WfExecutorDataContext dataContext)
        {
            if (SaveUserTasks)
            {
                var userTasks = UserTaskAdapter.Instance.LoadUserTasks(builder => builder.AppendItem("ACTIVITY_ID",
                                                                                                     this.TargetActivity.ID));

                if (userTasks == null || userTasks.Count == 0)
                {
                    userTasks = (UserTaskCollection)TargetActivity.Context["UserTasks"];
                }

                if (userTasks != null)
                {
                    UserTaskCollection filteredTasks = FilterCurrentUserTasks(userTasks);

                    WfRuntime.ProcessContext.DeletedUserTasks.CopyFrom(filteredTasks);
                    WfRuntime.ProcessContext.MoveToUserTasks.CopyFrom(filteredTasks);
                    WfRuntime.ProcessContext.MoveToUserTasks.DistinctByActivityUserAndStatus();

                    base.OnPrepareMoveToTasks(dataContext);
                }
                else
                {
                    base.OnPrepareMoveToTasks(dataContext);
                }
            }
        }
コード例 #3
0
        public override void PrepareAction(WfActionParams actionParams)
        {
            if (WfRuntime.ProcessContext.OriginalActivity != null)
            {
                UserTaskCollection currentProcessTasks =
                    UserTaskAdapter.Instance.LoadUserTasks(builder => builder.AppendItem("ACTIVITY_ID",
                                                                                         WfRuntime.ProcessContext.OriginalActivity.ID));

                //删除已经发送的待办
                WfRuntime.ProcessContext.DeletedUserTasks.CopyFromNotExistedTaskID(currentProcessTasks);

                //对被撤回的点发送通知
                this.PrepareNotifyTasks(WfRuntime.ProcessContext.OriginalActivity);

                IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

                //对当前的活动点发送待办
                if (currentActivity != null)
                {
                    this.PrepareMoveToTasks(currentActivity);
                }

                WfRuntime.ProcessContext.FireWithdrawPrepareAction();
            }
        }
コード例 #4
0
		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;
		}
コード例 #5
0
        private string GetAfterExecutionScript(WfControlOperationType operationType)
        {
            string script = "top.$HBRootNS.WfProcessControlBase.close()";

            switch (operationType)
            {
            case WfControlOperationType.Save:
                script = string.Format("if (parent) parent.location.replace('{0}');",
                                       WfClientContext.Current.ReplaceEntryPathByActivityID());
                break;

            case WfControlOperationType.MoveTo:
                if (WfClientContext.Current.OriginalActivity.Descriptor.Properties.GetValue("ForceCloseFormAfterMoveTo", false) == false)
                {
                    UserTaskCollection userTasks = UserTaskAdapter.Instance.GetUserTasks(UserTaskIDType.ActivityID,
                                                                                         UserTaskFieldDefine.SendToUserID | UserTaskFieldDefine.Status | UserTaskFieldDefine.Url,
                                                                                         WfClientContext.Current.CurrentActivity.ID);

                    UserTask task = userTasks.Find(t => t.SendToUserID == DeluxeIdentity.CurrentUser.ID && t.Status == TaskStatus.Ban);

                    if (task != null)
                    {
                        script = string.Format("if (parent) parent.location.replace('{0}');", task.Url);
                    }
                }
                break;
            }

            return(script);
        }
コード例 #6
0
 /// <summary>
 /// 发送待办
 /// </summary>
 /// <param name="tasks">任务列表</param>
 /// <param name="context">上下文数据</param>
 public void eventContainer_SendUserTasks(UserTaskCollection tasks, Dictionary<object, object> context)
 {
     this.ExecuteSyncOperation("SendUserTasksService", tasks, context, (p, f) =>
     {
         UserTaskServicePluginBroker.Instance.SendUserTasks(p, f);
     });
 }
コード例 #7
0
 /// <summary>
 /// 发送待办
 /// </summary>
 /// <param name="tasks">任务列表</param>
 /// <param name="context">上下文数据</param>
 public void eventContainer_SendUserTasks(UserTaskCollection tasks, Dictionary <object, object> context)
 {
     this.ExecuteSyncOperation("SendUserTasksService", tasks, context, (p, f) =>
     {
         UserTaskServicePluginBroker.Instance.SendUserTasks(p, f);
     });
 }
コード例 #8
0
        public void CancelProcessInOtherActivityTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            WfRuntime.PersistWorkflows();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;

            WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.requestor);

            process.MoveTo(tp);

            WfRuntime.PersistWorkflows();

            UserTaskCollection tasks = UserTaskAdapter.Instance.LoadUserTasks(b => b.AppendItem("ACTIVITY_ID", process.CurrentActivity.ID));

            Console.WriteLine("Current Activity ID: {0}", process.CurrentActivity.ID);
            Console.WriteLine("User Task Count: {0}", tasks.Count);

            process = CancelProcess(process, false);

            UserTaskCollection userAccomlishedTasks = UserTaskAdapter.Instance.GetUserAccomplishedTasks(UserTaskIDType.ActivityID, UserTaskFieldDefine.All, false, process.CurrentActivity.ID);

            Console.WriteLine("User Accomplished Task Count: {0}", userAccomlishedTasks.Count);

            Assert.AreEqual(tasks.Count, userAccomlishedTasks.Count);
        }
コード例 #9
0
 private static void PrepareUserTasks(UserTaskCollection tasks, string taskUrl, string taskTitle, string taskBody)
 {
     tasks.ForEach(task =>
     {
         task.Body = taskBody;
     });
 }
コード例 #10
0
        public override void PrepareAction(WfActionParams actionParams)
        {
            IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

            if (currentActivity != null)
            {
                //找到当前流程所有的待办,然后删除,主要是为了删除通知
                UserTaskCollection currentActivityTasks =
                    UserTaskAdapter.Instance.LoadUserTasks(builder => builder.AppendItem("ACTIVITY_ID",
                                                                                         currentActivity.ID));

                WfRuntime.ProcessContext.DeletedUserTasks.CopyFrom(currentActivityTasks);

                //找到当前流程所有的已办,然后转为待办
                UserTaskCollection currentActivityAccomplishedTasks =
                    UserTaskAdapter.Instance.GetUserAccomplishedTasks(UserTaskIDType.ActivityID, UserTaskFieldDefine.All, false, currentActivity.ID);

                WfRuntime.ProcessContext.MoveToUserTasks.CopyFrom(currentActivityAccomplishedTasks);

                if (currentActivity.Status == WfActivityStatus.Pending)
                {
                    WfRuntime.ProcessContext.PendingActivities.Add(currentActivity);
                }

                WfRuntime.ProcessContext.FireRestoreProcessPrepareAction();
            }
        }
コード例 #11
0
        public void WithdrawAndCancelTest()
        {
            IWfProcess process = ProcessHelper.CreateFreeStepsProcessDescriptor(OguObjectSettings.GetConfig().Objects["approver1"].User).StartupProcess();

            process = process.MoveToDefaultActivityByExecutor();

            string activityIDBeforeWithdraw = process.CurrentActivity.ID;

            Assert.AreEqual(WfActivityType.NormalActivity, process.CurrentActivity.Descriptor.ActivityType);

            Console.WriteLine("ActivityID Before Withdraw = {0}, Process ID = {1}", activityIDBeforeWithdraw, process.ID);

            process = process.WithdrawByExecutor(true);

            Assert.AreEqual(WfActivityType.InitialActivity, process.CurrentActivity.Descriptor.ActivityType);

            Assert.AreEqual(WfProcessStatus.Aborted, process.Status);

            UserTaskCollection notifies = UserTaskAdapter.Instance.GetUserTasks(UserTaskIDType.ActivityID, UserTaskFieldDefine.ActivityID | UserTaskFieldDefine.Status, activityIDBeforeWithdraw);

            Assert.AreEqual(1, notifies.Count);

            UserTaskCollection tasks = UserTaskAdapter.Instance.GetUserTasks(UserTaskIDType.ActivityID, UserTaskFieldDefine.ActivityID | UserTaskFieldDefine.Status, process.InitialActivity.ID);

            Assert.AreEqual(1, tasks.Count);
            Assert.AreEqual(TaskStatus.Yue, tasks[0].Status);

            UserTaskCollection accomplishedTasks = UserTaskAdapter.Instance.GetUserAccomplishedTasks(UserTaskIDType.ActivityID, UserTaskFieldDefine.ActivityID | UserTaskFieldDefine.Status, false, activityIDBeforeWithdraw);

            Assert.AreEqual(1, tasks.Count);
        }
コード例 #12
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();
            }
        }
コード例 #13
0
        public override void PrepareAction(WfActionParams actionParams)
        {
            if (WfRuntime.ProcessContext.OriginalActivity != null)
            {
                IWfActivity originalActivity = WfRuntime.ProcessContext.OriginalActivity;

                //找到当前环节所有的待办,然后转为已办
                UserTaskCollection currentActTasks =
                    UserTaskAdapter.Instance.LoadUserTasks(builder =>
                        {
                            builder.AppendItem("ACTIVITY_ID", originalActivity.ID);
                            builder.AppendItem("STATUS", (int)TaskStatus.Ban);
                        });

                //从上下文中找到需要转已办的记录
                currentActTasks.CopyFrom(WfRuntime.ProcessContext.MoveToUserTasks.FindAll(
                    u => string.Compare(u.ActivityID, originalActivity.ID, true) == 0));

                currentActTasks.Sort((u1, u2) => u1.Level - u2.Level);

                if (currentActTasks.Count == 0)
                {
                    UserTaskCollection preparedUserTasks = (UserTaskCollection)originalActivity.Context["UserTasks"];

                    if (preparedUserTasks != null)
                    {
                        WfRuntime.ProcessContext.MoveToUserTasks.CopyFrom(preparedUserTasks);
                        currentActTasks = preparedUserTasks;
                    }
                }

                currentActTasks.ForEach(u =>
                {
                    if (u.Status == TaskStatus.Ban)
                        ChangeUserTaskToAccomplishedTasks(originalActivity, u);
                    else
                        WfRuntime.ProcessContext.DeletedUserTasks.Add(u);
                });

                UserTaskCollection notifyTasks = new UserTaskCollection();

                AppendResourcesToNotifiers(originalActivity, notifyTasks, originalActivity.Descriptor.LeaveEventReceivers);

                foreach (UserTask task in notifyTasks)
                {
                    task.Status = TaskStatus.Yue;
                    task.TaskTitle = Translator.Translate(Define.DefaultCulture,
                        originalActivity.Process.Descriptor.Properties.GetValue("DefaultLeaveTaskPrefix", "离开活动:")) + task.TaskTitle;

                    task.Context["ExtraOperationType"] = WfControlSubOperationType.Leave;
                }

                WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());
                WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);

                WfRuntime.ProcessContext.FireLeaveActivityPrepareAction();
            }
        }
コード例 #14
0
        internal static void SyncUrlsInAssigneesFromTasks(UserTaskCollection tasks)
        {
            foreach (UserTask task in tasks)
            {
                IWfActivity activity = WfRuntime.GetProcessByActivityID(task.ActivityID).Activities[task.ActivityID];

                SyncActivityAssigneesUrl(task, activity.Assignees);
            }
        }
コード例 #15
0
		/// <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();
			}
		}
コード例 #16
0
        protected virtual void OnPrepareNotifyTasks(WfExecutorDataContext dataContext)
        {
            UserTaskCollection tasks = dataContext.NotifyTasks;

            if (PrepareNotifyTasks != null)
            {
                PrepareNotifyTasks(dataContext, tasks);
            }
        }
コード例 #17
0
		internal static void SyncUrlsInAssigneesFromTasks(UserTaskCollection tasks)
		{
			foreach (UserTask task in tasks)
			{
				IWfActivity activity = WfRuntime.GetProcessByActivityID(task.ActivityID).Activities[task.ActivityID];

				SyncActivityAssigneesUrl(task, activity.Assignees);
			}
		}
コード例 #18
0
        internal static UserTaskCollection BuildUserNotifiesFromActivity(IWfActivity activity)
        {
            UserTaskCollection tasks = BuildUserTasksFromActivity(activity, TaskStatus.Yue);

            foreach (UserTask task in tasks)
            {
                task.Level = TaskLevel.Low;
                task.Url   = GenerateNotifyUrl(task, activity);
            }

            return(tasks);
        }
コード例 #19
0
        private void executor_PrepareNotifyTasks(WfExecutorDataContext dataContext, UserTaskCollection tasks)
        {
            GenericOpinion opnion = (GenericOpinion)dataContext["AbortOpinion"];

            tasks.ForEach(t =>
            {
                if (t.Body.IsNullOrEmpty())
                {
                    t.Body = opnion.Content;
                }
            });
        }
コード例 #20
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);
            }
        }
コード例 #21
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));

                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();
            }
        }
コード例 #22
0
		public void SendUserTasks(UserTaskCollection tasks)
		{
			UserOpContext contexts = InitEventContexts();

			contexts.OnBeforeSendUserTasks(tasks);

			using (TransactionScope scope = TransactionScopeFactory.Create())
			{
				contexts.OnSendUserTasks(tasks);

				scope.Complete();
			}
		}
コード例 #23
0
        private void PrepareNotifyTasks(IWfActivity originalActivity)
        {
            UserTaskCollection notifyTasks = BuildUserNotifiesFromActivity(originalActivity);

            foreach (UserTask task in notifyTasks)
            {
                task.Status    = TaskStatus.Yue;
                task.TaskTitle = Translator.Translate(Define.DefaultCulture,
                                                      originalActivity.Process.Descriptor.Properties.GetValue("DefaultWithtrawTaskPrefix", "流程被撤回:")) + task.TaskTitle;
            }

            WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);
        }
コード例 #24
0
        private UserTaskCollection LoadOriginalUserTask()
        {
            UserTaskCollection result = UserTaskAdapter.Instance.LoadUserTasksByActivity(this.TargetActivity.ID,
                                                                                         build =>
            {
                build.DataField = "SEND_TO_USER";

                this.OriginalAssignees.ForEach(u => build.AppendItem("SEND_TO_USER", u.ID));
            }
                                                                                         );

            return(result);
        }
コード例 #25
0
        private UserTaskCollection GetTasksFromContextCache(string cacheKey)
        {
            UserTaskCollection result = (UserTaskCollection)ObjectContextCache.Instance.GetOrAddNewValue(cacheKey, (cache, key) =>
            {
                UserTaskCollection tasks = new UserTaskCollection();

                cache.Add(key, tasks);

                return(tasks);
            });

            return(result);
        }
コード例 #26
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);
        }
コード例 #27
0
        private static void eventContainer_SetUserTasksAccomplished(UserTaskCollection tasks, Dictionary<object, object> context)
        {
            ExceptionHelper.FalseThrow<ArgumentNullException>(tasks != null, "tasks");

            //需要删除的待办的ID
            InSqlClauseBuilder deleteTaskIDs = new InSqlClauseBuilder();

            StringBuilder strB = new StringBuilder();

            ORMappingItemCollection mapping = ORMapping.GetMappingInfo<UserTask>().Clone();

            string userTaskTableName = mapping.TableName;

            mapping.TableName = "WF.USER_ACCOMPLISHED_TASK";

            foreach (UserTask task in tasks)
            {
                UserTask clonedUserTask = GetClonedAccomplishedUserTask(task);

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

                WhereSqlClauseBuilder builder = GetDeleteAccomplishedUserTaskWhereBuilder(task);

                //删除已办
                strB.AppendFormat("DELETE {0} WHERE {1}",
                    mapping.TableName,
                    builder.ToSqlString(TSqlBuilder.Instance));

                strB.Append(TSqlBuilder.Instance.DBStatementSeperator);

                strB.Append(GetUserTaskInsertSql(clonedUserTask, mapping, "Category", "TopFlag"));

                strB.Append(TSqlBuilder.Instance.DBStatementSeperator);

                deleteTaskIDs.AppendItem(task.TaskID);
            }

            if (strB.Length > 0 && deleteTaskIDs.IsEmpty == false)
            {
                //删除待办
                strB.AppendFormat("DELETE {0} WHERE TASK_GUID {1}",
                    userTaskTableName,
                    deleteTaskIDs.ToSqlStringWithInOperator(TSqlBuilder.Instance));
            }

            if (strB.Length > 0)
                DbHelper.RunSqlWithTransaction(strB.ToString(), GetConnectionName());
        }
コード例 #28
0
        private static void eventContainer_DeleteUserTasks(UserTaskCollection tasks, Dictionary<object, object> context)
        {
            ExceptionHelper.FalseThrow<ArgumentNullException>(tasks != null, "tasks");

            InSqlClauseBuilder builder = new InSqlClauseBuilder();

            tasks.ForEach(u => builder.AppendItem(u.TaskID));

            if (builder.Count > 0)
            {
                string sql = string.Format("DELETE WF.USER_TASK WHERE TASK_GUID {0}", builder.ToSqlStringWithInOperator(TSqlBuilder.Instance));

                DbHelper.RunSql(sql, GetConnectionName());
            }
        }
コード例 #29
0
		public void SetUserTasksAccomplished(UserTaskCollection tasks)
		{
			ExceptionHelper.FalseThrow<ArgumentNullException>(tasks != null, "tasks");

			UserOpContext contexts = InitEventContexts();

			contexts.OnBeforeSetUserTasksAccomplished(tasks);

			using (TransactionScope scope = TransactionScopeFactory.Create())
			{
				contexts.OnSetUserTasksAccomplished(tasks);

				scope.Complete();
			}
		}
コード例 #30
0
        public override void PrepareAction(WfActionParams actionParams)
        {
            IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

            if (currentActivity != null)
            {
                if (WfRuntime.ProcessContext.TargetActivityCanMoveTo && currentActivity.Status == WfActivityStatus.Running)
                {
                    UserTaskCollection userTasks = BuildUserTasksFromActivity(currentActivity);

                    UserTaskCollection notifyTasks = new UserTaskCollection();

                    AppendResourcesToNotifiers(currentActivity, notifyTasks, currentActivity.Descriptor.EnterEventReceivers);

                    foreach (UserTask task in notifyTasks)
                    {
                        task.Status    = TaskStatus.Yue;
                        task.TaskTitle = task.TaskTitle;
                        task.Context["ExtraOperationType"] = WfControlSubOperationType.Enter;
                    }

                    WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());

                    //当从数据库中加载流程时,LoadingType为DataLoadingType.External。
                    if (CanAutoSendUserTask(currentActivity))
                    {
                        WfRuntime.ProcessContext.MoveToUserTasks.CopyFrom(userTasks);
                        WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);
                    }
                    else
                    {
                        currentActivity.Context["UserTasks"]   = userTasks;
                        currentActivity.Context["NotifyTasks"] = notifyTasks;
                    }

                    if (currentActivity.Status == WfActivityStatus.Completed)
                    {
                        WfRuntime.ProcessContext.ClosedProcesses.AddOrReplace(currentActivity.Process);
                    }
                }
                else
                {
                    WfRuntime.ProcessContext.PendingActivities.Add(currentActivity);
                }

                WfRuntime.ProcessContext.FireEnterActivityPrepareAction();
            }
        }
コード例 #31
0
        public static WfClientProcess Moveto(WfClientMovetoParameters parameters)
        {
            IWfProcess process = WfRuntime.GetProcessByProcessID(parameters.ProcessID);

            IWfActivity activity = process.CurrentActivity;

            if (activity == null || activity.Assignees == null)// || !activity.Assignees.Contains(UserHelper.UserId))
            {
                return(null);
            }

            WfTransferParams transferParams = WfTransferParams.FromNextDefaultActivity(process);

            UserTaskCollection userTask = new UserTaskCollection();
            WfMoveToExecutor   executor = new WfMoveToExecutor(activity, activity, transferParams);

            //调整待办的url和标题
            executor.PrepareMoveToTasks += (dataContext, tasks) =>
            {
                PrepareUserTasks(tasks, null, null, transferParams.NextActivityDescriptor.Name);
            };

            GenericOpinion serverOpinion = PrepareOpinion(process.CurrentActivity, parameters.CurrentOpinion, DeluxeIdentity.CurrentUser);

            if (activity.Descriptor.ActivityType == WfActivityType.InitialActivity)
            {
                serverOpinion.OpinionType = "提交";
            }
            else if (activity.Descriptor.ActivityType == WfActivityType.CompletedActivity)
            {
                serverOpinion.OpinionType = string.Empty;
            }
            else if (activity.Descriptor.ActivityType == WfActivityType.NormalActivity)
            {
                serverOpinion.OpinionType = "同意";

                if (serverOpinion.Content.IsNullOrEmpty())
                {
                    serverOpinion.Content = "同意";
                }
            }

            executor.PrepareApplicationData += dataContext => GenericOpinionAdapter.Instance.Update(serverOpinion);

            return(GetClientProcess(executor.Execute()));
        }
コード例 #32
0
        public static void SetTaskAccomplishedAfterRead(Object sender, EventArgs e)
        {
            WfControlBase.ResponsePostBackPlaceHolder();

            string requestTaskID = HttpContext.Current.Request["taskID"];

            if (string.IsNullOrEmpty(requestTaskID))
            {
                return;
            }

            UserTaskCollection usc = UserTaskAdapter.Instance.GetUserTasks(
                UserTaskIDType.TaskID, UserTaskFieldDefine.Url, requestTaskID);

            if (usc.Count > 0)
            {
                UserTask task = usc[0];
                task.SendToUserID = DeluxeIdentity.CurrentUser.ID;
                task.TaskID       = requestTaskID;

                string url            = task.Url;
                int    removePosStart = url.IndexOf("needReadBtn");
                if (removePosStart >= 0) // found request query *needReadBtn*
                {
                    int removePosEnd = url.IndexOf('&', removePosStart);
                    if (removePosEnd > removePosStart) // found *needReadBtn=xxx&*, remove it
                    {
                        url = url.Remove(removePosStart, removePosEnd - removePosStart + 1);
                    }
                    else // not '&' after query string *needReadBtn*, remove all after *needReadBtn*
                    {
                        url = url.Remove(removePosStart);
                    }
                }
                task.Url = url;

                //UserTaskAdapter.Instance.SetTaskAccomplished(task,
                //    UserTaskIDType.TaskID | UserTaskIDType.SendToUserID,
                //    UserTaskFieldDefine.Url);
                UserTaskAdapter.Instance.SetUserTasksAccomplished(usc);
                WfControlBase.ResponsePostBackPlaceHolder();
                HttpContext.Current.Response.Write(ExtScriptHelper.GetRefreshBridgeScript());

                WebUtility.ResponseTimeoutScriptBlock("top.close();", ExtScriptHelper.DefaultResponseTimeout);
            }
        }
コード例 #33
0
		public override void PrepareAction(WfActionParams actionParams)
		{
			IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

			if (currentActivity != null)
			{
				if (WfRuntime.ProcessContext.TargetActivityCanMoveTo && currentActivity.Status == WfActivityStatus.Running)
				{
					UserTaskCollection userTasks = BuildUserTasksFromActivity(currentActivity);

					UserTaskCollection notifyTasks = new UserTaskCollection();

					AppendResourcesToNotifiers(currentActivity, notifyTasks, currentActivity.Descriptor.EnterEventReceivers);

					foreach (UserTask task in notifyTasks)
					{
						task.Status = TaskStatus.Yue;
						task.TaskTitle = task.TaskTitle;
                        task.Context["ExtraOperationType"] = WfControlSubOperationType.Enter;
					}

					WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());

					//当从数据库中加载流程时,LoadingType为DataLoadingType.External。
					if (CanAutoSendUserTask(currentActivity))
					{
						WfRuntime.ProcessContext.MoveToUserTasks.CopyFrom(userTasks);
						WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);
					}
					else
					{
						currentActivity.Context["UserTasks"] = userTasks;
						currentActivity.Context["NotifyTasks"] = notifyTasks;
					}

					if (currentActivity.Status == WfActivityStatus.Completed)
						WfRuntime.ProcessContext.ClosedProcesses.AddOrReplace(currentActivity.Process);
				}
				else
				{
					WfRuntime.ProcessContext.PendingActivities.Add(currentActivity);
				}

				WfRuntime.ProcessContext.FireEnterActivityPrepareAction();
			}
		}
コード例 #34
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);
        }
コード例 #35
0
        private void PrepareUserTasksAndAcl()
        {
            UserTaskCollection originalUserTasks = LoadOriginalUserTask();

            UserTaskCollection newTasks = null;

            if (originalUserTasks.Count > 0)
            {
                newTasks = CreateUserTasksFromTemplate(originalUserTasks, this.TargetAssignees);
            }
            else
            {
                newTasks = CreateNewUserTasks(this.TargetActivity, this.TargetAssignees);
            }

            WfRuntime.ProcessContext.DeletedUserTasks.CopyFrom(originalUserTasks);
            WfRuntime.ProcessContext.MoveToUserTasks.CopyFrom(newTasks);
            WfRuntime.ProcessContext.Acl.CopyFrom(CreateNewAcl(this.TargetActivity, this.TargetAssignees));
        }
コード例 #36
0
        protected override void OnPrepareNotifyTasks(WfExecutorDataContext dataContext)
        {
            UserTaskCollection notifyTasks = (UserTaskCollection)TargetActivity.Context["NotifyTasks"];

            if (notifyTasks != null)
            {
                UserTaskCollection filteredTasks = FilterCurrentUserTasks(notifyTasks);

                WfRuntime.ProcessContext.DeletedUserTasks.CopyFrom(filteredTasks);
                WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(filteredTasks);
                WfRuntime.ProcessContext.NormalizeTaskTitles();

                base.OnPrepareNotifyTasks(dataContext);
            }
            else
            {
                base.OnPrepareNotifyTasks(dataContext);
            }
        }
コード例 #37
0
        private static string GetProcessUrl(IWfProcess process)
        {
            string result = string.Empty;

            if (process.CurrentActivity != null)
            {
                UserTaskCollection tasks = UserTaskAdapter.Instance.LoadUserTasks(
                    builder => builder.AppendItem("ACTIVITY_ID", process.CurrentActivity.ID));

                if (tasks.Count > 0)
                {
                    result = tasks[0].NormalizedUrl;
                }
            }

            if (result.IsNullOrEmpty())
            {
                string infoID = process.ResourceID;

                if (AppCommonInfoAdapter.Instance.Exists(infoID) == false)
                {
                    infoID = process.ID;
                }

                if (AppCommonInfoAdapter.Instance.Exists(infoID))
                {
                    AppCommonInfo commonInfo = AppCommonInfoAdapter.Instance.Load(infoID);

                    NameValueCollection uriParams = UriHelper.GetUriParamsCollection(commonInfo.Url);

                    uriParams["processID"] = process.ID;

                    result = UriHelper.CombineUrlParams(commonInfo.Url, uriParams);
                }
            }

            if (result.IsNotEmpty())
            {
                result = UserTask.GetNormalizedUrl(process.Descriptor.ApplicationName, process.Descriptor.ProgramName, result);
            }

            return(result);
        }
コード例 #38
0
        /// <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);
        }
コード例 #39
0
        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);
        }
コード例 #40
0
        public static void ExecuteReplace(ReplaceAssigneeHelperData rahd)
        {
            rahd.NullCheck("错误:传入参数为空");

            //取原始待办人
            IUser originalUser = (IUser)OguBase.CreateWrapperObject(rahd.OriginalUserID, SchemaType.Users);

            //取目的待办人
            List <IUser> targetUsers = new List <IUser>();

            foreach (string userID in rahd.TargetUsersID)
            {
                IUser targetUser = (IUser)OguBase.CreateWrapperObject(userID, SchemaType.Users);
                targetUsers.Add(targetUser);
            }

            //获取用户任务
            UserTaskCollection tasks = UserTaskAdapter.Instance.LoadUserTasks(
                build => build.AppendItem("TASK_GUID", rahd.TaskID, "="));

            (tasks.Count > 0).FalseThrow("指定的任务ID'{0}'不存在!", rahd.TaskID);

            //取出Activity
            string activityID = tasks[0].ActivityID;

            //待办人替换处理
            try
            {
                IWfProcess process = WfRuntime.GetProcessByActivityID(activityID);

                IWfActivity activity = process.Activities[activityID];

                //创建Executor并执行
                WfReplaceAssigneesExecutor replaceExec = new WfReplaceAssigneesExecutor(activity, activity,
                                                                                        originalUser, targetUsers);
                replaceExec.Execute();
            }
            catch
            {
            }
        }
コード例 #41
0
        public override void PrepareAction(WfActionParams actionParams)
        {
            IWfActivity currentActivity = WfRuntime.ProcessContext.CurrentActivity;

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

                foreach (UserTask task in notifyTasks)
                {
                    task.Status    = TaskStatus.Yue;
                    task.TaskTitle = Translator.Translate(Define.DefaultCulture,
                                                          currentActivity.Process.Descriptor.Properties.GetValue("DefaultCompleteTaskPrefix", "流程已办结:")) + task.TaskTitle;
                }

                WfRuntime.ProcessContext.NotifyUserTasks.CopyFrom(notifyTasks);
                WfRuntime.ProcessContext.Acl.CopyFrom(notifyTasks.ToAcl());
            }
        }
コード例 #42
0
		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;
		}
コード例 #43
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;
        }
コード例 #44
0
ファイル: Interfaces.cs プロジェクト: jerryshi2007/AK47Source
		public void OnSetUserTasksAccomplished(UserTaskCollection tasks)
		{
			foreach (UserTaskOpEventContainer container in EventContainers)
				container.OnSetUserTasksAccomplished(tasks, Context);
		}
コード例 #45
0
        /// <summary>
        /// 执行同步操作
        /// </summary>
        /// <param name="tasks"></param>
        /// <param name="context"></param>
        /// <param name="operation"></param>
        private void ExecuteSyncOperation(string opName, UserTaskCollection tasks, Dictionary<object, object> context, Action<string, DictionaryEntry[]> operation)
        {
            Dictionary<string, object> arguments = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);

            if (tasks.Count > 0)
            {
                context.ToList().ForEach(p => arguments.Add(p.Key.ToString(), p.Value.ToString()));

                //待办或通知的上下文参数
                Dictionary<string, object> taskContextContainer = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);

                foreach (UserTask task in tasks)
                {
                    //把每一个流程的上下文参数也添加到arguments中,是一个ProcessID和Task上下文的字典
                    if (arguments.ContainsKey(task.ProcessID) == false)
                    {
                        Dictionary<string, object> processArgs = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);

                        WfRuntime.GetProcessByProcessID(task.ProcessID).ApplicationRuntimeParameters.CopyTo(processArgs,
                            kp => kp.Value != null && (kp.Value.GetType().IsPrimitive || kp.Value is string));

                        arguments.Add(task.ProcessID, ConvertDictToEntry(processArgs));
                    }

                    //把每一个待办的上下文也添加到arguments中,是一个TaskID和Task上下文的字典
                    if (taskContextContainer.ContainsKey(task.TaskID) == false)
                        taskContextContainer.Add(task.TaskID, ConvertDictToEntry(task.Context));
                }

                arguments["TaskContext"] = ConvertDictToEntry(taskContextContainer);

                string seriTasks = JSONSerializerExecute.Serialize(tasks);

                PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration(
                    opName, () => operation(seriTasks, ConvertDictToEntry(arguments)));
            }
        }
コード例 #46
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, "错误");
			}
		}
コード例 #47
0
        private void executor_PrepareNotifyTasks(WfExecutorDataContext dataContext, UserTaskCollection tasks)
        {
            GenericOpinion opnion = (GenericOpinion)dataContext["AbortOpinion"];

            tasks.ForEach(t =>
            {
                if (t.Body.IsNullOrEmpty())
                {
                    t.Body = opnion.Content;
                }
            });
        }
コード例 #48
0
ファイル: Interfaces.cs プロジェクト: jerryshi2007/AK47Source
		public void OnDeleteUserAccomplishedTasks(UserTaskCollection tasks)
		{
			foreach (UserTaskOpEventContainer container in EventContainers)
				container.OnDeleteUserAccomplishedTasks(tasks, Context);
		}
コード例 #49
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);
            }
        }
コード例 #50
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;
		}
コード例 #51
0
		/// <summary>
		/// 删除已办事项
		/// </summary>
		/// <param name="task"></param>
		/// <param name="idType"></param>
		public void DeleteUserAccomplishedTasks(UserTaskCollection tasks)
		{
			tasks.NullCheck("tasks");

			UserOpContext contexts = InitEventContexts();

			contexts.OnBeforeDeleteUserAccomplishedTasks(tasks);

			using (TransactionScope scope = TransactionScopeFactory.Create())
			{
				contexts.OnDeleteUserAccomplishedTasks(tasks);

				scope.Complete();
			}
		}
コード例 #52
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;
        }
コード例 #53
0
		private UserTaskCollection GetTasksFromContextCache(string cacheKey)
		{
			UserTaskCollection result = (UserTaskCollection)ObjectContextCache.Instance.GetOrAddNewValue(cacheKey, (cache, key) =>
			{
				UserTaskCollection tasks = new UserTaskCollection();

				cache.Add(key, tasks);

				return tasks;
			});

			return result;
		}
コード例 #54
0
		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;
		}
コード例 #55
0
 private void eventContainer_DeleteUserAccomplishedTasks(UserTaskCollection tasks, Dictionary<object, object> context)
 {
     AttachTransactionEvent();
 }
コード例 #56
0
        private static UserTaskCollection GetUserTasks(UserTask task, UserTaskIDType idType)
        {
            UserTaskCollection result = new UserTaskCollection();

            foreach (EnumItemDescription desp in EnumItemDescriptionAttribute.GetDescriptionList(typeof(UserTaskIDType)))
            {
                UserTaskIDType enumIdType = (UserTaskIDType)desp.EnumValue;

                if ((enumIdType & idType) != UserTaskIDType.None && enumIdType != UserTaskIDType.SendToUserID)
                {
                    UserTaskIDType targetIDType = (UserTaskIDType)desp.EnumValue | (idType & UserTaskIDType.SendToUserID);

                    UserTaskCollection tasks = UserTaskAdapter.Instance.GetUserTasks(
                                targetIDType,
                                UserTaskFieldDefine.TaskID | UserTaskFieldDefine.SendToUserID | UserTaskFieldDefine.ActivityID,
                                true,
                                DefaultUserTaskOperationImpl.GetUserTaskIDValue(task, targetIDType));

                    result.CopyFrom(tasks);
                }
            }

            return result;
        }
コード例 #57
0
		/// <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;
		}
コード例 #58
0
        private void eventContainer_BeforeDeleteUserTasks(UserTaskCollection tasks, Dictionary<object, object> context)
        {
            ExceptionHelper.FalseThrow<ArgumentNullException>(tasks != null, "tasks");

            tasks.ForEach(task => TaskChangedUserIDs[task.SendToUserID] = task.SendToUserID);
        }
コード例 #59
0
 private void eventContainer_SendUserTasks(UserTaskCollection tasks, Dictionary<object, object> context)
 {
     AttachTransactionEvent();
 }
コード例 #60
0
		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;
		}