/// <summary>
        ///
        /// </summary>
        public virtual IPage <ProcessInstance> GetAllProcessInstances(Pageable pageable)
        {
            IProcessInstanceQuery query = runtimeService.CreateProcessInstanceQuery();

            sortApplier.ApplySort(query, pageable);

            return(pageRetriever.LoadPage(runtimeService as ServiceImpl, query, pageable, processInstanceConverter, (q, firstResult, pageSize) =>
            {
                return new Engine.Impl.Cmd.GetProcessInstancesCmd(q, firstResult, pageSize);
            }));
        }
        /// <summary>
        ///
        /// </summary>
        public virtual IPage <ProcessInstance> GetProcessInstances(Pageable pageable)
        {
            IProcessInstanceQuery query = runtimeService.CreateProcessInstanceQuery();

            logger.LogWarning("Securite read not implementation");
            //query = securityService.restrictProcessInstQuery(query, SecurityPolicy.READ);

            sortApplier.ApplySort(query, pageable);

            return(pageRetriever.LoadPage(runtimeService as ServiceImpl, query, pageable, processInstanceConverter, (q, firstResult, pageSize) =>
            {
                return new Engine.Impl.Cmd.GetProcessInstancesCmd(q, firstResult, pageSize);
            }));
        }
        public virtual IProcessInstance Execute(ICommandContext commandContext)
        {
            var runtimeService = commandContext.ProcessEngineConfiguration.RuntimeService;

            IProcessInstanceQuery query = runtimeService.CreateProcessInstanceQuery();

            query = query.SetProcessInstanceId(instanceId);
            IProcessInstance processInstance = query.SingleResult();

            if (processInstance != null)
            {
                ExecutionEntityImpl.EnsureStarterInitialized(new ExecutionEntityImpl[] { processInstance as ExecutionEntityImpl });
            }

            return(processInstance);
        }
Esempio n. 4
0
        public virtual IList <IProcessInstance> FindProcessInstanceAndVariablesByQueryCriteria(IProcessInstanceQuery query)
        {
            ProcessInstanceQueryImpl executionQuery = query as ProcessInstanceQueryImpl;

            // paging doesn't work for combining process instances and variables due
            // to an outer join, so doing it in-memory
            if (executionQuery.FirstResult < 0 || executionQuery.MaxResults <= 0)
            {
                return(new List <IProcessInstance>());
            }

            int firstResult = executionQuery.FirstResult;
            int maxResults  = executionQuery.MaxResults;

            // setting max results, limit to 20000 results for performance reasons
            if (executionQuery.ProcessInstanceVariablesLimit != null)
            {
                executionQuery.MaxResults = executionQuery.ProcessInstanceVariablesLimit.GetValueOrDefault();
            }
            else
            {
                executionQuery.MaxResults = ProcessEngineConfiguration.ExecutionQueryLimit;
            }
            executionQuery.FirstResult = 0;

            IList <IProcessInstance> instanceList = DbSqlSession.SelectListWithRawParameterWithoutFilter <ExecutionEntityImpl, IProcessInstance>("selectProcessInstanceWithVariablesByQueryCriteria", executionQuery, executionQuery.FirstResult, executionQuery.MaxResults);

            if (instanceList != null && instanceList.Count > 0)
            {
                if (firstResult > 0)
                {
                    if (firstResult <= instanceList.Count)
                    {
                        int toIndex = firstResult + Math.Min(maxResults, instanceList.Count - firstResult);
                        return(instanceList.Skip(firstResult).Take(toIndex).ToList());
                    }
                    else
                    {
                        return(new List <IProcessInstance>());
                    }
                }
                else
                {
                    int toIndex = Math.Min(maxResults, instanceList.Count);
                    return(instanceList.Skip(0).Take(toIndex).ToList());
                }
            }
            return(new List <IProcessInstance>());
        }
Esempio n. 5
0
 public virtual IList <IProcessInstance> FindProcessInstanceByQueryCriteria(IProcessInstanceQuery executionQuery)
 {
     return(DbSqlSession.SelectList <ExecutionEntityImpl, IProcessInstance>("selectProcessInstanceByQueryCriteria", executionQuery, !performanceSettings.EnableEagerExecutionTreeFetching)); // False -> executions should not be cached if using executionTreeFetching
 }
Esempio n. 6
0
 public virtual long FindProcessInstanceCountByQueryCriteria(IProcessInstanceQuery executionQuery)
 {
     return(DbSqlSession.SelectOne <ExecutionEntityImpl, long?>("selectProcessInstanceCountByQueryCriteria", executionQuery).GetValueOrDefault());
 }
Esempio n. 7
0
        public bool Execute(ICommandContext commandContext)
        {
            try
            {
                ICommandExecutor commandExecutor = commandContext.ProcessEngineConfiguration.CommandExecutor;

                List <IProcessInstance> processInstances = new List <IProcessInstance>();

                if (string.IsNullOrWhiteSpace(processInstanceId) == false)
                {
                    if (!(commandExecutor.Execute(new GetProcessInstanceByIdCmd(processInstanceId)) is IProcessInstance processInstance))
                    {
                        throw new ActivitiObjectNotFoundException(string.Concat("Unable to find process instance for the given id: ", processInstanceId));
                    }

                    processInstances.Add(processInstance);
                }
                else if (string.IsNullOrWhiteSpace(businessKey) == false)
                {
                    IRuntimeService runtimeService = commandContext.ProcessEngineConfiguration.RuntimeService;

                    IProcessInstanceQuery query = runtimeService.CreateProcessInstanceQuery()
                                                  .SetProcessInstanceBusinessKey(businessKey);

                    if (query is ProcessInstanceQueryImpl pqi)
                    {
                        pqi.IncludeChildExecutionsWithBusinessKeyQuery = false;
                    }

                    var list = commandExecutor.Execute(new GetProcessInstancesCmd(query, 0, int.MaxValue));

                    if (list.Count == 0)
                    {
                        throw new ActivitiObjectNotFoundException(string.Concat("Unable to find process instance for the given businessKey: ", businessKey));
                    }

                    processInstances.AddRange(list);
                }

                foreach (IProcessInstance processInstance in processInstances)
                {
                    IProcessDefinition processDefinition = commandExecutor.Execute(new GetDeploymentProcessDefinitionCmd(processInstance.ProcessDefinitionId));
                    if (processDefinition is null)
                    {
                        throw new ActivitiObjectNotFoundException(string.Concat("Unable to find process definition for the given id: ", processInstance.ProcessDefinitionId));
                    }

                    commandExecutor.Execute(new SetExecutionVariablesCmd(processInstance.Id, variables, false));

                    string delReason = reason ?? "Cancelled";

                    IList <ITask> tasks = commandExecutor.Execute(new GetTasksByProcessInstanceIdCmd(new string[] { processInstance.Id }));

                    foreach (var task in tasks)
                    {
                        commandExecutor.Execute(new AddCommentCmd(task.Id, processInstance.Id, delReason));
                    }

                    commandExecutor.Execute(new DeleteProcessInstanceCmd(processInstance.Id, delReason));
                }
            }
            catch (NullReferenceException ex)
            {
                logger.LogError($"终止流程失败:{ex.StackTrace}");
                throw;
            }

            return(true);
        }
Esempio n. 8
0
 public virtual IList <IProcessInstance> FindProcessInstanceByQueryCriteria(IProcessInstanceQuery executionQuery)
 {
     return(executionDataManager.FindProcessInstanceByQueryCriteria(executionQuery));
 }
Esempio n. 9
0
 public virtual long FindProcessInstanceCountByQueryCriteria(IProcessInstanceQuery executionQuery)
 {
     return(executionDataManager.FindProcessInstanceCountByQueryCriteria(executionQuery));
 }