Пример #1
0
        public IProcessInstance StartProcessInstance(long processDefinitionId, IDictionary attributeValues = null, string transitionName = null, Relations relations = null)
        {
            ProcessInstanceImpl  processInstance     = null;
            IOrganisationService organisationService = null;

            using (ISession session = NHibernateHelper.OpenSession())
            {
                using (var tran = session.BeginTransaction())
                {
                    DbSession             dbSession         = new DbSession(session);
                    ProcessDefinitionImpl processDefinition = myProcessDefinitionService.GetProcessDefinition(processDefinitionId, dbSession);
                    processInstance = new ProcessInstanceImpl(ActorId, processDefinition);
                    processInstanceRepository.Save(processInstance, dbSession);//到這裏應該存了ProcessInstance,RootFlow

                    ExecutionContext executionContext = new ExecutionContext();
                    //logRepository.CreateLog();
                    processDefinition.StartState.CheckAccess(attributeValues);

                    attributeService = new AttributeService((FlowImpl)processInstance.RootFlow, dbSession);
                    attributeService.StoreAttributeValue(attributeValues);//儲存傳入的欄位值
                    attributeService.StoreRole(organisationService.FindActorById(ActorId), (ActivityStateImpl)processDefinition.StartState);

                    //flow的node推進到下一關卡
                    //flow的actor=解析出來的actor.Id
                    transitionService = new TransitionService(ActorId, dbSession);
                    TransitionImpl transitionTo = transitionService.GetTransition(transitionName, processDefinition.StartState, dbSession);
                    transitionService.ProcessTransition(transitionTo, (FlowImpl)processInstance.RootFlow, dbSession);

                    session.Flush();
                    tran.Commit();
                }
            }

            return(processInstance);
        }
Пример #2
0
        public ProcessInstanceImpl GetProcessInstance(Int64 processInstanceId, Relations relations, DbSession dbSession)
        {
            ProcessInstanceImpl processInstance = null;

            log.Debug("searching for process instances...");
            processInstance = (ProcessInstanceImpl)dbSession.Load(typeof(ProcessInstanceImpl), processInstanceId);
            Resolve((FlowImpl)processInstance.RootFlow, relations, dbSession);
            return(processInstance);
        }
Пример #3
0
        public virtual IProcessInstance GetProcessInstance(Int64 processInstanceId, Relations relations)
        {
            ProcessInstanceImpl processInstance = null;
            DbSession           dbSession       = null;

            dbSession       = OpenSession();
            processInstance = implementation.GetProcessInstance(processInstanceId, relations, dbSession);
            return(processInstance);
        }
Пример #4
0
        private IAuthorizationHandler GetHandlerFromProcessInstanceId(Int64 processInstanceId, DbSession dbSession)
        {
            ProcessInstanceImpl processInstance = null;

            ;
            try
            {
                processInstance = (ProcessInstanceImpl)dbSession.Load(typeof(ProcessInstanceImpl), processInstanceId);
            }
            catch (ObjectNotFoundException e)
            {
                throw new ArgumentException("couldn't check authorization : process instance with id '" + processInstanceId + "' does not exist : " + e.Message);
            }
            return(GetAuthorizationHandler((ProcessDefinitionImpl)processInstance.ProcessDefinition));
        }
Пример #5
0
 public void Save(ProcessInstanceImpl processInstance, DbSession dbSession)
 {
     dbSession.Save(processInstance);
 }