n8n의 서브 워크플로우를 만들 때 설정 시 주의 할 체크리스트

 서브 워크플로우는 강력하다. 


너무 많은 노드가 한 워크플로우에 있을 경우 정신 사납다. 

다른 모듈로 빼는 리팩토링의 효과도 난다. 


근데 상당히 짜증나는 에러등이 있어서 주의해야 해서 

오늘 글을 써본다. 


* 서브 워크플로우 만드는 법은 크게 두가지다


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는 내가 거기 인풋으로 만든 변수 명으로 커스텀 네임이다. 

Previous Post Next Post