Ce widget permet d’afficher un champ à choix multiple dont la liste des élements à sélectionner provient soit d’un dictionnaire, soit d’un référentiel.
Hérite de WidgetField.
Fonction
Rendu
Utilisation
Le widget permet d’afficher un champ de sélection avec plusieurs choix (checkboxes). Les options de ce champ sont dynamiquement peuplées à partir d’un dataset (ensemble de données) ou d’un dictionnaire. Les éléments sélectionnés peuvent être récupérés ou modifiés selon les besoins de l’application. Attributs du widget
Fonctionnalités clés
Recherche et sélection
: Le widget permet d’ajouter un champ de recherche pour filtrer les options et une case à cocher pour sélectionner toutes les options visibles.
Affichage dynamique
: Les options peuvent être regroupées en sections et des conditions dynamiques peuvent être appliquées pour afficher ou masquer certaines options, ou les rendre désactivées.
Gestion des valeurs sélectionnées
: Lorsque l’utilisateur sélectionne ou désélectionne des options, les valeurs correspondantes sont enregistrées dans un dataset cible, permettant de gérer les relations entre les données.
Mise en place
Pré-requis
Le widget permet de faciliter la saisie d’une variable à relation N-N.
Pour mettre en place le widget, on a besoin d’avoir un des cas suivants :
- Avoir un varset avec un champ dico multiple.
Exemple: varset med, avec le champ departement de type fkey_dico_ext
<?xml version="1.0" encoding="utf-8"?>
<varset name="med" prefix="med" type="std" label="Medecin">
<var uid="1" id="id_patient" type="fkey_varset_ext">
<fkey_varset_ext varset_relation_name="pat_med" varset_name="pat"/>
</var>
<var uid="2" id="name" type="string" default_label="Name" default_short_label="Name">
<string length="128"/>
</var>
<var uid="3" id="department" type="fkey_dico_ext" default_label="Département" default_short_label="Département">
<fkey_dico_ext dico_name="ward"/>
</var>
</varset>
- Avoir 2 varsets en relation N-N, paramétré depuis la page de configuration des relations entre varsets, sur Epicraft.
Côté appli, ceci se traduit par un varset relationnel au milieu des 2 originaux, avec 2 champs fkey_varset
<?xml version="1.0" encoding="UTF-8"?>
<varset name="med_specialite" prefix="med_specialite" type="join" label="Medecin Specialite">
<var uid="1" id="id_medecin" type="fkey_varset" default_label="Medecin" mandatory="false">
<fkey_varset varset_name="med" max_occurence="N"/>
</var>
<var uid="2" id="id_specialite" type="fkey_varset" default_label="Specialite" mandatory="false">
<fkey_varset varset_name="specialite" max_occurence="N"/>
</var>
</varset>
- Avoir 2 varsets en relation N-N, montée manuellement (relation non paramétrée depuis Epicraft).
Côté appli, c’est à peu près similaire au deuxième cas mais en utilisant de simples champs entiers dans le varset relationnel :
<?xml version="1.0" encoding="utf-8"?>
<varset name="med_qualification" prefix="med_qualification" type="std" label="Medcin Qualification">
<var uid="1" id="id_med" type="integer" mandatory="false" default_label="ID medecin" default_short_label="Nom"/>
<var uid="2" id="id_qualification" type="integer" mandatory="false" default_label="ID qualification"/>
</varset>
Etapes 0.1 : mise en place des dataqueries nécessaires
- Cas d’une variable de type fkey_dico_ext / fkey_sysdico_ext :
Monter le dataquery principal du formulaire incluant la variable sur laquelle on va appliquer le widgetselectadv.
Exemple : ici le champ “département”
<dataquery id="med" table_name="{pj}_med_data" varset_name="med" table_alias="m">
<column_simple field_name="id_data" table_name="m"/>
<column_simple field_name="name" table_name="m"/>
<column_simple field_name="department" table_name="m"/>
<!-- Permet l'ajout et la modification -->
<condition sql="{id_data}={param_id_data}">
<field field_name="id_data" table_name="m" alias="id_data"/>
<variable alias="param_id_data" default="NULL">
<entry type="param" name="id_data"/>
<entry type="dataset" name="med" field="id_data" row="current"/>
</variable>
</condition>
</dataquery>
- Cas d’une variable de type fkey_varset / fkey_varset_ref ou champs entiers :
On a besoin de 3 dataqueries :
(1) le dataquery principal, correspondant au premier varset (Exemple : dataquery pour récupérer les données du médecin)
<dataquery id="med" table_name="{pj}_med_data" varset_name="med" table_alias="m">
<column_simple field_name="id_data" table_name="m"/>
<column_simple field_name="name" table_name="m"/>
<!-- Permet l'ajout et la modification -->
<condition sql="{id_data}={param_id_data}">
<field field_name="id_data" table_name="m" alias="id_data"/>
<variable alias="param_id_data" default="NULL">
<entry type="param" name="id_data"/>
<entry type="dataset" name="med" field="id_data" row="current"/>
</variable>
</condition>
</dataquery>
(2) le dataquery contenant les valeurs possibles, correspondant au deuxième varset (Exemple : dataquery pour récupérer les valeurs des spécialités disponibles)\
<dataquery varset_name="specialite" table_alias="specialite" id="specialite" mode="r" auto_add_record="false" table_name="{pj}_specialite_data">
<column_simple field_name="nom_spec" table_name="specialite"/>
<column_simple field_name="id_data" table_name="specialite"/>
</dataquery>
(3) le dataquery correspondant à la relation N-N entre les 2 précédents varset. Celui ci doit impérativement avoir l’attribut “relational” à true pour que la suppression / sauvegarde des choix se fassent normalement.\
<dataquery varset_name="med_specialite" table_alias="med_specialite" id="med_specialite" range="20" mode="rw" auto_add_record="false" table_name="{pj}_med_specialite_data" relational="true">
<column_simple field_name="id_data" table_name="med_specialite"/>
<column_simple field_name="id_medecin" table_name="med_specialite"/>
<column_simple field_name="id_specialite" table_name="med_specialite"/>
<condition sql="{med_specialite.id_medecin}={id_data}">
<variable alias="id_data" default="NULL">
<entry type="param" name="id_data"/>
<entry type="dataset" name="med" row="current" field="id_data"/>
</variable>
<field field_name="id_medecin" table_name="med_specialite" alias="med_specialite.id_medecin"/>
</condition>
<variables>
<variable alias="id_medecin" default="NULL" target_column="id_medecin">
<entry type="dataset" name="med" field="id_data" row="current"/>
<entry type="param" name="id_data"/>
</variable>
</variables>
</dataquery>
Etapes 0.2 : le widgetSelectAdv
Une fois les dataqueries en place, vous pouvez à présent :
- Ajouter un bulk sur votre formulaire métier.
- Le nommer “form.widget”
- Utiliser le widgetSelectAdv. Il y a 2 façon pour appeler le widget :
(1) Exemple d’utilisation du widgetSelectAdv dans le cas d’un champ de type fkey_dico_ext : l’option search_dataset n’est pas utile et ne sera pa utilisée
<value dataset="med" field="department" mode="rw" class="text-left col-md-9">
<option output="html" option_name="widget" value="WidgetSelectAdv"/>
<option output="html" option_name="display_field" value="label" />
<option output="html" option_name="show_select_all" value="true" />
<option output="html" option_name="show_search" value="true" />
<option output="html" option_name="nb_columns" value="3" />
<option output="html" option_name="placeholder" value="Chercher Département" />
</value>
(2) Exemple d’utilisation du widgetSelectAdv dans le cas d’un varset relationnel : l’option search_dataset est obligatoire
<value dataset="med_specialite" field="id_specialite" mode="rw" class="text-left col-md-9">
<option output="html" option_name="widget" value="WidgetSelectAdv"/>
<option output="html" option_name="search_dataset" value="specialite" />
<option output="html" option_name="display_field" value="nom_spec" />
<option output="html" option_name="show_select_all" value="true" />
<option output="html" option_name="show_search" value="true" />
<option output="html" option_name="nb_columns" value="3" />
<option output="html" option_name="placeholder" value="Chercher spécialité" />
</value>
Attributs
Les attributs nécessaires au bon fonctionnement du widget sont signalés par un astérisque.
Ce widget hérite de fonctionnalités issues d’un autre widget. Consultez la documentation dédiée au WidgetField pour vérifier si d’autres attributs sont disponibles.
Options
Les options nécessaires au bon fonctionnement du widget sont signalées par un astérisque.
Ce widget hérite de fonctionnalités issues d’un autre widget. Consultez la documentation dédiée au WidgetField pour vérifier si d’autres options sont disponibles.
disabled_opt_on
Une expression dynamique se résolvant en un booléen permettant de déterminer si un enregistrement du search_dataset ne doit pas être sélectionnable.
-
Version : >=2.26
-
Valeurs possibles : Boolean (true ou false)
<option output="html" option_name="disabled_opt_on" value="false" />
display_field
Champ du search_dataset qui contient la valeur à afficher. La valeur par défaut est “label”. Le widget se mettra en erreur si la valeur passée à l’option n’est pas une string ou si le champ n’existe pas au sein du search_dataset.
-
Version : >=2.26
-
Valeurs possibles : String
-
Valeur par défaut : label
<option output="html" option_name="display_field" value="label" />
hide_opt_on
Une expression dynamique se résolvant en un booléen permettant de déterminer si un enregistrement du search_dataset ne doit pas être affichés.
-
Version : >=2.26
-
Valeurs possibles : Boolean (true ou false)
<option output="html" option_name="hide_opt_on" value="false" />
nb_columns
Permet de répartir la liste des choix disponibles sur un nombre de colonnes déterminé. Le widget se mettra en erreur si la valeur passée à l’option ne correspond pas à un nombre ou si ce nombre est inférieur ou égal à zéro.
-
Version : >=2.26
-
Valeurs possibles : integer
-
Valeur par défaut : 3
<option output="html" option_name="nb_columns" value="3" />
optgroup_field
Nom d’un champ du search_dataset contenant une valeur permettant de regrouper les choix disponibles par section. La valeur du champ sera aussi le nom de la section.
-
Version : >=2.26
-
Valeurs possibles : String
<option output="html" option_name="optgroup_field" value="{optgroup_field_value}" />
placeholder
Texte affiché dans le champ de recherche lorsqu’il est vide.
-
Version : >=2.26
-
Valeurs possibles : String
-
Valeur par défaut : Search
<option output="html" option_name="placeholder" value="Search" />
search_dataset*
Id du dataset qui contient les valeurs à sélectionner. Cette option ne concerne pas les variables de type fkey_dico_ext ou fkey_sysdico_ext, pour lesquelles le dataset de recherche correspond au dictionnaire utilisé par la variable.
-
Version : >=2.26
-
Valeurs possibles : string
<option output="html" option_name="search_dataset" value="{search_dataset_value}" />
show_search
Permet d’afficher un champ de recherche pour filtrer la liste de choix.
-
Version : >=2.26
-
Valeurs possibles : Boolean (true ou false)
<option output="html" option_name="show_search" value="false" />
show_select_all
Permet d’afficher une case pour sélectionner tous les choix affichés d’un coup.
-
Version : >=2.26
-
Valeurs possibles : Boolean (true ou false)
<option output="html" option_name="show_select_all" value="false" />
value_field
Champ du search_dataset contenant la valeur à stocker. Le widget se mettra en erreur si la valeur passée à l’option n’est pas une string ou si le champ n’existe pas au sein du search_dataset.
-
Version : >=2.26
-
Valeurs possibles : string
-
Valeur par défaut : id_data
<option output="html" option_name="value_field" value="id_data" />