Принцип работы

FlowCrawler представляет из себя конструктор логических схем.

Вы строите схему, добавляя в неё различные блоки. 
Каждый блок выполняет одну конкретную операцию. 

Блоки имеют входы и выходы, что позволяет их связывать между собой.
На вход блок получает параметры, необходимые для выполнения операции.
На выходе блок отправляет результаты своей работы другим подключенным к нему блокам.

Стартовый блок

При запуске проекта FlowCrawler автоматически определяет стартовый блок (т.е. начало схемы).
Стартовым считается блок, который не имеет ни одного подключения на входе, но имеет хотя бы одно подключение на выходе. 

С этого блока начинается выполнение проекта. Проект завершается когда выполнение вновь вернется к стартовому блоку (т.е. когда все блоки находящиеся за ним закончат свою работу). Завершить проект досрочно можно при помощи блока Остановить проект.

Есть исключения: блоки Константа, Вход и Выход не могут быть стартовыми. Если один из таких блоков подпадает под условия стартового, то стартовым становится не он, а следующий за ним.

Запуск блоков

Для того, чтобы блок запустился, должно выполниться несколько условий:

  • Блок получает значение на свой вход от другого блока;
  • Все подключенные входы (т.е. все входы блока, принимающие данные с выходов других блоков) уже заполнены;
  • Все неподключенные (свободные) входы заполнены.

На скриншоте ниже показан блок Экспорт с двумя подключенными входами ("Название", "URL") и одним свободным ("Имя коллекции"):

Этот блок будет запущен сразу после того, как оба входа ("Название" и "URL") получат данные (т.к. вход "Имя коллекции" уже заполнен).

После выполнения на выходе "URL" появится значение, которое тут же будет передано следующим блокам.

Сброс значений после запуска

После того как блок запускается и выполняет свою операцию, он очищает значения на своих входах. Это делается для того, чтобы блок мог быть запущен заново с новыми данными. При этом, очищаются не все входы, а только имеющие наибольшее количество цикловых блоков по пути до стартового блока.

Цикловым блоком является любой блок, который может возвращать больше одного значения за раз. Например, блок Элементы является цикловым блоком, поскольку может возвращать по несколько элементов за раз (они циклически перебираются и отправляются по очереди, см. ниже). Аналогично с блоками Список файлов, Диапазон и любыми другими, возвращающими более одного значения.

Рассмотрим пример схемы:

Здесь блок Экспорт имеет два подключенных входа, но после запуска будет очищен только один из них. Стартовым блоком является Браузер. Блок Элементы является цикловым блоком. Таким образом, от входа "Название" до стартового блока встречается 1 цикловый блок. От входа "URL" до старта нет цикловых блоков. Значит, вход "Название" будет очищен, а вход "URL" нет. 

Передача значений

После того, как блок выполнен, он размещает результаты своей работы на подключенные выходы, для передачи далее по схеме.

Если на выходе размещается более одного значения, то они передаются по очереди - отправляется первое, все зависимые от него блоки выполняются, затем выполнение возвращается к текущему блоку, отправляется второе значение и т.д. 

Если блок имеет несколько выходов, то они обрабатывается последовательно: сначала отправляются все значения по-очереди с первого выхода, затем со второго и т.д. Выходы обрабатываются в том порядке, в котором они визуально представлены на схеме блока (от верхнего к нижнему).

После того как все значения переданы, блок возвращает выполнение тому блоку, который его запускал (т.е. тому блоку, который прислал последнее входное значение перед запуском).