Objectif et prérequis
Laissez l’opérateur approuver ou rejeter un ensemble de demandes, puis revenir à un export commun après l’action sélectionnée.
Cet exemple utilise des données et paramètres de démonstration. Validez le résultat attendu dans votre propre environnement avant de connecter des destinations de production. Les identifiants demo_* sont illustratifs : sélectionnez vos propres connexions ou sources pédagogiques dans l’éditeur. Le JSON ci-dessous présente la structure des blocs et connexions, pas une archive de flux prête à transférer.
Données d’entrée pédagogiques
requests.csv
Request;Status
R1;Draft
R2;Draft
Blocs, connexions et paramètres exacts
Topologie de l’exemple 19 : 6 blocs, 6 connexions. Les identifiants de nœuds et les ports du graphe configuré sont conservés.
Ajoutez les blocs listés dans le concepteur, ouvrez les propriétés de chacun et définissez ces valeurs. Les noms demo_* désignent les sources et connexions pédagogiques.
| Bloc | Paramètre |
|---|---|
| 1 Fichier src |
|
| 2 Choix choice |
|
| 3 Définir les valeurs des champs approved |
|
| 4 Définir les valeurs des champs rejected |
|
| 5 Fusionner les branches merge |
|
| 6 Exportation de données out |
|
Connexions des ports
- src
out→ choicein - choice
approve→ approvedin - choice
reject→ rejectedin - approved
out→ mergeapproved - rejected
out→ mergerejected - merge
out→ outin
Configuration complète du graphe en 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"
}
]
}Résultat attendu
Après sélection d’« Approuver », decisions.csv contient R1/Approved et R2/Approved ; la branche rejected est ignorée. Après sélection de « Rejeter », les deux états sont Rejected. Il s’agit d’une décision unique pour toutes les données d’entrée.
Exécuter et vérifier
- Exécutez le flux de manière interactive et sélectionnez « Approuver ».
- Vérifiez deux demandes actualisées, une branche active et une fusion réussie.
- Relancez avec « Rejeter » et vérifiez les deux états Rejected.
Erreurs courantes
- Choix nécessite toujours une réponse utilisateur ; il ne convient pas à une exécution sans intervention.
- Fusionner en mode single attend une branche active ; utilisez Union pour ajouter simultanément deux tableaux.
- Ne confondez pas le choix manuel d’un scénario avec Routage, qui répartit les lignes selon des conditions.