Rappel sur les syntaxes permettant de passer des valeurs dynamiques pour de l’affichage ou de la manipulation de données dans une application Voozanoo4 et liste des composants acceptant des valeurs dynamiques.

Edit me

Introduction

Une valeur est dynamique dès que sa valeur change en cours d’utilisation.

Les valeurs dynamiques sont de deux types :

  • celles que l’on utilise au sein des composants d’affichage (condition d’affichage, Bulk, Texte, etc.),
  • celles que l’on utilise pour requêter ou manipuler des données.

Pour les développeurs, cette distinction signifie que :

  • côté front, ces valeurs sont interprétées par la méthode execute du helper JsQuery.
  • côté serveur, ces valeurs sont remplacées au sein de la méthode Core_Library_Resource_XML_DataQuery::ToZendDBSelect().

Plusieurs syntaxes sont disponibles selon l’utilisation (affichage ou données) et ce que l’on souhaite passer comme variable.

Les syntaxes

Valeur dynamiques pour l’affichage

Côté affichage, ces syntaxes peuvent être utilisées dans divers composants (voir liste plus bas) pour afficher un titre, conditionner l’affichage d’un élément au role d’un utilisateur, effectuer un calcul au moment du rendu, etc.

  • {dataset.field} : Affiche la valeur du champ dans le rowdata courant du dataset (là où est positionné le curseur).
  • {dataset.field.dicolabel} : Spécifique aux champs stockant un item de dictionnaire (champs de type fkey_dico ou fkey_sysdico). Permet d’afficher le libellé de l’item de dico sélectionné dans le champ du rowdata courant du dataset plutôt que son code (comportement par défaut).
  • {dataset(‘nom_du_dataset’)->total_rows} : Permet de récupérer le nombre d’enregistrement au sein d’un dataset.
  • {dataset(‘nom_du_dataset’)->cursor} : Permet de récupérer la position du curseur du dataset.
  • {dataset(‘nom_du_dataset’)->begin} : Permet de récupérer la valeur de l’attribut begin d’un dataset.
  • {dataset(‘nom_du_dataset’)->range} : Permet de récupérer la valeur de l’attribut range d’un dataset.
  • {dataset(‘nom_du_dataset’)->standby} : Permet de récupérer la valeur de l’attribut standby d’un dataset.
  • {user->roles} : Permet de récupérer le/les noms techniques du/des rôle(s) de l’utilisateur courant.
  • {user->rolesId} : Permet de récupérer le/les identifiants du/des rôle(s) de l’utilisateur courant.
  • {user->groups} : Permet de récupérer le/les nom du/des groupe(s) de l’utilisateur courant.
  • {user->groupsId} : Permet de récupérer le/les identifiants du/des groupe(s) de l’utilisateur courant.
  • {user->access} : Permet de récupérer les fonctionnalités accessibles pour l’utilisateur courant.
  • {user->username} : Permet de récupérer le nom d’utilisateur de l’utilisateur courant.
  • {user->firstname} : Permet de récupérer le prénom de l’utilisateur courant.
  • {user->lastname} : Permet de récupérer le nom de famille de l’utilisateur courant.
  • {user->locale} : Permet de récupérer la préférence de langue (ex : en_US) de l’utilisateur courant.
  • {user->connection} : Permet de récupérer le type de connexion* utilisée par l’utilisateur courant.
    • Les types de connexion existants : 11 (login/mdp), 12 (CPS), 13 (oAuth), 14 (WebService), 15 (OTP), 16 (TOKEN), 17 (délégation d’accès)
  • {user->email} : Permet de récupérer l’adresse e-mail de l’utilisateur courant.
  • {parameters->nom_du_parametre} : Permet de récupérer la valeur de n’importe quel paramètre passé à la requête permettant l’affichage du formulaire actuel. Par exemple, un id_patient.
  • ~mon expression javascript~ : Tout ce qui est écrit entre les ~ sera interprété comme du javascript. Toutes les syntaxes énumérées ci-dessus peuvent également être utilisées entre les ~.

Valeur dynamiques pour la manipulation de données

Côté données, ces syntaxes vont, in fine, être remplacées lors de la construction des requêtes à la base base de données. Elles sont donc utilisées lors de l’écriture d’un dataquery, de la définition d’une variable calculées, d’un test de cohérence, etc. en combinaison avec du SQL.

  • {varset.var} : Sera remplacé par la table et la colonne correspondantes.
  • [varset.var.’code’] : Spécifique au variables stockant des valeurs de dictionnaires (fkey_dico ou fkey_dico_ext). Sera remplacé par l’id_data correspondant à l’item de dico.
  • {mon.alias} : Servira d’alias à la colonne ou à la table dans la requête SQL. Cet alias aura été défini dans l’attribut “alias” d’une balise <field/> ou <variable/>par exemple.
  • {pj}_nom_de_ma_table : Sera remplacé par le préfixe de table correspondant au projet.

Où utiliser des valeurs dynamiques

Dans les composants d’affichage

L’ensemble des syntaxes de valeurs dynamiques d’affichage peuvent être utilisées dans :

  • Les conditions d’affichage. Dans EpiCraft, ces conditions sont exprimées :
    • soit en remplissant le champ “Afficher cet élément quand…” dans la section “contrôle” dans le cas d’un composant standard (Champ Texte, Nombre, etc).
    • soit à la valeur de l’option <option output="html" option_name="show_on" value="my_value"/> dans le cas d’un Bulk si le widget la supporte.
  • Les widgets : Certains widget disposent d’attributs, options ou “valeur” acceptant des valeurs dynamiques.
    • Les options : Chaque widget peut avoir des options qui acceptent des valeurs dynamiques. Si un widget est bien documenté, ces options sont signalées dans la documentation par une icône “calculette”.
    • Les attributs :
      • La quasi-totalité des widgets acceptent une valeur dynamique pour l’attribut class
      • WidgetPage : title
      • WidgetModalHead: title
      • WidgetMeter: label, action
      • WidgetLink: href
      • WidgetTable: title (sur les balises column)
      • WidgetButton: label
    • Les valeurs : la valeur correspond à ce qui se trouve à l’intérieur de la balise correspondant au widget.
      • WidgetLink
      • WidgetStaticText : Correspond au composant Texte dans EpiCraft. L’intégralité du texte contenu dans ce composant est interprété.

Nota Bene: Il est possible que cette liste ne soit pas exhaustive.

Exemples :

  • Je souhaite n’afficher les coordonnées du patient sur sa fiche que si l’utilisateur a la fonctionnalité “read_patient_coordinates” => Dans le champ “Afficher cet élément quand…” dans la section “contrôle” des composants concernés, je peux insérer la condition d’affichage suivante :
{user->access}.indexOf('read_patient_coordinates') !== -1
  • Je souhaite que ma modal affiche le nom du patient dans le titre :
<modal_head title="~'DOSSIER DE SUIVI (Patient : ' + {patient.nom_prenom} + ')'  ~"/>

Dans les composants de manipulation de données

Les syntaxes [varset.var.’code’] et {mon.alias} :

  • peuvent être utilisées dans les attributs sql des sous-balises de <dataquery/>. Par exemple, <column/>, <conditon/>, etc.
  • sont définis dans dans les attributs alias ou table_aliasdes balises <column/>, <field/> , <conditon/>, <dataquery/>, etc.

Exemple :

<column sql="{p.sex} = [patient.sex.'F']" alias="pat_is_woman">
	<field table_name="p" field_name="sex" alias="p.sex"/>
</column>

La syntaxe [varset.var.’code’] peut également être utilisée lors de la définition de :

  • contrôles de cohérence
  • variables calculées
  • filtres

Exemple disponible dans l’article dédié à cette syntaxe : La syntaxe [varset.var.code] pour les dictionnaires

La syntaxe {pj}_nom_de_ma_table est utilisée pour :

  • l’attribut table_name de la balise <dataquery/>
  • l’attribut detail_table de la balise <join/>

Exemple :

<dataquery id="liste_travail" table_name="{pj}_patient_data" varset_name="patient" table_alias="p" mode="r">
	<!-- ... -->
<dataquery/>

La syntaxe {varset.var} est utilisée pour:

  • les variables calculées
  • les contrôles de cohérence

Exemple :

Pour un test de cohérence, si on souhaite s’assurer que la date d’une visite n’est pas supérieure à la date du jour, la condition SQL pour afficher le message sera :

{visite.date} > CURDATE()