Skip to main content

Documentation du Widget Radio

Aperçu​

Le widget Radio permet aux utilisateurs de sélectionner une seule option dans une liste prédéfinie de choix. Il s'affiche sous forme d'un groupe de boutons radio où une seule option peut être sélectionnée à la fois.

Radio Widget

Configuration de base​

Paramètres globaux​

Nom​

  • Champ : Nom
  • Description : Le libellĂ© d'affichage pour le groupe de boutons radio
  • Requis : Oui
  • Exemple : "SĂ©lectionner le niveau de prioritĂ©"

Variable/Modèle​

  • Champ : Variable/Modèle
  • Description : La propriĂ©tĂ© du modèle de donnĂ©es qui stocke la valeur sĂ©lectionnĂ©e
  • Requis : Oui
  • Format : Doit ĂŞtre un nom de variable valide
  • Exemple : priority_level

Valeur par défaut​

  • Champ : Valeur par dĂ©faut
  • Description : La valeur initialement sĂ©lectionnĂ©e lorsque le formulaire se charge
  • Requis : Non
  • Type : ChaĂ®ne de caractères
  • Exemple : "medium"
Radio Global Settings

Configuration de la source de données​

Le widget Radio prend en charge plusieurs sources de données pour remplir les options disponibles :

Données statiques​

  • Source : Listes personnalisĂ©es
  • Description : Utiliser des listes statiques prĂ©dĂ©finies
  • Configuration :
    • SĂ©lectionner une liste personnalisĂ©e existante
    • CrĂ©er une nouvelle liste personnalisĂ©e si aucune n'existe
  • Format de donnĂ©es : Chaque Ă©lĂ©ment nĂ©cessite les propriĂ©tĂ©s label et value
Radio Data Source Static

Données de collection​

  • Source : Collections de base de donnĂ©es
  • Description : Charger dynamiquement les options depuis une collection
  • Configuration :
    • SĂ©lectionner la collection cible
    • Configurer les mappages de libellĂ© et de valeur
    • Configurer des filtres de requĂŞte optionnels
    • DĂ©finir l'ordre de tri et les limites
Radio Data Source Collection

Données de rapport​

  • Source : Rapports
  • Description : Utiliser les rĂ©sultats de rapport comme source de donnĂ©es
  • Configuration :
    • SĂ©lectionner le rapport cible
    • Mapper les colonnes de rĂ©sultat vers libellĂ©/valeur
    • Configurer l'agrĂ©gation si nĂ©cessaire
Radio Data Source Report

SQL/Base de données externe​

  • Source : Connexion Ă  une base de donnĂ©es externe
  • Description : Interroger des bases de donnĂ©es externes pour les options
  • Configuration :
    • SĂ©lectionner la connexion Ă  la base de donnĂ©es
    • Écrire la requĂŞte SQL
    • Mapper les colonnes de rĂ©sultat
Radio Data Source [EDS](/docs/fr/ressources/global/eds)

Configuration des propriétés​

Pour les sources de données dynamiques (Collection, Rapport, SQL) :

Propriété Label​

  • Champ : Label
  • Description : Nom de champ ou expression pour le texte d'affichage
  • Utilisation statique : firstName
  • Utilisation dynamique : $.firstName + ' - ' + $.lastName

Propriété Value​

  • Champ : Value
  • Description : Nom de champ ou expression pour la valeur stockĂ©e
  • Utilisation statique : id
  • Utilisation dynamique : $.id + '-' + $.category
Radio Props Configuration

Configuration de requête​

Pour les sources de données de collection et de rapport :

Requête de base​

  • Objectif : Filtrer et personnaliser la rĂ©cupĂ©ration de donnĂ©es
  • Langage : JavaScript avec rĂ©fĂ©rences de modèle
  • Variables : Utiliser {{variable_name}} pour les valeurs dynamiques
  • Exemple :
Radio Basic Query

Agrégation​

  • Objectif : Effectuer une agrĂ©gation de donnĂ©es complexe
  • Basculement : Activer le commutateur "Is Aggregation"
  • Exemple :
Radio Aggregation

Configuration de tri​

  • Trier par : Nom de champ pour le tri
  • Direction :
    • 1 pour ascendant
    • -1 pour descendant

Limite​

  • Objectif : Restreindre le nombre d'options
  • Type : Nombre
  • Par dĂ©faut : Aucune limite

Validation​

Validation basée sur l'écran​

Configurer différents comportements sur plusieurs écrans :

Disponible​

  • Objectif : ContrĂ´ler si le widget apparaĂ®t sur des Ă©crans spĂ©cifiques
  • Type : BoolĂ©en par Ă©cran
  • Par dĂ©faut : true

Visible​

  • Objectif : ContrĂ´ler la visibilitĂ© du widget
  • Options :
    • Simple : Commutateur boolĂ©en
    • AvancĂ© : Condition JavaScript

Requis​

  • Objectif : Rendre la sĂ©lection obligatoire
  • Options :
    • Simple : Commutateur boolĂ©en
    • AvancĂ© : Condition JavaScript

Désactivé​

  • Objectif : EmpĂŞcher l'interaction utilisateur
  • Options :
    • Simple : Commutateur boolĂ©en
    • AvancĂ© : Condition JavaScript

Exemple simple​

Radio Screen-based Validation

Exemple avancé​

Radio Advanced Validation

Règles de validation​

Ajouter des règles de validation personnalisées :

Types de règles​

  • Pattern : Validation par expression rĂ©gulière
  • Custom : Fonction de validation JavaScript
  • Range : Validation de plage de valeurs
  • Required : Validation obligatoire intĂ©grĂ©e

Configuration de règle​

  • Règle : SĂ©lectionner le type de validation
  • Valeur : Paramètre de règle ou pattern
  • Message : Message d'erreur Ă  afficher
Radio Validation Rules

Style et mise en page​

Options de mise en page​

Mode d'affichage​

  • Block : Empilement vertical (par dĂ©faut)
  • Inline : Disposition horizontale

Bordure​

  • Objectif : Ajouter des bordures autour des boutons radio
  • Type : BoolĂ©en
  • Par dĂ©faut : false

Configuration de largeur​

  • Champ : Largeur
  • Description : Valeur de largeur CSS
  • Exemples :
    • 100% (pleine largeur)
    • 300px (largeur fixe)
    • 50vw (basĂ© sur le viewport)

Classes CSS​

Classes statiques​

  • Champ : Class
  • Description : Noms de classes CSS sĂ©parĂ©s par des espaces
  • Exemple : "custom-radio highlight-group"
Radio Styling

Classes dynamiques​

  • Objectif : Style conditionnel basĂ© sur les donnĂ©es
  • Langage : Expressions JavaScript
  • Accès : Cliquer sur le bouton "Classes dynamiques"
  • Exemple :
{
'error-state': {{has_errors}},
'required-field': {{is_required}}
}

Événements et interactions​

Événement On Click​

  • DĂ©clencheur : Lorsqu'une option radio est sĂ©lectionnĂ©e
  • Accès aux variables :
    • SF_input.value : Valeur sĂ©lectionnĂ©e
    • SF_input.SF_data : Objet complet sĂ©lectionnĂ©
    • SF_input.SF_currentIndex : Index de boucle (si dans un contexte rĂ©pĂ©titif)

Événement simple​

  • Champ : On click
  • Type : Nom de fonction
  • Exemple :
Radio Event

Travailler avec les actions et SF_input​

Attacher des actions à l'événement onChange​

L'événement onChange (ou onClick) du widget Radio vous permet d'exécuter des actions personnalisées lorsque l'utilisateur sélectionne une option. Cette fonctionnalité est puissante pour :

  • Remplir automatiquement les champs de formulaire avec les donnĂ©es de l'option sĂ©lectionnĂ©e
  • CrĂ©er des relations de champs dĂ©pendants et des mises Ă  jour en cascade
  • RĂ©cupĂ©rer des informations liĂ©es depuis la base de donnĂ©es du backoffice
  • ImplĂ©menter une logique conditionnelle basĂ©e sur la sĂ©lection

Comment attacher une action​

  1. Naviguer vers la section Global dans la configuration du widget Radio
  2. Trouver le champ d'événement On Click ou On Change
  3. Écrire directement du code JavaScript dans le champ d'action
  4. Le code s'exécute automatiquement chaque fois que l'utilisateur sélectionne une option radio

Accéder aux valeurs avec SF_input​

Le widget Radio fournit un accès riche aux données via l'objet SF_input. Contrairement au simple stockage de valeur, vous avez accès à la fois à la valeur sélectionnée ET à l'objet de données complet de votre source de données.

Structure de SF_input pour le widget Radio​

{
value: /* La valeur sélectionnée basée sur votre configuration "Value Property" */,
SF_data: /* Objet JSON complet de l'élément sélectionné */,
SF_currentIndex: /* Index de boucle si le widget est dans une boucle */
}

Comprendre les propriétés de SF_input​

PropriétéDescriptionExemple
valueLa valeur sélectionnée depuis votre configuration "Value Property"'option1', 'high_priority', 'DEPT001'
SF_dataObjet JSON complet de l'option radio sélectionnée{id: 'opt1', name: 'Option 1', details: {...}}
SF_currentIndexIndex d'itération actuel si le widget est dans une boucle0, 1, 2, ...

Exemples pratiques​

Exemple 1 : Accéder à la valeur sélectionnée​

// Obtenir la valeur sélectionnée
console.log(SF_input.value);
// Sortie : 'high'

// Stocker la valeur sélectionnée
model.selected_priority = SF_input.value;

// Utiliser la valeur dans une logique conditionnelle
if (SF_input.value === 'urgent') {
model.requires_immediate_action = true;
}

Exemple 2 : Accéder à l'objet JSON complet (SF_data)​

La fonctionnalité la plus puissante - accéder à l'objet de données complet avec toutes ses propriétés :

// Accéder à l'objet de données complet
console.log(SF_input.SF_data);
// Sortie : {
// id: 'PRIORITY_HIGH',
// value: 'high',
// label: 'High Priority',
// sla_hours: 4,
// escalation_level: 2,
// notification_required: true,
// color_code: '#FF5733',
// description: 'Requires immediate attention'
// }

// Accéder à n'importe quelle propriété de l'option sélectionnée
model.sla_hours = SF_input.SF_data.sla_hours;
model.escalation_level = SF_input.SF_data.escalation_level;
model.priority_color = SF_input.SF_data.color_code;
model.priority_description = SF_input.SF_data.description;

// Utiliser les indicateurs booléens des données
if (SF_input.SF_data.notification_required) {
model.send_notification = true;
model.notification_type = 'urgent';
}

Exemple 3 : Remplir plusieurs champs à partir des données du backoffice​

Lorsque vous connectez un widget Radio à une source de données Collection, Rapport ou SQL, chaque option contient un enregistrement complet. Utilisez SF_data pour remplir les champs associés :

// Lorsque l'utilisateur sélectionne un département depuis les options radio connectées à la collection Departments
if (SF_input.SF_data) {
const department = SF_input.SF_data;

// Remplir automatiquement les informations du département
model.department_id = department.id;
model.department_name = department.name;
model.department_code = department.code;
model.department_location = department.location;

// Remplir les informations de gestion
model.department_head = department.manager_name;
model.department_head_email = department.manager_email;
model.department_head_phone = department.manager_phone;

// Remplir les informations budgétaires
model.department_budget = department.annual_budget;
model.budget_spent = department.budget_utilized;
model.budget_remaining = department.annual_budget - department.budget_utilized;

// Remplir les détails opérationnels
model.employee_count = department.total_employees;
model.office_location = department.office?.building + ', Floor ' + department.office?.floor;
model.cost_center = department.cost_center_code;

// Définir les champs conditionnels
if (department.requires_approval) {
model.approval_required = true;
model.approver_id = department.approval_authority;
}
}

Bonnes pratiques​

  1. Toujours valider SF_data : Vérifier si SF_data existe avant d'accéder à ses propriétés

    if (SF_input.SF_data) {
    // Votre code ici
    }
  2. Utiliser le chaînage optionnel : Pour les propriétés imbriquées, utiliser le chaînage optionnel pour éviter les erreurs

    const managerEmail = SF_input.SF_data?.manager?.email || 'Non disponible';
  3. Exploiter SF_data pour des informations riches : Toujours utiliser SF_data lorsque vous avez besoin de plus que la simple valeur - cela vous donne accès à l'enregistrement complet de votre source de données

  4. Effacer les champs dépendants : Lorsque la sélection change, effacer les champs qui dépendent de la sélection précédente

    // Effacer les données précédentes
    model.related_field_1 = null;
    model.related_field_2 = null;
    // Puis remplir avec les nouvelles données de SF_input.SF_data
  5. Gérer les cas limites : Vérifier les valeurs null/undefined et fournir des valeurs par défaut

    model.field = SF_input.SF_data?.property || 'valeur par défaut';
  6. Utiliser des noms de variables descriptifs : Rendre votre code lisible et maintenable

    const selectedDepartment = SF_input.SF_data;
    const departmentBudget = selectedDepartment.budget;
  7. Documenter la logique complexe : Ajouter des commentaires pour expliquer les règles métier

    // Appliquer une remise VIP si la valeur vie client dépasse le seuil
    if (SF_input.SF_data.lifetime_value > 10000) {
    model.vip_discount = 20;
    }
  8. Gestion des erreurs : Envelopper les opérations asynchrones dans un try-catch

    try {
    const data = await SF_executeAction('fetchData', { id: SF_input.value });
    // Traiter les données
    } catch (error) {
    console.error('Erreur:', error);
    model.error_message = 'Échec de la récupération des données';
    }

Bonnes pratiques​

Sélection de la source de données​

  1. Listes statiques : Pour les options fixes, rarement modifiées
  2. Collections : Pour les données gérées par l'utilisateur
  3. Rapports : Pour les options calculées/agrégées
  4. SQL : Pour les données externes complexes

Optimisation des performances​

  1. Utiliser des limites pour les grands ensembles de données
  2. Implémenter une indexation appropriée pour les champs de tri
  3. Mettre en cache les données statiques lorsque possible
  4. Utiliser l'agrégation pour les options récapitulatives

Expérience utilisateur​

  1. Fournir des libellés clairs et descriptifs
  2. Utiliser un ordre logique (alphabétique, basé sur la priorité)
  3. Définir des valeurs par défaut appropriées
  4. Inclure une validation avec des messages d'erreur utiles

Stratégie de validation​

  1. Utiliser la validation obligatoire pour les champs critiques
  2. Implémenter une validation conditionnelle si nécessaire
  3. Fournir un retour immédiat lors de la sélection
  4. Considérer les règles de validation inter-champs

Exemples​

Groupe radio statique de base​

Radio Basic Static

Dépannage​

Problèmes courants​

Les options ne se chargent pas​

  • VĂ©rifier la configuration de la source de donnĂ©es
  • VĂ©rifier la syntaxe de la requĂŞte
  • Assurer les mappages de champs appropriĂ©s
  • VĂ©rifier la connectivitĂ© rĂ©seau pour les sources externes

La sélection ne s'enregistre pas​

  • VĂ©rifier le nom de la variable du modèle
  • VĂ©rifier les règles de validation
  • Assurer la soumission correcte du formulaire
  • Valider les types de donnĂ©es

Problèmes de style​

  • VĂ©rifier les noms de classes CSS
  • VĂ©rifier les valeurs de largeur/hauteur
  • Examiner les paramètres de design responsive
  • Tester les conditions de classes dynamiques

L'événement ne se déclenche pas​

  • VĂ©rifier les noms de fonction
  • VĂ©rifier la syntaxe JavaScript
  • Assurer l'accès appropriĂ© aux variables
  • Consulter la console du navigateur pour les erreurs