Esempio n. 1
0
        public void CreateDecision(WfDecision wfDecision)
        {
            int generatedId = Interlocked.Increment(ref memoryDecisionSequenceGenerator);

            wfDecision.Id = generatedId;
            inMemoryDecisionStore[generatedId] = wfDecision;
        }
Esempio n. 2
0
 public void AddActivityDecision(WfActivity wfAct, WfDecision wfDecision)
 {
     ActivitiesDecisions.Add(new WfActivityDecision()
     {
         Activity = wfAct, Decision = wfDecision
     });
 }
Esempio n. 3
0
 public void UpdateDecision(WfDecision wfDecision)
 {
     Debug.Assert(wfDecision != null);
     Debug.Assert(wfDecision.Id != null);
     Debug.Assert(inMemoryDecisionStore.ContainsKey(wfDecision.Id), "This workflow cannot be updated : It does not exist in the store");
     //---
     inMemoryDecisionStore[wfDecision.Id] = wfDecision;
 }
Esempio n. 4
0
        public void SaveDecision(WfWorkflow wfWorkflow, 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);

            // Attach decision to the activity
            wfDecision.WfaId = (int)currentActivity.WfaId;
            _workflowStorePlugin.CreateDecision(wfDecision);
        }
Esempio n. 5
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);
        }
Esempio n. 6
0
        public void CreateDecision(WfDecision wfDecision)
        {
            int id = (int)BrokerManager.GetBroker <WfDecision>().Save(wfDecision);

            wfDecision.Id = id;
        }
Esempio n. 7
0
 public void DeleteDecision(WfDecision wfDecision)
 {
     inMemoryDecisionStore.Remove(wfDecision.Id);
 }
Esempio n. 8
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);
                }
            }
        }
Esempio n. 9
0
 public void SaveDecisionAndGoToNextActivity(WfWorkflow wfWorkflow, WfDecision wfDecision)
 {
     SaveDecisionAndGoToNextActivity(wfWorkflow, WfCodeTransition.Default.ToString(), wfDecision);
 }
Esempio n. 10
0
 public void DeleteDecision(WfDecision wfDecision)
 {
     BrokerManager.GetBroker <WfDecision>().Delete(wfDecision.Id.Value);
 }
Esempio n. 11
0
 public void UpdateDecision(WfDecision wfDecision)
 {
     BrokerManager.GetBroker <WfDecision>().Save(wfDecision);
 }