コード例 #1
0
        public static WorkflowInfo ProcessAdapter(IWfProcess procInstance, bool isMainStream)
        {
            WorkflowInfo result = new WorkflowInfo();

            if (procInstance == null)
                return result;

            AdaptProcessProperties(procInstance, result, isMainStream);

            if (isMainStream == false || procInstance.MainStream == null)
            {
                foreach (IWfActivity instanceAct in procInstance.Activities)
                {
                    result.Activities.Add(AdaptActivityProperties(instanceAct.Descriptor, isMainStream));
                    result.Transitions.AddRange(AdaptTransitionProperties(procInstance, instanceAct));
                }
            }
            else
            {
                foreach (IWfActivityDescriptor instanceActDesc in procInstance.MainStream.Activities)
                {
                    result.Activities.Add(AdaptActivityProperties(instanceActDesc, isMainStream));
                    result.Transitions.AddRange(AdaptMainStreamTransitionProperties(instanceActDesc));
                }
            }

            return result;
        }
コード例 #2
0
ファイル: WfFactory.cs プロジェクト: jerryshi2007/AK47Source
        /// <summary>
        /// 
        /// </summary>
        /// <param name="process"></param>
        /// <param name="descriptor"></param>
        /// <returns></returns>
		public IWfAnchorActivity CreateAnchorActivity(IWfProcess process, IWfAnchorActivityDescriptor descriptor)
		{
			WfAnchorActivity activity = new WfAnchorActivity(descriptor);
			activity.Process = process;

			return activity;
		}
コード例 #3
0
        protected static void AfterStartupBranchProcess(IWfProcess process)
        {
            StringBuilder strB = new StringBuilder();

            foreach (WfAssignee assignee in process.BranchStartupParams.Assignees)
            {
                if (strB.Length > 0)
                    strB.Append(",");

                strB.Append(assignee.User.DisplayName);
            }

            if (strB.Length > 0)
            {
                string opName = string.Empty;

                switch (process.Descriptor.Key)
                {
                    case WfProcessDescriptorManager.DefaultConsignProcessKey:
                        opName = EnumItemDescriptionAttribute.GetDescription(WfControlOperationType.Consign);
                        break;
                    case WfProcessDescriptorManager.DefaultCirculationProcessKey:
                        opName = EnumItemDescriptionAttribute.GetDescription(WfControlOperationType.Circulate);
                        break;
                }

                if (opName.IsNotEmpty())
                    opName = opName + ": " + strB.ToString();
                else
                    opName = strB.ToString();

                ((WfProcessDescriptor)process.Descriptor).Name = opName;
            }
        }
コード例 #4
0
ファイル: WfActivity.cs プロジェクト: vanloc0301/mychongchong
 public WfActivity(Actinst actins)
     : base(actins)
 {
     this.actinst = actins;
     this.process = WfFactory.GetWfProcess(this.actinst.Proinst);
     this.executor = WfActivityAbstractImplFact.GetConcretImpl(this);
 }
コード例 #5
0
        public WfTransferParams ClientToServer(WfClientTransferParams client, IWfProcess process, ref WfTransferParams server)
        {
            client.NullCheck("client");

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

            server.Context["NextActivityDescriptorKey"] = client.NextActivityDescriptorKey;
            server.Context["FromTransitionDescriptorKey"] = client.FromTransitionDescriptorKey;

            if (process != null)
            {
                if (client.NextActivityDescriptorKey.IsNotEmpty())
                {
                    IWfActivity nextActivity = process.Activities.FindActivityByDescriptorKey(client.NextActivityDescriptorKey);

                    if (nextActivity != null)
                        server.NextActivityDescriptor = nextActivity.Descriptor;
                }

                if (client.FromTransitionDescriptorKey.IsNotEmpty())
                {
                    IWfTransitionDescriptor fromTransition = process.Descriptor.FindTransitionByKey(client.FromTransitionDescriptorKey);

                    server.FromTransitionDescriptor = fromTransition;
                }
            }

            server.Operator = (IUser)client.Operator.ToOguObject();
            WfClientBranchProcessTransferParamsCollectionConverter.Instance.ClientToServer(client.BranchTransferParams, server.BranchTransferParams);
            WfClientAssigneeCollectionConverter.Instance.ClientToServer(client.Assignees, server.Assignees);

            return server;
        }
コード例 #6
0
        private CommandStateBase Controller_PrepareCommandState(IWfProcess process)
        {
            DynamicFormCommandState state = null;

            //从流程上下文中获取数据。在这里通过流程上下文保存表单数据,省去了单独建表存储的工作
            //var data = DynamicFormDataAdapter.Instance.Load(process.ResourceID, false); //(string)process.RootProcess.Context["appData"];;

            string strData = (string)process.RootProcess.Context["appData"];
            
            if (strData.IsNullOrEmpty())
            {
                DynamicFormData data = new DynamicFormData();
            
                //data.Properties = null;

                state = new DynamicFormCommandState() { Data = data };

                process.GenerateCandidatesFromResources();
            }
            else
            {
                var data = SerializationHelper.DeserializeStringToObject(strData, SerializationFormatterType.Binary) as DynamicFormData;
                return new DynamicFormCommandState() { Data = data };
            }

            return state;
        }
コード例 #7
0
        public WfClientAuthorizationInfo GetAuthorizationInfo(IWfProcess process, IWfActivity originalActivity, WfClientUser user)
        {
            string userID = user.IsNotNullOrEmpty() ? user.ID : string.Empty;
            string originalActivityID = originalActivity != null ? originalActivity.ID : string.Empty;

            return GetAuthorizationInfo(process, originalActivityID, userID);
        }
コード例 #8
0
        /// <summary>
        /// 根据流程和角色创建SOARoleContext
        /// </summary>
        /// <param name="role"></param>
        /// <param name="process"></param>
        /// <returns></returns>
        public static SOARoleContext CreateContext(IRole role, IWfProcess process)
        {
            role.NullCheck("role");

            SOARole soaRole = (SOARole)SOARole.CreateWrapperObject(role);

            return CreateContext(soaRole.PropertyDefinitions, process);
        }
コード例 #9
0
ファイル: WfFactory.cs プロジェクト: jerryshi2007/AK47Source
        /// <summary>
        /// 
        /// </summary>
        /// <param name="process"></param>
        /// <param name="transParams"></param>
        /// <returns></returns>
		public IWfActivity CreateActivity(IWfProcess process, WfTransferParams transParams)
		{
			WfActivity activity = new WfActivity(transParams.NextActivityDescriptor);
            activity.Operator = transParams.Operator;
			activity.Process = process;

			return activity;
		}
コード例 #10
0
		private void OutputProcessInfo(IWfProcess process, TextWriter writer)
		{
			writer.WriteLine("ProcessID: {0}, Key: {1}, Name: {2}", process.ID, process.Descriptor.Key, process.Descriptor.Name);

			writer.WriteLine("Activities Begin");
			process.Activities.ForEach(a => OutputActivityInfo(a, writer));
			writer.WriteLine("Activities End");
		}
コード例 #11
0
		protected virtual void OnProcessReady(IWfProcess process)
		{
			if (ProcessReady != null)
			{
				PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("ProcessReady",
					() => ProcessReady(process));
			}
		}
コード例 #12
0
        public void CheckUserInAcl(IUser user, IWfProcess process, ref bool continueCheck)
        {
            user.NullCheck("user");

            continueCheck = WfClientContext.IsProcessAdmin(user, process) == false;

            if (continueCheck)
                continueCheck = WfClientContext.IsProcessViewer(user, process) == false;
        }
コード例 #13
0
		public DeleteObjectHelper(IWfProcess process, IWfProcessDescriptor processDesp, bool syncMSObject)
		{
			process.NullCheck("process");
			processDesp.NullCheck("processDesp");

			this._Process = process;
			this._ProcessDescriptor = processDesp;
			this._SyncMainStream = syncMSObject;
		}
コード例 #14
0
		public WfAsyncCancelProcessExecutor(IWfActivity operatorActivity, IWfProcess process)
			: base(operatorActivity, WfControlOperationType.AsyncCancelProcess)
		{
			process.NullCheck("process");

			this.Process = process;

			if (this.OperatorActivity == null)
				this.OperatorActivity = process.CurrentActivity;
		}
コード例 #15
0
		public WfPauseProcessExecutor(IWfActivity operatorActivity, IWfProcess pauseProcess)
			: base(operatorActivity, WfControlOperationType.PauseProcess)
		{
			pauseProcess.NullCheck("pauseProcess");

			this.PauseProcess = pauseProcess;

			if (OperatorActivity == null)
				OperatorActivity = PauseProcess.CurrentActivity;
		}
コード例 #16
0
ファイル: WfFactory.cs プロジェクト: jerryshi2007/AK47Source
        /// <summary>
        /// 
        /// </summary>
        /// <param name="process"></param>
        /// <param name="transParams"></param>
        /// <returns></returns>
		public IWfAnchorActivity CreateAnchorActivity(IWfProcess process, WfBranchesTransferParams transParams)
		{
            WfAnchorActivity activity = new WfAnchorActivity((IWfAnchorActivityDescriptor)transParams.NextActivityDescriptor);
			activity.Process = process;

			activity.Operations.Add(CreateOperation(activity, transParams));
            

			return activity;
		}
コード例 #17
0
		public WfResumeProcessExecutor(IWfActivity operatorActivity, IWfProcess resumeProcess)
			: base(operatorActivity, WfControlOperationType.ResumeProcess)
		{
			resumeProcess.NullCheck("resumeProcess");

			this.ResumeProcess = resumeProcess;

			if (OperatorActivity == null)
				OperatorActivity = ResumeProcess.CurrentActivity;
		}
コード例 #18
0
		public WfExitMaintainingStatusExecutor(IWfActivity operatorActivity, IWfProcess process, bool autoProcessPendingActivity)
			: base(operatorActivity, WfControlOperationType.ExitMaintainingStatus)
		{
			process.NullCheck("process");

			this.Process = process;
			this.AutoProcessPendingActivity = autoProcessPendingActivity;

			if (this.OperatorActivity == null)
				this.OperatorActivity = process.CurrentActivity;
		}
コード例 #19
0
		public void UpdateProcessActivities(IWfProcess process)
		{
			process.NullCheck("process");

			WfProcessCurrentActivityCollection pcas = new WfProcessCurrentActivityCollection();

			foreach (IWfActivity activity in process.Activities)
				pcas.Add(WfProcessCurrentActivity.FromActivity(activity));

			Update(process.ID, pcas);
		}
コード例 #20
0
		public EditProcessPropertiesHelper(IWfProcess process, IWfProcessDescriptor processDesp, PropertyValueCollection properties, bool syncMSObject)
		{
			process.NullCheck("process");
			processDesp.NullCheck("processDesp");
			properties.NullCheck("properties");

			this._Process = process;
			this._ProcessDescriptor = processDesp;
			this._Properties = properties;
			this._SyncMainStream = syncMSObject;
		}
コード例 #21
0
		private static IWfTransitionDescriptor GetNextMoveToTransition(IWfProcess process)
		{
			IWfTransitionDescriptor result = null;

			if (process.CurrentActivity != null)
			{
				result = process.CurrentActivity.Descriptor.ToTransitions.GetAllCanTransitTransitions().FindDefaultSelectTransition();
			}

			return result;
		}
コード例 #22
0
        private static void ServerActivitiesToClient(IWfProcess server, WfClientProcess client)
        {
            foreach (IWfActivity activity in server.Activities)
            {
                WfClientActivity clientActivity = null;

                WfClientActivityConverter.WithoutDescriptorInstance.ServerToClient(activity, ref clientActivity);

                client.Activities.Add(clientActivity);
            }
        }
コード例 #23
0
		public WfCancelProcessExecutor(IWfActivity operatorActivity, IWfProcess cancelProcess, bool cancelAllBranchProcesses)
			: base(operatorActivity, WfControlOperationType.CancelProcess)
		{
			cancelProcess.NullCheck("cancelProcess");

			this.CancelProcess = cancelProcess;
			this.CancelAllBranchProcesses = cancelAllBranchProcesses;

			if (OperatorActivity == null)
				OperatorActivity = CancelProcess.CurrentActivity;
		}
コード例 #24
0
		public void Write(IWfProcess process, WfSimulationOperationType operationType, WfSimulationContext context)
		{
			switch (operationType)
			{
				case WfSimulationOperationType.Startup:
					WriteStartupProcessInfo(process, context);
					break;
				case WfSimulationOperationType.MoveTo:
					WriteMoveToInfo(process, context);
					break;
			}
		}
コード例 #25
0
        public static SOARoleContext CreateContext(SOARolePropertyDefinitionCollection propertyDefines, IWfProcess process)
        {
            propertyDefines.NullCheck("propertyDefines");

            SOARolePropertiesQueryParamCollection queryParams = CreateQueryParams(propertyDefines, process);

            SOARoleContext context = SOARoleContext.CreateContext(queryParams, process);

            context.PropertyDefinitions = propertyDefines;

            return context;
        }
コード例 #26
0
ファイル: WfFactory.cs プロジェクト: vanloc0301/mychongchong
 public static IWfActivity GetWfActivity(Actdef actdef, IWfProcess process)
 {
     if (actdef == null)
     {
         throw new WfException("Actdef cannot be null");
     }
     if (process == null)
     {
         throw new WfException("WfProcess cannot be null");
     }
     return new WfActivity(actdef, process);
 }
コード例 #27
0
		public WfSimulationResult(IWfProcess process)
		{
			process.NullCheck("process");

			this.ProcessID = process.ID;

			if (process.CurrentActivity != null)
				this.ActivityID = process.CurrentActivity.ID;

			this.MoveToCount = WfRuntime.ProcessContext.SimulationContext.MoveToCount;
			this.ProcessStatus = process.Status;
		}
コード例 #28
0
		public WfAdminAddActivityExecutor(IWfActivity operatorActivity,
			IWfProcess process,
			IWfActivityDescriptor fromActivityDesp,
			IWfActivityDescriptor newActivityDesp,
			bool syncMSObject)
			: base(operatorActivity, process, newActivityDesp, syncMSObject, WfControlOperationType.AdminAddActivity)
		{
			this._FromActivityDescriptor = fromActivityDesp;

			newActivityDesp.NullCheck("newActivityDesp");

			this._NewActivityDescriptor = newActivityDesp;
		}
コード例 #29
0
		protected virtual void OnPrepareCommandState(IWfProcess process)
		{
			if (PrepareCommandState != null)
			{
				PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("PrepareCommandState", () =>
					{
						CommandStateBase state = PrepareCommandState(process);

						if (state != null)
							CommandStateHelper.RegisterState(state);
					});
			}
		}
コード例 #30
0
ファイル: Program.cs プロジェクト: jerryshi2007/AK47Source
        private static void MultiSerializeTest(IWfProcess process, int count, Stopwatch sw)
        {
            for (int i = 0; i < count; i++)
            {
                XElement data = SerializeProcess(process);
                IWfProcess deserializedProcess = DeserializeProcess(data);

                Trace.Assert(process.Descriptor.Name == deserializedProcess.Descriptor.Name);
                Trace.Assert(process.Activities.Count == deserializedProcess.Activities.Count);

                Console.WriteLine("Count: {0}, Elapsed time: {1:#,##0.00}", i, sw.ElapsedMilliseconds);
            }
        }
コード例 #31
0
        private void GetProcessParameters(IWfProcess process, List <RuntimeParameterInfo> source)
        {
            string processName = string.IsNullOrEmpty(process.Descriptor.Name) ? process.Descriptor.Name : process.Descriptor.Key;

            foreach (KeyValuePair <string, object> item in process.ApplicationRuntimeParameters)
            {
                RuntimeParameterInfo currentInfo = new RuntimeParameterInfo(item);
                //currentInfo.ProcessName = processName;

                source.Add(currentInfo);
            }

            /*if (process.Descriptor.Properties.GetValue("ProbeParentProcessParams", false) == true)
             *  GetProcessParameters(process.EntryInfo.OwnerActivity.Process, source); */
        }
コード例 #32
0
        public void UpdatePersistQueue(IWfProcess process)
        {
            process.NullCheck("process");

            WfPersistQueue pq = WfPersistQueue.FromProcess(process);

            string sql = GetUpdatePersistQueueSql(pq);

            using (TransactionScope scope = TransactionScopeFactory.Create())
            {
                DbHelper.RunSql(sql, GetConnectionName());

                scope.Complete();
            }
        }
コード例 #33
0
ファイル: RelativeProcess.cs プロジェクト: wooln/AK47Source
        private bool ProcessOpenProcessRequest()
        {
            string processID = WebUtility.GetRequestQueryValue <string>("relProcCtlProcessID", "");

            HttpContext.Current.Response.Clear();
            bool result = processID.IsNotEmpty();

            if (result)
            {
                IWfProcess proc = WfRuntime.GetProcessByProcessID(processID);
                string     url  = string.Format("{0}?resourceID={1}&activityID={2}", proc.Descriptor.Url, proc.ResourceID, proc.CurrentActivity.ID);
                Page.Response.Redirect(url);
            }
            return(result);
        }
コード例 #34
0
        /// <summary>
        /// 执行退回线,然后再流转一步
        /// </summary>
        /// <param name="process"></param>
        /// <param name="count"></param>
        private static void MoveAgreeProcessAndValidate(IWfProcess process, int count)
        {
            Console.WriteLine("第{0}次退件之前,退件发起点为{1}({2})", count, process.CurrentActivity.Descriptor.Key, process.CurrentActivity.Descriptor.AssociatedActivityKey);
            IWfActivity returnedActivityA = process.MoveToDefaultActivityByExecutor(false).CurrentActivity;     //Move To A

            Console.WriteLine("第{0}次退件之后,退件当前点为{1}({2})", count, process.CurrentActivity.Descriptor.Key, process.CurrentActivity.Descriptor.AssociatedActivityKey);

            Assert.AreEqual("A", returnedActivityA.Descriptor.AssociatedActivityKey);

            IWfActivity returnedActivityB = process.MoveToDefaultActivityByExecutor(false).CurrentActivity;     //Move To B again

            Assert.AreEqual("B", returnedActivityB.Descriptor.AssociatedActivityKey);

            ValidateAggressProcessBTransitions(returnedActivityB, count);
        }
コード例 #35
0
        protected WfBranchProcessInfo(SerializationInfo info, StreamingContext context)
        {
            this._Process              = (IWfProcess)info.GetValue("Process", typeof(IWfProcess));
            this._OwnerOperation       = (IWfOperation)info.GetValue("OwnerOperation", typeof(IWfOperation));
            this._OperationID          = info.GetString("OperationID");
            this._Sequence             = info.GetInt32("Sequence");
            this._IsSpecificProcess    = info.GetBoolean("IsSpecificProcess");
            this._ProcessDescriptorKey = info.GetString("ProcessDescriptorKey");

            this._BranchInfoState = (State)info.GetValue("BranchInfoState", typeof(State));

            this._Context = (WfBranchProcessInfoContext)info.GetValue("Context", typeof(WfBranchProcessInfoContext));

            this._LoadingType = (DataLoadingType)info.GetValue("LoadingType", typeof(DataLoadingType));
        }
コード例 #36
0
ファイル: Extensions.cs プロジェクト: ounata/AK47-2016Source
        public static WfClientProcessInfo ToClientProcessInfo(this IWfProcess process, IWfActivity originalActivity, WfClientUser clientUser)
        {
            process.NullCheck("process");

            WfClientProcessInfo clientProcessInfo = null;

            PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("ToClientProcessInfo", () =>
            {
                WfClientProcessInfoConverter.Instance.ServerToClient(process, ref clientProcessInfo);

                clientProcessInfo.AuthorizationInfo = WfClientProcessInfoBaseConverter.Instance.GetAuthorizationInfo(process, originalActivity, clientUser);
            });

            return(clientProcessInfo);
        }
コード例 #37
0
ファイル: ViewerTest.aspx.cs プロジェクト: wooln/AK47Source
        public static IWfProcess LoadProcessDescriptor(string processid)
        {
            WfRuntime.ClearCache();
            IWfProcess process = WfRuntime.GetProcessByProcessID(processid);

            //string xml = File.ReadAllText(@"C:\Documents and Settings\issuser\Desktop\111.txt");

            //Type descType = process.Descriptor.GetType();
            //PropertyInfo graphProp = descType.GetProperty("GraphDescription");
            //graphProp.SetValue(process.Descriptor, xml, null);

            //WorkflowSettings.GetConfig().GetPersistManager().SaveProcess(process);
            //WfRuntime.PersistWorkflows();
            return(process);
        }
コード例 #38
0
        /// <summary>
        /// 根据默认的下一环节生成流转参数
        /// </summary>
        /// <param name="process"></param>
        /// <returns></returns>
        public static WfTransferParams FromNextDefaultActivity(IWfProcess process)
        {
            process.NullCheck("process");

            WfTransferParams transferParams = null;

            if (process.CurrentActivity != null)
            {
                transferParams = FromNextDefaultActivity(process.CurrentActivity.Descriptor);
            }

            (transferParams != null).FalseThrow(Translator.Translate(Define.DefaultCulture, "不能根据流程当前活动找到默认的下一步环节"));

            return(transferParams);
        }
コード例 #39
0
        private static string GetDefaultExtData(IWfProcess process)
        {
            XElement result = XElement.Parse("<ExtData />");

            string encodingName = "gb2312";

            if (process.LoadingType == DataLoadingType.Memory)
            {
                encodingName = "utf-8";
            }

            result.SetAttributeValue("encoding", encodingName);

            return(result.ToString());
        }
コード例 #40
0
ファイル: WfRuntimeTest.cs プロジェクト: wooln/AK47Source
        public void InitialActivityAutoMoveTest()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptor();

            processDesp.InitialActivity.Properties.SetValue("AutoMoveTo", true);
            processDesp.Activities["NormalActivity"].Properties.SetValue("AutoMoveTo", true);

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            IWfActivity currentActivity = process.MoveToNextDefaultActivity();

            Console.WriteLine(currentActivity.Descriptor.ActivityType);

            Assert.AreEqual(WfActivityType.CompletedActivity, currentActivity.Descriptor.ActivityType);
        }
コード例 #41
0
ファイル: WfRuntimeTest.cs プロジェクト: wooln/AK47Source
        public void MoveToWithBranchProcessesExecutorTest()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptorWithBranchTemplate();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            IWfActivityDescriptor normalActivity = processDesp.InitialActivity.ToTransitions[0].ToActivity;

            WfTransferParams transferParams0 = new WfTransferParams(normalActivity);

            //初始化后,流转到有分支流程的活动
            process.MoveTo(transferParams0);

            Assert.AreEqual(normalActivity.BranchProcessTemplates.Count, process.CurrentActivity.BranchProcessGroups.Count);
        }
コード例 #42
0
        public void EnterMaintainingStatusTest()
        {
            IWfProcessDescriptor processDesp = CreateProcessWithAutoMaintainProperty();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            MoveToExecutor(process);

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.AreEqual(WfProcessStatus.Maintaining, process.Status);
            Assert.AreEqual(WfActivityStatus.Pending, process.CurrentActivity.Status);

            Assert.AreEqual(0, process.CurrentActivity.BranchProcessGroups.Count);
        }
コード例 #43
0
        public void AddActivityWithTwoOutTransitionsExecutorTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcess();

            int originalActCount = process.Activities.Count;

            IWfActivity targetActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity");

            targetActivity.Descriptor.ToTransitions.FirstOrDefault().Properties.SetValue("Name", "同意");

            //增加一条出线
            IWfTransitionDescriptor tReturn = targetActivity.Descriptor.ToTransitions.AddBackwardTransition(process.InitialActivity.Descriptor);

            tReturn.Properties.SetValue("Name", "不同意");

            WfActivityDescriptorCreateParams createParams = new WfActivityDescriptorCreateParams();

            createParams.AllAgreeWhenConsign = false;
            createParams.Users = new OguDataCollection <IUser>();
            createParams.Users.Add((IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object);

            WfAddActivityExecutor executor = new WfAddActivityExecutor(process.CurrentActivity, targetActivity, createParams);

            executor.Execute();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            IWfActivity addedActivity = process.Activities[executor.AddedActivity.ID];

            targetActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity");

            Assert.AreEqual(originalActCount + 1, process.Activities.Count);
            Assert.AreEqual(1, targetActivity.Descriptor.ToTransitions.Count);
            Assert.IsFalse(targetActivity.Descriptor.ToTransitions[0].IsBackward);

            Assert.AreEqual(2, addedActivity.Descriptor.ToTransitions.Count, "新加的活动应该也有两条出线");
            Assert.AreEqual("同意", addedActivity.Descriptor.ToTransitions[0].Name);
            Assert.AreEqual("不同意", addedActivity.Descriptor.ToTransitions[1].Name);

            WfMainStreamActivityDescriptorCollection processDespMSA = process.Descriptor.GetMainStreamActivities();
            WfMainStreamActivityDescriptorCollection processMSA     = process.GetMainStreamActivities(true);

            processDespMSA.Output("流程描述中的主线活动");
            processMSA.Output("主线流程中的主线活动");

            Assert.AreEqual(process.Descriptor.Activities.Count, process.MainStream.Activities.Count);
            Assert.AreEqual(processDespMSA.Count, processMSA.Count);
        }
コード例 #44
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);
        }
コード例 #45
0
        public void BranchProcessContainsSecretaryWithAgreeLineTest()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateBranchProcessWithSecretaryAndAgreeLine();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            WfProcessTestCommon.MoveToNextDefaultActivityWithExecutor(process);

            process = WfRuntime.GetProcessByProcessID(process.ID);

            process.CurrentActivity.BranchProcessGroups[0].Branches.ForEach(subProcess =>
            {
                Console.WriteLine("分支流程ID={0}", subProcess.ID);
                OutputProcessCandidatesAndOutTransitions(subProcess);
            });
        }
コード例 #46
0
        public void ClearSecretaryTest()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptorWithSecretary();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            ChangeActivityResource(process.Descriptor.Activities["NormalActivity"], (IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object);

            WfRuntime.DecorateProcess(process);

            OutputProcessCandidates(process);
            ReturnExecutorTestHelper.OutputMainStream(process);

            Assert.AreEqual(3, processDesp.Activities.Count);
            Assert.AreEqual(3, process.MainStream.Activities.Count);
        }
コード例 #47
0
        public void TransitionNameTest()
        {
            IWfProcessDescriptor processDesp = PrepareProcessDescriptor(true);

            IWfProcess process = processDesp.StartupProcess();

            process = process.MoveToDefaultActivityByExecutor();

            process = process.MoveToDefaultActivityByExecutor();

            Console.WriteLine(process.ApplicationRuntimeParameters["CurrentTransitionName"]);

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

            Assert.AreEqual(normalActivity.ToTransitions[0].Name, process.ApplicationRuntimeParameters["CurrentTransitionName"]);
        }
コード例 #48
0
        private static bool GetInMoveToStatus(IWfProcess process, string originalActivityID)
        {
            bool result = false;

            IWfActivity currentActivity = process.Activities[originalActivityID];

            if (currentActivity != null)
            {
                //锁判断
                //result = this.LockResult == null || this.LockResult.Succeed;
                result = process.Status == WfProcessStatus.Running &&
                         currentActivity.Status == WfActivityStatus.Running;
            }

            return(result);
        }
コード例 #49
0
        public void BasicDynamicActivityWithoutResourceTest()
        {
            IWfProcessDescriptor processDesp = ProcessHelper.CreateSimpleProcessDescriptor();

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

            FillDynamicActivitySimpleResource(templateActDesp);

            IWfProcess process = processDesp.StartupProcess();

            IWfActivityDescriptor firstDynamicActDesp = ValidateDynamicActivities(process.InitialActivity.Descriptor, templateActDesp);

            ValidateNoResourceTransitionsProperties(processDesp.InitialActivity.ToTransitions.FindAll(t => t.Properties.GetValue("DynamicSource", string.Empty) == templateActDesp.Key), templateActDesp);

            Assert.AreEqual(processDesp.CompletedActivity.Key, firstDynamicActDesp.Key, "起始点和终止点连接在一起");
        }
コード例 #50
0
        public void EnterActivityServiceTest()
        {
            IWfProcessDescriptor processDesp = ProcessHelper.CreateSimpleProcessDescriptor();

            ((WfActivityDescriptor)processDesp.InitialActivity).EnterEventExecuteServiceKeys = "PCGetVersion";
            IWfProcess process = processDesp.StartupProcessByExecutor(new Dictionary <string, object>()
            {
                { "callerID", "EnterActivity" }
            });

            string result = process.ApplicationRuntimeParameters.GetValue("Version", string.Empty);

            Console.WriteLine(result);

            Assert.IsTrue(result.IndexOf("EnterActivity") >= 0);
        }
コード例 #51
0
        private void OnProcessReadyHandler(IWfProcess process)
        {
            if (process.LoadingType == DataLoadingType.Cloned)
            {
                string sourceResourceID = WebUtility.GetRequestQueryString("sourceResourceID", string.Empty);

                ICommandStatePersist originalState = LoadStateByResourceID(sourceResourceID);

                ExceptionHelper.FalseThrow(originalState != null, "CopyForm时,必须实现LoadStateByResourceID方法");
                ICommandStatePersist persistedState = (ICommandStatePersist)originalState;

                CommandStateBase newState = (CommandStateBase)persistedState.CloneBusinessObject();

                CommandStateHelper.RegisterState(newState);
            }
        }
コード例 #52
0
        public void CancelProcessAndBranchProcessCompleted()
        {
            IWfProcess process = GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence.Parallel, WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete);

            ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(process.CurrentActivity, WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete);
            ProcessTestHelper.ProcessPendingActivity(process.CurrentActivity.ID);

            Assert.AreEqual(WfProcessStatus.Completed, process.CurrentActivity.BranchProcessGroups[0].Branches[0].Status);
            Assert.AreEqual(WfProcessStatus.Running, process.CurrentActivity.BranchProcessGroups[0].Branches[1].Status);

            CancelProcess(process, true);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            CheckOperationAndStatusAfterCancelProcess(process.Activities[1].BranchProcessGroups[0].Branches[0]);
            CheckOperationAndStatusAfterCancelProcess(process.Activities[1].BranchProcessGroups[0].Branches[1]);
        }
コード例 #53
0
        public void CancelSubProcessTest()
        {
            IWfProcess process = GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence.Parallel, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);

            IWfProcess branchProcess = process.CurrentActivity.BranchProcessGroups[0].Branches[0];

            CancelProcess(branchProcess, false);

            IWfProcess branchProcess2 = process.CurrentActivity.BranchProcessGroups[0].Branches[1];

            CancelProcess(branchProcess2, false);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            process.MoveTo(new WfTransferParams(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity));
            Assert.AreEqual(WfActivityStatus.Completed, process.Activities[1].Status);
        }
コード例 #54
0
        public static WfProcessDimension FromProcess(IWfProcess process)
        {
            process.NullCheck("process");

            WfProcessDimension result = new WfProcessDimension();

            result.ProcessID = process.ID;

            XElement xml = XElement.Parse("<Process/>");

            ((ISimpleXmlSerializer)process).ToXElement(xml, string.Empty);

            result.Data = xml.ToString();

            return(result);
        }
コード例 #55
0
        internal WfProcessActionContextState SaveDifferentProcessInfo(IWfProcess process)
        {
            WfProcessActionContextState state = new WfProcessActionContextState();

            IWfProcess originalProcess = null;

            if (OriginalActivity != null)
            {
                originalProcess = OriginalActivity.Process;
            }

            state.SavedOriginalActivity = OriginalActivity;
            state.NeedToRestore         = (originalProcess != process);

            return(state);
        }
コード例 #56
0
        public IWfProcess Execute()
        {
            IWfProcess result = null;

            try
            {
                ExecutionWrapper(EnumItemDescriptionAttribute.GetDescription(OperationType),
                                 () => result = InternalExecute(true));

                return(result);
            }
            finally
            {
                WfExecutorLogContextInfo.CommitInfoToLogger();
            }
        }
コード例 #57
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);
        }
コード例 #58
0
        private void InitOriginalActivityByActivityID(string resourceID, string activityID)
        {
            if (activityID.IsNotEmpty())
            {
                IWfProcess process = WfRuntime.GetProcessByActivityID(activityID);

                //取得OriginalActivity
                this._OriginalCurrentActivity = process.CurrentActivity;
                this.OriginalActivity         = process.Activities[activityID];

                if (this.OriginalActivity == null)
                {
                    this.OriginalActivity = process.CurrentActivity;
                }
            }
        }
コード例 #59
0
        private void NormalizeOneTaskInfo(UserTask task)
        {
            if (task.ProcessID.IsNotEmpty())
            {
                try
                {
                    IWfProcess process = WfRuntime.GetProcessByProcessID(task.ProcessID);

                    task.TaskTitle = process.ApplicationRuntimeParameters.GetMatchedString(task.TaskTitle);
                    task.Url       = process.ApplicationRuntimeParameters.GetMatchedString(task.Url);
                }
                catch (WfRuntimeException)
                {
                }
            }
        }
コード例 #60
0
        private static bool GetInMoveToMode(IWfProcess process, string originalActivityID, string userID)
        {
            bool result = GetInMoveToStatus(process, originalActivityID);

            if (result)
            {
                IWfActivity currentActivity = process.Activities[originalActivityID];

                if (result)
                {
                    result = IsUserInAssignees(userID, currentActivity.Assignees);
                }
            }

            return(result);
        }