예제 #1
0
        public static WfClientProcess GetClientProcess(IWfClientSearchParameters parameters)
        {
            IWfProcess process = null;

            if (parameters.ActivityID.IsNotEmpty())
            {
                process = WfRuntime.GetProcessByActivityID(parameters.ActivityID);
            }
            else
            {
                if (parameters.ProcessID.IsNotEmpty())
                {
                    process = WfRuntime.GetProcessByProcessID(parameters.ProcessID);
                }
                else
                {
                    if (parameters.ResourceID.IsNotEmpty())
                    {
                        process = WfRuntime.GetProcessByResourceID(parameters.ResourceID).FirstOrDefault();
                    }
                }
            }

            return(GetClientProcess(process));
        }
예제 #2
0
        public void SimpleProcessPersistRepeatTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee();

            //process.DefaultTaskTitle = "测试保存的流程";
            WfRuntime.PersistWorkflows();

            IWfProcess loadedProcess  = WfRuntime.GetProcessByProcessID(process.ID);
            IWfProcess loadedProcess2 = WfRuntime.GetProcessByActivityID(process.Activities[0].ID);

            Assert.AreEqual(loadedProcess, loadedProcess2);

            int n = loadedProcess.Activities.Count;

            for (int i = 0; i < n; i++)
            {
                if (loadedProcess.Activities[i].Descriptor != loadedProcess.Descriptor.InitialActivity)
                {
                    WfTransferParams transferPara = new WfTransferParams(loadedProcess.Activities[i].Descriptor);
                    loadedProcess.MoveTo(transferPara);
                    WfRuntime.PersistWorkflows();
                }

                loadedProcess = WfRuntime.GetProcessByActivityID(loadedProcess.Activities[i].ID);
            }

            IWfProcess OnceAgainloadedProcess = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.AreEqual(OnceAgainloadedProcess.ID, process.ID);
        }
예제 #3
0
        protected override void AfterCreateProcessInstance(SysTaskProcess sysTaskProcess)
        {
            sysTaskProcess.Name = string.Format("创建活动{0}的分支流程", this.OwnerActivityID);

            //这一步可能是很长时间的操作
            OguDataCollection <IUser> users = this.Template.Resources.ToUsers();

            int index = 0;

            if (this.Template.ExecuteSequence == WfBranchProcessExecuteSequence.SerialInSameProcess)
            {
                sysTaskProcess.Activities.Add(CreateUserActivity(sysTaskProcess, index++, users));

                SysTaskProcessRuntime.Persist();
            }
            else
            {
                foreach (IUser user in users)
                {
                    sysTaskProcess.Activities.Add(CreateUserActivity(sysTaskProcess, index++, new IUser[] { user }));

                    SysTaskProcessRuntime.Persist();
                }
            }

            if (this.AutoAddExitMaintainingStatusTask)
            {
                IWfProcess process = WfRuntime.GetProcessByActivityID(this.OwnerActivityID);

                sysTaskProcess.Activities.Add(sysTaskProcess.CreateExitMaintainingActivity(process.ID, index++));

                SysTaskProcessRuntime.Persist();
            }
        }
예제 #4
0
        private void InitOriginalActivityByActivityID(string resourceID, string activityID, string originalCurrentActivityID)
        {
            if (activityID.IsNotEmpty())
            {
                IWfProcess process = WfRuntime.GetProcessByActivityID(activityID);

                //取得OriginalActivity
                this._OriginalCurrentActivity = process.Activities[originalCurrentActivityID];
                OriginalActivity = process.Activities[activityID];
            }
        }
        public WfClientProcessInfo GetProcessInfoByActivityID(string activityID, WfClientUser user)
        {
            activityID.CheckStringIsNullOrEmpty("activityID");

            OperationContext.Current.FillContextToOguServiceContext();

            IWfProcess  process  = WfRuntime.GetProcessByActivityID(activityID);
            IWfActivity activity = process.Activities[activityID];

            return(process.ToClientProcessInfo(activity, user).FillCurrentOpinion(activity, user));
        }
        public WfClientProcessInfo ReplaceAssignees(string activityID, WfClientUser originalUser, List <WfClientUser> targetUsers, WfClientRuntimeContext runtimeContext)
        {
            OperationContext.Current.FillContextToOguServiceContext();

            IWfProcess  process        = WfRuntime.GetProcessByActivityID(activityID);
            IWfActivity targetActivity = process.Activities[activityID];

            ExecuteExecutor(process, runtimeContext,
                            (p) => new WfReplaceAssigneesExecutor(targetActivity, targetActivity, (IUser)originalUser.ToOguObject(), targetUsers.ToOguObjects <WfClientUser, IUser>()));

            return(process.ToClientProcessInfo(runtimeContext.Operator).FillCurrentOpinion(process.CurrentActivity, runtimeContext.Operator));
        }
예제 #7
0
        public string[] StartBranchProcesses(string ownerActivityID, WfBranchProcessTransferParams branchTransferParams)
        {
            ownerActivityID.CheckStringIsNullOrEmpty("ownerActivityID");
            branchTransferParams.NullCheck("branchTransferParams");

            IWfProcess process = WfRuntime.GetProcessByActivityID(ownerActivityID);

            IWfActivity ownerActivity = process.Activities[ownerActivityID];

            WfStartBranchProcessExecutor executor = new WfStartBranchProcessExecutor(ownerActivity, ownerActivity, branchTransferParams);

            executor.Execute();

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

            executor.StartedProcesses.ForEach(p => startedProcessIDs.Add(p.ID));

            return(startedProcessIDs.ToArray());
        }
예제 #8
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
            {
            }
        }
예제 #9
0
        public void LoadProcessByActivityIDTest()
        {
            string     actId   = string.Empty;
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            ((WfProcess)process).ResourceID = "resource2";

            actId = process.CurrentActivity.ID;
            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.approver2, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.requestor, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivity(OguObject.approver2, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            IWfProcess proc = WfRuntime.GetProcessByActivityID(actId);

            Assert.AreEqual(process.ID, proc.ID);
            Assert.AreEqual(process.CurrentActivity.ID, proc.CurrentActivity.ID);
        }
        public string ChangeActivityAssignee(string userJsonStr, string activityID)
        {
            if (activityID.IsNullOrEmpty())
            {
                return(Translator.Translate(Define.DefaultCulture, "请先选择相应的活动!"));
            }

            WfConverterHelper.RegisterConverters();

            try
            {
                var userList         = JSONSerializerExecute.Deserialize <List <OguUser> >(userJsonStr);
                var process          = WfRuntime.GetProcessByActivityID(activityID);
                var activityInstance = process.Activities[activityID];

                if (activityInstance == null)
                {
                    return(Translator.Translate(Define.DefaultCulture, "未找到活动ID为{0}的流程!", activityID));
                }

                WfReplaceAssigneesExecutor executor =
                    new WfReplaceAssigneesExecutor(
                        WfClientContext.Current.CurrentActivity,
                        activityInstance,
                        null,
                        userList);

                WfClientContext.Current.Execute(executor);

                return(string.Empty);
            }
            catch (Exception ex)
            {
                ex = ExceptionHelper.GetRealException(ex);

                return(Translator.Translate(Define.DefaultCulture, "修改当前活动点操作人失败!失败原因:{0}", ex.Message));
            }
        }
        public WfClientProcess GetProcessByActivityID(string activityID, WfClientUser user, WfClientProcessInfoFilter filter)
        {
            activityID.CheckStringIsNullOrEmpty("activityID");

            OperationContext.Current.FillContextToOguServiceContext();

            IWfProcess process = WfRuntime.GetProcessByActivityID(activityID);

            WfClientProcess client = null;

            new WfClientProcessConverter(filter).ServerToClient(process, ref client);

            IWfActivity originalActivity = process.Activities[activityID];

            client.AuthorizationInfo = WfClientProcessInfoBaseConverter.Instance.GetAuthorizationInfo(process, originalActivity, user);

            if ((filter & WfClientProcessInfoFilter.CurrentOpinion) == WfClientProcessInfoFilter.CurrentOpinion)
            {
                client.FillCurrentOpinion(originalActivity, user);
            }

            return(client);
        }
예제 #12
0
        public static WfClientProcess DynamicProcessMoveto(WfClientDynamicProcessMovetoParameters parameters)
        {
            IWfProcess process = WfRuntime.GetProcessByActivityID(parameters.ActivityID);

            IWfActivity activity = process.CurrentActivity;

            if (parameters.MovetoActivityDescriptor != null)
            {
                WfActivityDescriptorCreateParams createParams = new WfActivityDescriptorCreateParams();

                createParams       = new WfActivityDescriptorCreateParams();
                createParams.Users = new OguDataCollection <IUser>();
                createParams.Name  = parameters.MovetoActivityDescriptor.ActivityName;

                foreach (WfClientUserResourceDescriptorParameters userResource in parameters.MovetoActivityDescriptor.UserResourceList)
                {
                    createParams.Users.Add(userResource.User);
                }

                WfAddActivityExecutor executor = new WfAddActivityExecutor(activity, activity, createParams);

                executor.Execute();
            }

            //工作流流向下一个节点
            WfClientMovetoParameters movetoParameters = new WfClientMovetoParameters()
            {
                ProcessID  = process.ID,
                ActivityID = activity.ID,
                ResourceID = process.ResourceID,
                Comment    = parameters.Comment
            };
            WfClientProcess clientProcess = WfClientProxy.Moveto(movetoParameters);

            return(clientProcess);
        }
예제 #13
0
        public static WfClientProcess GetClientProcessByActivityID(string activityID)
        {
            IWfProcess process = WfRuntime.GetProcessByActivityID(activityID);

            return(GetClientProcess(process));
        }
예제 #14
0
        private IWfActivity GetAssociatedActivity(string ownerActivityId)
        {
            IWfProcess proc1 = WfRuntime.GetProcessByActivityID(ownerActivityId);

            return(proc1.Activities[ownerActivityId]);
        }