Ejemplo n.º 1
0
        /// <summary>
        /// 创建一个有4个节点的流程,开始点有两条出线,根据Amount是否大于等于5000来判断
        /// </summary>
        /// <returns></returns>
        public static WfClientProcessDescriptor CreateClientProcessWithConditionLines()
        {
            WfClientProcessDescriptor processDesp = CreateSimpleClientProcessWithoutLines();

            processDesp.Activities.Add(ActivityDescriptorHelper.CreateSimpleClientActivityWithUser("N1", "CFO", "CFO", WfClientActivityType.NormalActivity));
            processDesp.Activities.Add(ActivityDescriptorHelper.CreateSimpleClientActivityWithUser("N2", "CEO", "CEO", WfClientActivityType.NormalActivity));

            WfClientTransitionDescriptor transitionToCFO = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, "N1");

            transitionToCFO.Key = "L1";
            transitionToCFO.Condition.Expression = "Amount >= 5000";
            processDesp.InitialActivity.ToTransitions.Add(transitionToCFO);

            WfClientTransitionDescriptor transitionToCEO = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, "N2");

            transitionToCEO.Key = "L2";
            transitionToCEO.Condition.Expression = "Amount < 5000";

            processDesp.InitialActivity.ToTransitions.Add(transitionToCEO);

            WfClientTransitionDescriptor transitionCEOToCFO = new WfClientTransitionDescriptor("CFO", "CEO");

            transitionCEOToCFO.Key = "L3";

            processDesp.Activities["N1"].ToTransitions.Add(transitionCEOToCFO);

            return(processDesp);
        }
Ejemplo n.º 2
0
        public static void IsValid(this WfClientTransitionDescriptor ct)
        {
            Assert.IsNotNull(ct);

            Assert.IsNotNull(ct.FromActivity);
            Assert.IsNotNull(ct.ToActivity);
        }
        private static void ServerTargetsToClient(IWfActivity server, WfClientProcessInfo client)
        {
            WfClientActivity ccActivity = client.CurrentActivity;

            foreach (WfTransitionDescriptor st in server.Descriptor.ToTransitions.GetAllCanTransitTransitions(true))
            {
                WfClientActivity targetActivity = null;

                if (st.Key != ccActivity.Descriptor.Key)
                {
                    WfClientActivityConverter.Instance.ServerToClient(st.ToActivity.Instance, ref targetActivity);
                }
                else
                {
                    targetActivity = ccActivity;
                }

                if (targetActivity != null)
                {
                    WfClientTransitionDescriptor ct = null;

                    WfClientTransitionDescriptorConverter.Instance.ServerToClient(st, ref ct);

                    WfClientNextActivity cnat = new WfClientNextActivity();

                    cnat.Transition = ct;
                    cnat.Activity   = targetActivity;

                    client.NextActivities.Add(cnat);
                }
            }
        }
        /// <summary>
        /// 创建一个有4个节点的流程,开始点有两条出线,根据Amount是否大于等于5000来判断
        /// </summary>
        /// <returns></returns>
        public static WfClientProcessDescriptor CreateClientProcessWithConditionLines()
        {
            WfClientProcessDescriptor processDesp = CreateSimpleClientProcessWithoutLines();

            processDesp.Activities.Add(ActivityDescriptorHelper.CreateSimpleClientActivityWithUser("N1", "CFO", "CFO", WfClientActivityType.NormalActivity));
            processDesp.Activities.Add(ActivityDescriptorHelper.CreateSimpleClientActivityWithUser("N2", "CEO", "CEO", WfClientActivityType.NormalActivity));

            WfClientTransitionDescriptor transitionToCFO = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, "N1");

            transitionToCFO.Key = "L1";
            transitionToCFO.Condition.Expression = "Amount >= 5000";
            processDesp.InitialActivity.ToTransitions.Add(transitionToCFO);

            WfClientTransitionDescriptor transitionToCEO = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, "N2");

            transitionToCEO.Key = "L2";
            transitionToCEO.Condition.Expression = "Amount < 5000";

            processDesp.InitialActivity.ToTransitions.Add(transitionToCEO);

            WfClientTransitionDescriptor transitionCEOToCFO = new WfClientTransitionDescriptor("CFO", "CEO");

            transitionCEOToCFO.Key = "L3";

            processDesp.Activities["N1"].ToTransitions.Add(transitionCEOToCFO);

            return processDesp;
        }
Ejemplo n.º 5
0
        public override WfClientProcessDescriptor Build(string processKey, string processName)
        {
            this.CreateParams.Key  = processKey;
            this.CreateParams.Name = processName;

            WfClientProcessDescriptor processDesp = base.Build(processKey, processName);

            processDesp.Variables.AddOrSetValue("ClientDynamicProcess", "True", WfClientVariableDataType.Boolean);

            MergeProperties(processDesp.Properties, this.CreateParams.Properties);

            WfClientActivityDescriptor dynamicActivityDesp = CreateDynamicActivityDescriptor(this.CreateParams.ActivityMatrix);

            processDesp.Activities.Add(dynamicActivityDesp);

            WfClientTransitionDescriptor transitionSN = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, dynamicActivityDesp.Key)
            {
                Key = "L1"
            };

            processDesp.InitialActivity.ToTransitions.Add(transitionSN);

            WfClientTransitionDescriptor transitionNC = new WfClientTransitionDescriptor(dynamicActivityDesp.Key, processDesp.CompletedActivity.Key)
            {
                Key = "L2"
            };

            dynamicActivityDesp.ToTransitions.Add(transitionNC);

            return(processDesp);
        }
        public override WfClientProcessDescriptor Build(string processKey, string processName)
        {
            this.CreateParams.Key = processKey;
            this.CreateParams.Name = processName;

            WfClientProcessDescriptor processDesp = base.Build(processKey, processName);

            processDesp.Variables.AddOrSetValue("ClientDynamicProcess", "True", WfClientVariableDataType.Boolean);

            MergeProperties(processDesp.Properties, this.CreateParams.Properties);

            WfClientActivityDescriptor dynamicActivityDesp = CreateDynamicActivityDescriptor(this.CreateParams.ActivityMatrix);

            processDesp.Activities.Add(dynamicActivityDesp);

            WfClientTransitionDescriptor transitionSN = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, dynamicActivityDesp.Key) { Key = "L1" };

            processDesp.InitialActivity.ToTransitions.Add(transitionSN);

            WfClientTransitionDescriptor transitionNC = new WfClientTransitionDescriptor(dynamicActivityDesp.Key, processDesp.CompletedActivity.Key) { Key = "L2" };

            dynamicActivityDesp.ToTransitions.Add(transitionNC);

            return processDesp;
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 创建一个带动态矩阵资源的流程定义
        /// </summary>
        /// <returns></returns>
        public static WfClientProcessDescriptor CreateClientProcessWithActivityMatrixResourceDescriptor()
        {
            WfClientProcessDescriptor processDesp = CreateSimpleClientProcessWithoutLines();

            WfClientActivityDescriptor actDesp = ActivityDescriptorHelper.CreateSimpleClientActivity("N1", "活动矩阵", WfClientActivityType.NormalActivity);

            actDesp.Properties.AddOrSetValue("IsDynamic", true);
            actDesp.Resources.Add(GetClientActivityMatrixResourceDescriptor());

            processDesp.Activities.Add(actDesp);

            WfClientTransitionDescriptor transitionToN1 = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, "N1")
            {
                Key = "L1"
            };

            processDesp.InitialActivity.ToTransitions.Add(transitionToN1);

            WfClientTransitionDescriptor transitionToCompleted = new WfClientTransitionDescriptor(actDesp.Key, processDesp.CompletedActivity.Key)
            {
                Key = "L2"
            };

            processDesp.Activities["N1"].ToTransitions.Add(transitionToCompleted);

            return(processDesp);
        }
        public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer)
        {
            WfClientTransitionDescriptor transition = (WfClientTransitionDescriptor)base.Deserialize(dictionary, type, serializer);

            transition.FromActivityKey = dictionary.GetValue("fromActivityKey", string.Empty);
            transition.ToActivityKey   = dictionary.GetValue("toActivityKey", string.Empty);
            transition.Condition       = JSONSerializerExecute.Deserialize <WfClientConditionDescriptor>(dictionary.GetValue("condition", (object)null));

            return(transition);
        }
        public override IDictionary <string, object> Serialize(object obj, JavaScriptSerializer serializer)
        {
            Dictionary <string, object>  dictionary = (Dictionary <string, object>)base.Serialize(obj, serializer);
            WfClientTransitionDescriptor transition = (WfClientTransitionDescriptor)obj;

            dictionary.AddNonDefaultValue("fromActivityKey", transition.FromActivityKey);
            dictionary.AddNonDefaultValue("toActivityKey", transition.ToActivityKey);
            dictionary.AddNonDefaultValue("condition", transition.Condition);

            return(dictionary);
        }
Ejemplo n.º 10
0
        private static WfClientTransitionDescriptor ConvertServerTransitionToClient(IWfTransitionDescriptor server)
        {
            WfClientTransitionDescriptor clientTransition = null;

            if (server != null)
            {
                WfClientTransitionDescriptorConverter.Instance.ServerToClient((WfTransitionDescriptor)server, ref clientTransition);
            }

            return(clientTransition);
        }
        /// <summary>
        /// 创建一个有连线的流程
        /// </summary>
        /// <returns></returns>
        public static WfClientProcessDescriptor CreateSimpleClientProcessWithLines()
        {
            WfClientProcessDescriptor processDesp = CreateSimpleClientProcessWithoutLines();

            WfClientTransitionDescriptor transition = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, processDesp.CompletedActivity.Key);

            transition.Key = "L1";

            processDesp.InitialActivity.ToTransitions.Add(transition);

            return processDesp;
        }
Ejemplo n.º 12
0
        /// <summary>
        /// 创建一个有连线的流程
        /// </summary>
        /// <returns></returns>
        public static WfClientProcessDescriptor CreateSimpleClientProcessWithLines()
        {
            WfClientProcessDescriptor processDesp = CreateSimpleClientProcessWithoutLines();

            WfClientTransitionDescriptor transition = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, processDesp.CompletedActivity.Key);

            transition.Key = "L1";

            processDesp.InitialActivity.ToTransitions.Add(transition);

            return(processDesp);
        }
Ejemplo n.º 13
0
        public void ServerToClient(IEnumerable <IWfTransitionDescriptor> server, ICollection <WfClientTransitionDescriptor> client)
        {
            server.NullCheck("server");

            foreach (WfTransitionDescriptor st in server)
            {
                WfClientTransitionDescriptor ct = null;

                WfClientTransitionDescriptorConverter.Instance.ServerToClient(st, ref ct);

                client.Add(ct);
            }
        }
Ejemplo n.º 14
0
        private static void TransitionsServerToClient(WfProcessDescriptor server, WfClientProcessDescriptor client)
        {
            foreach (IWfActivityDescriptor sa in server.Activities)
            {
                foreach (WfTransitionDescriptor st in sa.ToTransitions)
                {
                    WfClientTransitionDescriptor ct = null;

                    WfClientTransitionDescriptorConverter.Instance.ServerToClient(st, ref ct);

                    WfClientActivityDescriptor fromActDesp = client.Activities[sa.Key];

                    if (fromActDesp != null)
                    {
                        fromActDesp.ToTransitions.Add(ct);
                    }
                }
            }
        }
Ejemplo 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));
        }
Ejemplo n.º 16
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);
        }
        /// <summary>
        /// 创建一个带动态矩阵资源的流程定义
        /// </summary>
        /// <returns></returns>
        public static WfClientProcessDescriptor CreateClientProcessWithActivityMatrixResourceDescriptor()
        {
            WfClientProcessDescriptor processDesp = CreateSimpleClientProcessWithoutLines();

            WfClientActivityDescriptor actDesp = ActivityDescriptorHelper.CreateSimpleClientActivity("N1", "活动矩阵", WfClientActivityType.NormalActivity);

            actDesp.Properties.AddOrSetValue("IsDynamic", true);
            actDesp.Resources.Add(GetClientActivityMatrixResourceDescriptor());

            processDesp.Activities.Add(actDesp);

            WfClientTransitionDescriptor transitionToN1 = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, "N1") { Key = "L1" };

            processDesp.InitialActivity.ToTransitions.Add(transitionToN1);

            WfClientTransitionDescriptor transitionToCompleted = new WfClientTransitionDescriptor(actDesp.Key, processDesp.CompletedActivity.Key) { Key = "L2" };

            processDesp.Activities["N1"].ToTransitions.Add(transitionToCompleted);

            return processDesp;
        }