コード例 #1
0
ファイル: WfFactory.cs プロジェクト: jerryshi2007/AK47Source
        /// <summary>
        /// 
        /// </summary>
        /// <param name="process"></param>
        /// <param name="descriptor"></param>
        /// <returns></returns>
		public IWfActivity CreateActivity(IWfProcess process, IWfActivityDescriptor descriptor)
		{
			WfActivity activity = new WfActivity(descriptor);
			activity.Process = process;

			return activity;
		}
コード例 #2
0
        private static void OutputActivity(IWfActivityDescriptor actDesp)
        {
            Console.Write(actDesp.Key);

            if (actDesp.AssociatedActivityKey.IsNotEmpty())
                Console.Write("({0})", actDesp.AssociatedActivityKey);
        }
コード例 #3
0
        private static void OutputActivities(IWfTransitionDescriptor transition, IWfActivityDescriptor targetActDesp, Dictionary<string, IWfTransitionDescriptor> elapsedTransitions)
        {
            if (transition != null)
            {
                //防止死循环
                if (elapsedTransitions.ContainsKey(transition.Key))
                    return;

                elapsedTransitions.Add(transition.Key, transition);
            }

            if (transition != null)
            {
                Console.Write("从 ");
                OutputActivity(transition.FromActivity);

                Console.Write(" 经过 {0} ", transition.Key);
            }

            Console.Write("到 ");
            OutputActivity(targetActDesp);

            Console.WriteLine();

            foreach (IWfTransitionDescriptor t in targetActDesp.ToTransitions)
            {
                OutputActivities(t, t.ToActivity, elapsedTransitions);
            }
        }
コード例 #4
0
		internal OpinionListViewBindEventArgs(GenericOpinion currentOpinion, IWfActivityDescriptor currentWfActDesc, Control container, bool readOnly)
		{
			_opinion = currentOpinion;
			_wfActDesc = currentWfActDesc;
			_container = container;
			_readOnly = readOnly;
		}
コード例 #5
0
 public WfCopyMainStreamActivityNode(IWfActivityDescriptor templateActDesp, IWfActivityDescriptor originalActDesp, bool needCopy, bool isEndActivity)
 {
     this._TemplateActivityDescriptor = templateActDesp;
     this._OriginalActivityDescriptor = originalActDesp;
     this._NeedCopy = needCopy;
     this._IsEndActivity = isEndActivity;
 }
コード例 #6
0
        protected WfActivityBase(IWfActivityDescriptor descriptor)
        {
            _Descriptor = descriptor;

            this._ProcessDescKey = descriptor.Process.Key;
            this._ActivityDescKey = descriptor.Key;
            this._StartTime = DateTime.MinValue;
        }
コード例 #7
0
        public WfActivityBase CreateActivity(IWfActivityDescriptor actDesp)
        {
            WfActivityBase activity = CreateActivityInstance(actDesp);

            LoadActions(activity);

            return activity;
        }
コード例 #8
0
		public WfAdminDeleteActivityExecutor(IWfActivity operatorActivity, IWfActivityDescriptor targetActivityDescriptor, bool syncMSObject) :
			base(operatorActivity, WfControlOperationType.AdminDeleteActivity)
		{
			targetActivityDescriptor.NullCheck("targetActivityDescriptor");

			this._TargetActivityDescriptor = targetActivityDescriptor;
			this._SyncMainStreamObject = syncMSObject;
		}
コード例 #9
0
        /// <summary>
        /// 活动实例是否运行过或正在运行
        /// </summary>
        /// <returns></returns>
        private static bool InstanceIsRunning(IWfActivityDescriptor actDesp)
        {
            bool result = false;

            if (actDesp.IsMainStreamActivity == false && actDesp.Instance != null)
                result = actDesp.Instance.Status != WfActivityStatus.NotRunning;

            return result;
        }
コード例 #10
0
        public WfMoveToSelectedResult(WfControlOperationType opType, WfControlNextStep nextStep)
        {
            this._OperationType = opType;
            IWfProcessDescriptor processDesp = WfClientContext.Current.CurrentActivity.Process.Descriptor;

            this._TargetActivityDescriptor = processDesp.Activities[nextStep.ActivityDescriptor.Key];

            if (nextStep.TransitionDescriptor != null)
                this._FromTransitionDescriptor = processDesp.FindTransitionByKey(nextStep.TransitionDescriptor.Key);

            this.Assignees.CopyFrom(nextStep.Candidates);
        }
コード例 #11
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;
		}
コード例 #12
0
        private static List<TransitionInfo> AdaptMainStreamTransitionProperties(IWfActivityDescriptor instanceActDesc)
        {
            List<TransitionInfo> result = new List<TransitionInfo>();

            foreach (var tran in instanceActDesc.ToTransitions)
            {
                var link = new TransitionInfo()
                {
                    Key = tran.Key,
                    Name = tran.Name,
                    Enabled = tran.Enabled,
                    FromActivityKey = instanceActDesc.Key,
                    ToActivityKey = tran.ToActivity.Key,
                    WfReturnLine = tran.IsBackward,
                    IsPassed = false
                };

                result.Add(link);
            }

            return result;
        }
コード例 #13
0
        public static void AssertActivityDescriptor(this WfClientActivityDescriptor cad, IWfActivityDescriptor sad)
        {
            cad.AreSame(sad);
            Assert.AreEqual(cad.ActivityType, sad.ActivityType.ToClientActivityType());

            cad.Condition.AreSame(sad.Condition);
            cad.Variables.AssertCollection(sad.Variables);
            cad.Resources.AssertResources(sad.Resources);
            cad.EnterEventReceivers.AssertResources(sad.EnterEventReceivers);
            cad.LeaveEventReceivers.AssertResources(sad.LeaveEventReceivers);
            cad.BranchProcessTemplates.AssertBranchProcessTemplateCollection(sad.BranchProcessTemplates);

            cad.ToTransitions.AssertCollection(sad.ToTransitions);
            cad.ToTransitions.ForEach(ct => ct.IsValid());
            sad.ToTransitions.ForEach(st => st.IsValid());

            cad.GetFromTransitions().AssertCollection(sad.FromTransitions);
            cad.GetFromTransitions().ForEach(ct => ct.IsValid());
            sad.FromTransitions.ForEach(st => st.IsValid());

            cad.RelativeLinks.AssertRelativeLinks(sad.RelativeLinks);
        }
コード例 #14
0
        public WfTransferParamsBase(IWfActivityDescriptor nextActivityDescriptor)
        {
            ExceptionHelper.FalseThrow <ArgumentNullException>(nextActivityDescriptor != null, "nextActivityDescriptor");

            _NextActivityDescriptor = nextActivityDescriptor;
        }
コード例 #15
0
 /// <summary>
 /// 创建活动
 /// </summary>
 /// <param name="actDesp"></param>
 /// <returns></returns>
 protected abstract WfActivityBase CreateActivityInstance(IWfActivityDescriptor actDesp);
コード例 #16
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="nextActivityDescriptor"></param>
 public WfTransferParams(IWfActivityDescriptor nextActivityDescriptor)
     : base(nextActivityDescriptor)
 {
 }
コード例 #17
0
 protected override WfActivityBase CreateActivityInstance(IWfActivityDescriptor actDesp)
 {
     return(new WfCompletedActivity(actDesp));
 }
コード例 #18
0
        /// <summary>
        /// 动态活动生成后整理新生成的动态活动的属性
        /// </summary>
        /// <param name="firstDynActDesp"></param>
        /// <param name="wfActivityBase"></param>
        private static void ChangeNewDynActivitiesProperties(WfActivityDescriptorCollection createdActivities, IWfActivityDescriptor templateActDesp)
        {
            foreach (IWfActivityDescriptor actDesp in createdActivities)
            {
                ((WfActivityDescriptor)actDesp).SetDynamicActivityProperties(templateActDesp.Key);

                if (actDesp.IsMainStreamActivity == false && actDesp.Instance != null)
                {
                    actDesp.Instance.GenerateCandidatesFromResources();
                }
            }
        }
コード例 #19
0
 /// <summary>
 /// 在当前活动实例后,添加一个新的活动
 /// </summary>
 /// <param name="actDesp"></param>
 /// <returns></returns>
 public IWfActivity Append(IWfActivityDescriptor newActDesp)
 {
     return(Append(newActDesp, false));
 }
コード例 #20
0
        private static void ChangeActivityResources(IWfActivityDescriptor actDesp, IEnumerable <IUser> users)
        {
            actDesp.Resources.Clear();

            users.ForEach(u => actDesp.Resources.Add(new WfUserResourceDescriptor(u)));
        }
コード例 #21
0
        private WfActivityDescriptorCollection CreateActivities(WfTransitionDescriptorCollection fromTransitions, WfCreateActivityParamCollection capc, WfTransitionDescriptorCollection toTransitions)
        {
            WfActivityDescriptorCollection result = new WfActivityDescriptorCollection(this.Process);

            IWfActivityDescriptor firstDynamicActivity     = null;
            IWfActivityDescriptor lastDynamicActivity      = null;
            WfCreateActivityParam lastCreatedActivityParam = null;

            foreach (WfCreateActivityParam cap in capc)
            {
                WfActivityDescriptor actDesp = (WfActivityDescriptor)cap.Template.Clone();

                actDesp.Process = this.Process;

                string newActKey = "ND" + cap.ActivitySN;

                if (this.Process.Activities.ContainsKey(newActKey))
                {
                    newActKey = this.Process.FindNotUsedActivityKey();
                }

                actDesp.Key           = newActKey;
                cap.CreatedDescriptor = actDesp;

                this.Process.Activities.Add(actDesp);

                if (lastCreatedActivityParam != null)
                {
                    lastCreatedActivityParam.DefaultNextDescriptor = actDesp;
                }

                lastCreatedActivityParam = cap;

                if (this.IsMainStreamActivity == false && this.ProcessInstance != null)
                {
                    WfActivityBase.CreateActivityInstance(actDesp, this.ProcessInstance);
                }

                if (firstDynamicActivity == null)
                {
                    firstDynamicActivity = actDesp;
                }

                if (lastDynamicActivity != null)
                {
                    WfTransitionDescriptor newTransition = (WfTransitionDescriptor)lastDynamicActivity.ToTransitions.AddForwardTransition(actDesp);

                    //如果不是第一个生成的活动
                    if (firstDynamicActivity != actDesp)
                    {
                        newTransition.GeneratedByTemplate = true;
                        newTransition.TemplateKey         = this.Key;
                    }
                }

                lastDynamicActivity = actDesp;

                result.Add(actDesp);
            }

            if (firstDynamicActivity != null && lastDynamicActivity != null)
            {
                SetEntryTransitionsProperties(firstDynamicActivity, fromTransitions);

                if (lastCreatedActivityParam != null)
                {
                    IWfTransitionDescriptor defaultTransition =
                        toTransitions.GetAllConditionMatchedTransitions().FindDefaultSelectTransition(true);

                    if (defaultTransition != null)
                    {
                        lastCreatedActivityParam.DefaultNextDescriptor = defaultTransition.ToActivity;
                    }
                }

                capc.AdjustTransitionsByTemplate(this.Key);

                //如果在活动模板参数的最后一个活动没有配置出线,则使用默认的出线;否则使用配置的出线
                if (lastDynamicActivity.ToTransitions.Count == 0)
                {
                    SetExitTransitionsProperties(lastDynamicActivity, toTransitions);
                }
                else
                {
                    lastDynamicActivity.ToTransitions.ForEach(t => SetDynamicTransitionProperties(null, t, this, false));
                }
            }
            else
            {
                //当没有动态活动生成时,前后的活动直接串联到一起
                JoinOriginalActivitiesAndSetProperties(fromTransitions, toTransitions);
            }

            //将模版点的进出线的Enabled都设置为False
            fromTransitions.ForEach(t => ((WfTransitionDescriptor)t).Enabled = false);
            toTransitions.ForEach(t => ((WfTransitionDescriptor)t).Enabled   = false);

            return(result);
        }
コード例 #22
0
        private static void ChangeMainStreamSecretaryActivities(WfSecretaryOperation operation, IWfActivityDescriptor msOperationActDesp)
        {
            IWfTransitionDescriptor prevTransition    = msOperationActDesp.FromTransitions.Find(t => t.FromActivity.Variables.GetValue(WfHelper.SecretaryActivity, false));
            IWfTransitionDescriptor succeedTransition = msOperationActDesp.ToTransitions.Find(t => t.ToActivity.Variables.GetValue(WfHelper.SecretaryActivity, false));

            if (prevTransition != null)
            {
                ChangeActivityResources(prevTransition.FromActivity, operation.Secretaries);
            }

            if (succeedTransition != null)
            {
                ChangeActivityResources(succeedTransition.ToActivity, operation.Secretaries);
            }

            DecroateTemplateActivity(operation.ActivityDescriptor, operation.Secretaries);
        }
コード例 #23
0
        private static void ClearMainStreamSecretaryActivities(WfSecretaryOperation operation, IWfActivityDescriptor msOperationActDesp)
        {
            IWfTransitionDescriptor prevTransition    = msOperationActDesp.FromTransitions.Find(t => t.FromActivity.Variables.GetValue(WfHelper.SecretaryActivity, false));
            IWfTransitionDescriptor succeedTransition = msOperationActDesp.ToTransitions.Find(t => t.ToActivity.Variables.GetValue(WfHelper.SecretaryActivity, false));

            bool needRemoveInitial = false;

            if (prevTransition != null)
            {
                if (prevTransition.FromActivity.ActivityType == WfActivityType.InitialActivity)
                {
                    needRemoveInitial = true;
                }

                List <IWfTransitionDescriptor> fromTransitions = new List <IWfTransitionDescriptor>();
                prevTransition.FromActivity.FromTransitions.CopyTo(fromTransitions);
                prevTransition.FromActivity.Remove();

                foreach (IWfTransitionDescriptor fromTransition in fromTransitions)
                {
                    fromTransition.ConnectActivities(fromTransition.FromActivity, msOperationActDesp);
                }
            }

            if (succeedTransition != null)
            {
                List <IWfTransitionDescriptor> toTransitions = new List <IWfTransitionDescriptor>();

                succeedTransition.ToActivity.ToTransitions.CopyTo(toTransitions);
                succeedTransition.ToActivity.Remove();

                foreach (IWfTransitionDescriptor toTransition in toTransitions)
                {
                    toTransition.ConnectActivities(msOperationActDesp, toTransition.ToActivity);
                }
            }

            if (needRemoveInitial)
            {
                ((WfActivityDescriptor)msOperationActDesp).ActivityType = WfActivityType.InitialActivity;
                msOperationActDesp.Process.Activities.InitialActivity   = msOperationActDesp;
            }

            DedecroateTemplateActivity(msOperationActDesp, operation.Secretaries);
        }
コード例 #24
0
        /// <summary>
        /// 添加主线活动的秘书环节
        /// </summary>
        /// <param name="operation"></param>
        /// <param name="msOperationActDesp"></param>
        private static void AddMainStreamSecretaryActivities(WfSecretaryOperation operation, IWfActivityDescriptor msOperationActDesp, AddSecretaryResult instanceResult)
        {
            AddSecretaryResult result = new AddSecretaryResult();

            //保留住原来领导活动的出线
            List <IWfTransitionDescriptor> templateToTransitions = new List <IWfTransitionDescriptor>(msOperationActDesp.ToTransitions);

            IWfActivityDescriptor prevSecretaryActDesp = CreateSecretaryActivityDescriptor(msOperationActDesp, operation.Secretaries);

            SetActivityPropertiesBooleanValue(prevSecretaryActDesp, false, WfSecretaryDecorator._PrevActForbidProperties);
            SetActivityPropertiesBooleanValue(prevSecretaryActDesp, true, WfSecretaryDecorator._PrevActAllowProperties);
            msOperationActDesp.InsertBefore(prevSecretaryActDesp);

            DecroateTemplateActivity(msOperationActDesp, operation.Secretaries);

            IWfActivityDescriptor succeedSecretaryActDesp = CreateSecretaryActivityDescriptor(msOperationActDesp, operation.Secretaries);

            SetActivityPropertiesBooleanValue(succeedSecretaryActDesp, false, WfSecretaryDecorator._SucceedActForbidProperties);
            msOperationActDesp.Append(succeedSecretaryActDesp, true);

            AdjustTemplateActivityToTransitions(msOperationActDesp, succeedSecretaryActDesp, templateToTransitions);

            ((WfActivityBase)instanceResult.PrevActivity).MainStreamActivityKey    = prevSecretaryActDesp.Key;
            ((WfActivityBase)instanceResult.SucceedActivity).MainStreamActivityKey = succeedSecretaryActDesp.Key;
        }
コード例 #25
0
 public WfNormalActivity(IWfActivityDescriptor descriptor) : base(descriptor)
 {
 }
コード例 #26
0
 protected override WfActivityBase CreateActivityInstance(IWfActivityDescriptor actDesp)
 {
     throw new NotImplementedException();
 }
コード例 #27
0
 protected override WfActivityBase CreateActivityInstance(IWfActivityDescriptor actDesp)
 {
     throw new NotImplementedException();
 }
コード例 #28
0
        /// <summary>
        /// 添加同意和不同意的出线
        /// </summary>
        /// <param name="currentActDesp"></param>
        private static void AddAgreeAndDisagreeLine(IWfActivityDescriptor currentActDesp, IWfActivityDescriptor nextActDesp, IWfBranchProcessTemplateDescriptor template)
        {
            IWfActivityDescriptor completedActDesp = currentActDesp.Process.CompletedActivity;

            WfTransitionDescriptor agreeTransition = (WfTransitionDescriptor)currentActDesp.ToTransitions.AddForwardTransition(nextActDesp);

            agreeTransition.Name                       = template.Properties.GetValue("AgreeLineName", "同意");
            agreeTransition.DefaultSelect              = true;
            agreeTransition.AffectProcessReturnValue   = true;
            agreeTransition.AffectedProcessReturnValue = true;
            agreeTransition.Priority                   = 0;

            WfTransitionDescriptor disagreeTransition = (WfTransitionDescriptor)currentActDesp.ToTransitions.AddForwardTransition(completedActDesp);

            disagreeTransition.Name     = template.Properties.GetValue("DisagreeLineName", "不同意");
            disagreeTransition.Priority = 1;
            disagreeTransition.AffectProcessReturnValue   = true;
            disagreeTransition.AffectedProcessReturnValue = false;
        }
コード例 #29
0
        /// <summary>
        /// 验证模版上没有资源的动态活动的动态线和模版线之间的数量匹配和属性值
        /// </summary>
        /// <param name="dynamicTransitions"></param>
        /// <param name="templateActDesp"></param>
        private static void ValidateNoResourceTransitionsProperties(IEnumerable <IWfTransitionDescriptor> dynamicTransitions, IWfActivityDescriptor templateActDesp)
        {
            Assert.AreEqual(templateActDesp.FromTransitions.Count, dynamicTransitions.Count());

            foreach (IWfTransitionDescriptor transition in dynamicTransitions)
            {
                Assert.IsTrue(transition.Enabled, "动态线应该是Enabled");
                Assert.AreEqual(templateActDesp.Key, transition.Properties.GetValue("DynamicSource", string.Empty), "动态线的DynamicSource与模版的Key相同");
            }
        }
コード例 #30
0
        /// <summary>
        /// 检查模版的候选人和生成的动态角色候选人是否一样
        /// </summary>
        /// <param name="firstDynamicActDesp"></param>
        /// <param name="templateActDesp"></param>
        private static void ValidateTemplateCandidatesAndDynamicActivityCandidates(IWfActivityDescriptor firstDynamicActDesp, IWfActivityDescriptor templateActDesp)
        {
            IWfActivityDescriptor currentActDesp = firstDynamicActDesp;

            foreach (WfAssignee assignee in templateActDesp.Instance.Candidates)
            {
                Assert.IsTrue(currentActDesp.Instance.Candidates.Contains(assignee.User), "检查模版的候选人和生成的动态角色候选人是否一样");
                IWfTransitionDescriptor transition = currentActDesp.ToTransitions.GetAllCanTransitForwardTransitions().FirstOrDefault();

                Assert.IsNotNull(transition, "动态活动的数量必须和模版资源匹配");

                currentActDesp = transition.ToActivity;
            }
        }
コード例 #31
0
        /// <summary>
        /// 设置动态活动进出线的属性
        /// </summary>
        /// <param name="sourceTransition"></param>
        /// <param name="dynTransition"></param>
        /// <param name="templateActDesp"></param>
        /// <param name="isEntryTransition"></param>
        private static void SetDynamicTransitionProperties(IWfTransitionDescriptor sourceTransition, IWfTransitionDescriptor dynTransition, IWfActivityDescriptor templateActDesp, bool isEntryTransition)
        {
            if (sourceTransition != null)
            {
                ((WfTransitionDescriptor)sourceTransition).CloneProperties((WfTransitionDescriptor)dynTransition);
            }

            ((WfTransitionDescriptor)dynTransition).Enabled = true;

            if (isEntryTransition)
            {
                ((WfTransitionDescriptor)dynTransition).IsDynamicActivityTransition = true;
            }

            dynTransition.Properties.TrySetValue("DynamicSource", templateActDesp.Key);
        }
コード例 #32
0
		private string GetActivityEmptyOpinionText(IWfActivityDescriptor actDesp)
		{
			string opText = actDesp != null ? actDesp.Properties.GetValue("EmptyOpinionText", string.Empty) : string.Empty;

			if (string.IsNullOrEmpty(opText))
				opText = this.EmptyOpinionText;

			return opText;
		}
コード例 #33
0
        //活动矩阵定义的属性优先于活动模板定义的属性,矩阵中没有设置的属性,则使用活动模版的属性
        private static void MergeDynamicActivitiesProperties(WfCreateActivityParamCollection createActivityParams, IWfActivityDescriptor templateActDesp)
        {
            foreach (WfCreateActivityParam cap in createActivityParams)
            {
                PropertyValueCollection templateProperties = new PropertyValueCollection();

                foreach (PropertyValue pv in templateActDesp.Properties)
                {
                    if (cap.RoleDefineActivityPropertyNames.Exists(name => pv.Definition.Name == name))
                    {
                        if (cap.Template.Properties.ContainsKey(pv.Definition.Name))
                        {
                            templateProperties.Add(cap.Template.Properties[pv.Definition.Name]);
                        }
                    }
                    else
                    {
                        templateProperties.Add(pv);
                    }
                }

                cap.Template.Properties.ReplaceExistedPropertyValues(templateProperties);

                cap.Template.RelativeLinks.Clear();
                cap.Template.RelativeLinks.CopyFrom(templateActDesp.RelativeLinks);

                cap.Template.Variables.Clear();
                cap.Template.Variables.CopyFrom(templateActDesp.Variables);

                //cap.Template.EnterEventReceivers.Clear();
                cap.Template.EnterEventReceivers.CopyFrom(templateActDesp.EnterEventReceivers);

                //cap.Template.LeaveEventReceivers.Clear();
                cap.Template.LeaveEventReceivers.CopyFrom(templateActDesp.LeaveEventReceivers);

                cap.Template.EnterEventExecuteServices.Clear();
                cap.Template.EnterEventExecuteServices.CopyFrom(templateActDesp.EnterEventExecuteServices);

                cap.Template.LeaveEventExecuteServices.Clear();
                cap.Template.LeaveEventExecuteServices.CopyFrom(templateActDesp.LeaveEventExecuteServices);

                cap.Template.WithdrawExecuteServices.Clear();
                cap.Template.WithdrawExecuteServices.CopyFrom(templateActDesp.WithdrawExecuteServices);

                cap.Template.BeWithdrawnExecuteServices.Clear();
                cap.Template.BeWithdrawnExecuteServices.CopyFrom(templateActDesp.BeWithdrawnExecuteServices);
            }
        }
コード例 #34
0
		private void OnRenderOneActivity(IWfActivity currentActivity, IWfActivityDescriptor activityDesctiptor, RenderOneActivityEventArgs eventArgs)
		{
			if (RenderOneActivityEvent != null)
				RenderOneActivityEvent(this, eventArgs);
		}
コード例 #35
0
 protected override IWfActivityDescriptor PrepareActivityDescriptor(IWfActivityDescriptor targetActDesp)
 {
     return(targetActDesp);
 }
コード例 #36
0
		private bool CanActivityInputOpinion(IWfActivityDescriptor actDesp)
		{
			bool result = false;

			IWfActivity originalActivity = OriginalActivity;
			IWfActivity rootActivity = originalActivity.OpinionRootActivity;

			if (ReadOnly == false && originalActivity != null)
			{
				string levelName = rootActivity.Descriptor.AssociatedActivityKey != null ? rootActivity.Descriptor.AssociatedActivityKey : rootActivity.Descriptor.Key;

				result = WfClientContext.Current.InCirculateMode && string.IsNullOrEmpty(levelName) == false &&
							(levelName == actDesp.Key || levelName == actDesp.AssociatedActivityKey);

				if (!result)
				{
					result = originalActivity.Process.Status == WfProcessStatus.Running &&
							originalActivity.Status == WfActivityStatus.Running &&
							string.IsNullOrEmpty(levelName) == false &&
                            (levelName == actDesp.Key || levelName == actDesp.Instance.MainStreamActivityKey || levelName == actDesp.AssociatedActivityKey);

					if (result)
						result = WfClientContext.Current.InMoveToMode;
				}
			}

			return result;
		}
コード例 #37
0
        /// <summary>
        /// 设置线的FromActivity和ToActivity的相关属性,但是不影响fromActivity的ToTransitions以及toActivity的FromTransition的集合
        /// </summary>
        /// <param name="fromActivity"></param>
        /// <param name="toActivity"></param>
        internal protected virtual void JoinActivity(IWfActivityDescriptor fromActivity, IWfActivityDescriptor toActivity)
        {
            this._FromActivity = fromActivity;
            this._ToActivity   = toActivity;

            this._FromActivityKey = fromActivity.Key;
            this._ToActivityKey   = toActivity.Key;
        }
コード例 #38
0
 /// <summary>
 /// 创建活动
 /// </summary>
 /// <param name="actDesp"></param>
 /// <returns></returns>
 protected abstract WfActivityBase CreateActivityInstance(IWfActivityDescriptor actDesp);
コード例 #39
0
		private bool IsConsignActivity(IWfActivityDescriptor actDesp)
		{
			return actDesp.AssociatedActivityKey != null && actDesp.ClonedKey == null;
		}
コード例 #40
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="currentActivityDesp"></param>
        /// <returns></returns>
        private static IWfActivityDescriptor FindNotReturnSkippedActivity(IWfActivityDescriptor currentActivityDesp)
        {
            Dictionary<IWfTransitionDescriptor, IWfTransitionDescriptor> elapsedTransitions = new Dictionary<IWfTransitionDescriptor, IWfTransitionDescriptor>();

            return InnerFindNotReturnSkippedActivity(currentActivityDesp, elapsedTransitions);
        }
コード例 #41
0
		/// <summary>
		/// 是否可以编辑环节的,根据AllowModifyActivities变量的值
		/// </summary>
		/// <param name="actDesp"></param>
		/// <returns></returns>
		private bool CanEditActivityDescriptor(IWfActivityDescriptor actDesp)
		{
			bool result = false;

			if (CurrentActivity != null)
			{
				/*
				List<IWfActivityDescriptor> activities = actDesp.Process.FindActivitiesByKeys(
					CurrentActivity.Descriptor.Variables.GetValue("AllowModifyActivities", string.Empty).Split(',', ';'));

				result = activities.Exists(a => a.Key == actDesp.Key);
				 */
			}

			return result;
		}
コード例 #42
0
        /// <summary>
        /// targetActivity是否在currentActivity的后续的线上
        /// </summary>
        /// <param name="targetActivity"></param>
        /// <param name="currentActivity"></param>
        /// <returns></returns>
        private static bool IsSubsequentActivity(IWfActivityDescriptor targetActivity, IWfActivityDescriptor currentActivity)
        {
            Dictionary<IWfTransitionDescriptor, IWfTransitionDescriptor> elapsedTransitions = new Dictionary<IWfTransitionDescriptor, IWfTransitionDescriptor>();

            return InnerIsSubsequentActivity(targetActivity, currentActivity, elapsedTransitions);
        }
コード例 #43
0
		private string GetActivityEditorClientID(IWfActivityDescriptor activityDescriptor)
		{
			string result = string.Empty;

			if (this._activityEditor != null)
				result = WfVariableDefine.UseGroupSelector(activityDescriptor) ?
						this._groupActivityEditor.ClientID : this._activityEditor.ClientID;

			return result;
		}
コード例 #44
0
        private static void FillCopyContext(WfCopyMainStreamActivityNode currentActivity, IWfActivityDescriptor endActivity, WfCopyMainStreamContext context, WfControlOperationType operationType)
        {
            foreach (IWfTransitionDescriptor transition in currentActivity.TemplateActivityDescriptor.ToTransitions.GetNotDynamicActivityTransitions())
            {
                if (context.IsElapsedTransition(transition) == false)
                {
                    IWfActivityDescriptor nextActivityDesp = transition.ToActivity;

                    if (operationType == WfControlOperationType.Return)
                        nextActivityDesp = FindNotReturnSkippedActivity(transition.ToActivity);

                    bool nextIsEndActivity = nextActivityDesp.Key == endActivity.Key;

                    IWfActivityDescriptor originalActDesp = nextActivityDesp;

                    if (context.IsMainStream)
                    {
                        originalActDesp = context.EndActivityDescriptor.FindSubsequentActivity((t, actDesp) =>
                            t.IsBackward == false && actDesp.Instance.MainStreamActivityKey == nextActivityDesp.Key);
                    }

                    WfCopyMainStreamActivityNode toActivity = new WfCopyMainStreamActivityNode(
                            nextActivityDesp,
                            originalActDesp,
                            IsSubsequentActivity(nextActivityDesp, endActivity) == false,
                            nextIsEndActivity);

                    currentActivity.ToActivities.Add(new WfCopyMainStreamSubActivityNode(transition, toActivity));

                    context.AddElapsedTransition(transition);

                    if (currentActivity.TemplateActivityDescriptor.Key != endActivity.Key)
                        FillCopyContext(toActivity, endActivity, context, operationType);
                }
            }
        }
コード例 #45
0
		private string GetKeyFromActivity(IWfActivityDescriptor actDesp)
		{
			return actDesp.AssociatedActivityKey == null ? actDesp.Key : actDesp.AssociatedActivityKey;
		}
コード例 #46
0
 /// <summary>
 /// 根据当前活动定义找到默认的下一环节,生成流转参数
 /// </summary>
 /// <param name="currentActDesp"></param>
 /// <returns></returns>
 public static WfTransferParams FromNextDefaultActivity(IWfActivityDescriptor currentActDesp)
 {
     return(FromNextActivity(currentActDesp, (toTransitions) => toTransitions.FindDefaultSelectTransition()));
 }
コード例 #47
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="opinionCell">表格单元格</param>
		/// <param name="msActDesp"></param>
		/// <param name="inputActDesp">需要输入的活动描述</param>
		/// <param name="nextStepSelectorActDesp"></param>
		private void RenderLevelOpinionsPlaceHolders(HtmlTableCell opinionCell, IWfActivityDescriptor msActDesp, IWfActivityDescriptor inputActDesp, IWfActivityDescriptor nextStepSelectorActDesp)
		{
			HtmlGenericControl opinionContainer = new HtmlGenericControl("div");
			opinionCell.Controls.Add(opinionContainer);

			this._opinionPlaceHolders.Add(msActDesp, opinionContainer);

			PageRenderMode pageMode = WebUtility.GetRequestPageRenderMode();

			bool flag = inputActDesp != null || (pageMode.UseNewPage == true && pageMode.RenderControlUniqueID.IndexOf("PredefinedOpinionDialog") >= 0);
			//如果当前环节可编辑,则输出意见输入控件
			if (flag)
			{
				GenericOpinion currentOpinion = GetCurrentActivityOpinion();

				OnOpinionBind(new OpinionListViewBindEventArgs(currentOpinion, inputActDesp, opinionCell, false));

				HtmlGenericControl inputContainer = new HtmlGenericControl("div");

				inputContainer.ID = "OpinionInputContainer";
				opinionCell.Controls.Add(inputContainer);

				inputContainer.Attributes["class"] = "opinionInputCell";
				inputContainer.Controls.Add(_OpinionInput);

				this._OpinionInput.OpinionContainer.Controls.Add(this.CreateNextStepSelectorControl(nextStepSelectorActDesp, flag));

				_OpinionInput.Opinion = currentOpinion;

				if (_OpinionInput.Opinion.Content.IsNullOrEmpty())
					_OpinionInput.Opinion.Content = GetActivityEmptyOpinionText(inputActDesp);

				_ActivateDescriptor = inputActDesp;
				_ActivateContainer = opinionCell;
			}
		}
コード例 #48
0
 internal protected virtual void JoinActivity(IWfActivityDescriptor fromActivity, IWfActivityDescriptor toActivity)
 {
     _FromActivity = fromActivity;
     _ToActivity   = toActivity;
 }
コード例 #49
0
        private static IWfActivityDescriptor InnerFindNotReturnSkippedActivity(IWfActivityDescriptor currentActivityDesp, Dictionary<IWfTransitionDescriptor, IWfTransitionDescriptor> elapsedTransitions)
        {
            IWfActivityDescriptor result = null;

            if (currentActivityDesp.IsReturnSkipped == false)
                result = currentActivityDesp;
            else
            {
                foreach (IWfTransitionDescriptor transition in currentActivityDesp.ToTransitions)
                {
                    if (elapsedTransitions.ContainsKey(transition) == false)
                    {
                        elapsedTransitions.Add(transition, transition);

                        result = InnerFindNotReturnSkippedActivity(transition.ToActivity, elapsedTransitions);

                        if (result != null)
                            break;
                    }
                }
            }

            return result;
        }
コード例 #50
0
 internal ToTransitionsDescriptorCollection(IWfActivityDescriptor fromActivity)
 {
     _FromActivity = fromActivity;
 }
コード例 #51
0
        private static bool InnerIsSubsequentActivity(IWfActivityDescriptor targetActivity, IWfActivityDescriptor currentActivity, Dictionary<IWfTransitionDescriptor, IWfTransitionDescriptor> elapsedTransitions)
        {
            bool result = false;

            if (targetActivity.Key != currentActivity.Key)
            {
                foreach (IWfTransitionDescriptor transition in currentActivity.ToTransitions)
                {
                    if (elapsedTransitions.ContainsKey(transition) == false)
                    {
                        elapsedTransitions.Add(transition, transition);

                        if (transition.IsBackward == false)
                        {
                            if (transition.ToActivity.GetAssociatedActivity().Key == targetActivity.Key)
                                result = true;

                            if (result == false)
                                result = InnerIsSubsequentActivity(targetActivity, transition.ToActivity, elapsedTransitions);

                            if (result)
                                break;
                        }
                    }
                }
            }

            return result;
        }
コード例 #52
0
 internal FromTransitionsDescriptorCollection(IWfActivityDescriptor toActivity)
 {
     _ToActivity = toActivity;
 }
コード例 #53
0
        /// <summary>
        /// 根据FromActivity(线的发出点)得到线
        /// </summary>
        /// <param name="actDesp">FromActivity</param>
        /// <returns>GetTransitionByFromActivity</returns>
        /// <remarks>根据FromActivity(线的发出点)得到线</remarks>
        /// <scholiast>徐照雨</scholiast>
        public IWfTransitionDescriptor GetTransitionByFromActivity(IWfActivityDescriptor actDesp)
        {
            ExceptionHelper.FalseThrow <ArgumentNullException>(actDesp != null, "actDesp");

            return(GetTransitionByFromActivity(actDesp.Key));
        }
コード例 #54
0
        /// <summary>
        /// 创建线,并且连接两个活动。线的起点活动由fromActDesp指定,而终点活动由toActDesp指定
        /// </summary>
        /// <param name="fromActDesp">线的起点活动</param>
        /// <param name="toActDesp">线的终点活动</param>
        /// <returns></returns>
        public IWfTransitionDescriptor CreateTransitionAndConnectActivities(IWfActivityDescriptor fromActDesp, IWfActivityDescriptor toActDesp)
        {
            fromActDesp.NullCheck("fromActDesp");
            toActDesp.NullCheck("toActDesp");

            IWfProcessDescriptor processDesp = fromActDesp.Process;

            IWfTransitionDescriptor transition = CreateTransition(processDesp);

            transition.ConnectActivities(fromActDesp, toActDesp);

            return(transition);
        }
コード例 #55
0
 protected override WfActivityBase CreateActivityInstance(IWfActivityDescriptor actDesp)
 {
     return new WfCompletedActivity(actDesp);
 }
コード例 #56
0
        /// <summary>
        ///  删除已经生成的动态活动
        /// </summary>
        /// <param name="dynInTransition"></param>
        /// <param name="templateActivity"></param>
        internal static void DeleteExistedDynamicActivities(IWfTransitionDescriptor dynInTransition, IWfActivityDescriptor templateActivity)
        {
            IWfActivityDescriptor currentActDesp = dynInTransition.ToActivity;

            WfActivityDescriptorCollection endActivities = templateActivity.GetToActivities();

            //沈峥修改,2015-1-25,原来删除已经存在的动态活动时没有考虑多条出线的情况,现在改为递归删除
            RemoveExistedDynamicActivityRecursively(currentActDesp, endActivities);
            ////判断当前活动不在结束的活动中
            //while (currentActDesp != null && ((WfActivityDescriptor)currentActDesp).GeneratedByTemplate && endActivities.ContainsKey(currentActDesp.Key) == false)
            //{
            //    IWfActivityDescriptor nextActDesp = currentActDesp.GetToActivities().FirstOrDefault();

            //    if (currentActDesp.IsMainStreamActivity == false && currentActDesp.Instance != null)
            //        currentActDesp.Instance.Remove();
            //    else
            //        currentActDesp.Remove();

            //    currentActDesp = nextActDesp;
            //}

            foreach (IWfActivityDescriptor actDesp in templateActivity.GetFromActivities())
            {
                IList <IWfTransitionDescriptor> transitions = actDesp.ToTransitions.FindAll(t => t.Properties.GetValue("DynamicSource", string.Empty) == templateActivity.Key);

                transitions.ForEach(t => actDesp.ToTransitions.Remove(t));
            }
        }
コード例 #57
0
		public WfInitialActivity(IWfActivityDescriptor descriptor)
			: base(descriptor)
		{
		}
コード例 #58
0
        /// <summary>
        /// 从动态节点的起始点验证动态节点相关属性的正确性
        /// </summary>
        /// <param name="startActDesp"></param>
        /// <param name="templateActDesp">动态活动模版</param>
        private static IWfActivityDescriptor ValidateDynamicActivities(IWfActivityDescriptor startActDesp, IWfActivityDescriptor templateActDesp)
        {
            IWfActivityDescriptor firstDynamicActDesp = null;

            Assert.IsTrue(startActDesp.ToTransitions.Count > 1, "起始点不止一条出线");

            IWfTransitionDescriptor dynTransition = startActDesp.ToTransitions.Find(t => t.Properties.GetValue("DynamicSource", string.Empty) == templateActDesp.Key);

            Assert.IsNotNull(dynTransition, "起始点有一条出线为生成的指向动态路径的线");

            foreach (IWfTransitionDescriptor transition in templateActDesp.FromTransitions)
            {
                Assert.IsFalse(transition.Enabled, "模版活动的进线都是Disabled");
                //Assert.IsTrue(transition.IsDynamicActivityTransition, "模版活动的进线的IsDynamicActivityTransition都是True");
            }

            foreach (IWfTransitionDescriptor transition in templateActDesp.ToTransitions)
            {
                Assert.IsFalse(transition.Enabled, "模版活动的出线都是Disabled");
                //Assert.IsTrue(transition.IsDynamicActivityTransition, "模版活动的出线的IsDynamicActivityTransition都是True");
            }

            firstDynamicActDesp = dynTransition.ToActivity;

            return(firstDynamicActDesp);
        }