protected internal virtual IList <IProcessDefinitionEntity> FindProcessDefinition(ICommandContext commandContext)
        {
            // If process definition is already provided (eg. when command is called through the DeployCmd)
            // we don't need to do an extra database fetch and we can simply return it, wrapped in a list
            if (processDefinitionEntity != null)
            {
                return(new List <IProcessDefinitionEntity>(new IProcessDefinitionEntity[] { processDefinitionEntity }));
            }

            // Validation of input parameters
            if (string.IsNullOrWhiteSpace(processDefinitionId) && string.IsNullOrWhiteSpace(processDefinitionKey))
            {
                throw new ActivitiIllegalArgumentException("Process definition id or key cannot be null");
            }

            IList <IProcessDefinitionEntity> processDefinitionEntities = new List <IProcessDefinitionEntity>();
            IProcessDefinitionEntityManager  processDefinitionManager  = commandContext.ProcessDefinitionEntityManager;

            if (!string.IsNullOrWhiteSpace(processDefinitionId))
            {
                IProcessDefinitionEntity processDefinitionEntity = processDefinitionManager.FindById <IProcessDefinitionEntity>(new KeyValuePair <string, object>("id", processDefinitionId));
                if (processDefinitionEntity == null)
                {
                    throw new ActivitiObjectNotFoundException("Cannot find process definition for id '" + processDefinitionId + "'", typeof(IProcessDefinition));
                }
                processDefinitionEntities.Add(processDefinitionEntity);
            }
            else
            {
                IProcessDefinitionQuery query = new ProcessDefinitionQueryImpl(commandContext).SetProcessDefinitionKey(processDefinitionKey);

                if (tenantId is null || ProcessEngineConfiguration.NO_TENANT_ID.Equals(tenantId))
                {
                    query.SetProcessDefinitionWithoutTenantId();
                }
예제 #2
0
        protected internal virtual IProcessDefinition findNewLatestProcessDefinitionAfterRemovalOf(IProcessDefinition processDefinitionToBeRemoved)
        {
            // The latest process definition is not necessarily the one with 'version -1' (some versions could have been deleted)
            // Hence, the following logic

            ProcessDefinitionQueryImpl query = new ProcessDefinitionQueryImpl();

            query.SetProcessDefinitionKey(processDefinitionToBeRemoved.Key);

            if (!ReferenceEquals(processDefinitionToBeRemoved.TenantId, null) && !Engine.ProcessEngineConfiguration.NO_TENANT_ID.Equals(processDefinitionToBeRemoved.TenantId))
            {
                query.SetProcessDefinitionTenantId(processDefinitionToBeRemoved.TenantId);
            }
            else
            {
                query.SetProcessDefinitionWithoutTenantId();
            }

            query.SetProcessDefinitionVersionLowerThan(processDefinitionToBeRemoved.Version);
            query.OrderByProcessDefinitionVersion().Desc();

            IList <IProcessDefinition> processDefinitions = ProcessDefinitionEntityManager.FindProcessDefinitionsByQueryCriteria(query, new Page(0, 1));

            if (processDefinitions != null && processDefinitions.Count > 0)
            {
                return(processDefinitions[0]);
            }
            return(null);
        }
예제 #3
0
        /// <summary>
        /// 读取分页记录
        /// </summary>
        /// <param name="repositoryService">仓储服务</param>
        /// <param name="pageableRepositoryService">分页仓储服务</param>
        /// <param name="qo">查询对象</param>
        /// <returns></returns>
        public IPage <ProcessDefinition> LoadPage(IRepositoryService repositoryService, PageableProcessDefinitionRepositoryService pageableRepositoryService, ProcessDefinitionQuery qo)
        {
            ProcessDefinitionQueryImpl query = repositoryService.CreateProcessDefinitionQuery() as ProcessDefinitionQueryImpl;

            FastCopy.Copy <ProcessDefinitionQuery, ProcessDefinitionQueryImpl>(qo, query);

            pageableRepositoryService.SortApplier.ApplySort(query, qo.Pageable);

            IPage <ProcessDefinition> defs = pageableRepositoryService.PageRetriever.LoadPage(query, qo.Pageable, pageableRepositoryService.ProcessDefinitionConverter);

            return(defs);
        }
        public virtual Task <string> GetProcessModel(ProcessDefinitionQuery query)
        {
            if (query == null)
            {
                throw new ArgumentNullException("query");
            }

            ProcessDefinitionQueryImpl qo = repositoryService.CreateProcessDefinitionQuery() as ProcessDefinitionQueryImpl;

            FastCopy.Copy <ProcessDefinitionQuery, ProcessDefinitionQueryImpl>(query, qo);
            qo.SetLatestVersion();

            IProcessDefinition processDefinition = qo.SingleResult();

            return(GetProcessModel(processDefinition.Id));
        }
예제 #5
0
        public virtual void DeleteDeployment(string deploymentId, bool cascade)
        {
            IList <IProcessDefinition> processDefinitions = new ProcessDefinitionQueryImpl().SetDeploymentId(deploymentId).List();

            //判断是否存在正在执行的流程
            long count = new ExecutionQueryImpl()
                         .SetProcessDeploymentId(deploymentId)
                         .Count();

            //判断是否存在历史流程
            count = count > 0 ? count : new HistoricProcessInstanceQueryImpl()
                    .SetDeploymentId(deploymentId)
                    .Count();

            if (count > 0)
            {
                throw new ExistsProcessInstanceException(processDefinitions[0].Name);
            }

            updateRelatedModels(deploymentId);

            if (cascade)
            {
                deleteProcessInstancesForProcessDefinitions(processDefinitions);
            }

            foreach (IProcessDefinition processDefinition in processDefinitions)
            {
                deleteProcessDefinitionIdentityLinks(processDefinition);
                deleteEventSubscriptions(processDefinition);
                deleteProcessDefinitionInfo(processDefinition.Id);

                removeTimerStartJobs(processDefinition);

                // If previous process definition version has a timer/signal/message start event, it must be added
                // Only if the currently deleted process definition is the latest version,
                // we fall back to the previous timer/signal/message start event

                restorePreviousStartEventsIfNeeded(processDefinition);
            }

            deleteProcessDefinitionForDeployment(deploymentId);
            ResourceEntityManager.DeleteResourcesByDeploymentId(deploymentId);
            Delete(FindById <DeploymentEntityImpl>(new KeyValuePair <string, object>("id", deploymentId)), false);
        }
예제 #6
0
        // process definition query ////////////////////////////////

        public virtual void configureProcessDefinitionQuery(ProcessDefinitionQueryImpl query)
        {
            configureQuery(query, PROCESS_DEFINITION, "RES.KEY_");

            if (query.StartablePermissionCheck)
            {
                AuthorizationCheck authorizationCheck = query.AuthCheck;

                if (!authorizationCheck.RevokeAuthorizationCheckEnabled)
                {
                    CompositePermissionCheck permCheck = (new PermissionCheckBuilder()).atomicCheck(PROCESS_DEFINITION, "RES.KEY_", Permissions.CREATE_INSTANCE).build();

                    query.addProcessDefinitionCreatePermissionCheck(permCheck);
                }
                else
                {
                    CompositePermissionCheck permissionCheck = (new PermissionCheckBuilder()).conjunctive().atomicCheck(PROCESS_DEFINITION, "RES.KEY_", READ).atomicCheck(PROCESS_DEFINITION, "RES.KEY_", Permissions.CREATE_INSTANCE).build();
                    addPermissionCheck(authorizationCheck, permissionCheck);
                }
            }
        }
예제 #7
0
        public virtual IDeploymentEntity SaveDraft(IDeploymentEntity deployment)
        {
            IDeploymentEntity exist = this.FindLatestDeploymentByName(deployment.Name);

            if (exist != null)
            {
                IProcessDefinition process = new ProcessDefinitionQueryImpl()
                                             .SetDeploymentId(exist.Id)
                                             .SetLatestVersion()
                                             .SingleResult();

                if (process == null)
                {
                    this.DeleteDeployment(exist.Id, true);
                }
            }

            deployment.New = true;

            this.Insert(deployment);

            return(deployment);
        }
예제 #8
0
 protected internal virtual void configureProcessDefinitionQuery(ProcessDefinitionQueryImpl query)
 {
     AuthorizationManager.configureProcessDefinitionQuery(query);
     TenantManager.configureQuery(query);
 }
예제 #9
0
        public virtual IList <ProcessDefinition> findProcessDefinitionsByKey(string processDefinitionKey)
        {
            ProcessDefinitionQueryImpl processDefinitionQuery = (new ProcessDefinitionQueryImpl()).processDefinitionKey(processDefinitionKey);

            return(findProcessDefinitionsByQueryCriteria(processDefinitionQuery, null));
        }
예제 #10
0
 public virtual long findProcessDefinitionCountByQueryCriteria(ProcessDefinitionQueryImpl processDefinitionQuery)
 {
     configureProcessDefinitionQuery(processDefinitionQuery);
     return((long?)DbEntityManager.selectOne("selectProcessDefinitionCountByQueryCriteria", processDefinitionQuery).Value);
 }
예제 #11
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @SuppressWarnings({ "unchecked" }) public java.util.List<org.camunda.bpm.engine.repository.ProcessDefinition> findProcessDefinitionsByQueryCriteria(org.camunda.bpm.engine.impl.ProcessDefinitionQueryImpl processDefinitionQuery, org.camunda.bpm.engine.impl.Page page)
        public virtual IList <ProcessDefinition> findProcessDefinitionsByQueryCriteria(ProcessDefinitionQueryImpl processDefinitionQuery, Page page)
        {
            configureProcessDefinitionQuery(processDefinitionQuery);
            return(DbEntityManager.selectList("selectProcessDefinitionsByQueryCriteria", processDefinitionQuery, page));
        }