Dataset

Edit me

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 formulaire
  • cacheable : 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 vaut filter les valeurs saisient dans le filtre deviendront persistantes en session.
  • mute_refresh_event : Facultatif (défaut : false), S’il vaut true 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>