コード例 #1
0
        private void StartWorkflow()
        {
            WfProcessStartupParams  startupParams = GenerateStartupParams();
            WfStartWorkflowExecutor executor      = new WfStartWorkflowExecutor(null, startupParams);

            executor.Execute();
        }
コード例 #2
0
        public WfClientProcessStartupParams ServerToClient(WfProcessStartupParams server, ref WfClientProcessStartupParams client)
        {
            server.NullCheck("server");

            if (client == null)
                client = new WfClientProcessStartupParams();

            if (server.ProcessDescriptor != null)
                client.ProcessDescriptorKey = server.ProcessDescriptor.Key;

            WfClientDictionaryConverter.Instance.ServerToClient(server.ApplicationRuntimeParameters, client.ApplicationRuntimeParameters);

            client.AutoCommit = server.AutoCommit;
            client.AutoStartInitialActivity = server.AutoStartInitialActivity;
            client.CheckStartProcessUserPermission = server.CheckStartProcessUserPermission;
            client.DefaultTaskTitle = server.DefaultTaskTitle;
            client.DefaultUrl = server.DefaultUrl;
            client.RelativeID = server.RelativeID;
            client.RelativeURL = server.RelativeURL;
            client.ResourceID = server.ResourceID;
            client.RuntimeProcessName = server.RuntimeProcessName;

            client.Creator = (WfClientUser)server.Creator.ToClientOguObject();
            client.Department = (WfClientOrganization)server.Department.ToClientOguObject();

            WfClientAssigneeCollectionConverter.Instance.ServerToClient(server.Assignees, client.Assignees);

            return client;
        }
コード例 #3
0
ファイル: WfRuntimeTest.cs プロジェクト: wooln/AK47Source
        public void ProcessWithMatrix()
        {
            try
            {
                var wfDescriptor = WfProcessDescriptorManager.GetDescriptor("workflowmatrixtest");
                WfProcessStartupParams startParam = new WfProcessStartupParams();
                startParam.ProcessDescriptor = wfDescriptor;

                var processInstance = WfRuntime.StartWorkflow(startParam);
                processInstance.ApplicationRuntimeParameters.Add("支付方式", "网银");
                processInstance.ApplicationRuntimeParameters.Add("成本中心", "成1");
                processInstance.ApplicationRuntimeParameters.Add("费用类型", "差旅费");
                processInstance.ApplicationRuntimeParameters.Add("金额", "100");
                processInstance.ApplicationRuntimeParameters.Add("部门", "商务部");

                WfTransferParams transferParams = new WfTransferParams(processInstance.Descriptor.Activities["N2"]);

                var currentAct = processInstance.MoveTo(transferParams);
                currentAct.Candidates.ForEach(p =>
                {
                    Console.WriteLine(p.User.DisplayName);
                });
            }
            catch
            {
            }
        }
コード例 #4
0
ファイル: WfRuntimeTest.cs プロジェクト: wooln/AK47Source
        public void ReturnTestWithBranchActivity()
        {
            IWfProcessDescriptor desp = WfProcessTestCommon.CreateProcessDescriptor();

            desp.InitialActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object));

            GetProcDespWithBranchActivities(desp.Activities[1], 2);

            WfProcessStartupParams startupParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(desp);
            IWfProcess             process       = WfRuntime.StartWorkflow(startupParams);

            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process);

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

            process = WfRuntime.GetProcessByProcessID(process.ID);
            Assert.AreEqual(2, process.ElapsedActivities.Count);
            WfRuntime.ProcessContext.ActivityChangingContext.CreatorInstanceID = process.CurrentActivity.ID;
            process.CurrentActivity.CopyMainStreamActivities(process.Activities[1], null, WfControlOperationType.Return); //退件
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.requestor, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.IsTrue(process.CurrentActivity.CreatorInstanceID.IsNotEmpty());
            Assert.AreEqual(process.ElapsedActivities[2].ID, process.CurrentActivity.CreatorInstanceID);

            Assert.AreEqual(10, process.Activities.Count);
        }
コード例 #5
0
ファイル: WfRuntimeTest.cs プロジェクト: wooln/AK47Source
        public void MainStreamActivitiesWithConditionActivityPassed()
        {
            IWfProcessDescriptor desp = WfProcessTestCommon.CreateProcessDescriptor();

            desp.InitialActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object));

            IWfActivityDescriptor actDesp = desp.Activities[1];

            AddActivitiesDespToSameActivityDesp(actDesp, 2);
            ToTransitionsDescriptorCollection transDespColl = actDesp.ToTransitions;

            SetTransitionCondition(transDespColl[0], false, 1);
            SetTransitionCondition(transDespColl[1], true, 3);

            WfProcessStartupParams startupParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(desp);

            IWfProcess process = WfRuntime.StartWorkflow(startupParams);

            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process);

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

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

            process = WfRuntime.GetProcessByProcessID(process.ID);
            Assert.AreEqual(3, process.ElapsedActivities.Count);

            WfMainStreamActivityDescriptorCollection coll = process.Descriptor.GetMainStreamActivities();

            Assert.AreEqual(process.Activities.Count - 1, coll.Count);

            Assert.AreEqual(transDespColl[1].ToActivity.Key, coll[2].Activity.Key, "此处为动态添加的活动");
        }
コード例 #6
0
        public void ActivitySerializeTest()
        {
            IWfProcessDescriptor processDesc = WfProcessTestCommon.CreateSimpleProcessDescriptor();

            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ProcessDescriptor = processDesc;
            IWfProcess process = WfRuntime.StartWorkflow(startupParams);

            Sky sky = new Sky();

            sky.air   = "清新";
            sky.Cloud = 1;
            Sky space = new Sky();

            space.air   = "干净";
            space.Cloud = 1;

            process.InitialActivity.Context.Add("DDO", sky);
            process.InitialActivity.Context.Add("DFO", space);

            XElementFormatter formatter = new XElementFormatter();
            XElement          root      = formatter.Serialize(process);

            Console.WriteLine(root.ToString());

            IWfProcess clonedProcess = (IWfProcess)formatter.Deserialize(root);

            Assert.IsNotNull(clonedProcess.InitialActivity.Context["DDO"]);
            Assert.AreEqual(process.InitialActivity.Context.Count, clonedProcess.InitialActivity.Context.Count);
            Assert.AreEqual(((Sky)process.InitialActivity.Context["DDO"]).air, ((Sky)clonedProcess.InitialActivity.Context["DDO"]).air);
            Assert.AreEqual(((Sky)process.InitialActivity.Context["DDO"]).Cloud, ((Sky)clonedProcess.InitialActivity.Context["DDO"]).Cloud);
            Assert.AreEqual(((Sky)process.InitialActivity.Context["DFO"]).air, ((Sky)clonedProcess.InitialActivity.Context["DFO"]).air);
            Assert.AreEqual(((Sky)process.InitialActivity.Context["DFO"]).Cloud, ((Sky)clonedProcess.InitialActivity.Context["DFO"]).Cloud);
        }
コード例 #7
0
        public void ProcessSerializeTest()
        {
            IWfProcessDescriptor processDesc = WfProcessTestCommon.CreateSimpleProcessDescriptor();

            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ProcessDescriptor = processDesc;
            IWfProcess process = WfRuntime.StartWorkflow(startupParams);

            ((WfProcess)process).ResourceID = UuidHelper.NewUuidString();

            WfProcessContext context = process.Context;

            context.Add("UCC", "the same");

            XElementFormatter formatter = new XElementFormatter();

            //formatter.OutputShortType = false;

            XElement root = formatter.Serialize(process);

            Console.WriteLine(root.ToString());

            IWfProcess clonedProcess = (IWfProcess)formatter.Deserialize(root);

            Assert.IsNotNull(clonedProcess.Context["UCC"]);
            Assert.AreEqual(process.Context.Count, clonedProcess.Context.Count);
            Assert.AreEqual(process.Context["UCC"], clonedProcess.Context["UCC"]);
        }
コード例 #8
0
        private static IWfProcess StartNewProcess(IWfProcessDescriptor processDesp, IWfProcess originalProcess, string newResourceID, IUser processCreator, IOrganization department)
        {
            WfProcessStartupParams wp =
                new WfProcessStartupParams(processDesp);

            IWfProcess process = WfRuntime.StartWorkflow(typeof(OAWfProcess), wp);

            process.OwnerDepartment = department;
            WfTransferParams tParams = new WfTransferParams(wp.Descriptor.InitialActivity);

            tParams.Operator = DeluxeIdentity.CurrentUser;

            tParams.Receivers.Add(processCreator);

            process.MoveTo(tParams);

            process.Context["ApplicationName"] = originalProcess.Context["ApplicationName"];
            process.Context["ProgramName"]     = originalProcess.Context["ProgramName"];

            ((OAWfProcess)process).ResourceID = newResourceID;
            process.Context[WfVariableDefine.ProcessDraftDepartmentNameVariableName] =
                WfVariableDefine.GetProcessDraftDepartmentName(originalProcess);

            process.Context[WfVariableDefine.ProcessDraftUserIDVariableName] =
                WfVariableDefine.GetProcessDraftUserID(originalProcess);

            process.Context[WfVariableDefine.ProcessDraftUserNameVariableName] =
                WfVariableDefine.GetProcessDraftUserName(originalProcess);

            return(process);
        }
コード例 #9
0
        public void WfExternalUserTest()
        {
            WfExternalUser externalUser = new WfExternalUser();

            externalUser.Key         = "user0";
            externalUser.Name        = "zLing";
            externalUser.Gender      = Gender.Female;
            externalUser.Email       = "*****@*****.**";
            externalUser.MobilePhone = "13552630000";
            externalUser.Phone       = "0409987";
            externalUser.Title       = "programer";

            IWfProcessDescriptor processDesc = WfProcessTestCommon.CreateSimpleProcessDescriptor();

            processDesc.ExternalUsers.Add(externalUser);

            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ProcessDescriptor = processDesc;
            IWfProcess process = WfRuntime.StartWorkflow(startupParams);

            XElementFormatter formatter = new XElementFormatter();

            XElement   rootProc      = formatter.Serialize(process);
            IWfProcess clonedProcess = (IWfProcess)formatter.Deserialize(rootProc);

            XElement resultProc = formatter.Serialize(clonedProcess);

            Assert.AreEqual(processDesc.ExternalUsers[0].Name, clonedProcess.Descriptor.ExternalUsers[0].Name);
            Assert.AreEqual(processDesc.ExternalUsers[0].Gender, clonedProcess.Descriptor.ExternalUsers[0].Gender);

            Assert.AreEqual(rootProc.ToString(), resultProc.ToString());
        }
コード例 #10
0
ファイル: WfRuntime.cs プロジェクト: jerryshi2007/AK47Source
		/// <summary>
		/// 
		/// </summary>
		/// <param name="processType"></param>
		/// <param name="startupParams"></param>
		/// <returns></returns>
		public static IWfProcess StartWorkflow(System.Type processType, WfProcessStartupParams startupParams)
		{
			ExceptionHelper.FalseThrow<ArgumentNullException>(processType != null, "processType");
			ExceptionHelper.FalseThrow<ArgumentNullException>(startupParams != null, "startupParams");

			IWfProcess process = (IWfProcess)Activator.CreateInstance(processType, true);

			Type[] types = new Type[] { };

			ConstructorInfo constructorInfoObj = process.GetType().GetConstructor(
				BindingFlags.Instance | BindingFlags.Public, null,
				CallingConventions.HasThis, types, null);

			if (constructorInfoObj != null)
				process = (IWfProcess)constructorInfoObj.Invoke(new object[] { });

			process.Creator = startupParams.Operator;
			process.OwnerDepartment = startupParams.Department;
			process.ResourceID = startupParams.ResourceID;

			WorkflowSettings.GetConfig().EnqueueWorkItemExecutor.EnqueueInitialWfWorkItem(process);

			AddProcessToCache(process.ID, process);

			return process;
		}
コード例 #11
0
        public WfProcessStartupParams ClientToServer(WfClientProcessStartupParams client, ref WfProcessStartupParams server)
        {
            client.NullCheck("client");

            if (server == null)
                server = new WfProcessStartupParams();

            if (this._TestMode == false)
                server.ProcessDescriptor = WfProcessDescriptorManager.GetDescriptor(client.ProcessDescriptorKey);

            WfClientDictionaryConverter.Instance.ClientToServer(client.ApplicationRuntimeParameters, server.ApplicationRuntimeParameters);

            server.AutoCommit = client.AutoCommit;
            server.AutoStartInitialActivity = client.AutoStartInitialActivity;
            server.CheckStartProcessUserPermission = client.CheckStartProcessUserPermission;
            server.DefaultTaskTitle = client.DefaultTaskTitle;
            server.DefaultUrl = client.DefaultUrl;
            server.RelativeID = client.RelativeID;
            server.RelativeURL = client.RelativeURL;
            server.ResourceID = client.ResourceID;
            server.RuntimeProcessName = client.RuntimeProcessName;

            server.Creator = (IUser)client.Creator.ToOguObject();
            server.Department = (IOrganization)client.Department.ToOguObject();

            WfClientAssigneeCollectionConverter.Instance.ClientToServer(client.Assignees, server.Assignees);

            return server;
        }
コード例 #12
0
        public WfClientProcessStartupParams ServerToClient(WfProcessStartupParams server, ref WfClientProcessStartupParams client)
        {
            server.NullCheck("server");

            if (client == null)
            {
                client = new WfClientProcessStartupParams();
            }

            if (server.ProcessDescriptor != null)
            {
                client.ProcessDescriptorKey = server.ProcessDescriptor.Key;
            }

            WfClientDictionaryConverter.Instance.ServerToClient(server.ApplicationRuntimeParameters, client.ApplicationRuntimeParameters);
            WfClientDictionaryConverter.Instance.ServerToClient(server.OverridableInitialActivityProperties, client.OverridableInitialActivityProperties);

            client.AutoCommit = server.AutoCommit;
            client.AutoStartInitialActivity        = server.AutoStartInitialActivity;
            client.CheckStartProcessUserPermission = server.CheckStartProcessUserPermission;
            client.DefaultTaskTitle   = server.DefaultTaskTitle;
            client.DefaultUrl         = server.DefaultUrl;
            client.RelativeID         = server.RelativeID;
            client.RelativeURL        = server.RelativeURL;
            client.ResourceID         = server.ResourceID;
            client.RuntimeProcessName = server.RuntimeProcessName;

            client.Creator    = (WfClientUser)server.Creator.ToClientOguObject();
            client.Department = (WfClientOrganization)server.Department.ToClientOguObject();

            WfClientAssigneeCollectionConverter.Instance.ServerToClient(server.Assignees, client.Assignees);

            return(client);
        }
コード例 #13
0
        public WfProcessStartupParams ClientToServer(WfClientProcessStartupParams client, ref WfProcessStartupParams server)
        {
            client.NullCheck("client");

            if (server == null)
            {
                server = new WfProcessStartupParams();
            }

            if (this._TestMode == false)
            {
                server.ProcessDescriptor = WfProcessDescriptorManager.GetDescriptor(client.ProcessDescriptorKey);
            }

            WfClientDictionaryConverter.Instance.ClientToServer(client.ApplicationRuntimeParameters, server.ApplicationRuntimeParameters);
            WfClientDictionaryConverter.Instance.ClientToServer(client.OverridableInitialActivityProperties, server.OverridableInitialActivityProperties);

            server.AutoCommit = client.AutoCommit;
            server.AutoStartInitialActivity        = client.AutoStartInitialActivity;
            server.CheckStartProcessUserPermission = client.CheckStartProcessUserPermission;
            server.DefaultTaskTitle   = client.DefaultTaskTitle;
            server.DefaultUrl         = client.DefaultUrl;
            server.RelativeID         = client.RelativeID;
            server.RelativeURL        = client.RelativeURL;
            server.ResourceID         = client.ResourceID;
            server.RuntimeProcessName = client.RuntimeProcessName;

            server.Creator    = (IUser)client.Creator.ToOguObject();
            server.Department = (IOrganization)client.Department.ToOguObject();

            WfClientAssigneeCollectionConverter.Instance.ClientToServer(client.Assignees, server.Assignees);

            return(server);
        }
コード例 #14
0
        /// <summary>
        /// 带上下文参数的启动流程
        /// </summary>
        /// <param name="processDesp"></param>
        /// <returns></returns>
        public static IWfProcess StartupProcessByExecutor(this IWfProcessDescriptor processDesp, Dictionary <string, object> runtimeParameters = null)
        {
            WfProcessStartupParams startupParams = processDesp.PrepareStartupParams(runtimeParameters);

            WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(startupParams);

            return(executor.Execute());
        }
コード例 #15
0
        public static IWfProcess StartSpecialReturnProcess(IWfProcessDescriptor processDesp)
        {
            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ProcessDescriptor = processDesp;
            startupParams.ApplicationRuntimeParameters["IsCLine"] = true;

            return(WfRuntime.StartWorkflow(startupParams));
        }
コード例 #16
0
        public void StandardStartupParamsClientToServer()
        {
            WfClientProcessStartupParams client = ProcessRuntimeHelper.PrepareClientProcessStartupParams(UuidHelper.NewUuidString());

            WfProcessStartupParams server = null;

            WfClientProcessStartupParamsConverter.TestInstance.ClientToServer(client, ref server);

            client.AreSame(server);
        }
コード例 #17
0
        public static IWfProcess StartupSimpleProcessDescriptorWithTransitionCondition()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptorWithCondition();

            processDesp.InitialActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object));

            WfProcessStartupParams startupParams = GetInstanceOfWfProcessStartupParams(processDesp);

            return(WfRuntime.StartWorkflow(startupParams));
        }
コード例 #18
0
ファイル: ProcessHelper.cs プロジェクト: wooln/AK47Source
        public static IWfProcess CreateFreeStepsProcessInstance(params IUser[] stepUsers)
        {
            IWfProcessDescriptor processDesp = CreateFreeStepsProcess(stepUsers);

            WfProcessStartupParams startupParams = GetInstanceOfWfProcessStartupParams(processDesp);

            IWfProcess process = WfRuntime.StartWorkflow(startupParams);

            process.Context["Context"] = "This is a context";

            return(process);
        }
コード例 #19
0
ファイル: ProcessHelper.cs プロジェクト: wooln/AK47Source
        public static IWfProcess CreateProcessInstance(WfClientProcessDescriptor client)
        {
            WfProcessDescriptor processDesp = null;

            WfClientProcessDescriptorConverter.Instance.ClientToServer(client, ref processDesp);
            WfProcessStartupParams startupParams = GetInstanceOfWfProcessStartupParams(processDesp);

            startupParams.ApplicationRuntimeParameters["CostCenter"] = "1001";
            startupParams.ApplicationRuntimeParameters["PayMethod"]  = "1";
            startupParams.ApplicationRuntimeParameters["Age"]        = 30;

            return(WfRuntime.StartWorkflow(startupParams));
        }
コード例 #20
0
        public static IWfProcess StartupSimpleProcess()
        {
            ProcessContextAction();

            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptor();

            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ResourceID        = UuidHelper.NewUuidString();
            startupParams.ProcessDescriptor = processDesp;

            return(WfRuntime.StartWorkflow(startupParams));
        }
コード例 #21
0
        public static IWfProcess StartupProcess(IWfProcessDescriptor processDesp, Dictionary <string, object> runtimeParameters)
        {
            ProcessContextAction();

            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ResourceID        = UuidHelper.NewUuidString();
            startupParams.ProcessDescriptor = processDesp;

            runtimeParameters.ForEach(kp => startupParams.ApplicationRuntimeParameters.Add(kp.Key, kp.Value));

            return(WfRuntime.StartWorkflow(startupParams));
        }
コード例 #22
0
        public WfClientProcessInfo StartWorkflow(WfClientProcessStartupParams clientStartupParams)
        {
            if (clientStartupParams == null)
            {
                throw new ApplicationException(Translator.Translate(Define.DefaultCulture, "流程的启动参数不能为空"));
            }

            //设置标准参数,优先使用外部参数
            if (!clientStartupParams.ApplicationRuntimeParameters.ContainsKey("ProcessRequestor"))
            {
                clientStartupParams.ApplicationRuntimeParameters["ProcessRequestor"] = clientStartupParams.Creator;
            }

            OperationContext.Current.FillContextToOguServiceContext();

            WfProcessStartupParams startupParams = null;

            WfClientProcessStartupParamsConverter.Instance.ClientToServer(clientStartupParams, ref startupParams);

            IWfProcess process = null;

            DoPrincipalAction(startupParams.Creator, () =>
            {
                WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(startupParams);

                executor.AfterModifyWorkflow += (dataContext =>
                {
                    dataContext.CurrentProcess.GenerateCandidatesFromResources();
                    clientStartupParams.ProcessContext.ForEach(kp => dataContext.CurrentProcess.Context[kp.Key] = kp.Value);

                    WfClientProcessInfoBaseConverter.Instance.FillOpinionInfoByProcessByActivity(
                        clientStartupParams.Opinion,
                        dataContext.CurrentProcess.CurrentActivity,
                        clientStartupParams.Creator,
                        clientStartupParams.Creator);
                });

                executor.SaveApplicationData += (dataContext) => SaveOpinion(clientStartupParams.Opinion);

                if (clientStartupParams.AutoPersist)
                {
                    process = executor.Execute();
                }
                else
                {
                    process = executor.ExecuteNotPersist();
                }
            });

            return(process.ToClientProcessInfo(clientStartupParams.Creator).FillCurrentOpinion(process.CurrentActivity, clientStartupParams.Creator));
        }
コード例 #23
0
        private static IWfProcess PrepareProcess()
        {
            WfClientUser[] users = new WfClientUser[] { Consts.Users["Requestor"] };

            IWfProcessDescriptor processDesp = ProcessHelper.CreateFreeStepsProcess(users.ToOguObjects <WfClientUser, IUser>().ToArray());

            WfProcessStartupParams startupParams = ProcessHelper.GetInstanceOfWfProcessStartupParams(processDesp);

            IWfProcess process = WfRuntime.StartWorkflow(startupParams);

            WfRuntime.PersistWorkflows();

            return(process);
        }
コード例 #24
0
        private static string GetStartWorkflowResourceID(IUser user)
        {
            IWfProcessDescriptor     procDesp = WfProcessTestCommon.CreateProcessDescriptor();
            WfUserResourceDescriptor userDesp = new WfUserResourceDescriptor(user);

            procDesp.InitialActivity.Resources.Add(userDesp);

            WfProcessStartupParams  startParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(procDesp);
            WfStartWorkflowExecutor exec        = new WfStartWorkflowExecutor(null, startParams);

            exec.Execute();

            return(startParams.ResourceID);
        }
コード例 #25
0
        public static IWfProcess StartupSimpleProcessDescriptorWithActivityCondition()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptorWithCondition();

            processDesp.InitialActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object));

            processDesp.Activities["NormalActivity"].Condition.Expression = "Amount >= 5000";

            WfProcessStartupParams startupParams = GetInstanceOfWfProcessStartupParams(processDesp);

            startupParams.DefaultTaskTitle = "测试流程节点带条件";

            return(WfRuntime.StartWorkflow(startupParams));
        }
コード例 #26
0
        public static WfProcessStartupParams PrepareStartupParams(this IWfProcessDescriptor processDesp, Dictionary <string, object> runtimeParameters = null)
        {
            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ResourceID        = UuidHelper.NewUuidString();
            startupParams.ProcessDescriptor = processDesp;
            startupParams.Assignees.Add(OguObjectSettings.GetConfig().Objects["admin"].User);

            if (runtimeParameters != null)
            {
                runtimeParameters.ForEach(kp => startupParams.ApplicationRuntimeParameters.Add(kp.Key, kp.Value));
            }

            return(startupParams);
        }
コード例 #27
0
        public void AddApproverExecutorTest()
        {
            //Initial  NormalActivity  NormalActivity1 NormalActivity2 NormalActivity3 Completed
            IUser user = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object;

            IWfProcessDescriptor     procDesp = WfProcessTestCommon.CreateProcessDescriptor();
            WfUserResourceDescriptor userDesp = new WfUserResourceDescriptor(user);

            procDesp.InitialActivity.Resources.Add(userDesp);

            WfProcessStartupParams  startParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(procDesp);
            WfStartWorkflowExecutor exec        = new WfStartWorkflowExecutor(null, startParams);
            IWfProcess proc = exec.Execute();             //启动流程

            IWfProcess wfp = WfRuntime.GetProcessByProcessID(proc.ID);

            MoveToExecutor(wfp);            //流转一步 ,即第2个节点

            IWfProcess           p         = WfRuntime.GetProcessByProcessID(proc.ID);
            WfAssigneeCollection assignees = new WfAssigneeCollection();

            assignees.Add((IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver1.ToString()].Object);

            WfAddApproverExecutor addExec = new WfAddApproverExecutor(p.CurrentActivity, p.CurrentActivity, assignees);

            addExec.Execute();             //加签,即流转到加签点上

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

            Assert.AreEqual(process.Descriptor.GetMainStreamActivities().Count, process.Activities.Count - 2, "动态添加两个活动,因被加签人要回到加签人");
            Assert.AreEqual(2, process.ElapsedActivities.Count);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban));
            Assert.IsTrue(process.CurrentActivity.Descriptor.ToTransitions.Count == 1);
            Assert.IsNotNull(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity);

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

            WfWithdrawExecutor withdrawExec = new WfWithdrawExecutor(wfProcess9.CurrentActivity, wfProcess9.CurrentActivity);

            withdrawExec.Execute();

            IWfProcess wfProcess1 = WfRuntime.GetProcessByProcessID(wfProcess9.ID);

            Assert.AreEqual(wfProcess1.Activities.Count, wfProcess1.Descriptor.GetMainStreamActivities().Count, "此处应该撤回到加签的活动点上,同时被加签的两个点都应该移除");
            Assert.AreEqual(1, wfProcess1.ElapsedActivities.Count);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProcess1.CurrentActivity.ID, TaskStatus.Ban));
            Assert.IsTrue(wfProcess1.CurrentActivity.Descriptor.ToTransitions.Count == 1);
        }
コード例 #28
0
        public static List <IWfProcess> StartupMultiProcesses(IWfProcessDescriptor processDesp, int totalProcesses)
        {
            List <IWfProcess> processes = new List <IWfProcess>();

            //准备流程实例
            for (int i = 0; i < totalProcesses; i++)
            {
                WfProcessStartupParams startupParams = new WfProcessStartupParams();
                startupParams.ProcessDescriptor = processDesp;
                IWfProcess process = WfRuntime.StartWorkflow(startupParams);

                processes.Add(process);
            }

            return(processes);
        }
コード例 #29
0
        public static WfProcessStartupParams GetInstanceOfWfProcessStartupParams(IWfProcessDescriptor procDesp)
        {
            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            IUser requestor = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object;

            startupParams.Creator    = requestor;
            startupParams.Department = requestor.TopOU;
            startupParams.Assignees.Add(new WfAssignee(requestor));
            startupParams.ResourceID        = UuidHelper.NewUuidString();
            startupParams.DefaultTaskTitle  = "测试保存的流程";
            startupParams.ProcessDescriptor = procDesp;
            startupParams.AutoCommit        = true;

            return(startupParams);
        }
コード例 #30
0
        public static IWfProcess StartupSimpleProcessWithAssignee()
        {
            ProcessContextAction();

            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptor();

            processDesp.InitialActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object));

            WfProcessStartupParams startupParams = GetInstanceOfWfProcessStartupParams(processDesp);

            IWfProcess process = WfRuntime.StartWorkflow(startupParams);

            process.ApplicationRuntimeParameters["CostCenter"] = "1001";
            process.ApplicationRuntimeParameters["Requestor"]  = process.Creator;

            return(process);
        }
コード例 #31
0
ファイル: Program.cs プロジェクト: wooln/AK47Source
        private static WfProcessStartupParams GetInstanceOfWfProcessStartupParams(IWfProcessDescriptor processDesp)
        {
            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            IUser requestor =
                OguMechanismFactory.GetMechanism().GetObjects <IUser>(SearchOUIDType.LogOnName, "liumh").First();

            startupParams.Creator    = requestor;
            startupParams.Department = requestor.TopOU;
            startupParams.Assignees.Add(new WfAssignee(requestor));
            startupParams.ResourceID        = UuidHelper.NewUuidString();
            startupParams.DefaultTaskTitle  = "测试报销流程";
            startupParams.ProcessDescriptor = processDesp;
            startupParams.AutoCommit        = true;

            return(startupParams);
        }
コード例 #32
0
        private WfProcessStartupParams GenerateStartupParams()
        {
            var wfDescriptor = WfProcessDescriptorManager.GetDescriptor(this.ProcessKey);

            wfDescriptor.InitialActivity.Resources.Add(new WfUserResourceDescriptor(this.Creator));

            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ProcessDescriptor = wfDescriptor;
            startupParams.Creator           = this.Operator;
            startupParams.Department        = this.Operator.TopOU;
            startupParams.Assignees.Add(this.Operator);
            startupParams.DefaultTaskTitle = startupParams.ProcessDescriptor.Name;
            startupParams.ResourceID       = UuidHelper.NewUuidString();
            startupParams.AutoCommit       = true;

            return(startupParams);
        }
コード例 #33
0
        public static void AreSame(this WfClientProcessStartupParams expected, WfProcessStartupParams actual)
        {
            //Assert.AreEqual(expected.ProcessDescriptorKey, actual.ProcessDescriptorKey);
            Assert.AreEqual(expected.AutoCommit, actual.AutoCommit);
            Assert.AreEqual(expected.AutoStartInitialActivity, actual.AutoStartInitialActivity);
            Assert.AreEqual(expected.CheckStartProcessUserPermission, actual.CheckStartProcessUserPermission);
            Assert.AreEqual(expected.DefaultTaskTitle, actual.DefaultTaskTitle);
            Assert.AreEqual(expected.DefaultUrl, actual.DefaultUrl);
            Assert.AreEqual(expected.RelativeID, actual.RelativeID);
            Assert.AreEqual(expected.RelativeURL, actual.RelativeURL);
            Assert.AreEqual(expected.ResourceID, actual.ResourceID);
            Assert.AreEqual(expected.RuntimeProcessName, actual.RuntimeProcessName);

            expected.Assignees.AreSame(actual.Assignees);
            expected.Creator.AreSame(actual.Creator);
            expected.Department.AreSame(actual.Department);

            expected.ApplicationRuntimeParameters.AreSame(actual.ApplicationRuntimeParameters);
        }
コード例 #34
0
        public static WfProcessStartupParams GetInstanceOfWfProcessStartupParams(IWfProcessDescriptor processDesp)
        {
            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            IUser requestor = (IUser)Consts.Users["Requestor"].ToOguObject();

            startupParams.Creator = requestor;
            startupParams.Department = requestor.TopOU;
            startupParams.DefaultUrl = "http://www.sina.com.cn";
            startupParams.Assignees.Add(new WfAssignee(requestor));
            startupParams.ResourceID = UuidHelper.NewUuidString();
            startupParams.DefaultTaskTitle = "测试保存的流程";
            startupParams.ProcessDescriptor = processDesp;
            startupParams.AutoCommit = true;

            startupParams.ApplicationRuntimeParameters["Amount"] = 1000;
            startupParams.ApplicationRuntimeParameters["CostCenter"] = "1001";

            return startupParams;
        }
コード例 #35
0
        protected IWfProcess CreateBranchProcess(IWfProcessDescriptor descriptor)
        {
            WfProcessStartupParams branchProcessStartupParam = new WfProcessStartupParams(descriptor);

            return WfRuntime.StartWorkflow(this.AnchorActivity.Process.GetType(), branchProcessStartupParam);
        }
コード例 #36
0
        public static WfProcessStartupParams PrepareStartupParams(this IWfProcessDescriptor processDesp, Dictionary<string, object> runtimeParameters = null)
        {
            WfProcessStartupParams startupParams = new WfProcessStartupParams();
            startupParams.ResourceID = UuidHelper.NewUuidString();
            startupParams.ProcessDescriptor = processDesp;
            startupParams.Assignees.Add(OguObjectSettings.GetConfig().Objects["admin"].User);

            if (runtimeParameters != null)
                runtimeParameters.ForEach(kp => startupParams.ApplicationRuntimeParameters.Add(kp.Key, kp.Value));

            return startupParams;
        }
コード例 #37
0
		public void WfExternalUserTest()
		{
			WfExternalUser externalUser = new WfExternalUser();
			externalUser.Key = "user0";
			externalUser.Name = "zLing";
			externalUser.Gender = Gender.Female;
			externalUser.Email = "*****@*****.**";
			externalUser.MobilePhone = "13552630000";
			externalUser.Phone = "0409987";
			externalUser.Title = "programer";

			IWfProcessDescriptor processDesc = WfProcessTestCommon.CreateSimpleProcessDescriptor();

			processDesc.ExternalUsers.Add(externalUser);

			WfProcessStartupParams startupParams = new WfProcessStartupParams();
			startupParams.ProcessDescriptor = processDesc;
			IWfProcess process = WfRuntime.StartWorkflow(startupParams);

			XElementFormatter formatter = new XElementFormatter();

			XElement rootProc = formatter.Serialize(process);
			IWfProcess clonedProcess = (IWfProcess)formatter.Deserialize(rootProc);

			XElement resultProc = formatter.Serialize(clonedProcess);

			Assert.AreEqual(processDesc.ExternalUsers[0].Name, clonedProcess.Descriptor.ExternalUsers[0].Name);
			Assert.AreEqual(processDesc.ExternalUsers[0].Gender, clonedProcess.Descriptor.ExternalUsers[0].Gender);

			Assert.AreEqual(rootProc.ToString(), resultProc.ToString());
		}
コード例 #38
0
		/// <summary>
		/// 启动默认的流程
		/// </summary>
		private void StartDefaultWorkflow()
		{
			WfProcessStartupParams startupParams = new WfProcessStartupParams();

			startupParams.ResourceID = UuidHelper.NewUuidString();
			startupParams.ProcessDescriptor = WfProcessDescriptorManager.GetDescriptor(DefaultProcessKey);

			if (string.IsNullOrEmpty(startupParams.ProcessDescriptor.Url))
				startupParams.ProcessDescriptor.Url = WfClientContext.Current.EntryUri.ToString();

			if (startupParams.ProcessDescriptor.InitialActivity != null)
				startupParams.ProcessDescriptor.InitialActivity.Properties.SetValue("AutoSendUserTask", false);

			startupParams.Department = DeluxeIdentity.CurrentUser.TopOU;
			startupParams.Assignees.Add(DeluxeIdentity.CurrentUser);

			WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(null, startupParams);

			WfClientContext.Current.Execute(executor);
		}
コード例 #39
0
ファイル: Program.cs プロジェクト: jerryshi2007/AK47Source
        private static WfProcessStartupParams GetInstanceOfWfProcessStartupParams(IWfProcessDescriptor processDesp)
        {
            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            IUser requestor =
                OguMechanismFactory.GetMechanism().GetObjects<IUser>(SearchOUIDType.LogOnName, "liumh").First();

            startupParams.Creator = requestor;
            startupParams.Department = requestor.TopOU;
            startupParams.Assignees.Add(new WfAssignee(requestor));
            startupParams.ResourceID = UuidHelper.NewUuidString();
            startupParams.DefaultTaskTitle = "测试报销流程";
            startupParams.ProcessDescriptor = processDesp;
            startupParams.AutoCommit = true;

            return startupParams;
        }
コード例 #40
0
        public void ProcessWithMatrix()
        {
            try
            {
                var wfDescriptor = WfProcessDescriptorManager.GetDescriptor("workflowmatrixtest");
                WfProcessStartupParams startParam = new WfProcessStartupParams();
                startParam.ProcessDescriptor = wfDescriptor;

                var processInstance = WfRuntime.StartWorkflow(startParam);
                processInstance.ApplicationRuntimeParameters.Add("支付方式", "网银");
                processInstance.ApplicationRuntimeParameters.Add("成本中心", "成1");
                processInstance.ApplicationRuntimeParameters.Add("费用类型", "差旅费");
                processInstance.ApplicationRuntimeParameters.Add("金额", "100");
                processInstance.ApplicationRuntimeParameters.Add("部门", "商务部");

                WfTransferParams transferParams = new WfTransferParams(processInstance.Descriptor.Activities["N2"]);

                var currentAct = processInstance.MoveTo(transferParams);
                currentAct.Candidates.ForEach(p =>
                {
                    Console.WriteLine(p.User.DisplayName);
                });
            }
            catch
            {
            }
        }
コード例 #41
0
		public static List<IWfProcess> StartupMultiProcesses(IWfProcessDescriptor processDesp, int totalProcesses)
		{
			List<IWfProcess> processes = new List<IWfProcess>();

			//准备流程实例
			for (int i = 0; i < totalProcesses; i++)
			{
				WfProcessStartupParams startupParams = new WfProcessStartupParams();
				startupParams.ProcessDescriptor = processDesp;
				IWfProcess process = WfRuntime.StartWorkflow(startupParams);

				processes.Add(process);
			}

			return processes;
		}
コード例 #42
0
		public void ActivitySerializeTest()
		{
			IWfProcessDescriptor processDesc = WfProcessTestCommon.CreateSimpleProcessDescriptor();

			WfProcessStartupParams startupParams = new WfProcessStartupParams();
			startupParams.ProcessDescriptor = processDesc;
			IWfProcess process = WfRuntime.StartWorkflow(startupParams);

			Sky sky = new Sky();
			sky.air = "清新";
			sky.Cloud = 1;
			Sky space = new Sky();
			space.air = "干净";
			space.Cloud = 1;

			process.InitialActivity.Context.Add("DDO", sky);
			process.InitialActivity.Context.Add("DFO", space);

			XElementFormatter formatter = new XElementFormatter();
			XElement root = formatter.Serialize(process);

			Console.WriteLine(root.ToString());

			IWfProcess clonedProcess = (IWfProcess)formatter.Deserialize(root);

			Assert.IsNotNull(clonedProcess.InitialActivity.Context["DDO"]);
			Assert.AreEqual(process.InitialActivity.Context.Count, clonedProcess.InitialActivity.Context.Count);
			Assert.AreEqual(((Sky)process.InitialActivity.Context["DDO"]).air, ((Sky)clonedProcess.InitialActivity.Context["DDO"]).air);
			Assert.AreEqual(((Sky)process.InitialActivity.Context["DDO"]).Cloud, ((Sky)clonedProcess.InitialActivity.Context["DDO"]).Cloud);
			Assert.AreEqual(((Sky)process.InitialActivity.Context["DFO"]).air, ((Sky)clonedProcess.InitialActivity.Context["DFO"]).air);
			Assert.AreEqual(((Sky)process.InitialActivity.Context["DFO"]).Cloud, ((Sky)clonedProcess.InitialActivity.Context["DFO"]).Cloud);
		}
コード例 #43
0
        public static void AreSame(this WfClientProcessStartupParams expected, WfProcessStartupParams actual)
        {
            //Assert.AreEqual(expected.ProcessDescriptorKey, actual.ProcessDescriptorKey);
            Assert.AreEqual(expected.AutoCommit, actual.AutoCommit);
            Assert.AreEqual(expected.AutoStartInitialActivity, actual.AutoStartInitialActivity);
            Assert.AreEqual(expected.CheckStartProcessUserPermission, actual.CheckStartProcessUserPermission);
            Assert.AreEqual(expected.DefaultTaskTitle, actual.DefaultTaskTitle);
            Assert.AreEqual(expected.DefaultUrl, actual.DefaultUrl);
            Assert.AreEqual(expected.RelativeID, actual.RelativeID);
            Assert.AreEqual(expected.RelativeURL, actual.RelativeURL);
            Assert.AreEqual(expected.ResourceID, actual.ResourceID);
            Assert.AreEqual(expected.RuntimeProcessName, actual.RuntimeProcessName);

            expected.Assignees.AreSame(actual.Assignees);
            expected.Creator.AreSame(actual.Creator);
            expected.Department.AreSame(actual.Department);

            expected.ApplicationRuntimeParameters.AreSame(actual.ApplicationRuntimeParameters);
        }
コード例 #44
0
ファイル: WfRuntime.cs プロジェクト: jerryshi2007/AK47Source
        private static void FillProcessInstanceProperties(WfProcessStartupParams startupParams, WfProcess process)
        {
            process.ResourceID = startupParams.ResourceID;
            process.RelativeParams.CopyFrom(startupParams.RelativeParams);
            process.RelativeID = startupParams.RelativeID;
            process.RelativeURL = startupParams.RelativeURL;
            process.BranchStartupParams = startupParams.BranchStartupParams;
            process.EntryInfo = startupParams.Group;
            process.OwnerActivityID = startupParams.OwnerActivityID;
            process.OwnerTemplateKey = startupParams.OwnerTemplateKey;
            process.Sequence = startupParams.Sequence;
            process.ApplicationRuntimeParameters.CopyFrom(startupParams.ApplicationRuntimeParameters);
            process.Committed = startupParams.AutoCommit;

            process.OwnerDepartment = startupParams.Department;
            process.Creator = startupParams.Creator;
        }
コード例 #45
0
		/// <summary>
		/// 准备流程
		/// </summary>
		private void PrepareProcess()
		{
			string returnUrl = Request.QueryString.GetValue("ru", string.Empty);

			WfProcessDescriptor processDesp = new WfProcessDescriptor();

			processDesp.Key = UuidHelper.NewUuidString();
			processDesp.Name = "自由流程";
			processDesp.ApplicationName = "秘书服务";
			processDesp.ProgramName = "部门通知";
			processDesp.Url = returnUrl;
			processDesp.DefaultTaskTitle = "${Subject}$";

			WfActivityDescriptor initDesp = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity);
			initDesp.Name = "起草";
			initDesp.CodeName = "Initial Activity";
			initDesp.Properties.SetValue("AutoSendUserTask", false);

			processDesp.Activities.Add(initDesp);

			processDesp.Activities.Add(PrepareAURelativeActivityDescriptor(processDesp.FindNotUsedActivityKey()));

			WfActivityDescriptor completedActDesp = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity);
			completedActDesp.Name = "完成";
			completedActDesp.CodeName = "Completed Activity";

			processDesp.Activities.Add(completedActDesp);

			for (int i = 0; i < processDesp.Activities.Count - 1; i++)
			{
				processDesp.Activities[i].ToTransitions.AddForwardTransition(processDesp.Activities[i + 1]);
			}

			WfProcessStartupParams startupParams = new WfProcessStartupParams();

			startupParams.ApplicationRuntimeParameters["AdministrativeUnit"] = "Group";
			startupParams.ApplicationRuntimeParameters["Amount"] = "";
			startupParams.ApplicationRuntimeParameters["CostCenter"] = "1001";
			startupParams.ProcessDescriptor = processDesp;
			startupParams.Creator = DeluxeIdentity.CurrentUser;
			startupParams.Assignees.Add(DeluxeIdentity.CurrentUser);
			startupParams.DefaultTaskTitle = "${Subject}$";
			startupParams.ResourceID = UuidHelper.NewUuidString();
			startupParams.Department = DeluxeIdentity.CurrentUser.Parent;

			string relativeParams = Request.QueryString["relativeParams"];

			if (relativeParams.IsNotEmpty())
				startupParams.RelativeParams.CopyFrom(UriHelper.GetUriParamsCollection(relativeParams));

			WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(WfClientContext.Current.OriginalActivity, startupParams);

			executor.AfterModifyWorkflow += new ExecutorEventHandler(executor_AfterModifyWorkflow);
			executor.Execute();

			IWfProcess process = WfClientContext.Current.OriginalActivity.Process;

			returnUrl = UriHelper.RemoveUriParams(returnUrl, "relativeParams");

			HttpContext.Current.Response.Redirect(string.Format("{0}?resourceID={1}&activityID={2}",
				returnUrl, process.ResourceID, process.CurrentActivity.ID));
		}
コード例 #46
0
ファイル: WfRuntime.cs プロジェクト: jerryshi2007/AK47Source
        private static void FillProcessDescriptorProperties(WfProcessStartupParams startupParams, IWfProcessDescriptor processDesp)
        {
            if (startupParams.DefaultTaskTitle.IsNotEmpty())
                processDesp.DefaultTaskTitle = startupParams.DefaultTaskTitle;

            if (startupParams.DefaultUrl.IsNotEmpty())
                processDesp.Url = startupParams.DefaultUrl;

            if (startupParams.RuntimeProcessName.IsNotEmpty() && processDesp.Properties.ContainsKey("RuntimeProcessName"))
                processDesp.Properties.SetValue("RuntimeProcessName", startupParams.RuntimeProcessName);
        }
コード例 #47
0
        public static WfProcessStartupParams GetInstanceOfWfProcessStartupParams(IWfProcessDescriptor procDesp)
        {
            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            IUser requestor = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object;

            startupParams.Creator = requestor;
            startupParams.Department = requestor.TopOU;
            startupParams.Assignees.Add(new WfAssignee(requestor));
            startupParams.ResourceID = UuidHelper.NewUuidString();
            startupParams.DefaultTaskTitle = "测试保存的流程";
            startupParams.ProcessDescriptor = procDesp;
            startupParams.AutoCommit = true;

            return startupParams;
        }
コード例 #48
0
		protected void btnOK_Click(object sender, EventArgs e)
		{
			string returnUrl = Request.QueryString.GetValue("ru", string.Empty);

			WfProcessDescriptor processDesc = new WfProcessDescriptor();

			processDesc.Key = UuidHelper.NewUuidString();
			processDesc.Name = "自由流程";
			processDesc.ApplicationName = "秘书服务";
			processDesc.ProgramName = "部门通知";
			processDesc.Url = returnUrl;
			processDesc.DefaultTaskTitle = "${Subject}$";

			WfActivityDescriptor initAct = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity);
			initAct.Name = "起草";
			initAct.CodeName = "Initial Activity";
			initAct.Properties.SetValue("AutoSendUserTask", false);
			initAct.Properties.TrySetValue("AllowWithdraw", true);

			processDesc.Activities.Add(initAct);

			foreach (IUser user in processUsers.SelectedOuUserData)
			{
				string key = processDesc.FindNotUsedActivityKey();
				WfActivityDescriptor normalAct = new WfActivityDescriptor(key, WfActivityType.NormalActivity);
				normalAct.Name = user.DisplayName;
				normalAct.CodeName = key;
				normalAct.Properties.SetValue("AutoAppendSecretary", true);
				//normalAct.ActivityType = WfActivityType.NormalActivity;

				WfUserResourceDescriptor userResourceDesc = new WfUserResourceDescriptor(user);
				normalAct.Resources.Add(userResourceDesc);

				processDesc.Activities.Add(normalAct);
			}

			WfActivityDescriptor completedAct = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity);
			completedAct.Name = "完成";
			completedAct.CodeName = "Completed Activity";

			processDesc.Activities.Add(completedAct);

			for (int j = 0; j < processDesc.Activities.Count - 1; j++)
			{
				processDesc.Activities[j].ToTransitions.AddForwardTransition(processDesc.Activities[j + 1]);
			}

			WfProcessStartupParams startupParams = new WfProcessStartupParams();
			startupParams.ProcessDescriptor = processDesc;
			startupParams.Creator = DeluxeIdentity.CurrentUser;
			startupParams.Assignees.Add(DeluxeIdentity.CurrentUser);
			startupParams.DefaultTaskTitle = "${Subject}$";
			startupParams.RuntimeProcessName = "${Subject}$";
			startupParams.ResourceID = UuidHelper.NewUuidString();
			startupParams.Department = DeluxeIdentity.CurrentUser.Parent;

			string relativeParams = Request.QueryString["relativeParams"];

			if (relativeParams.IsNotEmpty())
				startupParams.RelativeParams.CopyFrom(UriHelper.GetUriParamsCollection(relativeParams));

			WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(WfClientContext.Current.OriginalActivity, startupParams);

			executor.AfterModifyWorkflow += new ExecutorEventHandler(executor_AfterModifyWorkflow);
			executor.Execute();

			IWfProcess process = WfClientContext.Current.OriginalActivity.Process;

			returnUrl = UriHelper.RemoveUriParams(returnUrl, "relativeParams");

			Response.Redirect(string.Format("{0}?resourceID={1}&activityID={2}",
				returnUrl, process.ResourceID, process.CurrentActivity.ID));
		}
コード例 #49
0
        public static IWfProcess StartupProcess(IWfProcessDescriptor processDesp, Dictionary<string, object> runtimeParameters)
        {
            ProcessContextAction();

            WfProcessStartupParams startupParams = new WfProcessStartupParams();
            startupParams.ResourceID = UuidHelper.NewUuidString();
            startupParams.ProcessDescriptor = processDesp;

            runtimeParameters.ForEach(kp => startupParams.ApplicationRuntimeParameters.Add(kp.Key, kp.Value));

            return WfRuntime.StartWorkflow(startupParams);
        }
コード例 #50
0
        private WfProcessStartupParams PrepareOneBranchProcessStartupParams(WfBranchProcessTransferParams branchTransferParams, IWfBranchProcessGroup group, int index)
        {
            IWfBranchProcessTemplateDescriptor template = branchTransferParams.Template;
            WfBranchProcessStartupParams branchStartupParams = branchTransferParams.BranchParams[index];

            //准备启动子流程的参数
            //先检查有没有预定义好的分支流程
            IWfProcessDescriptor subProcessDesp = null;

            using (WfApplicationParametersContext apContext = WfApplicationParametersContext.CreateContext(branchStartupParams.ApplicationRuntimeParameters))
            {
                subProcessDesp = template.GetBranchProcessDescriptor();
            }

            if (template.DefaultProcessName.IsNotEmpty())
            {
                string runtimeProcessName = this.Process.ApplicationRuntimeParameters.GetMatchedString(template.DefaultProcessName);

                if (runtimeProcessName.IsNullOrEmpty())
                    runtimeProcessName = template.DefaultProcessName;

                if (runtimeProcessName.IsNullOrEmpty())
                    ((WfProcessDescriptor)subProcessDesp).Name = runtimeProcessName;

                if (subProcessDesp.InitialActivity != null && subProcessDesp.InitialActivity.Name.IsNullOrEmpty())
                    ((WfActivityDescriptor)subProcessDesp.InitialActivity).Name = runtimeProcessName;
            }

            if (template.DefaultTaskTitle.IsNotEmpty())
                subProcessDesp.DefaultTaskTitle = template.DefaultTaskTitle;

            if (template.DefaultUrl.IsNotEmpty())
                subProcessDesp.Url = template.DefaultUrl;

            if (subProcessDesp.Url.IsNullOrEmpty())
                subProcessDesp.Url = this.Descriptor.Url.IsNotEmpty() ? this.Descriptor.Url : this.Descriptor.Process.Url;

            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.Creator = this.Operator;

            if (branchStartupParams.Department == null)
                startupParams.Department = this.Process.OwnerDepartment;
            else
                startupParams.Department = branchStartupParams.Department;

            startupParams.Assignees.CopyFrom(branchStartupParams.Assignees);
            startupParams.ProcessDescriptor = subProcessDesp;

            if (branchStartupParams.DefaultTaskTitle.IsNullOrEmpty())
            {
                if (startupParams.DefaultTaskTitle.IsNullOrEmpty())
                {
                    if (subProcessDesp.DefaultTaskTitle.IsNotEmpty())
                        startupParams.DefaultTaskTitle = subProcessDesp.DefaultTaskTitle;
                    else
                        startupParams.DefaultTaskTitle = this.Process.Descriptor.DefaultTaskTitle;
                }
                else
                    startupParams.DefaultTaskTitle = this.Descriptor.TaskTitle;
            }
            else
                startupParams.DefaultTaskTitle = branchStartupParams.DefaultTaskTitle;

            if (branchStartupParams.ResourceID.IsNullOrEmpty())
            {
                WfSubProcessResourceMode mode = template.Properties.GetValue("CreateResourceMode", WfSubProcessResourceMode.DependsOnProcess);
                switch (mode)
                {
                    case WfSubProcessResourceMode.DependsOnProcess:
                        if (subProcessDesp.Properties.GetValue("Independent", false))
                            startupParams.ResourceID = UuidHelper.NewUuidString();
                        else
                            startupParams.ResourceID = this.Process.ResourceID;
                        break;
                    case WfSubProcessResourceMode.SameWithRoot:
                        startupParams.ResourceID = this.Process.ResourceID;
                        break;
                    case WfSubProcessResourceMode.NewCreate:
                        startupParams.ResourceID = UuidHelper.NewUuidString();
                        break;
                }

            }
            else
                startupParams.ResourceID = branchStartupParams.ResourceID;

            if (branchStartupParams.RelativeParams.Count == 0)
                startupParams.RelativeParams.CopyFrom(this.Process.RelativeParams);
            else
                startupParams.RelativeParams.CopyFrom(branchStartupParams.RelativeParams);

            startupParams.BranchStartupParams = branchStartupParams;
            startupParams.Group = group;
            startupParams.OwnerActivityID = this.ID;
            startupParams.OwnerTemplateKey = template.Key;
            startupParams.Sequence = index;
            startupParams.AutoCommit = this.Process.Committed;  //子流程的提交属性默认等于主流程的

            branchStartupParams.ApplicationRuntimeParameters.ForEach(kp => startupParams.ApplicationRuntimeParameters.Add(kp.Key, kp.Value));

            //如果是串行执行,且不是第一个流程,则不启动第一个活动,子流程处于未启动状态
            if (template.ExecuteSequence == WfBranchProcessExecuteSequence.Serial && index > 0)
                startupParams.AutoStartInitialActivity = false;

            return startupParams;
        }
コード例 #51
0
		public void ProcessSerializeTest()
		{
			IWfProcessDescriptor processDesc = WfProcessTestCommon.CreateSimpleProcessDescriptor();

			WfProcessStartupParams startupParams = new WfProcessStartupParams();
			startupParams.ProcessDescriptor = processDesc;
			IWfProcess process = WfRuntime.StartWorkflow(startupParams);
			((WfProcess)process).ResourceID = UuidHelper.NewUuidString();

			WfProcessContext context = process.Context;
			context.Add("UCC", "the same");

			XElementFormatter formatter = new XElementFormatter();

			//formatter.OutputShortType = false;

			XElement root = formatter.Serialize(process);

			Console.WriteLine(root.ToString());

			IWfProcess clonedProcess = (IWfProcess)formatter.Deserialize(root);

			Assert.IsNotNull(clonedProcess.Context["UCC"]);
			Assert.AreEqual(process.Context.Count, clonedProcess.Context.Count);
			Assert.AreEqual(process.Context["UCC"], clonedProcess.Context["UCC"]);
		}
コード例 #52
0
ファイル: WfRuntime.cs プロジェクト: jerryshi2007/AK47Source
        public static IWfProcess StartWorkflow(WfProcessStartupParams startupParams)
        {
            startupParams.NullCheck<WfRuntimeException>("startupParams");

            WfProcess process = new WfProcess(startupParams.ProcessDescriptor);

            FillProcessDescriptorProperties(startupParams, process.Descriptor);
            FillProcessInstanceProperties(startupParams, process);

            WfProcessContextCache.Instance.Add(process.ID, process);

            if (process.Creator == null && DeluxePrincipal.IsAuthenticated)
                process.Creator = DeluxeIdentity.CurrentUser;

            if (process.InitialActivity != null)
            {
                if (process.InitialActivity.Descriptor.Properties.GetValue("AutoGenerateCadidates", true))
                {
                    process.InitialActivity.GenerateCandidatesFromResources();

                    WfMatrix matrix = process.GetMatrix();

                    if (matrix != null)
                        ((WfActivityBase)process.InitialActivity).GenerateCandidatesFromMatrix(matrix);
                }

                if (startupParams.CheckStartProcessUserPermission)
                    CheckStartProcessUserPermission(process);

                if (startupParams.Assignees.Count == 0)
                {
                    startupParams.Assignees.CopyFrom(process.InitialActivity.Candidates);
                }

                if (process.InitialActivity.Descriptor.Resources.Count == 0)
                {
                    startupParams.Assignees.ToUsers().ForEach(u => process.InitialActivity.Descriptor.Resources.Add(new WfUserResourceDescriptor(u)));
                }

                WfSimulator.WriteSimulationInfo(process, WfSimulationOperationType.Startup);

                //如果自动启动第一个活动且存在活动点,则流转到第一个点
                if (startupParams.AutoStartInitialActivity)
                {
                    WfAssigneeCollection assignees = startupParams.Assignees;
                    process.InitialActivity.Candidates.Clear();
                    process.InitialActivity.Candidates.CopyFrom(startupParams.Assignees);

                    IWfActivity originalInitial = process.InitialActivity;

                    WfRuntime.DecorateProcess(process);

                    //修饰流程后,如果起始点发生了变化...
                    if (originalInitial != process.InitialActivity)
                        assignees = process.InitialActivity.Candidates;

                    WfTransferParams transferParams = new WfTransferParams(process.InitialActivity.Descriptor);

                    //设置初始节点子流程参数
                    process.InitialActivity.Descriptor.BranchProcessTemplates.ForEach(branchTemplate =>
                    {
                        transferParams.BranchTransferParams.Add(new WfBranchProcessTransferParams(branchTemplate));
                    });

                    transferParams.Operator = startupParams.Creator;
                    transferParams.Assignees.CopyFrom(assignees);
                    process.MoveTo(transferParams);

                    WfRuntime.ProcessContext.NormalizeTaskTitles();
                }
            }

            WfRuntime.ProcessContext.AffectedProcesses.AddOrReplace(process);

            return process;
        }
コード例 #53
0
        public static IWfProcess StartupSimpleProcess()
        {
            ProcessContextAction();

            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptor();

            WfProcessStartupParams startupParams = new WfProcessStartupParams();
            startupParams.ResourceID = UuidHelper.NewUuidString();
            startupParams.ProcessDescriptor = processDesp;

            return WfRuntime.StartWorkflow(startupParams);
        }
コード例 #54
0
        public static IWfProcess StartSpecialReturnProcess(IWfProcessDescriptor processDesp)
        {
            WfProcessStartupParams startupParams = new WfProcessStartupParams();
            startupParams.ProcessDescriptor = processDesp;
            startupParams.ApplicationRuntimeParameters["IsCLine"] = true;

            return WfRuntime.StartWorkflow(startupParams);
        }