서브 워크플로우는 강력하다.
너무 많은 노드가 한 워크플로우에 있을 경우 정신 사납다.
다른 모듈로 빼는 리팩토링의 효과도 난다.
근데 상당히 짜증나는 에러등이 있어서 주의해야 해서
오늘 글을 써본다.
* 서브 워크플로우 만드는 법은 크게 두가지다
1>+버튼 누르면 flow가 있고 거기 Execute sub 워크플로우가 나온다.
다음 화면으로 진행되고
그 후 이제 Choose 메뉴에서 create a new subwork flow같은 것이 있다. 클릭하면 새 창이 나온다.
2>1번은 새로 만드는 건데 좀 다르게 일반 워크플로우를 서브워크플로우로 바꾸고 싶다면?
모든 노드를 (트리거 노드 빼고) 드래그 해서 오른클릭하면 convert to subworkflow가 나온다
*sub workflow 를 만든 후 반드시 필수로 꼭 해야 할 것을 정리해보자
1. 트리거되는 워크플로우의 노드에서도 똑같이 넘기는 인풋을 object로 바꿔주자.
String이 디폴트다.
+더 중요한 것은 expression으로 또 바꿔주는 것이다. fixed가 디폴트다.
동적인 데이터를 넘기기 위해서다. {{ $json }} 등으로 이제 인터폴레이션 형식을 써주자.
2.
When Executed by Another Workflow 라는 노드에서
data라는 필드 추가 후 이 포맷을 String말고 object로 바꿔주자.
그 이후 publish를 반드시 눌러야 이제 이걸 콜하는 쪽의 아우터 워크플로우에서
input넣는 칸이 활성화된다. 꼭 누르자.
publish가 되면 refresh버튼이 그제서야 생긴다.
1, 2의 순서가 정해져 있다. 먼저 그 트리거될 서브에서 인풋을 설정해야 2를 할 수 있다
그리고 그 트리거하는 노드에서 옵션에 Wait For Sub-Workflow Completion
자 이제 서브워크플로우에서 주의할 것, 실수하기 쉬운 것을 짚어보자.
1. edit fields
정보 설정 및 저장을 위해서
서브 워크플로우에서 쓸 경우 ..
나의 경우 item을 추가할 때 string이 기본 디폴트인데 object로 바꿔야 하는 경우가 많다.
이걸로 실수해서 시간 낭비 엄청하더라..
꼭 확인하자.
String으로 할 경우 참조 자체가 안되거나 혹은 이중으로 더블 인코딩으로 되어 결과물이 출력되는 것을 볼 수 있다.
2. sub workflow 에서 code js노드에서 전 노드 아닌 전전 다른 노드 절대참조하려면
$('When Executed by Another Workflow').first().json.data; 식으로 하자. .data는 내가 거기 인풋으로 만든 변수 명으로 커스텀 네임이다.