Задача и предварительные условия
Позвольте оператору одобрить или отклонить набор заявок и вернуться к общему экспорту после выбранного действия.
В примере используются демонстрационные данные и настройки. Проверьте ожидаемый результат в своей среде до подключения рабочих получателей. Идентификаторы demo_* условны: выберите собственные учебные подключения или источники в редакторе. JSON ниже показывает структуру блоков и связей, а не готовый архив потока для переноса.
Учебные входные данные
requests.csv
Request;Status
R1;Draft
R2;Draft
Блоки, связи и точные настройки
Схема примера 19: блоков — 6, связей — 6. Идентификаторы узлов и порты настроенной схемы сохранены.
Добавьте перечисленные блоки в конструкторе, откройте свойства каждого и задайте эти значения. Имена demo_* обозначают учебные источники и подключения.
| Блок | Настройка |
|---|---|
| 1 Файл src |
|
| 2 Выбор choice |
|
| 3 Задать значения полей approved |
|
| 4 Задать значения полей rejected |
|
| 5 Слияние веток merge |
|
| 6 Экспорт данных out |
|
Связи портов
- src
out→ choicein - choice
approve→ approvedin - choice
reject→ rejectedin - approved
out→ mergeapproved - rejected
out→ mergerejected - merge
out→ outin
Полная конфигурация схемы в JSON
{
"version": 3,
"nodes": [
{
"id": "src",
"type": "file",
"label": "src",
"config": {
"role": "source",
"source_id": "demo_approval",
"options": {
"sheet": "CSV",
"range": "A1:B3",
"header": true,
"delimiter": ";"
}
}
},
{
"id": "choice",
"type": "choice",
"label": "choice",
"config": {
"title": "Рішення щодо набору заявок",
"options": [
{
"id": "approve",
"label": "Погодити"
},
{
"id": "reject",
"label": "Відхилити"
}
],
"wizard": true
}
},
{
"id": "approved",
"type": "set_fields",
"label": "approved",
"config": {
"assignments": [
{
"field": "Status",
"source": "constant",
"value_type": "text",
"value": "Approved"
}
]
}
},
{
"id": "rejected",
"type": "set_fields",
"label": "rejected",
"config": {
"assignments": [
{
"field": "Status",
"source": "constant",
"value_type": "text",
"value": "Rejected"
}
]
}
},
{
"id": "merge",
"type": "merge",
"label": "merge",
"config": {
"inputs": [
{
"id": "approved",
"label": "Погоджено"
},
{
"id": "rejected",
"label": "Відхилено"
}
],
"mode": "single"
}
},
{
"id": "out",
"type": "export",
"label": "out",
"config": {
"format": "csv",
"filename": "decisions",
"destination": "download",
"delimiter": ";",
"timezone": "Europe/Kyiv"
}
}
],
"edges": [
{
"source": "src",
"target": "choice",
"source_port": "out",
"target_port": "in"
},
{
"source": "choice",
"target": "approved",
"source_port": "approve",
"target_port": "in"
},
{
"source": "choice",
"target": "rejected",
"source_port": "reject",
"target_port": "in"
},
{
"source": "approved",
"target": "merge",
"source_port": "out",
"target_port": "approved"
},
{
"source": "rejected",
"target": "merge",
"source_port": "out",
"target_port": "rejected"
},
{
"source": "merge",
"target": "out",
"source_port": "out",
"target_port": "in"
}
]
}Ожидаемый результат
После выбора «Одобрить» decisions.csv содержит R1/Approved и R2/Approved; отклонённая ветка пропускается. После «Отклонить» оба статуса — Rejected. Это одно решение для всего входного набора.
Запуск и проверка
- Запустите поток интерактивно и выберите «Одобрить».
- Проверьте две обновлённые заявки, одну активную ветку и успешное слияние.
- Запустите снова с «Отклонить» и проверьте оба статуса Rejected.
Частые ошибки
- Выбор всегда требует ответа пользователя; он не подходит для выполнения без участия человека.
- Слияние single ожидает одну активную ветку; для одновременного добавления двух таблиц используйте объединение строк.
- Не путайте ручной выбор одного сценария с маршрутизацией, распределяющей строки по условиям.