Ejemplo n.º 1
0
        public IList <WfActivityDefinition> FindAllDefaultActivityDefinitions(WfWorkflowDefinition wfWorkflowDefinition, int startingPos = 0)
        {
            Debug.Assert(wfWorkflowDefinition != null);
            //---
            int?idStartActivity = wfWorkflowDefinition.WfadId;
            IList <WfActivityDefinition> retAllDefaultActivities = new List <WfActivityDefinition>();

            if (idStartActivity != null)
            {
                WfActivityDefinition first = inMemoryActivityDefinitionStore[idStartActivity];
                retAllDefaultActivities.Add(first);

                WfTransitionDefinition transitionNext;
                transitionsNext.TryGetValue(idStartActivity + "|" + WfCodeTransition.Default.ToString(), out transitionNext);

                while (transitionNext != null)
                {
                    WfActivityDefinition wfNextActivityDefinition = inMemoryActivityDefinitionStore[transitionNext.WfadIdTo];
                    retAllDefaultActivities.Add(wfNextActivityDefinition);
                    transitionsNext.TryGetValue(wfNextActivityDefinition.WfadId + "|" + WfCodeTransition.Default.ToString(), out transitionNext);
                }
            }

            return(retAllDefaultActivities);
        }
Ejemplo n.º 2
0
        public void CreateActivityDefinition(WfWorkflowDefinition wfWorkflowDefinition, WfActivityDefinition wfActivityDefinition)
        {
            int generatedId = Interlocked.Increment(ref memoryActivityDefinitionSequenceGenerator);

            wfActivityDefinition.WfadId = generatedId;
            inMemoryActivityDefinitionStore[generatedId] = wfActivityDefinition;
        }
        public WfActivityDefinition FindActivityDefinitionByPosition(WfWorkflowDefinition wfWorkflowDefinition, int position)
        {
            int?idActivity = wfWorkflowDefinition.WfadId;

            if (idActivity == null)
            {
                //The workflow don't have a starting activity
                return(null);
            }
            WfTransitionDefinition transitionNext = transitionsNext[idActivity + "|" + WfCodeTransition.Default.ToString()];

            int i = 1;

            while (transitionNext != null && i < position)
            {
                WfActivityDefinition wfNextActivityDefinition = inMemoryActivityDefinitionStore[transitionNext.WfadIdTo];
                idActivity     = wfNextActivityDefinition.WfadId;
                transitionNext = transitionsNext[wfNextActivityDefinition.WfadId + "|" + WfCodeTransition.Default.ToString()];
                i++;
            }

            if (transitionNext == null)
            {
                return(null);
            }

            return(ReadActivityDefinition(transitionNext.WfadIdTo));
        }
Ejemplo n.º 4
0
 public void RenameActivityDefinition(WfActivityDefinition wfActivityDefinition)
 {
     Debug.Assert(wfActivityDefinition != null);
     Debug.Assert(wfActivityDefinition.WfadId != null);
     //---
     inMemoryActivityDefinitionStore[wfActivityDefinition.WfadId].Name = wfActivityDefinition.Name;
 }
Ejemplo n.º 5
0
        public int CountDefaultTransitions(WfWorkflowDefinition wfWorkflowDefinition)
        {
            Debug.Assert(wfWorkflowDefinition != null);
            //--
            int?idActivityDefinition = wfWorkflowDefinition.WfadId;

            if (idActivityDefinition == null)
            {
                //The workflow don't have a starting activity
                return(0);
            }
            WfTransitionDefinition transitionNext;

            transitionsNext.TryGetValue(idActivityDefinition + "|" + WfCodeTransition.Default.ToString(), out transitionNext);

            int count = 0;

            while (transitionNext != null)
            {
                WfActivityDefinition wfNextActivityDefinition = inMemoryActivityDefinitionStore[transitionNext.WfadIdTo];
                idActivityDefinition = wfNextActivityDefinition.WfadId;
                transitionsNext.TryGetValue(idActivityDefinition + "|" + WfCodeTransition.Default.ToString(), out transitionNext);
                count++;
            }

            return(count);
        }
Ejemplo n.º 6
0
        public void UnsetCurrentActivity(WfActivityDefinition wfActivityDefinition)
        {
            var cmd = GetSqlServerCommand("UnsetCurrentActivity.sql");

            cmd.Parameters.AddWithValue(WfActivityDefinition.Cols.WFAD_ID, wfActivityDefinition.WfadId.Value);
            cmd.ExecuteNonQuery();
        }
Ejemplo n.º 7
0
        public void MoveActivity(WfWorkflowDefinition wfWorkflowDefinition, int src, int dst, bool after)
        {
            WfActivityDefinition wfActivityDefinitionFrom = _workflowStorePlugin.FindActivityDefinitionByPosition(wfWorkflowDefinition, src);
            WfActivityDefinition wfActivityDefinitionTo   = _workflowStorePlugin.FindActivityDefinitionByPosition(wfWorkflowDefinition, dst);

            MoveActivity(wfWorkflowDefinition, wfActivityDefinitionFrom, wfActivityDefinitionTo, after);
        }
Ejemplo n.º 8
0
        public void AutoValidateNextActivities(WfWorkflow wfWorkflow, int wfActivityDefinitionId)
        {
            WfActivityDefinition activityDefinition = _workflowStorePlugin.ReadActivityDefinition(wfActivityDefinitionId);

            object obj = _itemStorePlugin.ReadItem((int)wfWorkflow.ItemId);
            int?   wfCurrentActivityDefinitionId = null;

            while (CanAutoValidateActivity(activityDefinition, obj))
            {
                WfActivity wfActivityCurrent = AutoValidateActivity(activityDefinition);
                wfCurrentActivityDefinitionId = wfActivityCurrent.WfadId;
                if (_workflowStorePlugin.HasNextActivity(wfActivityCurrent) == false)
                {
                    break;
                }
                activityDefinition = _workflowStorePlugin.FindNextActivity(wfActivityCurrent);
            }

            // Remove this workflow update ?
            if (wfCurrentActivityDefinitionId != null)
            {
                wfWorkflow.WfaId2 = wfCurrentActivityDefinitionId;
                _workflowStorePlugin.UpdateWorkflowInstance(wfWorkflow);
            }
        }
Ejemplo n.º 9
0
        public WfActivity FindActivityByDefinitionWorkflow(WfWorkflow wfWorkflow, WfActivityDefinition wfActivityDefinition)
        {
            FilterCriteria filterCriteria = new FilterCriteria();

            filterCriteria.Equals(WfActivity.Cols.WFW_ID, wfWorkflow.WfwId.Value);
            filterCriteria.Equals(WfActivity.Cols.WFAD_ID, wfActivityDefinition.WfadId.Value);
            return(BrokerManager.GetBroker <WfActivity>().FindByCriteria(filterCriteria));
        }
Ejemplo n.º 10
0
        public void RenameActivityDefinition(WfActivityDefinition wfActivityDefinition)
        {
            var cmd = GetSqlServerCommand("RenameActivityDefinition.sql");

            cmd.Parameters.AddWithValue(WfActivityDefinition.Cols.WFAD_ID, wfActivityDefinition.WfadId);
            cmd.Parameters.AddWithValue(WfActivityDefinition.Cols.NAME, wfActivityDefinition.Name);
            cmd.ExecuteNonQuery();
        }
Ejemplo n.º 11
0
 public void UpdateActivityDefinition(WfActivityDefinition wfActivityDefinition)
 {
     Debug.Assert(wfActivityDefinition != null);
     Debug.Assert(wfActivityDefinition.WfadId != null);
     Debug.Assert(inMemoryActivityDefinitionStore.ContainsKey(wfActivityDefinition.WfadId), "This activity cannot be updated : It does not exist in the store");
     //---
     inMemoryActivityDefinitionStore[wfActivityDefinition.WfadId] = wfActivityDefinition;
 }
Ejemplo n.º 12
0
        public WfActivityDefinition FindActivityDefinitionByPosition(WfWorkflowDefinition wfWorkflowDefinition, int position)
        {
            var cmd = GetSqlServerCommand("FindActivityDefinitionByPosition.sql");

            cmd.Parameters.AddWithValue(WfActivityDefinition.Cols.WFWD_ID, wfWorkflowDefinition.WfwdId);
            cmd.Parameters.AddWithValue(WfActivityDefinition.Cols.LEVEL, position);
            WfActivityDefinition activity = cmd.ReadScalar <WfActivityDefinition>();

            return(activity);
        }
Ejemplo n.º 13
0
 public void UnsetCurrentActivity(WfActivityDefinition wfActivityDefinition)
 {
     foreach (WfWorkflow wf in inMemoryWorkflowInstanceStore.Values)
     {
         WfActivity currentActivity = ReadActivity(wf.WfaId2.Value);
         if (wf.WfaId2.Equals(currentActivity.WfaId) && wfActivityDefinition.WfadId.Equals(currentActivity.WfadId))
         {
             wf.WfaId2 = null;
         }
     }
 }
        private WfActivity GetNewActivity(WfActivityDefinition activityDefinition, WfWorkflow wfWorkflow, bool isAuto, bool isValid)
        {
            WfActivity wfActivity = new WfActivity();

            wfActivity.CreationDate = DateTime.Now;
            wfActivity.WfadId       = activityDefinition.WfadId.Value;
            wfActivity.WfwId        = wfWorkflow.WfwId.Value;
            wfActivity.IsAuto       = isAuto;
            wfActivity.IsValid      = isValid;
            return(wfActivity);
        }
Ejemplo n.º 15
0
        public WfActivityDefinition FindActivityDefinitionByPosition(WfWorkflowDefinition wfWorkflowDefinition, int position)
        {
            var cmd = GetSqlServerCommand("FindActivityDefinitionByPosition.sql");

            cmd.Parameters.AddWithValue(WfActivityDefinition.Cols.WFWD_ID, wfWorkflowDefinition.WfwdId);
            cmd.Parameters.AddWithValue(WfActivityDefinition.Cols.LEVEL, position);

            WfActivityDefinition activity = CollectionBuilder <WfActivityDefinition> .ParseCommandForSingleObject(cmd, true);

            return(activity);
        }
Ejemplo n.º 16
0
        public WfActivityDefinition Build()
        {
            WfActivityDefinition wfActivityDefinition = new WfActivityDefinition();

            wfActivityDefinition.Name  = myName;
            wfActivityDefinition.Level = myLevel;
            // Multiplicity : Single by default
            wfActivityDefinition.WfmdCode = myWfCodeMultiplicityDefinition.ToString();
            wfActivityDefinition.WfwdId   = myWfwdId;
            return(wfActivityDefinition);
        }
Ejemplo n.º 17
0
        public bool CanAutoValidateActivity(WfActivityDefinition activityDefinition, object obj)
        {
            RuleConstants ruleConstants = _ruleManager.GetConstants(activityDefinition.WfwdId);

            bool ruleValid = _ruleManager.IsRuleValid((int)activityDefinition.WfadId, obj, ruleConstants);
            IList <AccountUser> accounts = _ruleManager.SelectAccounts((int)activityDefinition.WfadId, obj, ruleConstants);

            bool atLeastOnePerson = accounts.Count > 0;

            // If no rule is defined for validation or no one can validate this activity, we can autovalidate it.
            return(ruleValid == false || atLeastOnePerson == false);
        }
Ejemplo n.º 18
0
        public WfActivity FindActivityByDefinitionWorkflow(WfWorkflow wfWorkflow, WfActivityDefinition wfActivityDefinition)
        {
            foreach (WfActivity wfActivity in inMemoryActivityStore.Values)
            {
                if (wfActivityDefinition.WfadId.Equals(wfActivity.WfadId))
                {
                    return(wfActivity);
                }
            }

            return(null);
        }
Ejemplo n.º 19
0
        public void AddSelector(WfActivityDefinition wfActivity, SelectorDefinition selector, List <RuleFilterDefinition> filters)
        {
            Debug.Assert(wfActivity != null);
            Debug.Assert(selector != null);
            Debug.Assert(filters != null);
            // --
            selector.ItemId = wfActivity.WfadId;
            _ruleManager.AddSelector(selector);

            foreach (RuleFilterDefinition ruleFilterDefinition in filters)
            {
                ruleFilterDefinition.SelId = selector.Id;
                _ruleManager.AddFilter(ruleFilterDefinition);
            }
        }
Ejemplo n.º 20
0
        public void AddRule(WfActivityDefinition wfActivity, RuleDefinition ruleDefinition, List <RuleConditionDefinition> conditions)
        {
            Debug.Assert(wfActivity != null);
            Debug.Assert(ruleDefinition != null);
            Debug.Assert(conditions != null);
            // --
            ruleDefinition.ItemId = wfActivity.WfadId;
            _ruleManager.AddRule(ruleDefinition);

            foreach (RuleConditionDefinition ruleConditionDefinition in conditions)
            {
                ruleConditionDefinition.RudId = ruleDefinition.Id;
                _ruleManager.AddCondition(ruleConditionDefinition);
            }
        }
Ejemplo n.º 21
0
        public bool CanAutoValidateActivity(WfActivityDefinition activityDefinition, RuleContext ruleContext, IDictionary <int, List <RuleDefinition> > dicRules, IDictionary <int, List <RuleConditionDefinition> > dicConditions, IDictionary <int, List <SelectorDefinition> > dicSelectors, IDictionary <int, List <RuleFilterDefinition> > dicFilters)
        {
            bool ruleValid = _ruleManager.IsRuleValid(activityDefinition.WfadId.Value, ruleContext, dicRules, dicConditions);

            if (ruleValid == false)
            {
                return(true);
            }

            IList <AccountUser> accounts = _ruleManager.SelectAccounts(activityDefinition.WfadId.Value, ruleContext, dicSelectors, dicFilters);

            bool atLeastOnePerson = accounts.Count > 0;

            // If no rule is defined for validation or no one can validate this activity, we can autovalidate it.
            return(atLeastOnePerson == false);
        }
        public IList <WfActivityDefinition> FindAllDefaultActivityDefinitions(WfWorkflowDefinition wfWorkflowDefinition)
        {
            Debug.Assert(wfWorkflowDefinition != null);
            //---
            long?idStartActivity = wfWorkflowDefinition.WfadId;
            IList <WfActivityDefinition> retAllDefaultActivities = new List <WfActivityDefinition>();

            WfTransitionDefinition transitionNext = transitionsNext[idStartActivity + "|" + WfCodeTransition.Default.ToString()];

            while (transitionNext != null)
            {
                WfActivityDefinition wfNextActivityDefinition = inMemoryActivityDefinitionStore[transitionNext.WfadIdTo];
                retAllDefaultActivities.Add(wfNextActivityDefinition);
                transitionNext = transitionsNext[wfNextActivityDefinition.WfadId + "|" + WfCodeTransition.Default.ToString()];
            }

            return(retAllDefaultActivities);
        }
Ejemplo n.º 23
0
        private WfActivity AutoValidateActivity(WfActivityDefinition wfNextActivityDefinition)
        {
            //Automatic validation of this activity
            DateTime now = new DateTime();

            WfActivity wfActivityCurrent = new WfActivity();

            wfActivityCurrent.CreationDate = now;
            wfActivityCurrent.WfadId       = (int)wfNextActivityDefinition.WfadId;

            _workflowStorePlugin.CreateActivity(wfActivityCurrent);

            WfDecision decision = new WfDecision();

            decision.User         = USER_AUTO;
            decision.DecisionDate = now;

            return(wfActivityCurrent);
        }
Ejemplo n.º 24
0
        public void AddActivity(WfWorkflowDefinition wfWorkflowDefinition, WfActivityDefinition wfActivityDefinitionToAdd, int position)
        {
            WfActivityDefinition wfActivityDefinition = _workflowStorePlugin.FindActivityDefinitionByPosition(wfWorkflowDefinition, position);

            if (wfActivityDefinition == null)
            {
                // Inserting a activity in trail
                int size = _workflowStorePlugin.CountDefaultTransitions(wfWorkflowDefinition);
                Debug.Assert(size == Math.Max(0, position - 2), "Position is not valid");

                wfActivityDefinitionToAdd.Level = position;

                _workflowStorePlugin.CreateActivityDefinition(wfWorkflowDefinition, wfActivityDefinitionToAdd);

                //Find the previous activity to add a link to the newly created
                if (position == 2)
                {
                    WfTransitionDefinition wfTransitionDefinition = new WfTransitionBuilder(wfWorkflowDefinition.WfadId, wfActivityDefinitionToAdd.WfadId).build();
                    _workflowStorePlugin.AddTransition(wfTransitionDefinition);
                }
                else if (position > 2)
                {
                    WfActivityDefinition   wfActivityDefinitionPrevious = _workflowStorePlugin.FindActivityDefinitionByPosition(wfWorkflowDefinition, position - 2);
                    WfTransitionDefinition wfTransitionDefinition       = new WfTransitionBuilder(wfActivityDefinitionPrevious.WfadId, wfActivityDefinitionToAdd.WfadId).build();
                    _workflowStorePlugin.AddTransition(wfTransitionDefinition);
                }
                else
                {
                    //Saving starting activity
                    wfWorkflowDefinition.WfadId = wfActivityDefinitionToAdd.WfadId;
                    _workflowStorePlugin.UpdateWorkflowDefinition(wfWorkflowDefinition);
                }
            }
            else
            {
                // Inserting an activity inside the default activities "linked list"
                _workflowStorePlugin.CreateActivityDefinition(wfWorkflowDefinition, wfActivityDefinitionToAdd);
                // Automatically move the next activity after the newly created
                MoveActivity(wfWorkflowDefinition, wfActivityDefinitionToAdd, wfActivityDefinition, false);
            }
        }
Ejemplo n.º 25
0
 public void RemoveActivity(WfActivityDefinition wfActivityDefinition)
 {
     _workflowStorePlugin.DeleteActivityDefinition(wfActivityDefinition);
 }
Ejemplo n.º 26
0
 public void DeleteActivityDefinition(WfActivityDefinition wfActivityDefinition)
 {
     BrokerManager.GetBroker <WfActivityDefinition>().Delete(wfActivityDefinition);
 }
Ejemplo n.º 27
0
        public void CreateActivityDefinition(WfWorkflowDefinition wfWorkflowDefinition, WfActivityDefinition wfActivityDefinition)
        {
            wfActivityDefinition.WfwdId = (int)wfWorkflowDefinition.WfwdId;
            int id = (int)BrokerManager.GetBroker <WfActivityDefinition>().Save(wfActivityDefinition);

            wfActivityDefinition.WfadId = id;
        }
Ejemplo n.º 28
0
 public void UpdateActivityDefinition(WfActivityDefinition wfActivityDefinition)
 {
     BrokerManager.GetBroker <WfActivityDefinition>().Save(wfActivityDefinition);
 }
Ejemplo n.º 29
0
        public void SaveDecisionAndGoToNextActivity(WfWorkflow wfWorkflow, string transitionName, WfDecision wfDecision)
        {
            Debug.Assert(WfCodeStatusWorkflow.Sta.ToString().Equals(wfWorkflow.WfsCode), "A workflow must be started before saving decision");
            //---
            WfActivity currentActivity = _workflowStorePlugin.ReadActivity((int)wfWorkflow.WfaId2);

            // Updating the decision
            SaveDecision(wfWorkflow, wfDecision);

            WfActivityDefinition currentActivityDefinition = _workflowStorePlugin.ReadActivityDefinition(currentActivity.WfadId);

            WfCodeMultiplicityDefinition wfCodeMultiplicityDefinition = (WfCodeMultiplicityDefinition)Enum.Parse(typeof(WfCodeMultiplicityDefinition), currentActivityDefinition.WfmdCode);

            bool canGoToNextActivity = false;

            if (wfCodeMultiplicityDefinition == WfCodeMultiplicityDefinition.Mul)
            {
                IList <WfDecision>  wfDecisions   = _workflowStorePlugin.FindAllDecisionByActivity(currentActivity);
                object              obj           = _itemStorePlugin.ReadItem((int)wfWorkflow.ItemId);
                RuleConstants       ruleConstants = _ruleManager.GetConstants((int)wfWorkflow.WfwdId);
                IList <AccountUser> accounts      = _ruleManager.SelectAccounts(currentActivity.WfadId, obj, ruleConstants);

                //TODO : better impl than O(n²)
                int match = 0;
                foreach (AccountUser account in accounts)
                {
                    foreach (WfDecision decision in wfDecisions)
                    {
                        if (account.Id.Equals(decision.User))
                        {
                            match++;
                            break;
                        }
                    }
                }

                if (match == accounts.Count)
                {
                    canGoToNextActivity = true;
                }
            }
            else
            {
                canGoToNextActivity = true;
            }

            if (canGoToNextActivity)
            {
                if (_workflowStorePlugin.HasNextActivity(currentActivity, transitionName))
                {
                    WfActivityDefinition nextActivityDefinition = _workflowStorePlugin.FindNextActivity(currentActivity, transitionName);

                    //Autovalidating next activities
                    AutoValidateNextActivities(wfWorkflow, (int)nextActivityDefinition.WfadId);

                    WfActivity           lastAutoValidateActivity      = _workflowStorePlugin.ReadActivity((int)wfWorkflow.WfaId2);
                    WfActivityDefinition nextActivityDefinitionPrepare = _workflowStorePlugin.FindNextActivity(lastAutoValidateActivity);

                    DateTime now = new DateTime();
                    // Creating the next activity to validate.
                    WfActivity nextActivity = new WfActivity();
                    nextActivity.CreationDate = now;
                    nextActivity.WfadId       = (int)nextActivityDefinitionPrepare.WfadId;
                    nextActivity.WfwId        = (int)wfWorkflow.WfwId;
                    _workflowStorePlugin.CreateActivity(nextActivity);

                    wfWorkflow.WfaId2 = nextActivity.WfaId;
                    _workflowStorePlugin.UpdateWorkflowInstance(wfWorkflow);
                }
                else
                {
                    // No next activity to go. Ending the workflow
                    wfWorkflow.WfsCode = WfCodeStatusWorkflow.End.ToString();
                    _workflowStorePlugin.UpdateWorkflowInstance(wfWorkflow);
                }
            }
        }
Ejemplo n.º 30
0
 public void DeleteActivityDefinition(WfActivityDefinition wfActivityDefinition)
 {
     inMemoryActivityDefinitionStore.Remove(wfActivityDefinition.WfadId);
 }