Esempio n. 1
0
        public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer)
        {
            WfClientProcessStartupParams startupParams = new WfClientProcessStartupParams();

            startupParams.AutoStartInitialActivity = dictionary.GetValue("autoStartInitialActivity", true);
            startupParams.AutoCommit = dictionary.GetValue("autoCommit", false);
            startupParams.CheckStartProcessUserPermission = dictionary.GetValue("checkStartProcessUserPermission", true);
            startupParams.DefaultTaskTitle     = dictionary.GetValue("defaultTaskTitle", string.Empty);
            startupParams.DefaultUrl           = dictionary.GetValue("defaultUrl", string.Empty);
            startupParams.ProcessDescriptorKey = dictionary.GetValue("processDescriptorKey", string.Empty);
            startupParams.RelativeID           = dictionary.GetValue("relativeID", string.Empty);
            startupParams.RelativeURL          = dictionary.GetValue("relativeURL", string.Empty);
            startupParams.ResourceID           = dictionary.GetValue("resourceID", string.Empty);
            startupParams.RuntimeProcessName   = dictionary.GetValue("runtimeProcessName", string.Empty);
            startupParams.AutoPersist          = dictionary.GetValue("autoPersist", true);

            startupParams.Creator    = JSONSerializerExecute.Deserialize <WfClientUser>(dictionary.GetValue("creator", (object)null));
            startupParams.Department = JSONSerializerExecute.Deserialize <WfClientOrganization>(dictionary.GetValue("department", (object)null));

            startupParams.Opinion = JSONSerializerExecute.Deserialize <WfClientOpinion>(dictionary.GetValue("opinion", (object)null));

            JSONSerializerExecute.FillDeserializedCollection(dictionary.GetValue("assignees", (object)null), startupParams.Assignees);
            JSONSerializerExecute.FillDeserializedDictionary(dictionary, "applicationRuntimeParameters", startupParams.ApplicationRuntimeParameters);
            JSONSerializerExecute.FillDeserializedDictionary(dictionary, "processContext", startupParams.ProcessContext);

            return(startupParams);
        }
        public void StartWorkflowWithoutPersist()
        {
            WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess();

            WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key);

            clientStartupParams.AutoPersist = false;

            WfClientProcessInfo processInfo = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams);

            processInfo.Output();
            AssertStartedProcess(processInfo, clientStartupParams);

            try
            {
                WfClientProcess process = WfClientProcessRuntimeServiceProxy.Instance.GetProcessByID(processInfo.ID, Consts.Users["Requestor"]);
            }
            catch (WfClientChannelException ex)
            {
                if (ex.Message.IndexOf("不能找到") == -1)
                {
                    throw ex;
                }
            }
        }
        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);
        }
Esempio n. 4
0
        public static WfClientProcessStartupParams PrepareClientProcessStartupParams(string processKey)
        {
            WfClientProcessStartupParams startupParams = new WfClientProcessStartupParams();

            startupParams.ProcessDescriptorKey            = processKey;
            startupParams.AutoCommit                      = true;
            startupParams.AutoStartInitialActivity        = true;
            startupParams.CheckStartProcessUserPermission = true;
            startupParams.DefaultTaskTitle                = "Please approve";
            startupParams.DefaultUrl                      = "http://www.sina.com";;
            startupParams.Creator            = Consts.Users["Requestor"];
            startupParams.Department         = Consts.Departments["RequestorOrg"];
            startupParams.RelativeID         = UuidHelper.NewUuidString();
            startupParams.RelativeURL        = "http://www.baidu.com";
            startupParams.ResourceID         = UuidHelper.NewUuidString();
            startupParams.RuntimeProcessName = "Test Process";

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

            startupParams.ProcessContext["Context"] = "This is a context";

            startupParams.Assignees.Add(Consts.Users["Requestor"]);

            return(startupParams);
        }
Esempio n. 5
0
        public override IDictionary <string, object> Serialize(object obj, JavaScriptSerializer serializer)
        {
            Dictionary <string, object> dictionary = new Dictionary <string, object>();

            WfClientProcessStartupParams startupParams = (WfClientProcessStartupParams)obj;

            dictionary.AddNonDefaultValue("autoStartInitialActivity", startupParams.AutoStartInitialActivity);
            dictionary.AddNonDefaultValue("autoCommit", startupParams.AutoCommit);
            dictionary.AddNonDefaultValue("checkStartProcessUserPermission", startupParams.CheckStartProcessUserPermission);
            dictionary.AddNonDefaultValue("defaultTaskTitle", startupParams.DefaultTaskTitle);
            dictionary.AddNonDefaultValue("defaultUrl", startupParams.DefaultUrl);
            dictionary.AddNonDefaultValue("processDescriptorKey", startupParams.ProcessDescriptorKey);
            dictionary.AddNonDefaultValue("relativeID", startupParams.RelativeID);
            dictionary.AddNonDefaultValue("relativeURL", startupParams.RelativeURL);
            dictionary.AddNonDefaultValue("resourceID", startupParams.ResourceID);
            dictionary.AddNonDefaultValue("runtimeProcessName", startupParams.RuntimeProcessName);

            dictionary.AddNonDefaultValue("creator", startupParams.Creator);
            dictionary.AddNonDefaultValue("department", startupParams.Department);
            dictionary.AddNonDefaultValue("autoPersist", startupParams.AutoPersist);

            dictionary["assignees"] = startupParams.Assignees;
            dictionary["applicationRuntimeParameters"] = startupParams.ApplicationRuntimeParameters;
            dictionary["processContext"] = startupParams.ProcessContext;

            dictionary.AddNonDefaultValue("opinion", startupParams.Opinion);

            return(dictionary);
        }
        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);
        }
Esempio n. 7
0
        /// <summary>
        /// 创建一个简单流程,并且启动该流程
        /// </summary>
        /// <returns></returns>
        public static WfClientProcessInfo PrepareSimpleProcessInstance()
        {
            WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess();

            WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key);

            return(WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams));
        }
        public void StandardStartupParamsClientToServer()
        {
            WfClientProcessStartupParams client = ProcessRuntimeHelper.PrepareClientProcessStartupParams(UuidHelper.NewUuidString());

            WfProcessStartupParams server = null;

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

            client.AreSame(server);
        }
        public void StartWorkflow()
        {
            WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess();

            WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key);

            WfClientProcessInfo processInfo = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams);

            processInfo.Output();
            AssertStartedProcess(processInfo, clientStartupParams);
        }
Esempio n. 10
0
        /// <summary>
        /// 创建一个有4个节点的流程,并且保存它。开始点有两条出线,根据Amount是否大于等于5000来判断。
        /// </summary>
        /// <returns></returns>
        public static WfClientProcessInfo PreapreProcessWithConditionLinesInstance()
        {
            WfClientProcessDescriptor processDesp = OperationHelper.PreapreProcessWithConditionLines();

            WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key);

            clientStartupParams.ApplicationRuntimeParameters["Amount"] = 10000;
            clientStartupParams.ProcessContext["Context"] = "This is a context";

            return(WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams));
        }
        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));
        }
Esempio n. 12
0
        public static WfClientProcessInfo PrepareProcessWithWithActivityMatrixResourceInstance()
        {
            WfClientProcessDescriptor processDesp = ProcessDescriptorHelper.CreateClientProcessWithActivityMatrixResourceDescriptor();

            WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(processDesp);

            WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key);

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

            return(WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams));
        }
Esempio n. 13
0
        public void SimpleStartupParamsSerializationTest()
        {
            WfClientJsonConverterHelper.Instance.RegisterConverters();

            WfClientProcessStartupParams startupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(UuidHelper.NewUuidString());

            string data = JSONSerializerExecute.Serialize(startupParams);

            Console.WriteLine(data);

            WfClientProcessStartupParams deserializedParams = JSONSerializerExecute.Deserialize <WfClientProcessStartupParams>(data);

            startupParams.AreSame(deserializedParams);
        }
Esempio n. 14
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);
        }
Esempio n. 15
0
        public static WfClientProcessInfo PrepareBranchProcesses()
        {
            WfClientProcessDescriptor processDesp = ProcessDescriptorHelper.CreateSimpleClientProcessWithoutLines();

            //增加子节点
            WfClientActivityDescriptor branchActDesp = new WfClientActivityDescriptor(WfClientActivityType.NormalActivity);

            branchActDesp.Key  = "N1";
            branchActDesp.Name = "CFO";

            branchActDesp.Properties.AddOrSetValue("AutoStartBranchProcesses", true);
            branchActDesp.Properties.AddOrSetValue("AutoStartBranchApprovalProcess", true);
            branchActDesp.Properties.AddOrSetValue("AutoStartBranchProcessExecuteSequence", 0);

            //增加审批人
            branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["Requestor"]));
            branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["Approver1"]));
            branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["CEO"]));

            processDesp.Activities.Add(branchActDesp);

            //线
            WfClientTransitionDescriptor transition = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, branchActDesp.Key);

            transition.Key = "L1";
            processDesp.InitialActivity.ToTransitions.Add(transition);

            WfClientTransitionDescriptor transition2 = new WfClientTransitionDescriptor(branchActDesp.Key, processDesp.CompletedActivity.Key);

            transition2.Key = "L2";
            branchActDesp.ToTransitions.Add(transition2);

            WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(processDesp);

            //启动参数
            WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key);

            //流程实例
            WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext();
            WfClientProcessInfo    process        = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams);

            return(WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(process.ID, runtimeContext));
        }
Esempio n. 16
0
        public void StartWorkflowAndMoveToNext()
        {
            WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess();

            WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key);

            clientStartupParams.Opinion = new WfClientOpinion()
            {
                Content = "我启动流程很高兴"
            };

            WfClientProcessInfo processInfo = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflowAndMoveTo(clientStartupParams, null, null);

            processInfo.Output();

            WfClientOpinionCollection opinions = WfClientProcessRuntimeServiceProxy.Instance.GetOpinionsByResourceID(processInfo.ResourceID);

            Assert.IsTrue(opinions.Count > 0);
            Assert.AreNotEqual(processInfo.CurrentActivity.ID, opinions[0].ActivityID);
        }
        /// <summary>
        /// 检查
        /// </summary>
        /// <param name="processInfo"></param>
        /// <param name="clientStartupParams"></param>
        private void AssertStartedProcess(WfClientProcessInfo processInfo, WfClientProcessStartupParams clientStartupParams)
        {
            Assert.IsTrue(processInfo.ID.IsNotEmpty());
            Assert.AreEqual(clientStartupParams.ProcessDescriptorKey, processInfo.ProcessDescriptorKey);
            Assert.AreEqual(WfClientProcessStatus.Running, processInfo.Status);
            Assert.IsNotNull(processInfo.CurrentActivity);

            processInfo.Creator.AreSame(clientStartupParams.Assignees[0].User);

            Assert.IsNotNull(processInfo.CurrentActivity);
            processInfo.CurrentActivity.Assignees.AreSame(clientStartupParams.Assignees, false);

            Assert.IsNotNull(processInfo.CurrentActivity.Descriptor);

            Assert.IsTrue(processInfo.NextActivities.Count > 0);
            Assert.IsNotNull(processInfo.NextActivities[0].Transition);
            Assert.IsNotNull(processInfo.NextActivities[0].Activity);

            processInfo.ApplicationRuntimeParameters.AssertContains(clientStartupParams.ApplicationRuntimeParameters);
            processInfo.ProcessContext.AssertContains(clientStartupParams.ProcessContext);
        }
 public WfClientProcessInfo StartWorkflowAndMoveTo(WfClientProcessStartupParams clientStartupParams, WfClientTransferParams clientTransferParams, WfClientRuntimeContext runtimeContext)
 {
     return(this.SingleCall(action => action.StartWorkflowAndMoveTo(clientStartupParams, clientTransferParams, runtimeContext)));
 }
 public WfClientProcessInfo StartWorkflow(WfClientProcessStartupParams clientStartupParams)
 {
     return(this.SingleCall(action => action.StartWorkflow(clientStartupParams)));
 }