Aller au contenu
For the complete DHIS2 documentation index, see llms.txt.

Règles de programme prises en charge par l'application de saisie Android

Vous trouverez ci-dessous une liste complète de tous les composants des règles de programme (types de variables et actions) disponibles dans DHIS2, ainsi que des remarques sur leur implémentation ou non dans l'application DHIS2 Android.

Note

Any issues around using a particular feature with Android are highlighted with an exclamation mark !.

légende Description
Type de valeur mis en œuvre
Type de valeur non appliqué, mais ignoré en toute sécurité (s'il n'est pas obligatoire)
Non applicable
Travail en cours. La fonctionnalité n'est pas encore complètement implémentée ou présente une attitude inattendue déjà signalée.

Règle de programme Types de sources variables prises en charge

Type de variable Description du type de variable Programme avec inscription Programme sans inscription Notes relatives à la mise en œuvre
Élément de données de l'événement le plus récent pour une étape du programme Ce type de source fonctionne de la même manière que "Élément de données de l'événement le plus récent du programme en cours", sauf qu'il n'évalue que les valeurs d'une étape spécifique du programme.
Élément de données de l'événement le plus récent du programme actuel (avec inscription) Ce type de source est alimenté par la dernière valeur de données collectée pour l'élément de données spécifié dans l'inscription.
Élément de données de l'événement le plus récent du programme actuel (sans inscription) Cette variable de règle de programme sera alimentée par la valeur de données la plus récente trouvée parmi les 10 événements les plus récents dans la même unité d'organisation.
Élément de données dans l'événement en cours (avec inscription) La variable prend la valeur des éléments’s de données de l'événement en cours.
Élément de données dans l'événement en cours (sans inscription) Contient la valeur des données de l'événement ouvert par l'utilisateur.
Élément de données de l'événement précédent (avec inscription) Les variables de règles de programme avec ce type de source contiendront la valeur la plus récente de tous les événements précédents pour l'élément de données spécifié. L'événement en cours n'est pas évalué.
Élément de données de l'événement précédent (sans inscription) Cette variable de règle de programme sera alimentée par la valeur de données la plus récente trouvée dans les 10 événements précédant la date de l'événement en cours ( sans compter l'événement en cours).
Attribut d’entité suivie Remplit la variable de la règle de programme avec un attribut d'entité suivie spécifié pour le TEI actuel (par exemple, le patient actuel).
Valeur calculée Valeur calculée.

Règle de programme Actions prises en charge (Élément de données dans l'événement en cours)

Action Description d'une action Programme avec inscription Programme sans inscription Notes relatives à la mise en œuvre
Masquer un champ Masque un élément de données individuel si la règle est vraie. ! Si vous modifiez la valeur après que le champ a été masqué, l'action sera inversée en fonction de la valeur par défaut du moteur de la règle de type de valeur. Nous recommandons de l'utiliser en combinaison avec la fonction hasvalue.
Masquer une section Masque une section entière et ses éléments de données si la règle est vraie.
Masquer une option Masque une option unique pour un ensemble d'options dans un élément de données/attribut d'entité suivi donné. Lorsqu'elle est combinée avec le groupe d'options afficher , l'option masquer est prioritaire.
Masquer un groupe d'options Masque toutes les options d'un groupe d'options donné et un attribut d'élément de données/d'entité suivie. Lorsqu'elle est combinée avec le groupe d'options afficher , l'option masquerest prioritaire.
Afficher un groupe d'options Utilisé pour afficher uniquement les options d'un groupe d'options donné dans un élément de données/attribut d'entité suivi donné. L'affichage d'un groupe d'options masque implicitement toutes les options qui ne font pas partie du ou des groupe(s) affiché(s).
Attribuer une valeur Attribue une valeur à un élément de données ou à un attribut spécifié si la règle est vraie. Pour évaluer un texte, celui-ci doit être placé entre apostrophes . Par exemple : '2+2' affichera le texte 2+2 et 2+2, sans les apostrophes, affichera 4.
Afficher un avertissement Affiche une fenêtre d'avertissement à l'intention de l'utilisateur si la règle est vraie ; n'empêche pas l'utilisateur de continuer.
Avertissement à la fin Affiche une fenêtre d'avertissement à l'intention de l'utilisateur si, au moment où il clique sur ‘complete&rsquo, une règle est vraie ; cela n'empêche pas l'utilisateur de continuer.
Afficher une erreur Affiche un message d'erreur à l'utilisateur dès qu'une règle est vraie et l'empêche de continuer jusqu'à ce que la règle ne soit plus vraie. La valeur n'est pas sauvegardée, en revanche le texte n'est pas effacé, permettant à l'utilisateur de le corriger facilement.
Erreur à la fin Affiche une fenêtre d'avertissement à l'intention de l'utilisateur si, lorsqu'il clique sur " terminé ", une règle est vraie, et empêche l'utilisateur de continuer jusqu'à ce que la règle ne soit plus vraie.
Rendre un champ obligatoire Définit un élément de données comme "obligatoire"; si la règle est vraie.
Afficher le texte (programmes d'événements) Permet d'afficher des informations autres qu'une erreur ou un avertissement, par exemple un feedback. Indépendamment du type de variable source, le texte sera affiché dans le formulaire en tant que dernier élément de la dernière section. Le texte sera affiché sous forme de messages dans l'onglet des indicateurs.
Afficher le texte (programmes tracker) Permet d'afficher des informations autres qu'une erreur ou un avertissement, par exemple un feedback. 1. Règle de programme configurée comme "Règle de déclenchement uniquement pour l'étape du programme". Le texte sera affiché UNIQUEMENT dans le formulaire en tant que dernier élément de la dernière section. Le texte sera affiché sous forme de messages dans l'onglet des indicateurs. -> Si la règle de programme utilise un type de variable qui n'est pas de l'étape en cours, la règle ne pourra pas être évaluée et le message ne sera pas affiché.2. règle de programme NON configurée comme "Règle de déclenchement uniquement pour l'étape de programme". Le texte sera affiché UNIQUEMENT dans l'onglet des indicateurs et NON dans le formulaire.→ Si la règle de programme utilise une variable de type Evénement en cours, la règle ne pourrra pas être évaluée et le message ne sera pas affiché.
Valeur de la touche d'affichage/paire (programmes d'événements) Utilisé pour afficher des informations tirées d'un élément de données. Variable Type: * Data element from the newest event in the current program* Data element from previous event* Data element in current event* Built-in variableKey/Value Pair will be displayed in the form ONLY in the specified section.
Valeur de la touche d'affichage/paire (programmes traker) Utilisé pour afficher des informations tirées d'un élément de données. 1. Variable Type:* Data element in current eventKey/Value Pair will be displayed in the form ONLY in the specified section.2. Variable Type:* Data element from the newest event in the current program* Data element from previous event* Data element from the newest event for a program stage* Tracked entity attribute* Built-in variableKey/Value Pair will be displayed ONLY in the indicators tab and NOT in the form.
Masquer l'étape du programme Masque une étape entière du programme à l'utilisateur si la règle est vraie. La règle d'action n'est prise en charge que pour l'élément de données de l'événement le plus récent dans le type de programme actuel et les variables d'attribut de l'entité suivie.
Envoyer un message L'envoi d'un message déclenche une notification basée sur le modèle de message fourni. Cette action sera entreprise chaque fois qu'il y aura un changement dans la valeur des données. Toutefois, ce comportement peut être contrôlé en fournissant le statut d'inscription à l'événement dans l'expression de la règle du programme. Cette fonction est exécutée au niveau du serveur.
Programmer un message Programmer un message programme la notification à la date indiquée par Expression dans le champ de données. Cette fonction est exécutée au niveau du serveur.

Règle de programme Actions prises en charge (Autres variables)

Action Description d'une action Élément de données de l'événement le plus récent du programme actuel (avec inscription) Élément de données de l'événement le plus récent du programme actuel (sans inscription) Élément de données de l'événement précédent (avec inscription) Élément de données de l'événement précédent (sans inscription) Élément de données de l'événement le plus récent pour une étape du programme (avec inscription) Attribut d'entité suivie (avec inscription) Notes relatives à la mise en œuvre
Masquer le champ Masque un élément de données individuel si la règle est vraie.
Masquer une section Masque une section entière et ses éléments de données si la règle est vraie.
Masquer une option Masque une option unique pour un ensemble d'options dans un élément de données/attribut d'entité suivi donné. Lorsqu'elle est combinée avec le groupe d'options afficher , l'option masquer est prioritaire.
Masquer un groupe d'options Masque toutes les options d'un groupe d'options donné et un attribut d'élément de données/d'entité suivie. Lorsqu'elle est combinée avec le groupe d'options afficher , l'option masquer est prioritaire.
Attribuer une valeur Attribue une valeur à un élément de données ou à un attribut spécifié si la règle est vraie. Pour évaluer un texte, celui-ci doit être placé entre apostrophes . Par exemple : '2+2' affichera le texte 2+2 et 2+2, sans les apostrophes, affichera 4.
Afficher un avertissement Affiche une fenêtre d'avertissement à l'intention de l'utilisateur si la règle est vraie ; n'empêche pas l'utilisateur de continuer.
Avertissement sur Complete(terminé) Affiche une fenêtre d'avertissement à l'intention de l'utilisateur si, au moment où il clique sur "completé", une règle est vraie ; cela n'empêche pas l'utilisateur de continuer.
Afficher une erreur Affiche un message d'erreur à l'utilisateur dès qu'une règle est vraie et l'empêche de continuer jusqu'à ce que la règle ne soit plus vraie. La règle permet à l'utilisateur de terminer l'inscription mais l'empêche de terminer les événements jusqu'à ce que la règle ne soit plus vraie. La valeur n'est pas enregistrée, cependant le texte n'est pas effacé afin que l'utilisateur puisse le corriger facilement.
Erreur sur la fin Affiche une fenêtre d'avertissement à l'intention de l'utilisateur si, au moment où il clique sur "completé", une règle est vraie ; cela n'empêche pas l'utilisateur de continuer.
Rendre un champ obligatoire Définit un élément de données comme "obligatoire" si la règle est vraie.
Afficher le texte (programmes d'événements) Permet d'afficher des informations autres qu'une erreur ou un avertissement, par exemple un feedback. Indépendamment du type de variable source, le texte sera affiché dans le formulaire en tant que dernier élément de la dernière section. Le texte sera affiché sous forme de messages dans l'onglet des indicateurs.
Afficher le texte (programmes tracker) Permet d'afficher des informations autres qu'une erreur ou un avertissement, par exemple un feedback. 1. Règle de programme configurée comme "Règle de déclenchement uniquement pour l'étape du programme". Le texte sera affiché UNIQUEMENT dans le formulaire en tant que dernier élément de la dernière section. Le texte sera affiché sous forme de messages dans l'onglet des indicateurs. -> Si la règle de programme utilise un type de variable qui n'est pas de l'étape en cours, la règle ne pourra pas être évaluée et le message ne sera pas affiché.2. règle de programme NON configurée comme "Règle de déclenchement uniquement pour l'étape de programme". Le texte sera affiché UNIQUEMENT dans l'onglet des indicateurs et NON dans le formulaire.→ Si la règle de programme utilise une variable de type Evénement en cours, la règle ne pourrra pas être évaluée et le message ne sera pas affiché.
Valeur de la touche d'affichage/paire (programmes d'événements) Utilisé pour afficher des informations tirées d'un élément de données. Variable Type: * Data element from the newest event in the current program* Data element from previous event* Data element in current event* Built-in variableKey/Value Pair will be displayed in the form ONLY in the specified section.
Valeur de la touche d'affichage/paire (programmes traker) Utilisé pour afficher des informations tirées d'un élément de données. 1. Variable Type:* Data element in current eventKey/Value Pair will be displayed in the form ONLY in the specified section.2. Variable Type:* Data element from the newest event in the current program* Data element from previous event* Data element from the newest event for a program stage* Tracked entity attribute* Built-in variableKey/Value Pair will be displayed ONLY in the indicators tab and NOT in the form.
Masquer l'étape du programme Masque une étape entière du programme à l'utilisateur si la règle est vraie. La règle d'action n'est prise en charge que pour l'élément de données de l'événement le plus récent dans letype de variable du programme actuel. Si l'événement est généré automatiquement, la règle ne s'applique pas.
Envoyer un message L'envoi d'un message déclenche une notification basée sur le modèle de message fourni. Cette action sera entreprise chaque fois qu'il y aura un changement dans la valeur des données. Toutefois, ce comportement peut être contrôlé en fournissant le statut d'inscription à l'événement dans l'expression de la règle du programme. Cette fonction est exécutée au niveau du serveur.
Programmer un message Programmer un message programme la notification à la date indiquée par Expression dans le champ de données. Cette fonction est exécutée au niveau du serveur.

Fonctions à utiliser dans les expressions des règles du programme

Fonction Description de la fonction Statut Notes relatives à la mise en œuvre
d2:limite Arrondit l'argument d'entrée au nombre entier le plus proche.
d2:floor Arrondit l'argument d'entrée au niveau inférieur du nombre entier le plus proche.
d2:round Arrondit l'argument d'entrée au nombre entier le plus proche.
d2:modulus Produit le module en divisant le premier argument par le second.
d2:zing Évalue l'argument d'un numéro de type à zéro si la valeur est négative, sinon à la valeur elle-même.
d2:oizp Évalue l'argument du numéro de type à un si la valeur est zéro ou positive, sinon à zéro.
d2:concatenate Produit une chaîne concaténée à partir des paramètres d'entrée. Prend en charge un nombre illimité de paramètres. Utilisez la fonction d2:concatenate au lieu de "+", car l'évaluateur d'expression de l'application ajoutera des nombres s'il le peut.
d2:daysBetween Indique le nombre de jours entre le premier et le deuxième argument. Si la date du deuxième argument est antérieure à celle du premier argument, la valeur de retour sera le nombre négatif de jours entre les deux dates. Le format statique de la date est 'aaaa-MM-jj'.
d2:weeksBetween Indique le nombre de semaines complètes entre le premier et le deuxième argument. Si la date du deuxième argument est antérieure à celle du premier argument, la valeur de retour sera le nombre négatif de semaines entre les deux dates. Le format de la date statique est 'aaaa-MM-jj'.
d2:monthsBetween Indique le nombre de mois entiers entre le premier et le deuxième argument. Si la date du deuxième argument est antérieure à celle du premier argument, la valeur de retour sera le nombre négatif de mois entre les deux dates. Le format statique de la date est 'aaaa-MM-jj'.
d2:yearsBetween Indique le nombre d'années entre le premier et le deuxième argument. Si la date du deuxième argument est antérieure à celle du premier argument, la valeur de retour sera le nombre négatif d'années entre les deux dates. Le format statique de la date est 'aaaa-MM-jj'.
d2:addDays Produit une date basée sur le premier argument qu'est la date, en ajoutant le deuxième argument qu'est le nombre de jours.
d2:count Compte le nombre de valeurs saisies pour le champ source dans l'argument.
d2:countIfValue Compte le nombre de valeurs correspondantes saisies pour le champ source dans le premier argument. Seules les occurrences correspondant au deuxième argument sont comptabilisées.
d2:countIfZeroPos Compte le nombre de valeurs nulles ou positives saisies pour le champ source dans l'argument. Le paramètre du champ source est le nom de l'un des champs source définis dans le programme.
d2:hasValue Prend la valeur vrai si le champ source de l'argument contient une valeur, faux si aucune valeur n'est saisie.
d2:validatePattern Prend la valeur vrai si le texte saisi correspond exactement au motif de l'expression régulière fournie. L'expression régulière doit être esquivée.
d2:left Évalue la partie gauche d'un texte, en nombre de caractères à partir du premier caractère.
d2:right Évalue la partie droite d'un texte, en nombre de caractères à partir du dernier caractère.
d2:substring Évalue la partie d'une chaîne de caractères spécifiée par les numéros des caractères de début et de fin.
d2:split Répartie le texte en fonction du délimiteur et conserve le nième élément (0 est le premier).
d2:length Trouver la longueur d'une chaîne.
d2:zpvc Détermine le nombre de valeurs numériques nulles et positives parmi les arguments de l'objet donné. Peut être doté de tout nombre d'arguments.
d2:inOrgUnitGroup* Détermine si l'unité d'organisation actuelle fait partie du groupe d'arguments. L'argument peut être défini avec l'ID ou le code du groupe d'unités d'organisation.
d2:hasUserRole** Renvoie vrai si l'utilisateur actuel joue ce rôle, sinon faux.
d2:zScoreWFA*** La fonction calcule le z-score sur la base des données fournies par l'indicateur de poids pour l'âge de l'OMS. Sa valeur varie entre -3,5 et 3,5 en fonction de la valeur du poids. Si vous indiquez un âge inférieur à 0 ou supérieur à 60, la règle du programme ne sera pas calculée. En outre, dans les tableaux de la WFA, le paramètre de l'âge est augmenté par paliers de 1. L'indication d'une fraction d'âge aura pour effet de réduire la valeur à zéro (2,3 mois → 2 mois).
d2:zScoreHFA*** La fonction calcule le z-score sur la base des données fournies par l'indicateur de la taille pour l'âge de l'OMS. Sa valeur varie entre -3,5 et 3,5 en fonction de la valeur du poids. Si vous indiquez un âge inférieur à 0 ou supérieur à 60, la règle du programme ne sera pas calculée. En outre, dans les tableaux de la HFA, le paramètre de l'âge est augmenté par paliers de 1. L'indication d'une fraction d'âge aura pour effet de réduire la valeur à zéro (2,3 mois → 2 mois).
d2:zScoreWFH*** La fonction calcule le z-score sur la base des données fournies par l'indicateur de poids pour la taille de l'OMS. Sa valeur varie entre -3,5 et 3,5 en fonction de la valeur du poids. Si vous indiquez une taille inférieure à 45 ou supérieure à 120, la règle du programme ne sera pas calculée. En outre, les tables de la WFH ont un paramètre de taille qui augmente par paliers de 0,5, l'indication d'une fraction de la taille aura pour effet de modifier la valeur (45.3 → 45

Note

  • Available in DHIS2 v2.30 ** Available in DHIS2 v2.31 and greater *** Available in DHIS2 v2.32 and greater

Variables standard à utiliser dans les expressions des règles du programme

Disponible dans DHIS2 v2.30

Variable Description de la fonction Statut Notes relatives à la mise en œuvre
V{current_date} Contient la date du jour lorsque la règle est exécutée.
V{event_date} Contient la date de l'événement en cours d'exécution. N'aura pas de valeur au moment où la règle est exécutée dans le cadre du formulaire d'enregistrement.
V{event_status} Contient le statut de l'événement ou de l'inscription en cours.
V{due_date} * Cette variable contient la date actuelle à laquelle la règle est exécutée. Remarque : cela signifie que la règle peut produire des résultats différents à des moments différents, même si rien d'autre n'a changé.
V{event_count} Contient le nombre total d'événements dans l'inscription.
V{enrollment_date} * Contient la date d'inscription de l'inscription actuelle. N'a pas de valeur pour les programmes à événement unique.
V{incident_date} * Contient la date d'incident de l'inscription actuelle. N'a pas de valeur pour les programmes à événement unique.
V{enrollment_id} * Chaîne d'identification universelle (UID) de l'inscription en cours. N'aura pas de valeur pour les programmes à événement unique.
V{event_id} Chaîne d'identification universelle (UID) du contexte de l'événement en cours. N'aura pas de valeur au moment où la règle est exécutée dans le cadre du formulaire d'enregistrement.
V{orgunit_code} Contient le code de l'unité d'organisation liée à l'inscription en cours. Pour les programmes à événement unique, le code de l'unité d'organisation de l'événement en cours sera utilisé à la place.
V{environnement} Contient un code représentant l'environnement d'exécution actuel des règles. Les valeurs possibles sont "le WebClient", " l'AndroidClient" et "le Serveur". Peut être utilisé lorsqu'une règle de programme n'est censée s'exécuter que dans un ou plusieurs types de clients.
V{program_stage_id} Contient l'ID de l'étape du programme en cours qui a déclenché les règles. Cette variable peut être utilisée pour exécuter les règles dans des étapes spécifiques du programme, ou pour éviter l'exécution dans certaines étapes. Lorsque les règles sont exécutées dans le contexte d'un formulaire d'enregistrement TEI, la variable est vide.
V{program_stage_name} Contient le nom de l'étape du programme en cours qui a déclenché les règles. Cette variable peut être utilisée pour exécuter les règles dans des étapes spécifiques du programme, ou pour éviter l'exécution dans certaines étapes. Lorsque les règles sont exécutées dans le contexte d'un formulaire d'enregistrement TEI, la variable est vide.

Notes

* Only applies to tracker

Différences entre les règles du programme dans la version web et la version Android{ #capture_app_pr_differences_web_android }

As the web and the Android application are currently using a different program rule engine there might be programs rule that work in one system and not in the other. In general terms it can be said that the Android program rule engine is more strict and so, some Program Rules that work in the web version of DHIS2 will fail in Android. This subsection describes the main differences and how to adapt the rules in order to have them working in both systems.

Évaluation du type booléen

DHIS2 web version considers the type boolean as 0 or 1 (which can be evaluated to true or false), however Android evaluates them only as true or false. While this makes possible the addition of booleans in web, it will fail in Android; in order to fix this an additional program rule variable is needed to transform the boolean into an number that can be operated. Check the table below for examples and possible solutions.

Pour les exemples ci-dessous, considérez les éléments suivants :

  • yn_prv1: est une variable de règle de programme qui a été configurée pour obtenir la valeur d'un élément de données "Oui/Non".
  • yn_prv2: est une variable de règle de programme qui a été configurée pour obtenir la valeur d'un élément de données "Oui/Non".
  • prv_booléen_un: est une variable de règle de programme qui a été configurée pour obtenir la valeur d'un éelément de données "Oui/Non".
  • prv_booléen_deux: est une variable de règle de programme qui a été configurée pour obtenir la valeur d'un éelément de données "Oui/Non".
  • prv_boolean_one_to_number : est une variable de règle de programme avec une valeur calculée
  • prv_boolean_two_to_number : est une variable de règle de programme avec une valeur calculée
  • Parfois, le terme "true" est utilisé comme condition d'une règle de programme, ce qui signifie que l'action est toujours exécutée.
  • The following acronyms are used:
    • ED (Élément de Données)
    • RP (Règle du Programme)
    • ERP (Expression de la Règle du Programme)
    • CRP (Condition de la Règle du Programme)
    • VRP (Variable de la Règle du Programme)
    • ARP (Action de la Règle du Programme)
Condition(s) de la règle du programme Actions(s) de la règle du programme Version web Version Android Commentaire
d2:hasValue('yn_prv1') || d2:hasValue('yn_prv2') Attribuer une valeur fixe à l'ED
#{yn_prv1} || #{yn_prv2} Attribuer une valeur fixe à l'ED
d2:hasValue('yn_prv1') || d2:hasValue('yn_prv2') Attribuer une valeur fixe à l'ED: #{yn_prv1} + #{yn_prv2} + 1 Crashes in Android whenver a boolean is marked as the expression would result in true+false+1
PR1: #{prv_boolean_one}

PR2: #{prv_boolean_two}

PR3: #{prv_boolean_one} || #{prv_boolean_two}
PRA1. Assign value "1" to PRV "#{prv_bool_one_to_number}"

PRA2. Assign value: "1" to PRV "#{prv_bool_two_to_number}"

PRA3. Assign value to DE: "#{prv_bool_one_to_number} + #{prv_bool_two_to_number} + 1"
Il existe 2 variables pour les booléens, l'une obtient la valeur via une définition de la VRP " formulaire de valeur de l'ED " et l'autre via une ARP. Si une variable booléenne n'est pas marquée, elle est comptée comme une chaîne de caractères au lieu d'un nombre.
Quatre RP pour attribuer 1 ou 0 aux booléens et un supplémentaire pour l'addition. Les priorités vont du haut vers le bas

CRP1 : !d2:hasValue('prv_boolean_one') || !#{prv_boolean_one}

PRC2: d2:hasValue('prv_boolean_one') && #{prv_boolean_one}

PRC3: !d2:hasValue('prv_boolean_two') || !#{prv_boolean_two}

PRC4: d2:hasValue('prv_boolean_two') && #{prv_boolean_two}

PRC5: true
PRA1: Assign value: "0" to PRV "#{prv_bool_one_to_number}"

PRA2: Assign value: "1" to PRV "#{prv_bool_one_to_number}"

PRA3: Assign value: "0" to PRV "#{prv_bool_two_to_number}"

PRA4: Assign value: "1" to PRV "#{prv_bool_two_to_number}"

PRA5: Assign value: "#{prv_bool_one_to_number} + #{prv_bool_two_to_number} + 1" to DE
Il y a 2 variables pour les booléens, l'une obtient la valeur via une définition de la VRP " formulaire de valeur de l'ED " et l'autre via une ARP.

Évaluation des nombres{ #capture_app_pr_differences_web_android_numbers }

La version web de DHIS2 évalue les nombres d'une manière plus souple en transformant les valeurs entières en valeurs flottantes et vice-versa. Cela peut entraîner certains problèmes, comme l'expliquent les exemples ci-dessous.

Division of numbers

Si cela est nécessaire pour une division, Web passera d'un nombre entier à un nombre flottant. Cependant, Android prend les nombres comme tels (littéralement et sans passer par une division), ce qui peut donner des résultats inattendus. Consultez le tableau ci-dessous pour des exemples et des solutions possibles.

Condition(s) de la règle du programme Actions(s) de la règle du programme Version web Version Android Commentaire
vrai Attribuer une valeur à l'ED: d2:daysBetween('2020-05-13', '2020-05-17') / 3 L'utilisateur s'attendrait à ce que la division soit calculée comme 4/3 avec un résultat de 1,3333. Cependant, Android ne convertit pas 4 en flottant (4.0 comme le fait la version web), de sorte que le résultat dans Android est un pur 1 comme résultat de la division entière 4/3.
vrai Attribuer une valeur à l'ED: d2:daysBetween('2020-05-13', '2020-05-17') / 3.0 La division donne 1.33333 pour le web et l'Android.

Using the function validatePattern

De la même manière, si un Élément de données du nombre saisi est utilisé, Android utilisera cette valeur comme un flottant (y compris les décimales), ce qui peut conduire à ce que la fonction Valider le motif ne fonctionne pas comme prévu.

Considérez ce qui suit :

  • temperatue_prv: is a Program Rule Variable containing the value of the Data Element temperature.
  • L'utilisateur saisit 38 dans l'élément de données.
Condition(s) de la règle du programme Actions(s) de la règle du programme Version web Version Android Commentaire
!d2:validatePattern(#{temperature_prv},'\\{d}') Erreur d'affichage si la valeur n'est pas de 2 chiffres L'utilisateur s'attendrait à ce que la règle du programme n'affiche PAS d'erreur car 38 correspond au motif. Cependant, Android tente de valider le motif \{d} par rapport à 38.0, et il affiche l'erreur.
!d2:validatePattern(#{temperature_prv},'(\\d{2}|\\d{2}\\.\\d|\\d{2}\\.\\d{2})$') Erreur d'affichage si la valeur n'est pas de 2 chiffres L'expression régulière utilisée ici correspondra à la fois aux nombres entiers et aux nombres flottants, ce qui lui permettra d'être évaluée correctement sur le web et sur Android et de ne pas afficher d'erreur.

Changements dans les règles du programme (à partir de la version 2.2 de l'application){ #capture_app_pr_changes }

In the version 2.2 of the application (released on August, 2020) a new rule-engine was included. This rule-engine requires some optional and some mandatory changes to be performed on the program rules expressions in order to make it work in the new application. A list of those changes, how to detect them and how to fix them is included in the following subsections.

Évaluation de 'd2:hasValue'

Description

This is an optional change. d2:hasValue now works with both single quotes or full variable expression. The following expressions is valid: (d2:hasValue('variable_name') and d2:hasValue(#{variable_name}))

How to identify via API?

Obtenir les règles de programme dont la condition ou l'action utilise la fonction d2:hasValue.

https://example.org/api/programRules?fields=program[name],name,programRuleActions[data],condition&filter=programRuleActions.data:like:hasValue&filter=condition:like:hasValue&rootJunction=OR
<programRule name="PR01 - Check variable with hasValue(#{variable})">
<condition>d2:hasValue(#{Âge en années})</condition>
<program name="JB_Testing_2.2"/>
<programRuleActions>
<programRuleAction/>
</programRuleActions>
</programRule>
<programRule name="PR01 - Check variable with hasValue('variable')">
<condition>d2:hasValue('Âge en années')</condition>
<program name="JB_Testing_2.2"/>
<programRuleActions>
<programRuleAction/>
</programRuleActions>
</programRule>

How to fix it?

L'exemple ci-dessus montre comment différentes manières d'utiliser la fonction hasValue auront le même effet à partir de la version 2.2. Il n'y a pas de changement obligatoire, mais gardez à l'esprit que lorsque vous écrivez de nouvelles règles de programme, la cohérence peut aider à éviter les problèmes.

Évaluation d'une variable

Description

This is a mandatory change. !#{variable_name} can only be used boolean type variables (BOOLEAN and TRUE_ONLY).

How to identify via API?

Obtenir des variables de règles de programme avec des éléments de données de type NON BOLÉEN ou VRAI_ UNIQUEMENT

https://example.org/api/programRuleVariables?fields=name&filter=dataElement.valueType:!in:[TRUE_ONLY,BOOLEAN]&paging=False

Obtenir toutes les conditions de programRule

https://example.org/api/programRules?fields=displayName,condition&paging=False

Check manually (or programmatically via a script) if in the list of programRule.conditions (obtained via the second API call) any of the program rules variables (obtained via the first API call) is being used.

Par exemple, à partir de la première liste, nous obtenons :

<programRuleVariable name="AdditionalMedication"/>
<programRuleVariable name="age"/>
<programRuleVariable name="Age in years"/>
<programRuleVariable name="AgeYears"/>
<programRuleVariable name="allergies"/>
<programRuleVariable name="apgarcomment"/>

Nous pouvons faire une comparaison avec la seconde liste :

<programRule>
<condition>!#{Enceinte}</condition>
<displayName>PR03- !#{varible_name} - BOOLEEN</displayName>
</programRule>
<programRule>
<condition>!#{Age en années}</condition>
<displayName>PR03- !#{varible_name} - PAS BOOLEEN</displayName>
</programRule>
<programRule>
<condition>#{Statut de grossesse} != 'OUI'</condition>
<displayName>Statut de grossesse : faux</displayName>
</programRule>

Ceci montre qu'une variable NON BOLÉENNE est utilisée de manière erronée.

How to fix it?

Make sure that you are evaluating BOOLEAN or TRUE_ONLY variables in your conditions. In case the program rule variable is not of that type update your program rule condition with d2:hasValue(#{variable_name}) or d2:hasValue(‘variable_name’)

Dans l'exemple ci-dessus, la condition doit passer de :

<condition>!#{Age en années}</condition>
à:
<condition>d2:hasValue(‘Age en années’)</condition>

Evaluation des textes

Description

Il s'agit d'un changement important. Dans les actions de règles de programme du type AFFECTER, AFFICHER LE TEXTE, AFFICHER LA PAIRE TOUCHE/VALEUR, AFFICHER L'AVERTISSEMENT, AFFICHER L'ERREUR, AVERTISSEMENT A LA FIN DU PROGRAMME ou ERREUR A LA FIN DU PROGRAMME, si l'expression à évaluer et à affecter/afficher est un texte, elle doit être encadrée par des apostrophes .

How to identify via API?

Obtenir les règles de programme dont les actions sont de type texte, avec quelque chose sur les données du champ et vérifier leur contenu pour trouver des chaînes sans apostrophes.

https://example.org/api/programRules?fields=program[name],name,programRuleActions[programRuleActionType,content,data]&filter=programRuleActions.programRuleActionType:in:[ASSIGN,DISPLAYTEXT,DISPLAYKEYVALUEPAIR,SHOWWARNING,SHOWERROR]&filter=programRuleActions.data:!null&paging=false

Par exemple, nous pouvons détecter ici une erreur de champ de texte sans apostrophes dans la première action de règle de programme, alors que la seconde est correcte.

<programRule name="PR04- !#{varible_name} - BOOLEAN - Assign text without quotes">
<program name="JB_Testing_2.2"/>
<programRuleActions>
<programRuleAction>
<programRuleActionType>SHOWWARNING</programRuleActionType>
<data>embarazada</data>
<content>PR04 text with quotes is: </content>
</programRuleAction>
</programRuleActions>
</programRule>
<programRule name="PR04- !#{varible_name} - BOOLEAN - Assign text with quotes">
<program name="JB_Testing_2.2"/>
<programRuleActions>
<programRuleAction>
<programRuleActionType>SHOWWARNING</programRuleActionType>
<data>'embarazada'</data>
<content>PR04 text with quotes is: </content>
</programRuleAction>
</programRuleActions>
</programRule>

How to fix it?

Analysez la liste générée (via les appels API suggérés) pour trouver les composants de données de l'action de règle de programme où le texte n'est pas cité, puis allez à chacune des règles de programme identifiées et mettez-les à jour.

Concaténation de chaînes et d'objets

Description

This is a mdantory change. In program rule actions of the type ASSIGN, DISPLAY TEXT, DISPLAY KEY/VALUE PAIR, SHOW WARNING, SHOW ERROR, WARNING ON COMPLETE or ERROR ON COMPLETE if the Expression to evaluate and assign/display is a text, it must be enclosed with single quotes (same as previous change); but, on top of that, if it requires to concatenate two strings or a combination of functions it is mandatory to use the d2:concatenate function.

How to identify via API?

Obtenir les règles du programme dont les actions sont de type texte, avec n'importe quel contenu sur les données du champ et vérifier leur contenu de données pour vérifier si la fonction d2:concatenate est utilisée dans le cas où deux ou plusieurs chaînes (ou autres objets) sont jointes.

Obtenez les règles de programme dont les actions sont de type texte et vérifiez le contenu de leurs données pour trouver des chaînes de caractères sans guillemets.

http://localhost:8034/api/programRules?fields=program[name],name,programRuleActions[programRuleActionType,content,data]&filter=programRuleActions.programRuleActionType:in:[ASSIGN,DISPLAYTEXT,DISPLAYKEYVALUEPAIR,SHOWWARNING,SHOWERROR]&filter=programRuleActions.data:!null&paging=false

Par exemple, nous pouvons détecter ici une erreur de deux chaînes de caractères dans une action sans utiliser d2:concatenate.

<programRule name="PR08- Assign text and variable without concatenate">
<program name="JB_Testing_2.2"/>
<programRuleActions>
<programRuleAction>
<programRuleActionType>AFFICHER L'AVERTISSEMENT</programRuleActionType>
<data>'L'âge est de 10 ans et le module est une autre chaîne.'</data>
<content>PR05 le texte sans concat est: </content>
</programRuleAction>
</programRuleActions>
</programRule>

How to fix it?

Analysez la liste générée (via les appels API suggérés) pour trouver les composants de données de l'action de règle de programme où deux objets ou plus sont concaténés et mettez-les à jour pour utiliser la fonction d2:concatenate.

Dans l'exemple ci-dessus, les données doivent passer de :

<data>'L'âge est de 10 ans et le module est une autre chaîne.'</data>
à:
<data>d2:concaténer('L'âge est de 10 ans et le module', 'une autre chaîne ')</data>