Exemplo n.º 1
0
 public void Activate()
 {
     if (_envContext == null) throw new Exception("Environment not set");
     if (_instanceId == null) throw new Exception("Instance Id not set");
     if (_definitionId == null) throw new Exception("Definition not set");
     log = LogManager.GetCurrentClassLogger();
     _definition = _envContext.DefinitionRepository.GetProcessDefinition(_definitionId);
 }
 public override void Visit(ProcessDefinition def)
 {
     foreach (Variable var in def.Variables) {
         if (!((Set)def.Process.Tag).Contains(var) && var.Name != Variable.NotUsedName) {
             _warnings.Add(new Warning(var.LexicalInfo, "The initial value of " + var.Name + " which is passed to " + def.Name + " is never read in the process"));
             var.IsUsed = false;
         }
     }
 }
Exemplo n.º 3
0
        public void GetFieldReturnsRootTableField()
        {
            // Arrange.
            var rootTable = new TableDefinition("TestTable");
            var field = rootTable.AddField("TestField", ColumnTypes.String);
            var processDefinition = new ProcessDefinition();
            processDefinition.TableList.Add(rootTable);

            // Act.
            Assert.AreSame(field, processDefinition.GetField("TestField"));
        }
Exemplo n.º 4
0
        public void GetFieldReturnsIdField()
        {
            // Arrange.
            var processDefinition = new ProcessDefinition();
            var rootTable = new TableDefinition("TestTable");
            processDefinition.TableList.Add(rootTable);

            // Act.
            var field = processDefinition.GetField(Constants.IdColumnName);

            // Assert.
            Assert.IsNotNull(field);
            Assert.AreEqual(Constants.IdColumnName, field.SystemName);
            Assert.AreEqual(ColumnTypes.Integer, field.ColumnType);
            Assert.AreSame("TestTable", field.GetTableName());
        }
 public override void Visit(ProcessDefinition node)
 {
     List<string> children = PopChildren();
     Return("\n\t\t<td><b>"+node.Name + children[0] + "</b></td><td>=</td><td>" + children[1]+"</td>");
 }
Exemplo n.º 6
0
 static void TestProcessLoad()
 {
     string pdName = "TestProcess2.xml";
     ProcessDefinition pd = new ProcessDefinition();
     log.Info("Loading process definition: {0}", pdName);
     pd.LoadFile(pdName);
     log.Info("Process definition loaded: {0}.{1}", pd.Name, pd.Version);
     string schema = pd.GetProcessInputXmlSchema();
     log.Info("Process input data schema: {0}", schema);
 }
 public IProcessScript GetProcessScript(ProcessDefinition pd)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 8
0
        /// <summary>
        /// Activate is called after process instance is deserialized, but before any operations
        /// are performed on it.
        /// Before Activation:
        /// * Environment should be set
        /// * Process state should be restored
        /// </summary>
        public void Activate()
        {
            if (_activated) throw new Exception("Process instance already activated");
            if (Environment == null) throw new Exception("Environment not initialized. Please set the 'Environment' property");
            log = LogManager.GetLogger(string.Format("ProcessInstance.{0}", InstanceId));

            _definition = Environment.PackageRepository.GetProcess(ProcessDefinitionId);

            foreach (TaskShell at in _activeTransitions.Values)
            {
                at.SetProcessInstance(this);
                at.ParentCallback = this;
                at.EnvironmentContext = this.Environment;
                at.Activate();
            }
            _activated = true;
        }
Exemplo n.º 9
0
        private IEnumerable <ParameterDefinitionWithValue> GetPersistedProcessParameters(Guid processId, ProcessDefinition processDefinition)
        {
            var persistenceParameters = processDefinition.PersistenceParameters.ToList();
            var parameters            = new List <ParameterDefinitionWithValue>(persistenceParameters.Count());

            List <WorkflowProcessInstancePersistence> persistedParameters;

            using (MySqlConnection connection = new MySqlConnection(ConnectionString))
            {
                persistedParameters = WorkflowProcessInstancePersistence.SelectByProcessId(connection, processId)
                                      .Where(WorkflowProcessInstancep => persistenceParameters.Select(pp => pp.Name).Contains(WorkflowProcessInstancep.ParameterName)).ToList();
            }

            foreach (var persistedParameter in persistedParameters)
            {
                var parameterDefinition = persistenceParameters.Single(p => p.Name == persistedParameter.ParameterName);
                parameters.Add(ParameterDefinition.Create(parameterDefinition, _runtime.DeserializeParameter(persistedParameter.Value, parameterDefinition.Type)));
            }

            return(parameters);
        }
Exemplo n.º 10
0
        private IEnumerable <ParameterDefinitionWithValue> GetPersistedProcessParameters(Guid processId, ProcessDefinition processDefinition)
        {
            var persistenceParameters = processDefinition.PersistenceParameters.ToList();
            var parameters            = new List <ParameterDefinitionWithValue>(persistenceParameters.Count);

            List <WorkflowProcessInstancePersistence> persistedParameters;

            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                persistedParameters = WorkflowProcessInstancePersistence.SelectByProcessId(connection, processId).ToList();
            }

            foreach (var persistedParameter in persistedParameters)
            {
                var parameterDefinition = persistenceParameters.FirstOrDefault(p => p.Name == persistedParameter.ParameterName) ??
                                          ParameterDefinition.Create(persistedParameter.ParameterName, "System.String", ParameterPurpose.Persistence.ToString(), null);

                parameters.Add(ParameterDefinition.Create(parameterDefinition, _runtime.DeserializeParameter(persistedParameter.Value, parameterDefinition.Type)));
            }

            return(parameters);
        }
 public virtual void Visit(ProcessDefinition node)
 {
 }
Exemplo n.º 12
0
 public virtual MigrationPlanAssert hasSourceProcessDefinition(ProcessDefinition sourceProcessDefinition)
 {
     return(hasSourceProcessDefinitionId(sourceProcessDefinition.Id));
 }
 public override void Visit(ProcessDefinition node)
 {
     List<string> children = PopChildren();
     Return(node.Name + children[0] + " = " + children[1]);
 }
Exemplo n.º 14
0
 private void GenerateTaskCode(ProcessDefinition pd, Task tsk, TextWriter output)
 {
 }
Exemplo n.º 15
0
 private void GenerateProcessScripts(ProcessDefinition pd)
 {
 }
Exemplo n.º 16
0
 public void ProcessDefinitionUpdated(ProcessDefinition pd)
 {
     log.Info("Process definition updated: {0}", pd.DefinitionId);
 }
Exemplo n.º 17
0
 public ITaskScript GetTaskScript(ProcessDefinition pd, string taskId)
 {
     throw new NotImplementedException();
 }
 void ProcessDefinition(out ProcessDefinition procdef, bool entryProc)
 {
     Process proc; string name; List<Variable> vars = new List<Variable>();
     Expect(1);
     name = t.val; Token startTok = t;
     if (la.kind == 10) {
     Get();
     Expect(3);
     vars.Add(new Variable(t.val)); SetPos(vars[vars.Count-1], t);
     while (la.kind == 11) {
         Get();
         Expect(3);
         vars.Add(new Variable(t.val)); SetPos(vars[vars.Count-1], t);
     }
     Expect(12);
     }
     Token endTok = t;
     Expect(13);
     Token startProc = la;
     Process(out proc);
     procdef = new ProcessDefinition(proc, name, entryProc); SetPos(procdef, startTok, endTok);
     foreach (Variable v in vars) { procdef.Variables.Add(v); }
     SetPos(proc, startProc, t);
 }
Exemplo n.º 19
0
 protected internal virtual void checkAuthorization(CommandContext commandContext, ProcessDefinition processDefinition)
 {
     commandContext.AuthorizationManager.checkAuthorization(Permissions.READ_HISTORY, Resources.PROCESS_DEFINITION, processDefinition.Key);
 }
Exemplo n.º 20
0
 public virtual MigrationPlanAssert hasTargetProcessDefinition(ProcessDefinition targetProcessDefinition)
 {
     return(hasTargetProcessDefinitionId(targetProcessDefinition.Id));
 }
Exemplo n.º 21
0
 public List <TimerToRegister> GetTimersToRegister(ProcessDefinition processDefinition, string activityName)
 {
     return(GetTimerToRegisters(processDefinition, activityName));
 }
Exemplo n.º 22
0
        public override void RegisterFinal(ProcessDefinition pd, List <WorkflowBlock> blocks)
        {
            //transitions
            var commands = this["Commands"] as List <SimpleCommand>;

            if (commands != null)
            {
                var restrictions = new List <RestrictionDefinition>();
                if (this["_actorRestrictions"] is ActorDefinition)
                {
                    restrictions.Add(RestrictionDefinition.Create(RestrictionType.Allow, (ActorDefinition)this["_actorRestrictions"]));
                }

                foreach (var c in commands)
                {
                    var pdCommand = pd.Commands.Where(pdc => pdc.Name == c.Name).FirstOrDefault();
                    if (pdCommand == null)
                    {
                        pdCommand = CommandDefinition.Create(c.Name);
                        pd.Commands.Add(pdCommand);
                    }

                    if (c.Classifier == TransitionClassifier.Direct)
                    {
                        //CA
                        pd.Transitions.Add(new TransitionDefinition()
                        {
                            Name       = string.Format("{0}_{1}_{2}", Name, c.ToBlock.Name, c.Name),
                            Classifier = c.Classifier,
                            From       = (ActivityDefinition)this["_currentActivity"],
                            To         = (ActivityDefinition)this["_currentActivity"],
                            Trigger    = new TriggerDefinition(TriggerType.Command)
                            {
                                Command = pdCommand
                            },
                            Conditions = new List <ConditionDefinition>()
                            {
                                ConditionDefinition.Always
                            },
                            Restrictions = restrictions
                        });

                        //AC
                        pd.Transitions.Add(new TransitionDefinition()
                        {
                            Name       = string.Format("{0}_{1}_{2}", Name, c.ToBlock.Name, "Auto"),
                            Classifier = c.Classifier,
                            From       = (ActivityDefinition)this["_currentActivity"],
                            To         = (ActivityDefinition)c.ToBlock["_currentActivity"],
                            Trigger    = new TriggerDefinition(TriggerType.Auto),
                            Conditions = new List <ConditionDefinition>()
                            {
                                ConditionDefinition.Create("Action", ActionDefinitionReference.Create("BudgetItemIsLegalEntitySignsComplete", "0", Name), "false", "true")
                            }
                        });
                    }
                    else
                    {
                        pd.Transitions.Add(new TransitionDefinition()
                        {
                            Name       = string.Format("{0}_{1}_{2}", Name, c.ToBlock.Name, c.Name),
                            Classifier = c.Classifier,
                            From       = (ActivityDefinition)this["_currentActivity"],
                            To         = (ActivityDefinition)c.ToBlock["_currentActivity"],
                            Trigger    = new TriggerDefinition(TriggerType.Command)
                            {
                                Command = pdCommand
                            },
                            Conditions = new List <ConditionDefinition>()
                            {
                                ConditionDefinition.Always
                            },
                            Restrictions = restrictions
                        });
                    }
                }
            }
        }
Exemplo n.º 23
0
        private IEnumerable <ParameterDefinitionWithValue> GetProcessParameters(Guid processId, ProcessDefinition processDefinition)
        {
            var parameters = new List <ParameterDefinitionWithValue>(processDefinition.Parameters.Count());

            parameters.AddRange(GetPersistedProcessParameters(processId, processDefinition));
            parameters.AddRange(GetSystemProcessParameters(processId, processDefinition));
            return(parameters);
        }
Exemplo n.º 24
0
        public void Holiday()
        {
            using (var fake = new AutoFake())
            {
                var provider = fake.Resolve <IServiceLocator>();

                var actionRepository = new InMemoryRepository <ActionDef>(new List <ActionDef>());
                A.CallTo(() => provider.GetInstance <IRepository <ActionDef> >()).Returns(actionRepository);
                ServiceLocator.SetLocatorProvider(() => provider);

                ProcessDefinition processDefinition = ProcessDefinitionFactory.getHoliday();

                var        delegationHelper = fake.Resolve <IDelegationHelper>();
                Transition transition       = processDefinition.Nodes.Single(s => s is Decision).LeavingTransitions.Single(l => l.To is Fork);
                A.CallTo(delegationHelper).WithReturnType <Transition>().Returns(transition);
                A.CallTo(() => provider.GetInstance <IDelegationHelper>()).Returns(delegationHelper);

                ExecutionContext executionContext = new ExecutionContext(new User("ae"), processDefinition);

                IDictionary <string, object> attributeValues = new Dictionary <string, object>();
                attributeValues.Add("requester", "hugo");
                attributeValues.Add("start date", DateTime.Today);
                attributeValues.Add("end dat", DateTime.Today);
                //進入evaluating
                ProcessInstance processInstance = executionContext.StartProcess();
                Assert.AreEqual(7, executionContext.Flow.AttributeInstances.Count);

                //有個地方要從Node取到ProcessBlock
                var processBlockRepository = new InMemoryRepository <ProcessBlock>(new List <ProcessBlock>()
                {
                    processDefinition.ChildBlocks.First()
                });
                A.CallTo(() => provider.GetInstance <IRepository <ProcessBlock> >()).Returns(processBlockRepository);

                //進入evaluation,分成兩個分支
                attributeValues.Clear();
                attributeValues.Add("evaluation result", "approve");
                executionContext.PerformActivity(attributeValues);

                Assert.AreEqual(2, executionContext.ForkedFlows.Count);
                Assert.AreEqual(2, processInstance.RootFlow.Children.Count);
                var childProcessBlock = processDefinition.ChildBlocks.First();
                Assert.AreEqual(childProcessBlock.Nodes.Single(s => s.Name == "HR notification"), processInstance.RootFlow.Children.First().Node);
                Assert.AreEqual(childProcessBlock.Nodes.Single(s => s.Name == "approval notification"), processInstance.RootFlow.Children.Last().Node);

                //有個地方要取得還未完成的ChildFlow
                var childFlow1     = processInstance.RootFlow.Children.First();
                var childFlow2     = processInstance.RootFlow.Children.Last();
                var flowRepository = new InMemoryRepository <Flow>(new List <Flow>()
                {
                    childFlow1, childFlow2
                });
                A.CallTo(() => provider.GetInstance <IRepository <Flow> >()).Returns(flowRepository);

                //HR notification -> Join
                ExecutionContext childExecutionContext1 = new ExecutionContext(new User("ae"), processDefinition, processInstance, childFlow1);
                childExecutionContext1.PerformActivity();

                //approval notification -> Join
                ExecutionContext childExecutionContext2 = new ExecutionContext(new User("ae"), processDefinition, processInstance, childFlow2);
                childExecutionContext2.PerformActivity();

                var endState = processDefinition.Nodes.Single(q => q is EndState);
                Assert.AreEqual(endState, childExecutionContext2.ProcessInstance.RootFlow.Node);
            }
        }
Exemplo n.º 25
0
 void PackageStore_ProcessReload(ProcessDefinition pd)
 {
     if (ScriptManager != null)
     {
         ScriptManager.ProcessDefinitionUpdated(pd);
     }
 }
        public override void Visit(ProcessDefinition node)
        {
            List <string> children = PopChildren();

            Return(node.Name + children[0] + " = " + children[1]);
        }
Exemplo n.º 27
0
 public ProcessScript(ScriptNetProcessScriptManager mgr, ProcessDefinition pd)
 {
     _pd = pd;
     _mgr = mgr;
     log = LogManager.GetCurrentClassLogger();
 }
 public override void Visit(ProcessDefinition def)
 {
     def.Tag = new Set(def.Variables);
 }
        public void AddReferencesFiltered_ShouldUpdateIsFilterableProperty()
        {
            #region Arrange

            var visibleFields = new string[0];

            var queryGenerator = new SearchQueryGeneratorTest();
            queryGenerator.SetNonFilteredColumns(new [] { CrField2Name, McrField2Name, RcrField2Name });

            var processdefinition = new ProcessDefinition();
            var tableDefinition = new TableDefinition("TestProcess");
            processdefinition.TableList.Insert(0, tableDefinition);
            processdefinition.SingleCrossReferenceFields.Add(
                new ReferenceFieldDefinition
                {
                    ColumnType = ColumnTypes.Reference,
                    SystemName = CrField1Name,
                    IsFilterable = true
                });
            processdefinition.SingleCrossReferenceFields.Add(
                new ReferenceFieldDefinition
                {
                    ColumnType = ColumnTypes.Reference,
                    SystemName = CrField2Name,
                    IsFilterable = true
                });
            processdefinition.SingleCrossReferenceFields.Add(
                new ReferenceFieldDefinition
                {
                    ColumnType = ColumnTypes.Reference,
                    SystemName = CrField3Name,
                    IsFilterable = false
                });

            processdefinition.MultiCrossReferenceFields.Add(
                new ReferenceFieldDefinition
                {
                    ColumnType = ColumnTypes.MultiReference,
                    SystemName = McrField1Name,
                    IsFilterable = true
                });
            processdefinition.MultiCrossReferenceFields.Add(
                new ReferenceFieldDefinition
                {
                    ColumnType = ColumnTypes.MultiReference,
                    SystemName = McrField2Name,
                    IsFilterable = true
                });
            processdefinition.MultiCrossReferenceFields.Add(
                new ReferenceFieldDefinition
                {
                    ColumnType = ColumnTypes.MultiReference,
                    SystemName = McrField3Name,
                    IsFilterable = false
                });

            processdefinition.ReverseCrossReferenceFields.Add(
                new ReferenceFieldDefinition
                {
                    ColumnType = ColumnTypes.ReverseReference,
                    SystemName = RcrField1Name,
                    IsFilterable = true
                });
            processdefinition.ReverseCrossReferenceFields.Add(
                new ReferenceFieldDefinition
                {
                    ColumnType = ColumnTypes.ReverseReference,
                    SystemName = RcrField2Name,
                    IsFilterable = true
                });
            processdefinition.ReverseCrossReferenceFields.Add(
                new ReferenceFieldDefinition
                {
                    ColumnType = ColumnTypes.ReverseReference,
                    SystemName = RcrField3Name,
                    IsFilterable = false
                });

            #endregion Arrange

            // Act
            queryGenerator.AddReferences(processdefinition);

            // Assert
            Assert.IsTrue(queryGenerator.SingleCrossReferenceIsFilterable(CrField1Name));
            Assert.IsFalse(queryGenerator.SingleCrossReferenceIsFilterable(CrField2Name));
            Assert.IsFalse(queryGenerator.SingleCrossReferenceIsFilterable(CrField3Name));

            Assert.IsTrue(queryGenerator.MultiCrossReferenceIsFilterable(McrField1Name));
            Assert.IsFalse(queryGenerator.MultiCrossReferenceIsFilterable(McrField2Name));
            Assert.IsFalse(queryGenerator.MultiCrossReferenceIsFilterable(McrField3Name));

            Assert.IsTrue(queryGenerator.ReverseCrossReferenceIsFilterable(RcrField1Name));
            Assert.IsFalse(queryGenerator.ReverseCrossReferenceIsFilterable(RcrField2Name));
            Assert.IsFalse(queryGenerator.ReverseCrossReferenceIsFilterable(RcrField3Name));
        }
Exemplo n.º 30
0
 public void initialize(TasklistWindow tasklist, ProcessDefinition ProcessDefinition)
 {
     this.Tasklist          = tasklist;
     this.ProcessDefinition = ProcessDefinition;
 }
Exemplo n.º 31
0
 protected internal virtual void assertMigratedTo(HistoricActivityInstance activityInstance, ProcessDefinition processDefinition, string activityId)
 {
     Assert.assertEquals(processDefinition.Id, activityInstance.ProcessDefinitionId);
     Assert.assertEquals(processDefinition.Key, activityInstance.ProcessDefinitionKey);
     Assert.assertEquals(activityId, activityInstance.ActivityId);
 }
Exemplo n.º 32
0
        protected internal virtual void writeUserOperationLog(CommandContext commandContext, ProcessDefinition processDefinition, int numInstances, bool async)
        {
            IList <PropertyChange> propertyChanges = new List <PropertyChange>();

            propertyChanges.Add(new PropertyChange("nrOfInstances", null, numInstances));
            propertyChanges.Add(new PropertyChange("async", null, async));

            commandContext.OperationLogManager.logProcessInstanceOperation(org.camunda.bpm.engine.history.UserOperationLogEntry_Fields.OPERATION_TYPE_RESTART_PROCESS_INSTANCE, null, processDefinition.Id, processDefinition.Key, propertyChanges);
        }
Exemplo n.º 33
0
        private IEnumerable <ParameterDefinitionWithValue> GetPersistedProcessParameters(Guid processId, ProcessDefinition processDefinition)
        {
            var persistenceParameters = processDefinition.PersistenceParameters.ToList();
            var parameters            = new List <ParameterDefinitionWithValue>(persistenceParameters.Count());

            List <WorkflowProcessInstancePersistence> persistedParameters;
            var dbcoll  = Store.GetCollection <WorkflowProcessInstance>(MongoDBConstants.WorkflowProcessInstanceCollectionName);
            var process = dbcoll.FindOneById(processId);

            if (process != null && process.Persistence != null)
            {
                persistedParameters = process.Persistence.ToList();
            }
            else
            {
                return(parameters);
                //persistedParameters = new List<WorkflowProcessInstancePersistence>();
            }

            foreach (var persistedParameter in persistedParameters)
            {
                var parameterDefinition = persistenceParameters.FirstOrDefault(p => p.Name == persistedParameter.ParameterName);
                if (parameterDefinition == null)
                {
                    parameterDefinition = ParameterDefinition.Create(persistedParameter.ParameterName, "System.String", ParameterPurpose.Persistence.ToString(), null);
                }
                parameters.Add(ParameterDefinition.Create(parameterDefinition, _runtime.DeserializeParameter(persistedParameter.Value, parameterDefinition.Type)));
            }

            return(parameters);
        }
Exemplo n.º 34
0
        public virtual async Task <ProcessInstance> BuildAsync()
        {
            var deploymentManager = this.context.DeploymentManager;

            if (this.processDefinition == null)
            {
                if (this.processDefinitionId != null)
                {
                    this.processDefinition = await deploymentManager.FindProcessDefinitionByIdAsync(this.processDefinitionId.Value);
                }
                else if (this.processDefinitionKey != null)
                {
                    this.processDefinition = await deploymentManager.FindProcessDefinitionByKeyAsync(this.processDefinitionKey);
                }

                if (this.processDefinition == null)
                {
                    throw new ArgumentNullException(nameof(processDefinition));
                }
            }

            if (this.processDefinition.State != ProcessDefinitionState.Active)
            {
                throw new RuntimeException("The specified process-defintion is not active.");
            }

            //Load bpmn-model.
            var deploymentId         = this.processDefinition.DeploymentId;
            var processDefinitionKey = this.processDefinition.Key;

            var dm          = context.DeploymentManager;
            var model       = dm.GetBpmnModel(deploymentId);
            var process     = model.GetProcess(processDefinitionKey);
            var initialNode = process.InitialNode;

            if (initialNode == null)
            {
                throw new RuntimeException($"The process '{processDefinitionKey}' does not contains any start nodes.");
            }

            var date = Clock.Now;

            //init process-instance.
            var pi = new ProcessInstance();

            pi.ProcessDefinition = this.processDefinition;
            pi.Super             = this.super;

            if (pi.Super != null)
            {
                pi.Caller = super.ActivityInstance;
            }

            pi.Name = processDefinition.Name;
            if (string.IsNullOrEmpty(pi.Name))
            {
                pi.Name = processDefinition.Key;
            }

            pi.Key           = this.key;
            pi.Created       = date;
            pi.Modified      = date;
            pi.State         = ExecutionState.Ready;
            pi.LastStateTime = date;
            pi.Initiator     = this.initiator;
            pi.Description   = StringHelper.Get(processDefinition.Description, 255);

            if (!string.IsNullOrEmpty(this.name))
            {
                pi.Name = this.name;
            }

            if (!string.IsNullOrEmpty(this.description))
            {
                pi.Description = this.description;
            }

            pi.Variables     = new List <Variable>();
            pi.IdentityLinks = new List <IdentityLink>();

            var dataObjects = model.GetProcessDataObjects(processDefinitionKey);

            //initialize process-context.
            this.InitializeProcessContext(pi, dataObjects);

            var session = this.context.DbSession;

            //commit changes.
            await session.SaveAsync(pi);

            await session.FlushAsync();

            //Init root-token.
            var rootToken = new Token(pi);

            rootToken.Node = initialNode;
            pi.Token       = rootToken;

            //commit changes.
            await session.SaveAsync(rootToken);

            await session.FlushAsync();

            return(pi);
        }
Exemplo n.º 35
0
        private IEnumerable <ParameterDefinitionWithValue> GetPersistedProcessParameters(Guid processId, ProcessDefinition processDefinition)
        {
            var persistenceParameters = processDefinition.PersistenceParameters.ToList();
            var parameters            = new List <ParameterDefinitionWithValue>(persistenceParameters.Count());

            List <WorkflowProcessInstancePersistence> persistedParameters;

            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                persistedParameters = WorkflowProcessInstancePersistence.SelectByProcessId(connection, processId).ToList();
            }

            foreach (var persistedParameter in persistedParameters)
            {
                var parameterDefinition = persistenceParameters.FirstOrDefault(p => p.Name == persistedParameter.ParameterName);
                if (parameterDefinition == null)
                {
                    parameterDefinition = ParameterDefinition.Create(persistedParameter.ParameterName, typeof(UnknownParameterType), ParameterPurpose.Persistence);
                    parameters.Add(ParameterDefinition.Create(parameterDefinition, persistedParameter.Value));
                }
                else
                {
                    parameters.Add(ParameterDefinition.Create(parameterDefinition, ParametersSerializer.Deserialize(persistedParameter.Value, parameterDefinition.Type)));
                }
            }

            return(parameters);
        }
Exemplo n.º 36
0
        private IEnumerable <ParameterDefinitionWithValue> GetPersistedProcessParameters(Guid processId, ProcessDefinition processDefinition)
        {
            var persistenceParameters = processDefinition.PersistenceParameters.ToList();
            var parameters            = new List <ParameterDefinitionWithValue>(persistenceParameters.Count());

            List <WorkflowProcessInstancePersistence> persistedParameters;

            using (var session = Store.OpenSession())
            {
                var process = session.Load <WorkflowProcessInstance>(processId);
                if (process != null && process.Persistence != null)
                {
                    persistedParameters = process.Persistence;
                }
                else
                {
                    return(parameters);
                    //persistedParameters = new List<WorkflowProcessInstancePersistence>();
                }
            }

            foreach (var persistedParameter in persistedParameters)
            {
                var parameterDefinition = persistenceParameters.FirstOrDefault(p => p.Name == persistedParameter.ParameterName);
                if (parameterDefinition == null)
                {
                    parameterDefinition = ParameterDefinition.Create(persistedParameter.ParameterName, typeof(UnknownParameterType), ParameterPurpose.Persistence);
                    parameters.Add(ParameterDefinition.Create(parameterDefinition, persistedParameter.Value));
                }
                else
                {
                    parameters.Add(ParameterDefinition.Create(parameterDefinition, ParametersSerializer.Deserialize(persistedParameter.Value, parameterDefinition.Type)));
                }
            }

            return(parameters);
        }
Exemplo n.º 37
0
        protected internal virtual void applyProperties(ProcessInstantiationBuilderImpl instantiationBuilder, ProcessDefinition processDefinition, HistoricProcessInstance processInstance)
        {
            string tenantId = processInstance.TenantId;

            if (string.ReferenceEquals(processDefinition.TenantId, null) && !string.ReferenceEquals(tenantId, null))
            {
                instantiationBuilder.tenantId(tenantId);
            }

            if (!builder.WithoutBusinessKey)
            {
                instantiationBuilder.businessKey(processInstance.BusinessKey);
            }
        }
Exemplo n.º 38
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Before public void deployProcesses()
        public virtual void deployProcesses()
        {
            sharedDefinition  = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS);
            tenant1Definition = testHelper.deployForTenantAndGetDefinition(TENANT_ONE, ProcessModels.ONE_TASK_PROCESS);
            tenant2Definition = testHelper.deployForTenantAndGetDefinition(TENANT_TWO, ProcessModels.ONE_TASK_PROCESS);
        }
        private IEnumerable <ParameterDefinitionWithValue> GetPersistedProcessParameters(Guid processId, ProcessDefinition processDefinition)
        {
            var persistenceParameters = processDefinition.PersistenceParameters.ToList();
            var parameters            = new List <ParameterDefinitionWithValue>(persistenceParameters.Count());

            List <WorkflowProcessInstancePersistence> persistedParameters;

            using (var session = Store.OpenSession())
            {
                var process = session.Load <WorkflowProcessInstance>(processId);
                if (process != null && process.Persistence != null)
                {
                    persistedParameters = process.Persistence.Where(WorkflowProcessInstancep => persistenceParameters.Select(pp => pp.Name).Contains(WorkflowProcessInstancep.ParameterName)).ToList();
                }
                else
                {
                    persistedParameters = new List <WorkflowProcessInstancePersistence>();
                }
            }

            foreach (var persistedParameter in persistedParameters)
            {
                var parameterDefinition = persistenceParameters.Single(p => p.Name == persistedParameter.ParameterName);
                parameters.Add(ParameterDefinition.Create(parameterDefinition, _runtime.DeserializeParameter(persistedParameter.Value, parameterDefinition.Type)));
            }

            return(parameters);
        }
        public void TestContinueTaskWithLinkAnVariables()
        {
            var factory = new ProcessBuilderFactory();
            var builder = factory.CreateProcess(id: "com.klaudwerk.workflow.renewal",
                                                name: "Renewal", description: "Policy Renewal");
            IReadOnlyList <ProcessValidationResult> result;

            builder
            .Variables().Name("v_1").Type(VariableTypeEnum.String).Done()
            .Variables().Name("v_2").Type(VariableTypeEnum.String).Done()
            .Start("s_1").Handler().HumanTask().Done().SetName("Start")
            .Vars().Name("v_1").Done()
            .Vars().Name("v_2").Done()
            .Done()
            .Step("s_2").Handler().HumanTask().Done()
            .Done()
            .Step("s_3").Handler().HumanTask().Done()
            .Vars().Name("v_1").OnExit().Done()
            .Vars().Name("v_2").OnExit().Done()
            .Done()
            .End("e_1").SetName("End Process").Done()
            .Link().From("s_1").To("s_2").Name("s_1_s_2").Done()
            .Link().From("s_1").To("s_3").Name("s_1_s_3").Done()
            .Link().From("s_2").To("e_1").Name("s2_end").Done()
            .Link().From("s_3").To("e_1").Name("s3_end").Done()
            .TryValidate(out result);

            ProcessDefinition processDefinition          = builder.Build();
            IProcessDefinitionPersisnenceService service = GetProcessDefinitionPersistenceService();

            service.Create(processDefinition, ProcessDefStatusEnum.Active, 1);
            // retrieve process definition
            var flows = service.ActivetWorkflows();

            Assert.IsNotNull(flows);
            Assert.AreEqual(1, flows.Count);
            ProcessDefinition    loadedPd;
            ProcessDefStatusEnum status;

            Assert.IsTrue(service.TryFind(flows[0].Id, flows[0].Version, out loadedPd, out status, out accounts));

            IProcessRuntimeService            pservice   = GetProcessRuntime();
            PropertySetCollection             collection = new PropertySetCollection(new PropertySchemaSet(new PropertySchemaFactory()));
            Mock <IProcessRuntimeEnvironment> mEnv       = new Mock <IProcessRuntimeEnvironment>();

            mEnv.SetupGet(m => m.PropertySet).Returns(collection).Verifiable();
            mEnv.Setup(m => m.TaskServiceAsync())
            .Returns(() =>
                     Task.FromResult(new ExecutionResult(StepExecutionStatusEnum.Suspend)))
            .Verifiable();
            mEnv.SetupGet(m => m.Transition).Returns("s_1_s_3");
            IProcessRuntime runtime = pservice.Create(loadedPd, collection);

            string[] errors;
            runtime.TryCompile(out errors);
            Tuple <ExecutionResult, StepRuntime> execute = runtime.Execute(runtime.StartSteps[0], mEnv.Object);

            Assert.IsNotNull(execute);
            Assert.AreEqual(StepExecutionStatusEnum.Suspend, execute.Item1.Status, "The Workflow should be in Suspended state");
            Assert.AreEqual(execute.Item2.StepId, "s_1");
            collection.Set("v_1", "v_1");
            collection.Set("v_2", "v_2");
            execute = runtime.Continue(mEnv.Object);
            Assert.IsNotNull(execute);
            Assert.AreEqual(StepExecutionStatusEnum.Ready, execute.Item1.Status, "The Workflow should be in Suspended state");
            Assert.AreEqual(execute.Item2.StepId, "s_3");
            Assert.IsNotNull(execute.Item2.StepDefinition.VariablesMap);
            Assert.AreEqual(2, execute.Item2.StepDefinition.VariablesMap.Length);
            Assert.AreEqual(VarRequiredEnum.OnExit, execute.Item2.StepDefinition.VariablesMap[0].Required);
            Assert.AreEqual(VarRequiredEnum.OnExit, execute.Item2.StepDefinition.VariablesMap[1].Required);
        }
Exemplo n.º 41
0
        protected internal virtual void startProcessInstance(string processDefinitionKey)
        {
            ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(processDefinitionKey).latestVersion().singleResult();

            runtimeService.startProcessInstanceById(processDefinition.Id);
        }
Exemplo n.º 42
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Before public void deployProcess()
        public virtual void deployProcess()
        {
            processDefinition = testRule.deployAndGetDefinition(ProcessModels.TWO_TASKS_PROCESS);
        }
Exemplo n.º 43
0
        private IEnumerable <ParameterDefinitionWithValue> GetPersistedProcessParameters(Guid processId, ProcessDefinition processDefinition)
        {
            var persistenceParameters = processDefinition.PersistenceParameters.ToList();
            var parameters            = new List <ParameterDefinitionWithValue>(persistenceParameters.Count());

            List <WorkflowProcessInstancePersistence> persistedParameters;
            var dbcoll  = Store.GetCollection <WorkflowProcessInstance>(MongoDBConstants.WorkflowProcessInstanceCollectionName);
            var process = dbcoll.Find(x => x.Id == processId).FirstOrDefault();

            if (process != null && process.Persistence != null)
            {
                persistedParameters = process.Persistence.ToList();
            }
            else
            {
                return(parameters);
                //persistedParameters = new List<WorkflowProcessInstancePersistence>();
            }

            foreach (var persistedParameter in persistedParameters)
            {
                var parameterDefinition = persistenceParameters.FirstOrDefault(p => p.Name == persistedParameter.ParameterName);
                if (parameterDefinition == null)
                {
                    parameterDefinition = ParameterDefinition.Create(persistedParameter.ParameterName, typeof(UnknownParameterType), ParameterPurpose.Persistence);
                    parameters.Add(ParameterDefinition.Create(parameterDefinition, persistedParameter.Value));
                }
                else
                {
                    parameters.Add(ParameterDefinition.Create(parameterDefinition, ParametersSerializer.Deserialize(persistedParameter.Value, parameterDefinition.Type)));
                }
            }

            return(parameters);
        }
Exemplo n.º 44
0
        private void createProcessDefinitionMock()
        {
            ProcessDefinition mockDefinition = MockProvider.createMockDefinition();

            when(mockRepoService.getProcessDefinition(eq(MockProvider.EXAMPLE_PROCESS_DEFINITION_ID))).thenReturn(mockDefinition);
        }
Exemplo n.º 45
0
        private IEnumerable <ParameterDefinitionWithValue> GetSystemProcessParameters(Guid processId,
                                                                                      ProcessDefinition processDefinition)
        {
            var processInstance = GetProcessInstance(processId);

            var systemParameters =
                processDefinition.Parameters.Where(p => p.Purpose == ParameterPurpose.System).ToList();

            List <ParameterDefinitionWithValue> parameters;

            parameters = new List <ParameterDefinitionWithValue>(systemParameters.Count())
            {
                ParameterDefinition.Create(
                    systemParameters.Single(sp => sp.Name == DefaultDefinitions.ParameterProcessId.Name),
                    processId),
                ParameterDefinition.Create(
                    systemParameters.Single(sp => sp.Name == DefaultDefinitions.ParameterPreviousState.Name),
                    (object)processInstance.PreviousState),
                ParameterDefinition.Create(
                    systemParameters.Single(sp => sp.Name == DefaultDefinitions.ParameterCurrentState.Name),
                    (object)processInstance.StateName),
                ParameterDefinition.Create(
                    systemParameters.Single(sp => sp.Name == DefaultDefinitions.ParameterPreviousStateForDirect.Name),
                    (object)processInstance.PreviousStateForDirect),
                ParameterDefinition.Create(
                    systemParameters.Single(sp => sp.Name == DefaultDefinitions.ParameterPreviousStateForReverse.Name),
                    (object)processInstance.PreviousStateForReverse),
                ParameterDefinition.Create(
                    systemParameters.Single(sp => sp.Name == DefaultDefinitions.ParameterPreviousActivity.Name),
                    (object)processInstance.PreviousActivity),
                ParameterDefinition.Create(
                    systemParameters.Single(sp => sp.Name == DefaultDefinitions.ParameterCurrentActivity.Name),
                    (object)processInstance.ActivityName),
                ParameterDefinition.Create(
                    systemParameters.Single(sp => sp.Name == DefaultDefinitions.ParameterPreviousActivityForDirect.Name),
                    (object)processInstance.PreviousActivityForDirect),
                ParameterDefinition.Create(
                    systemParameters.Single(sp => sp.Name == DefaultDefinitions.ParameterPreviousActivityForReverse.Name),
                    (object)processInstance.PreviousActivityForReverse),
                ParameterDefinition.Create(
                    systemParameters.Single(sp => sp.Name == DefaultDefinitions.ParameterSchemeCode.Name),
                    (object)processDefinition.Name),
                ParameterDefinition.Create(
                    systemParameters.Single(sp => sp.Name == DefaultDefinitions.ParameterSchemeId.Name),
                    (object)processInstance.SchemeId),
                ParameterDefinition.Create(
                    systemParameters.Single(sp => sp.Name == DefaultDefinitions.ParameterIsPreExecution.Name),
                    false)
            };
            return(parameters);
        }
Exemplo n.º 46
0
        private IEnumerable <ParameterDefinitionWithValue> GetPersistedProcessParameters(Guid processId, ProcessDefinition processDefinition)
        {
            var persistenceParameters = processDefinition.PersistenceParameters.ToList();
            var parameters            = new List <ParameterDefinitionWithValue>(persistenceParameters.Count());

            List <WorkflowProcessInstancePersistence> persistedParameters;

            using (PredefinedTransactionScopes.ReadUncommittedSupressedScope)
            {
                using (var context = CreateContext())
                {
                    persistedParameters =
                        context.WorkflowProcessInstancePersistences.Where(
                            wpip =>
                            wpip.ProcessId == processId &&
                            persistenceParameters.Select(pp => pp.Name).Contains(wpip.ParameterName)).ToList();
                }
            }

            foreach (var persistedParameter in persistedParameters)
            {
                var parameterDefinition = persistenceParameters.Single(p => p.Name == persistedParameter.ParameterName);
                parameters.Add(ParameterDefinition.Create(parameterDefinition, _runtime.DeserializeParameter(persistedParameter.Value, parameterDefinition.Type)));
            }

            return(parameters);
        }
Exemplo n.º 47
0
 /// <summary>
 /// Passivate is called before persisting the process instance data
 /// </summary>
 public void Passivate()
 {
     log.Info("Passivating");
     _tokensInPlaces = null;
     _definition = null;
     _environment = null;
     _activated = false;
 }
Exemplo n.º 48
0
        /// <summary>
        /// Adds the base table joins.
        /// </summary>
        /// <param name="sql">The SQL.</param>
        /// <param name="process">The process.</param>
        /// <param name="lastProcess">The last process.</param>
        /// <param name="aliasCollection">The alias collection.</param>
        private static void AddBaseTableJoins(
            StringBuilder sql, ProcessDefinition process, ProcessDefinition lastProcess, TableAliasCollection aliasCollection)
        {
            if (process == lastProcess || process.BaseProcess == null)
                return;

            sql.AppendLine()
               .Append("\t")
               .AppendFormat(
                   @"INNER JOIN ""{0}"" {1} ON {1}.""{2}"" = {3}.""{4}""",
                   OracleNamesTranslator.Translate(process.BaseProcess.SystemName),
                   aliasCollection.GetTableAlias(process.BaseProcess),
                   OracleNamesTranslator.Translate(Constants.IdColumnName),
                   aliasCollection.GetTableAlias(process),
                   OracleNamesTranslator.Translate(Constants.BaseIdColumnName));

            AddBaseTableJoins(sql, process.BaseProcess, lastProcess, aliasCollection);
        }
 public override void Visit(ProcessDefinition node)
 {
     List<string> children = PopChildren();
     Return("     \\mathrm{"+node.Name + children[0] + "} \\defeq & \\mathrm{" + children[1]+ "}");
 }
Exemplo n.º 50
0
 public virtual void RegisterFinal(ProcessDefinition pd, List <WorkflowBlock> blocks)
 {
 }
Exemplo n.º 51
0
 /// <summary>
 /// Passivate is called before persisting the process instance data
 /// </summary>
 public void Passivate()
 {
     log.Info("Passivating");
     foreach (TaskShell ts in _activeTransitions.Values)
     {
         ts.Passivate();
     }
     _definition = null;
     _environment = null;
     _activated = false;
 }
Exemplo n.º 52
0
        public void GetFieldReturnsSingleCrossReferenceField()
        {
            // Arrange.
            var rootTable = new TableDefinition("TestTable");
            var processDefinition = new ProcessDefinition();
            processDefinition.TableList.Add(rootTable);

            var field = new ReferenceFieldDefinition { SystemName = "TestField" };
            processDefinition.SingleCrossReferenceFields.Add(field);

            // Act / Assert.
            Assert.AreSame(field, processDefinition.GetField("TestField"));
        }
Exemplo n.º 53
0
        private void startProcessInstances(ProcessEngine processEngine, string processDefinitionKey, int?version)
        {
            ProcessEngineConfigurationImpl processEngineConfiguration = (ProcessEngineConfigurationImpl)processEngine.ProcessEngineConfiguration;
            ProcessDefinitionQuery         processDefinitionQuery     = processEngine.RepositoryService.createProcessDefinitionQuery().processDefinitionKey(processDefinitionKey);

            if (version != null)
            {
                processDefinitionQuery.processDefinitionVersion(version);
            }
            else
            {
                processDefinitionQuery.latestVersion();
            }

            ProcessDefinition processDefinition = processDefinitionQuery.singleResult();

            Stream invoiceInputStream = typeof(InvoiceProcessApplication).ClassLoader.getResourceAsStream("invoice.pdf");

            long numberOfRunningProcessInstances = processEngine.RuntimeService.createProcessInstanceQuery().processDefinitionId(processDefinition.Id).count();

            if (numberOfRunningProcessInstances == 0)
            {     // start three process instances
                LOGGER.info("Start 3 instances of " + processDefinition.Name + ", version " + processDefinition.Version);
                // process instance 1
                processEngine.RuntimeService.startProcessInstanceById(processDefinition.Id, createVariables().putValue("creditor", "Great Pizza for Everyone Inc.").putValue("amount", 30.00d).putValue("invoiceCategory", "Travel Expenses").putValue("invoiceNumber", "GPFE-23232323").putValue("invoiceDocument", fileValue("invoice.pdf").file(invoiceInputStream).mimeType("application/pdf").create()));

                IoUtil.closeSilently(invoiceInputStream);
                invoiceInputStream = typeof(InvoiceProcessApplication).ClassLoader.getResourceAsStream("invoice.pdf");
                processEngineConfiguration.DbMetricsReporter.reportNow();

                // process instance 2
                try
                {
                    DateTime calendar = new DateTime();
                    calendar.AddDays(-14);
                    ClockUtil.CurrentTime = calendar;

                    ProcessInstance pi = processEngine.RuntimeService.startProcessInstanceById(processDefinition.Id, createVariables().putValue("creditor", "Bobby's Office Supplies").putValue("amount", 900.00d).putValue("invoiceCategory", "Misc").putValue("invoiceNumber", "BOS-43934").putValue("invoiceDocument", fileValue("invoice.pdf").file(invoiceInputStream).mimeType("application/pdf").create()));

                    processEngineConfiguration.DbMetricsReporter.reportNow();
                    calendar.AddDays(14);
                    ClockUtil.CurrentTime = calendar;

                    processEngine.IdentityService.setAuthentication("demo", Arrays.asList(org.camunda.bpm.engine.authorization.Groups_Fields.CAMUNDA_ADMIN));
                    Task task = processEngine.TaskService.createTaskQuery().processInstanceId(pi.Id).singleResult();
                    processEngine.TaskService.claim(task.Id, "demo");
                    processEngine.TaskService.complete(task.Id, createVariables().putValue("approved", true));
                }
                finally
                {
                    processEngineConfiguration.DbMetricsReporter.reportNow();
                    ClockUtil.reset();
                    processEngine.IdentityService.clearAuthentication();
                }

                IoUtil.closeSilently(invoiceInputStream);
                invoiceInputStream = typeof(InvoiceProcessApplication).ClassLoader.getResourceAsStream("invoice.pdf");

                // process instance 3
                try
                {
                    DateTime calendar = new DateTime();
                    calendar.AddDays(-5);
                    ClockUtil.CurrentTime = calendar;

                    ProcessInstance pi = processEngine.RuntimeService.startProcessInstanceById(processDefinition.Id, createVariables().putValue("creditor", "Papa Steve's all you can eat").putValue("amount", 10.99d).putValue("invoiceCategory", "Travel Expenses").putValue("invoiceNumber", "PSACE-5342").putValue("invoiceDocument", fileValue("invoice.pdf").file(invoiceInputStream).mimeType("application/pdf").create()));

                    processEngineConfiguration.DbMetricsReporter.reportNow();
                    calendar.AddDays(5);
                    ClockUtil.CurrentTime = calendar;

                    processEngine.IdentityService.AuthenticatedUserId = "mary";
                    Task task = processEngine.TaskService.createTaskQuery().processInstanceId(pi.Id).singleResult();
                    processEngine.TaskService.createComment(null, pi.Id, "I cannot approve this invoice: the amount is missing.\n\n Could you please provide the amount?");
                    processEngine.TaskService.complete(task.Id, createVariables().putValue("approved", false));
                }
                finally
                {
                    processEngineConfiguration.DbMetricsReporter.reportNow();
                    ClockUtil.reset();
                    processEngine.IdentityService.clearAuthentication();
                }
            }
            else
            {
                LOGGER.info("No new instances of " + processDefinition.Name + " version " + processDefinition.Version + " started, there are " + numberOfRunningProcessInstances + " instances running");
            }
        }
Exemplo n.º 54
0
        public ProcessDefinition GetProcessDefinition(string name)
        {
            ProcessInfo pi = GetProcessInfo(name);
            if (pi != null) return pi.ProcessDef;
            PackageDefinition pd = GetPackageDefinition();
            Debug.Assert(pd != null);
            lock (this)
            {
                pi = GetProcessInfo(name);
                if (pi != null) return pi.ProcessDef;

                pi = new ProcessInfo();
                pi.ProcessFileName = pd.GetProcessFileName(name);
                log.Info("Will load process definition {0} from file {1}", name , pi.ProcessFileName);
                ProcessDefinition pdi = new ProcessDefinition();
                pdi.Package = pd;
                using (Stream stm = GetPackageContentStream(pi.ProcessFileName))
                {
                    pdi.Load(stm);
                }
                pi.ProcessDef = pdi;
                pi.LoadedDate = DateTime.Now;
                if (this.ProcessReload != null) this.ProcessReload(pdi);
                _processes[name] = pi;
                return pi.ProcessDef;
            }
        }
 /// <summary>
 /// Activate is called after process instance is deserialized, but before any operations
 /// are performed on it.
 /// </summary>
 public void Activate()
 {
     if (_activated) throw new Exception("Process instance already activated");
     if (Environment == null) throw new Exception("Environment not initialized. Please set the 'Environment' property");
     log = LogManager.GetLogger(string.Format("ProcessInstance.{0}", InstanceId));
     _transitionFactory = new ActiveTransitionFactory();
     _definition = Environment.DefinitionRepository.GetProcessDefinition(ProcessDefinitionId);
     if (_processDataXmlString != null)
     {
         //_processData = new XmlDocument();
         //_processData.LoadXml(_processDataXmlString);
     }
     BuildTokensInPlaces();
     BuildActiveTransitionsInTasks();
     foreach (TaskShell at in _activeTransitions.Values)
     {
         at.SetProcessInstance(this);
         at.Activate();
     }
     _activated = true;
 }
 /// <summary>
 /// Passivate is called before persisting the process instance data
 /// </summary>
 public void Passivate()
 {
     log.Info("Passivating");
     if (_processData != null)
     {
         _processDataXmlString = _processData.OuterXml;
     }
     _tokensInPlaces = null;
     _definition = null;
     _environment = null;
     _activated = false;
 }
 public void Add(ProcessDefinition pd)
 {
     _children.Add(pd);
 }
Exemplo n.º 58
0
        protected virtual void OnTestExecuteMultipleStepsSaveStateBetweenSteps()
        {
            var factory = new ProcessBuilderFactory();
            var builder = factory.CreateProcess(id: "com.klaudwerk.workflow.renewal",
                                                name: "Renewal", description: "Policy Renewal");
            IReadOnlyList <ProcessValidationResult> result;

            builder.Variables()
            .Name("Count")
            .Type(VariableTypeEnum.Int)
            .Done()
            .Start("s_1")
            .SetName("Start")
            .OnEntry()
            .Language(ScriptLanguage.CSharpScript)
            .Body("" +
                  " PropertySet.Set(\"Count\",(int?)1);" +
                  " return 1;")
            .Done()
            .Done()
            .Step("s_2")
            .OnEntry()
            .Language(ScriptLanguage.CSharpScript)
            .Body("" +
                  " PropertySet.Set(\"Count\",(int?)2);" +
                  " return 1;")
            .Done()
            .Done()
            .Step("s_3")
            .OnEntry()
            .Language(ScriptLanguage.CSharpScript)
            .Body("" +
                  " PropertySet.Set(\"Count\",(int?)3);" +
                  " return 1;")
            .Done()
            .Done()
            .End("e_1")
            .SetName("End Process")
            .Done()
            .Link()
            .From("s_1")
            .To("s_2")
            .Name("s_1_s_2")
            .Done()
            .Link()
            .From("s_2")
            .To("s_3")
            .Name("s_2_s_3")
            .Done()
            .Link()
            .From("s_3")
            .To("e_1")
            .Name("end")
            .Done()
            .TryValidate(out result);
            ProcessDefinition processDefinition          = builder.Build();
            IProcessDefinitionPersisnenceService service = GetProcessDefinitionPersistenceService();

            service.Create(processDefinition, ProcessDefStatusEnum.Active, 1);

            IProcessRuntimeService            pservice   = GetProcessRuntime();
            PropertySetCollection             collection = new PropertySetCollection(new PropertySchemaSet(new PropertySchemaFactory()));
            Mock <IProcessRuntimeEnvironment> mEnv       = new Mock <IProcessRuntimeEnvironment>();

            mEnv.SetupGet(m => m.PropertySet).Returns(collection).Verifiable();
            mEnv.Setup(m => m.TaskServiceAsync())
            .Returns(() =>
                     Task.FromResult(new ExecutionResult(StepExecutionStatusEnum.Suspend)))
            .Verifiable();
            IProcessRuntime runtime = pservice.Create(processDefinition, collection);

            string[] errors;
            runtime.TryCompile(out errors);
            IProcessRuntime        ufRuntime;
            StepRuntime            ufStep;
            IPropertySetCollection ufCollection;

            pservice.TryUnfreeze(runtime.Id, out ufRuntime, out ufStep, out ufCollection);
            Assert.IsNotNull(ufRuntime);
            Assert.IsNotNull(ufCollection);
            Assert.IsNull(ufStep);
            Assert.IsNull(ufCollection.Get <int?>("Count"));
            Assert.AreEqual(ProcessStateEnum.NotStarted, ufRuntime.State);

            Tuple <ExecutionResult, StepRuntime> exResult = runtime.Execute(runtime.StartSteps[0], mEnv.Object);

            Assert.IsNotNull(exResult);
            pservice.TryUnfreeze(runtime.Id, out ufRuntime, out ufStep, out ufCollection);
            Assert.AreEqual(1, ufCollection.Get <int?>("Count"));
            Assert.AreEqual(ProcessStateEnum.Ready, ufRuntime.State);
            Assert.IsNotNull(ufStep);
            Assert.AreEqual("s_2", ufStep.StepId);

            exResult = runtime.Execute(exResult.Item2, mEnv.Object);
            Assert.IsNotNull(exResult);
            pservice.TryUnfreeze(runtime.Id, out ufRuntime, out ufStep, out ufCollection);
            Assert.AreEqual(2, ufCollection.Get <int?>("Count"));
            Assert.AreEqual(ProcessStateEnum.Ready, ufRuntime.State);
            Assert.IsNotNull(ufStep);
            Assert.AreEqual("s_3", ufStep.StepId);

            exResult = runtime.Execute(exResult.Item2, mEnv.Object);
            Assert.IsNotNull(exResult);
            pservice.TryUnfreeze(runtime.Id, out ufRuntime, out ufStep, out ufCollection);
            Assert.AreEqual(3, ufCollection.Get <int?>("Count"));
            Assert.AreEqual(ProcessStateEnum.Ready, ufRuntime.State);
            Assert.IsNotNull(ufStep);
            Assert.AreEqual("e_1", ufStep.StepId);

            exResult = runtime.Execute(exResult.Item2, mEnv.Object);
            Assert.IsNotNull(exResult);
            pservice.TryUnfreeze(runtime.Id, out ufRuntime, out ufStep, out ufCollection);
            Assert.AreEqual(3, ufCollection.Get <int?>("Count"));
            Assert.AreEqual(ProcessStateEnum.Completed, ufRuntime.State);
            Assert.IsNull(ufStep);
        }
        public void AddBaseTable_ShouldUpdateIsFilterableProperty()
        {
            #region Arrange

            var visibleFields = new[] { BaseField1Name, BaseField3Name };

            var queryGenerator = new SearchQueryGeneratorTest();
            queryGenerator.SetNonFilteredColumns(null);
            queryGenerator.ResultColumns.AddRange(visibleFields);
            queryGenerator.LimitResultColumns = true;

            var baseProcessdefinition = new ProcessDefinition();
            var baseTableDefinition = new TableDefinition("TestBaseProcess");
            baseProcessdefinition.TableList.Insert(0, baseTableDefinition);
            baseTableDefinition.AddField(BaseField1Name, ColumnTypes.Numeric, null, true, true);
            baseTableDefinition.AddField(BaseField2Name, ColumnTypes.Object, null, true, true);
            baseTableDefinition.AddField(BaseField3Name, ColumnTypes.Object, null, true, false);

            #endregion Arrange

            // Act
            queryGenerator.AddBaseTable(baseProcessdefinition);

            // Assert
            Assert.IsTrue(queryGenerator.BaseFieldIsFilterable(BaseField1Name));
            Assert.IsFalse(queryGenerator.BaseFieldIsFilterable(BaseField2Name));
            Assert.IsFalse(queryGenerator.BaseFieldIsFilterable(BaseField3Name));
        }
Exemplo n.º 60
0
        public void RemoveBuildInColumnsTest()
        {
            #region Arrange

            const string FieldName = "Field1";
            const string CrFieldName = "CrossRef1";
            const string McrFieldName = "MultiCrossRef1";

            var processdefinition = new ProcessDefinition();
            var tableDefinition = new TableDefinition("TestProcess");

            processdefinition.TableList.Insert(0, tableDefinition);
            tableDefinition.AddField(FieldName, ColumnTypes.String, null, true, true);

            processdefinition.SingleCrossReferenceFields.Add(
                new ReferenceFieldDefinition
                    {
                        ColumnType = ColumnTypes.Reference,
                        SystemName = Constants.CurrentStateColumnName
                    });

            processdefinition.SingleCrossReferenceFields.Add(
                new ReferenceFieldDefinition
                    {
                        ColumnType = ColumnTypes.Reference,
                        SystemName = CrFieldName
                    });

            processdefinition.MultiCrossReferenceFields.Add(
                new ReferenceFieldDefinition
                {
                    ColumnType = ColumnTypes.MultiReference,
                    SystemName = McrFieldName
                });

            processdefinition.MultiCrossReferenceFields.Add(
                new ReferenceFieldDefinition
                    {
                        ColumnType = ColumnTypes.MultiReference,
                        SystemName = Constants.PaperclipsColumnName
                    });

            #endregion Arrange

            // Act
            processdefinition.RemoveBuildInColumns();

            // Assert
            Assert.AreEqual(processdefinition.TableList.Count, 1);
            Assert.AreEqual(processdefinition.TableList[0].GetFields().Count, 1);
            Assert.AreEqual(processdefinition.SingleCrossReferenceFields.Count, 1);
            Assert.AreEqual(processdefinition.SingleCrossReferenceFields[0].SystemName, CrFieldName);
            Assert.AreEqual(processdefinition.MultiCrossReferenceFields.Count, 1);
            Assert.AreEqual(processdefinition.MultiCrossReferenceFields[0].SystemName, McrFieldName);
        }