2013-06-19 2 views
3

프로세스 인스턴스에서 변수 맵을 얻는 방법이 있습니까, 아니면 실행을 사용하면 실행 프로세스를 사용하여 프로세스 인스턴스의 변수 맵을 얻는 데 항상 도움이되지 않습니다. 인스턴스가 두 번 이상 실행될 수 있습니다.프로세스 인스턴스에서 변수 맵 가져 오기

+0

독자 : bpmn 태그를 기록하십시오. 여기서 * process *는 비즈니스 프로세스를 나타낼 가능성이 큽니다. –

+1

그래서 ... –

답변

3

나는 비슷한 문제에 직면 해있다. 변수 맵을 얻으려면 실행이 필요합니다. 말했듯이 주어진 프로세스 인스턴스에 대해 둘 이상의 실행이있을 수 있습니다. 따라서 변수가있는 곳에서 루트 실행을 찾아야합니다. 루트 실행을 찾기 위해 몇 가지 코드를 작성했습니다. 둘 이상의 중첩 호출 활동이있는 프로세스에 대해 테스트했습니다. I 하위 프로세스에 대해 그것을 시도하지 않은하지만 난 당신이 일을 얻을 수 있다고 생각 :

ExecutionEntity executionEntity = (ExecutionEntity) runtimeService.createExecutionQuery().executionId(executionId).singleResult(); 
if (executionEntity == null) { 
    return null; 
} 
String parentId = executionEntity.getParentId(); 
boolean parentNotEmpty = StringUtils.isNotEmpty(parentId); 
String superExecutionId = executionEntity.getSuperExecutionId(); 
boolean superNotEmpty = StringUtils.isNotEmpty(superExecutionId); 
if (parentNotEmpty) { 
    return getRootExecution(parentId); 
} else if (superNotEmpty) { 
    return getRootExecution(superExecutionId); 
} else { 
    return executionEntity; 
} 

이 조각은 프로세스 인스턴스에 속한 실행 ID를 가져옵니다, 당신은 그들 중 하나를 제공 할 수 있습니다. 루트 실행을 반환합니다. 이 코드를 사용하면 변수를 얻을 수 있습니다.

Object variable = getRuntimeService().getVariable(rootExecutionId, variableName); 
+0

감사합니다. 충분할 것입니다. –

+0

@BOB 그것을 듣고 기꺼이, 당신이 도움이된다면 대답으로 서명 할 수 있습니다. – GokcenG

+0

어떻게? 나는 스택에 익숙하지 않고 가이드를 읽을 시간이 없다. 다시 한번 감사드립니다. –

2

org.activiti.engine.RuntimeService.getVariable*(*)을 보시면 모든 프로세스 인스턴스 변수에 액세스 할 수 있습니다. 프로세스 인스턴스를 식별하려면 실행 ID가 필요합니다. 이것이 원하는 것이 아니라면 질문을 수정하십시오.

+0

실행 ID를 사용하면 프로세스 인스턴스가 실행 ID보다 많을 때 효율적이지 않으므로 실행 ID가 아닌 프로세스 인스턴스 ID를 사용하여 변수를 가져와야합니다. –