Dataset
Description
Un XML dataset est découpé en deux parties :
- la description de la structure (
<metadata>
) - les données (
<rowdata>
).
La partie <metadata>
est elle même découpée en deux :
<fields>
décrivant les champs renvoyés contenus dans ce dataset (Type, Obligatoire, Libellé)<variables>
décrivant les données provenant de l’extérieur (utilisées par le dataquery pour les conditions par exemple)
Les attributes autorisés pour un Dataset sont :
id
: Obligatoire, c’est l’identifiant du Dataset, il doit être unique dans le formulairecacheable
: Facultatif (défaut :true
), il est identique à l’attribut présent dans un Dataquery <dataquery>.standby
: Facultatif (défaut :true
), il est identique à l’attribut présent dans un Dataquery <dataquery>.auto_add_record
: Facultatif (défaut :false
), il est identique à l’attribut présent dans un Dataquery <dataquery>.type
: Facultatif (défaut :standard
). S’il vautfilter
les valeurs saisient dans le filtre deviendront persistantes en session.mute_refresh_event
: Facultatif (défaut :false
), S’il vauttrue
une modification d’un field lié à ce DataSet n’induira pas de RefreshDataset sur des DataSet référençant ce DataSet (Via des<condition>
par exemple)id_calculated_var
: Facultatif, Identifiant d’une variable calculée (id_data dans {pj}_query_data)
<dataset id="[ID DATASET]" cacheable="true" standby="true" auto_add_record="false" mute_refresh_event="false">
<metadata>
<fields/>
<variables/>
</metadata>
<rowdata/>
</dataset>
L’attribut mute_refresh_event
peut être très utile lorsqu’il est utilisé sur un DataSet de filtrage. Il permet d’éviter les requêtes XHR de recherche de données à chaque champ modifié. En revanche il est à la charge du développeur de mettre un bouton dans le layout permettant, par conséquent, de lancer manuellement la recherche (vu qu’elle ne se fait plus automatiquement).
Le widgetbutton à placer devra avoir l’action refresh_dataset
et
indiquer le DataSet à rafraîchir (à savoir celui des données, lié à un
DataQuery référençant le DataSet de filtrage dans ses conditions).
Exemple de dataset créé manuellement pour être mis dans le XML de formulaire (source: form.provider_user_list.xml) :
<!-- Provider user list that will be filtered and filled "by hand" server-side -->
<dataset id="user_list">
<metadata>
<fields>
<field id="oauth_provider_id_user" type="primary_key" default_label="Groupe" default_short_label="Groupe"/>
<field id="import" type="boolean" default_label="Import" default_short_label="Import"/>
<field id="localy_found" type="boolean" default_label="Localy found" default_short_label="Localy found"/>
<field id="status" type="fkey_sysdico" default_label="Statut" default_short_label="Statut">
<fkey_sysdico dico_name="user_status"/>
</field>
<field id="username" type="string" default_label="Username" default_short_label="Username">
<string length="50"/>
</field>
</fields>
<variables>
<variable alias="selected_role" default="null">
<entry type="dataset" name="rights" row="current" field="id_role"/>
<entry type="param" name="_id_role"/>
</variable>
<variable alias="selected_group" default="null">
<entry type="dataset" name="rights" row="current" field="id_group"/>
<entry type="param" name="_id_group"/>
</variable>
</variables>
</metadata>
<rowdata/>
</dataset>
<!-- Selected role and group -->
<dataset id="rights" mute_refresh_event="true">
<metadata>
<fields>
<field id="id_role" type="integer" default_label="ID rôle" default_short_label="ID rôle"/>
<field id="id_group" type="integer" default_label="ID groupe" default_short_label="ID groupe"/>
</fields>
</metadata>
<rowdata/>
</dataset>
Metadata
Field
<field id="cp" type="string" source="varset">
[...]
</field>
- id: identifiant du champ, correspond à l’alias de la colonne dans le dataquery
- type: correspond aux types du varset. Le type induit la présence d’une sous balise qui apporte des informations supplémentaires sur le type, comme la longueur (length) pour le type string.
- source: provenance de la variable, est utilisé pour la sauvegarde de la valeur. valeurs possibles: varset et table (induit la présence d’une balise varset ou table).
Le type
spécifié pour le field induit la présence d’un noeud enfant au
<field>
ayant le même nom que la valeur de l’attribut type
:
<field id="cp" type="string" source="varset">
<string length="10" />
</field>
Ce noeud enfant peut avoir les attributes validator
et regexp
. Pour
plus d’information consultez la partie sur les
Validateurs <lib_js-validateurs>.
Varset
<varset name="enquete" field="denq" />
- name: nom du varset
- field: nom du champ dans le varset
Table
<table name="e5y7_01_data" field="denq" />
- name: nom de la table
- field: nom du champ dans la table.
Variables
<variable alias="filter.annee" value="12" target_column="false">
[...]
</variable>
- alias: nom de la variable
- value: valeur par défaut de la variable
- target_column: nom de la colonne cible, si inutilisé mettre à false
Entry Dataset
<entry type="dataset" name="filter" field="annee" />
- type: dataset
- name: nom du dataset
- field: nom du champ dans le dataset
Entry Param
<entry type="param" name="annee" />
- type: param
- name: nom du paramètre envoyé au serveur
Rowdata
Variables à réponse simple
Les variables à réponse simple sont stockées dans la balise row.
<row id_data="24" denq="2010-03-21" ville="paris" cp="75011" />
Variables à réponse multiple
Les variables à réponse multiple sont stockées comme sous-noeud de la balise row.
<row ...>
<mutiple name="ttt">
<value>1</value>
<value>2</value>
<value>3</value>
</multiple>
</row>
Format JSON
Le dataset est envoyé au client au format JSON. Dans ce cas les variables à réponse multiple sont directement stockées dans la partie row:
rowdata: [
{
id_data: "6",
age: "-7623",
ddn: "1989-04-17",
nom: "Seldon",
prenom: "Harry",
sexe: "1",
dcontact: "2010-03-01",
relation: "3",
ttt: [1, 3, 4]
}]
Enregistrement d’un dataset en base de données
Les données d’un dataset peuvent être sauvegardées dans un varset à la condition que le nom du varset soit indiqué sur les champs à sauvegarder. Il faut aussi qu’il y a ait une clé primaire liée au varset.
Exemple:
<dataset id="patient">
<metadata>
<fields>
<field id="id_data" type="primary_key" default_label="id_data" source="varset">
<varset name="pat" field="id_data" />
</field>
<field id="smartpark_code_activation" type="text" source="varset">
<varset name="pat" field="smartpark_code_activation" />
</field>
<field id="smartpark_time_activation" type="datetime" source="varset">
<varset name="pat" field="smartpark_time_activation" />
</field>
</fields>
</metadata>
</dataset>
Exemple complet
<dataset id="enquete">
<metadata>
<fields>
<field id="id_data" type="primary_key" source="varset" mandatory="true" default_label="ID" default_short_label="ID">
<varset name="enquete" field="id_data" />
</field>
<field id="denq" type="date" source="varset" mandatory="true" default_label="Nom du patient" default_short_label="Nom">
<varset name="enquete" field="denq" />
<date />
</field>
<field id="ville" type="fkey_dico" source="varset" mandatory="false" default_label="Ville" default_short_label="Ville">
<varset name="enquete" field="ville" />
<fkey_dico />
</field>
<field id="cp" type="string" source="varset" mandatory="false" default_label="Code postal" default_short_label="CP">
<varset name="enquete" field="cp" />
<string length="5" />
</field>
<field id="ttt" type="fkey_dico_ext" source="varset" mandatory="false" default_label="Traitement" default_short_label="TTT">
<varset name="enquete" field="ttt" />
<fkey_dico_ext varset_relation_name="enq_ttt" dico_name="traitement" />
</field>
<field id="email" type="string" source="varset" mandatory="false" default_label="Adresse email" default_short_label="Email">
<varset name="enquete" field="email" />
<string length="150" validator="email" />
</field>
</fields>
<variables>
<variable alias="filter.annee" value="2009" target_column="false">
<entry type="param" name="annee"/>
<entry type="dataset" name="filter" field="annee"/>
</variable>
<variable alias="filter.mois" value="12" target_column="false">
<entry type="param" name="mois"/>
<entry type="dataset" name="filter" field="mois"/>
</variable>
</variables>
</metadata>
<rowdata>
<row id_data="24" denq="2010-03-21" ville="paris" cp="75011" >
<mutiple name="ttt">
<value>1</value>
<value>2</value>
<value>3</value>
</multiple>
</row>
<row id_data="25" denq="2010-05-04" ville="paris" cp="75004" />
</rowdata>
</dataset>