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; } }