워크플로에서 다른 워크플로를 호출하는 방법은 네 가지입니다. 각 워크플로 호출 방법은 다른 워크플로 스키마 요소로 나타납니다.

동기 워크플로

워크플로는 다른 워크플로를 동기식으로 시작할 수 있습니다. 호출된 워크플로는 호출하는 워크플로 실행의 필수 부분으로 실행되며 호출하는 워크플로와 같은 메모리 공간에서 실행됩니다. 호출하는 워크플로는 다른 워크플로를 시작한 다음 호출된 워크플로 실행이 종료될 때까지 기다렸다가 스키마에 있는 다음 요소의 실행을 시작합니다. 일반적으로 호출하는 워크플로는 호출된 워크플로의 출력을 후속 스키마 요소의 입력 매개 변수로 요구하기 때문에 워크플로를 동기식으로 호출합니다. 예를 들어 워크플로가 가상 시스템 시작을 호출하고 워크플로가 가상 시스템을 시작하는 것을 기다린 다음 이 가상 시스템의 IP 주소를 가져와 다른 요소나 사용자에게 메일로 전달할 수 있습니다.

비동기 워크플로

워크플로는 비동기식으로 워크플로를 시작할 수 있습니다. 호출하는 워크플로는 다른 워크플로를 시작하지만 호출된 워크플로의 결과를 기다리지 않습니다. 호출하는 워크플로는 즉시 스키마의 다음 요소를 계속 실행합니다. 호출된 워크플로는 호출하는 워크플로가 정의한 입력 매개 변수를 사용해 실행되지만 호출된 워크플로의 수명 주기는 호출하는 워크플로의 수명 주기와 독립적입니다. 비동기 워크플로를 사용하면 입력 매개 변수를 한 워크플로에서 다음 워크플로로 전달하는 일련의 워크플로를 생성할 수 있습니다. 예를 들어 워크플로는 실행 중 다양한 개체를 생성할 수 있습니다. 워크플로는 이후 자체적으로 실행될 때 이러한 개체를 입력 매개 변수로 사용하는 비동기 워크플로를 시작할 수 있습니다. 원래의 워크플로는 모든 필수 워크플로를 시작하고 나머지 요소를 실행하면 종료됩니다. 그러나 이 워크플로가 시작한 비동기 워크플로는 자신을 시작하게 한 워크플로와 독립적으로 계속 실행됩니다.

호출하는 워크플로가 호출된 워크플로의 결과를 기다리게 하려면 중첩된 워크플로를 사용하거나 호출된 워크플로의 워크플로 토큰 상태를 검색하고 워크플로가 완료되면 결과를 검색하는 스크립팅 가능한 작업을 생성하십시오.

스케줄링된 워크플로

워크플로는 워크플로를 호출할 수 있으나 이후 시간과 날짜까지 해당 워크플로의 시작을 지연할 수 있습니다. 호출하는 워크플로는 종료될 때까지 실행을 계속합니다. 스케줄링된 워크플로를 호출하면 지정된 시간과 날짜에 해당 워크플로를 시작하는 작업을 생성합니다. 호출하는 워크플로가 실행되면 Orchestrator 클라이언트의 스케줄러내 Orchestrator 보기에서 스케줄링된 워크플로를 볼 수 있습니다.

스케줄링된 워크플로는 한 번만 실행됩니다. 동기 워크플로의 스크립팅 가능한 작업 요소에 Workflow.scheduleRecurrently 메서드를 호출해 반복적으로 실행되는 워크플로를 스케줄링할 수 있습니다.

중첩된 워크플로

워크플로는 단일 스키마 요소에 여러 개의 워크플로를 중첩해 동시에 여러 워크플로를 시작할 수 있습니다. 중첩된 워크플로 요소에 나열된 모든 워크플로는 호출하는 워크플로가 스키마의 중첩된 워크플로 요소에 도달하면 동시에 시작됩니다. 중첩된 각 워크플로는 호출하는 워크플로의 메모리 공간 중 서로 다른 메모리 공간에서 시작되는 것이 중요합니다. 호출하는 워크플로는 모든 중첩된 워크플로가 실행을 완료할 때까지 기다렸다가 스키마에 있는 다음 요소의 실행을 시작합니다. 호출하는 워크플로는 따라서 나머지 요소를 실행할 때 중첩된 워크플로의 결과를 입력 매개 변수로 사용할 수 있습니다.