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é ( | 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.
Nouvelle requête Poids moyen du contrôle, type Indicateur.
Créez un paramètre de type Texte nommé
padre.Configurez-la ainsi :
{
"select": "peso",
"aggregate": "average",
"from": "pesadas",
"where": [
{
"allConditions": {
"conditions": [
{ "field": "parent_answer_id", "operation": "=", "value": "padre" }
],
"type": "and"
},
"type": "and"
}
]
}
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ètrepadre, 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.
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.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"
}
]
}
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ètreproductoau 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)
Requête NO OK par ligne, type Liste, avec un paramètre de type Asset nommé
linea. Sélectionnezcreated_at,lote,producto,motivo_rechazoetaccion_correctoradecontrol_envasado, avec les conditionslinea = lineaetresultado = "NO OK", triées parcreated_atdécroissant ("type": -1).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
Résolution de problèmes quand une Requête ne renvoie pas de données · FAQ Requêtes et Liste
➡️ Leçon suivante : Planifications - le travail planifié
