Passer au contenu principal

Leçon 10 · Requêtes : réutiliser les données que vous avez déjà

M
Écrit par Mairu

Parcours

Durée

Niveau

Avant de commencer

🟣 Configurateur · Niveau 2

75 min

Avancé

[[09 · Eventos - que el proceso avance solo

Événements - que le processus avance tout seul]]

Les requêtes sont l'outil le plus puissant de Mairu et aussi celui qui coûte le plus au début. Elles servent une idée très simple : ne plus redemander une donnée déjà enregistrée quelque part. Avec elles, vous remplirez des champs tout seuls, calculerez des indicateurs et afficherez des listes dans un formulaire ou un Dashboard.

🎯 À la fin, vous saurez

  • Choisir le type de requête adapté selon l'endroit où vous l'utiliserez.

  • Lire et écrire la structure d'une requête : select, from, where, aggregate, order.

  • Créer des paramètres pour que la requête dépende de ce que l'utilisateur choisit.

  • Tester une requête avant de l'utiliser.

  • Monter un formulaire de Masterdata pour enregistrer des données que les données maîtres n'acceptent pas.


🧠 L'idée : une question à vos formulaires

Une requête est une question du type :

Donne-moi cette donnée (select) du formulaire X (from) des réponses qui remplissent ces conditions (where).

{
  "select": "ID del campo que quieres",
  "from": "ID del formulario",
  "where": [ ...condiciones... ],
  "aggregate": "average",
  "order": { ... }
}

Remarquez que tout s'écrit avec des ID. C'est pour cela qu'à la leçon 5 nous insistions autant pour bien les choisir.

⚠️ Les requêtes lisent des réponses de formulaires, pas les données maîtres de la Configuration. Une requête de type Asset renvoie les Assets sélectionnés dans un champ d'un formulaire, pas la liste complète des Assets. Si vous avez besoin de données supplémentaires d'un Produit ou d'un Fournisseur, enregistrez-les dans un formulaire de Masterdata (vous le ferez dans cette leçon).

Le type dépend de l'endroit où vous l'utiliserez

Type

Renvoie

S'utilise dans

Donnée unique

Une seule valeur (la première trouvée)

Champs texte court, texte long et numérique

Indicateur

Un nombre calculé (count, sum, average, min, max, stdDev…)

Champs numériques et widget KPI

Liste

Plusieurs réponses avec les champs que vous choisissez

Sélecteur et Liste de réponses, widget Liste, Charger un sous-formulaire, Planifications

Asset / Produit / Utilisateur / Entité

Valeurs filtrées pour un sélecteur

Le sélecteur du même type

Fichier

Fichiers des réponses

Composants Multimédia et Galerie

Lors de la configuration d'un champ, Mairu ne vous propose que les requêtes compatibles avec ce type de champ.

Valeur fixe ou paramètre

  • "value": "NO OK" → la requête filtre toujours par cette valeur.

  • "value": "producto" (nom d'un paramètre) → la valeur arrive depuis un champ du formulaire à chaque exécution. Le type du paramètre doit coïncider avec celui du champ qui filtre.


🛠️ Pratique guidée

Créez d'abord un dossier Conditionnement dans Configuration > Requêtes pour y enregistrer toutes celles de cette leçon.

Requête 1 · Le poids moyen des pesées (Indicateur)

Vous calculerez le poids moyen des cinq pesées de chaque contrôle.

  1. Nouvelle requête Poids moyen du contrôle, type Indicateur.

  2. Créez un paramètre de type Texte nommé padre.

  3. Configurez-la ainsi :

{
  "select": "peso",
  "aggregate": "average",
  "from": "pesadas",
  "where": [
    {
      "allConditions": {
        "conditions": [
          { "field": "parent_answer_id", "operation": "=", "value": "padre" }
        ],
        "type": "and"
      },
      "type": "and"
    }
  ]
}

  1. Dans le Contrôle de conditionnement, ajoutez un champ Poids moyen (g), numérique, ID peso_medio, désactivé. Dans sa configuration, choisissez cette requête et, comme valeur du paramètre padre, l'option Id du formulaire.

parent_answer_id est l'identifiant que chaque pesée conserve de son contrôle. Ainsi la requête ne calcule la moyenne que des pesées de ce contrôle.

Requête 2 · Données du produit depuis un Masterdata (Donnée unique)

Le produit n'a pas d'attribut de durée de vie ni de poids nominal. Au lieu de les écrire à la main, vous les enregistrerez une seule fois dans un formulaire de Masterdata.

  1. Créez le formulaire Fiche produit (ID ficha_producto) avec : Produit (Sélecteur de produits, producto), Poids nominal (g) (peso_nominal) et Durée de vie (jours) (vida_util). Publiez-le uniquement pour la Qualité et créez une réponse pour chaque produit.

  2. Créez la requête Durée de vie du produit, type Donnée unique, avec un paramètre de type Produit nommé producto :

{
  "select": "vida_util",
  "from": "ficha_producto",
  "where": [
    {
      "allConditions": {
        "conditions": [
          { "field": "producto", "operation": "=", "value": "producto" }
        ],
        "type": "and"
      },
      "type": "and"
    }
  ]
}

  1. Dans le Contrôle de conditionnement, ouvrez le champ vida_util (leçon 7), retirez-lui la valeur par défaut, assignez-lui cette requête et reliez le paramètre producto au champ Produit du contrôle.

💡 Une requête configurée dans le champ lui-même s'exécute chaque fois que la réponse est ouverte. Si vous avez besoin qu'elle s'exécute juste au moment où l'utilisateur change le produit, lancez-la depuis une règle (Quand producto change de valeur → exécuter la requête).

Requête 3 · Les derniers rejets de la ligne (Liste)

  1. Requête NO OK par ligne, type Liste, avec un paramètre de type Asset nommé linea. Sélectionnez created_at, lote, producto, motivo_rechazo et accion_correctora de control_envasado, avec les conditions linea = linea et resultado = "NO OK", triées par created_at décroissant ("type": -1).

  2. Dans le Contrôle de conditionnement, ajoutez une Liste de réponses avec cette requête et son paramètre relié au champ linea. Ainsi, l'opérateur voit les derniers problèmes de sa ligne pendant qu'il réalise le contrôle.

Tester avant d'utiliser

Avant de relier chaque requête, ouvrez-la et utilisez Testing : choisissez des valeurs de test pour les paramètres et appuyez sur Exécuter. Le résultat apparaît en JSON.

Vous voyez…

Signifie

Un résultat vide

La requête fonctionne, mais il n'y a pas de données avec ces valeurs de test

Error – Status 500 ou similaire

Il y a un problème dans la configuration : un ID qui n'existe pas, une structure mal écrite…


🔍 Vérifiez que cela fonctionne

  • Ouvrez un contrôle avec des pesées de 248, 250, 252, 251 et 249 g : le poids moyen affiche 250.

  • En choisissant Conserve 500 g, la durée de vie se remplit toute seule avec la valeur de sa fiche.

  • Dans un contrôle de la Ligne 1 apparaissent les derniers NO OK de la Ligne 1, et aucun de la Ligne 2.


⚠️ Erreurs fréquentes

  • Mettre le titre du champ au lieu de son ID. C'est la cause la plus fréquente d'erreurs. Copiez les ID depuis l'onglet Champs extra du Form Builder.

  • Le type du paramètre ne coïncide pas avec celui du champ. Comparer un Asset avec un paramètre de type Date ne fonctionne pas.

  • « La requête n'apparaît pas dans le champ. » Le type de requête n'est pas compatible avec ce champ : un sélecteur d'utilisateurs n'accepte que des requêtes de type Utilisateur, et les listes de réponses n'acceptent que des requêtes de type Liste.

  • Tenter d'interroger directement les données maîtres de Produits ou Assets. Les requêtes lisent des champs de formulaires : utilisez un formulaire de Masterdata.

  • Confondre « vide » et « erreur ». Un résultat vide dans le Testing n'est pas toujours une panne : essayez avec d'autres valeurs.


🏋️ Défi

La Qualité veut voir dans le contrôle la tolérance du produit et que, si le poids moyen reste hors de poids nominal ± tolérance, le résultat passe automatiquement à NO OK. Vous aurez besoin d'élargir la Fiche produit, d'une nouvelle requête de donnée unique et d'une règle. Quand cela fonctionne, vérifiez : l'e-mail de la leçon 9 se déclenche-t-il ?


📚 Pour en savoir plus

➡️ Leçon suivante : Planifications - le travail planifié

Avez-vous trouvé la réponse à votre question ?