示例#1
0
        public string StartProcess(string definitionId, Dictionary <string, object> inputData)
        {
            string ret = null;

            RunProcessTransaction(this.DefaultPersistenceMode, ps =>
            {
                var pd      = this.GetProcessDef(definitionId);
                var pscript = this.GetProcessScriptRuntime(definitionId);

                string instanceId  = Guid.NewGuid().ToString("N");
                ProcessInstance pi = new ProcessInstance
                {
                    InstanceId          = instanceId,
                    ProcessDefinitionId = definitionId,
                    ProcessInstanceId   = instanceId,
                    TaskId = pd.Body.Id
                };
                pi.Activate(ps, pd, pscript);
                ps.PersisterSession.SaveNew(pi);
                pi.Enable(inputData);
                pi.Deactivate();
                ps.PersisterSession.Update(pi);
                ret = pi.InstanceId;
            });
            return(ret);
        }
示例#2
0
        public string StartProcess(string definitionId, Dictionary <string, object> inputData)
        {
            string ret = null;

            RunProcessTransaction(this.DefaultPersistenceMode, ps =>
            {
                var pd      = this.GetProcessDef(definitionId);
                var pscript = this.GetProcessScriptRuntime(definitionId);

                var instanceId = Guid.NewGuid().ToString("N");
                var pi         = new ProcessInstance
                {
                    InstanceId          = instanceId,
                    ProcessDefinitionId = definitionId,
                    ProcessInstanceId   = instanceId,
                    TaskId = pd.Body.Id
                };
                pi.Activate(ps, pd, pscript);
                ps.TaskPersister.SaveNew(pi);
                log.Info(
                    $"\n --- Created process {pi.ProcessDefinitionId} instance {pi.InstanceId}. Data: {Jsonizer.ToJsonString(inputData)}");
                pi.Enable(inputData);
                pi.Deactivate();
                ps.TaskPersister.Update(pi);
                ret = pi.InstanceId;
            });
            return(ret);
        }
示例#3
0
        public string StartProcessInstance(string definitionId, string inputXml, string processCorrelationId)
        {
            try
            {
                ProcessDefinition pd = PackageRepository.GetProcess(definitionId);
                if (pd == null) throw new ApplicationException("Process definition not found: " + definitionId);
                pd.ValidateProcessInputXml(inputXml);
                using (TransactionScope ts = new TransactionScope(_transactionOption))
                {
                    ProcessInstance pi = new ProcessInstance();
                    pi.StartDate = DateTime.Now;
                    pi.StartedBy = System.Threading.Thread.CurrentPrincipal.Identity.Name;
                    pi.InstanceId = Guid.NewGuid().ToString("N");
                    pi.ProcessDefinitionId = definitionId;
                    pi.Environment = this;
                    pi.Activate();

                    log.Info("Created new process instance for process {0}.{1}: {2}", pd.Name, pd.Version, pi.InstanceId);
                    pi.SetProcessInputData(inputXml);
                    pi.CreateStartToken();
                    pi.Passivate();
                    InstanceRepository.InsertNewProcessInstance(pi);
                    ts.Complete();
                    NotifyReadyProcessSaved();
                    return pi.InstanceId;
                }
            }
            catch (Exception ex)
            {
                log.Error(string.Format("Error starting process: {0}", ex));
                throw;
            }
        }