이 섹션에서는 재귀적(Recursive) 워크플로의 정의와 설정 방법에 대해 설명합니다.
API 워크플로는 재귀적으로 설정할 수 있습니다. 즉, 워크플로는 워크플로 자체를 반복시킬 수 있습니다.
- 이것은 기본적인 Bubble 워크플로우 기능이 아니라 Bubble의 백엔드 기능을 결합한 방식입니다.
- 프로그래밍 개발자라면 이것을 "for" 루프 또는 "do while"과 비슷한 기능이라고 생각하면 됩니다.
API 워크플로 자체 실정 일정을 재귀적으로 변경하면 다음을 실행시킬 수 있습니다.
- 데이터 List에 대한 처리를 수행하기 위해 워크플로를 반복
- 설정되거나 유연한 간격으로 자동 실행되는 워크플로 설정
(1) 데이터 List 처리
재귀 워크플로는 데이터베이스 레코드 목록에 일부 처리를 적용하려는 경우와 같이 일련의 작업을 여러 번 반복하는 데 유용합니다.
Make changes to a list of things(데이터 목록 변경) Action을 사용하는 대신 이 작업을 수행하려는 이유는 서버 리소스를 훨씬 더 많이 제어할 수 있기 때문입니다.
- 데이터베이스 작업은 서버의 리소스를 사용하며 수백 또는 수천 개의 데이터베이스 레코드에 동시에 또는 매우 짧은 간격으로 쓰려고 하면 속도가 느려지거나 시간이 초과될 수 있습니다.
- 재귀 워크플로를 사용하여 Bubble이 각 항목을 하나씩 검토하도록 지시할 수 있으며 각 반복 사이에 사용자 지정 가능한 지연을 설정하여 서버 리소스를 과도하게 사용하지 않도록 할 수 있습니다.
- 하나씩 처리해야 하는 항목 목록이 있다고 상상해 보십시오. 재귀 워크플로를 사용하여 항목을 처리할 수 있습니다.
1. 백엔드 워크플로우 만들기
- 먼저 처리하려는 데이터 유형이 포함된 매개변수로 API 워크플로를 설정합니다. Is list/array를 c체크 확인하여 단일 레코드가 아닌 항목 목록을 전달하고 있음을 Bubble에 알리십시오 이 예에서는 매개변수 rentalunits를 호출하고 데이터 유형을 임대 단위로 설정합니다.
- 이제 수행하려는 Action을 추가하십시오. 이 예시에서는 임대 단위 이름에 대한 임의의 문자열을 생성합니다. 변경할 데이터를 rentalunits:first item으로 설정합니다. 이렇게 하면 목록의 첫 번째 항목을 변경할 수 있습니다.
- 이제 무작위 문자열 계산 기능을 사용하여 단위 이름 필드를 변경합니다.
- 다음 단계는 이것을 재귀적 워크플로우로 만드는 것입니다.
2. 재귀 워크플로우 설정
이제 Schedule API Workflow를 사용하여 워크플로를 다시 실행합니다.
다음 세 가지 사항을 포함하는 것이 중요합니다.
- 먼저 워크플로를 약간 미래로 예약합니다. 이는 루핑이 너무 빨리 발생하여 너무 많은 서버 용량을 소비하는 것을 방지하기 위한 것입니다. Current date/time + seconds: 1(현재 날짜/시간 + 초: 1)에서 다음 반복을 예약하여 Bubble이 각 주기 사이에 1초 동안 대기하도록 합니다. Action이 많은 복잡한 워크플로가 있는 경우 대기 시간을 늘리는 것이 좋습니다.
- 다음과 같은 연산을 생각해야 합니다. 워크플로우에 전달된 것과 동일한 목록을 전달해야 하지만 이 전에 실행된 항목은 제거해야 합니다. 이렇게 하면 루프의 목록에 있는 다음 항목에서 작업을 이어서 할 수 있습니다. 다음과 같이 매개변수 rentalunits:minus item:rentalunits:first item을 전달하여 이를 수행합니다.
- 그런 다음 다음 항목이 있는지 확인하는 조건을 추가해야 합니다. 첫 번째 항목이 제거된 후 남은 항목 수를 세어 항목의 개수가 0보다 클 때 이를 수행합니다. (rentalunits:minus item:rentalunits:first item:count > 0) 이 조건은 워크플로가 영원히 반복되지 않고 횟수가 0일 때 중지되도록 합니다.
(2) 설정된 간격으로 반복 실행
설정된 간격 또는 유연한 간격으로 실행되도록 워크플로를 설정하려면 current date/time + any value (현재 날짜/시간 + 주기 사이에 원하는 값)을 사용자에게 재예약 작업을 설정하기만 하면 됩니다.
예시)
예를 들어 current date/time + month:1 (현재 날짜/시간 + 월:1)을 사용하도록 일정 작업을 설정하면 주기가 예약된 시간부터 매월 정확히 한 번 실행됩니다.