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

Schéma explicatifAgrandir ↗19. Choix manuel d’un scénario et fusion des branches. Topologie de l’exemple 19 : 6 blocs, 6 connexions. Les identifiants de nœuds et les ports du graphe configuré sont conservés.
Schéma du flux 19

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.

BlocParamètre
1
Fichier
src
  • Rôle: source
  • Source: demo_approval
  • Paramètres de lecture:
    • Feuille: CSV
    • Plage: A1:B3
    • La première ligne contient les en-têtes: так
    • Séparateur: ;
2
Choix
choice
  • Titre: Рішення щодо набору заявок
  • Paramètres de lecture:
      • Identifiant: approve
      • Libellé: Погодити
      • Identifiant: reject
      • Libellé: Відхилити
  • wizard: так
3
Définir les valeurs des champs
approved
  • assignments:
      • Champ: Status
      • Source: constant
      • Type de valeur: text
      • Valeur: Approved
4
Définir les valeurs des champs
rejected
  • assignments:
      • Champ: Status
      • Source: constant
      • Type de valeur: text
      • Valeur: Rejected
5
Fusionner les branches
merge
  • Entrées:
      • Identifiant: approved
      • Libellé: Погоджено
      • Identifiant: rejected
      • Libellé: Відхилено
  • Mode: single
6
Exportation de données
out
  • Format: csv
  • Nom du fichier: decisions
  • Rôle: download
  • Séparateur: ;
  • Fuseau horaire: Europe/Kyiv

Connexions des ports

  • src out → choice in
  • choice approve → approved in
  • choice reject → rejected in
  • approved out → merge approved
  • rejected out → merge rejected
  • merge out → out in
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

  1. Exécutez le flux de manière interactive et sélectionnez « Approuver ».
  2. Vérifiez deux demandes actualisées, une branche active et une fusion réussie.
  3. 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.