Formulaires de base de données
Dernière mise à jour
Dernière mise à jour
K2 Geospatial 2022
Les formulaires de bases de données sont utilisés pour gérer des données stockées dans des bases de données. Ils permettent de modifier les données existantes, d’ajouter des nouvelles données et d’effacer des données. Il est possible de créer plusieurs formulaires de bases de données pour une même couche. Chaque formulaire de bases de données comporte ses propres permissions pour contrôler quels utilisateurs peuvent modifier les données.
Ces formulaires peuvent être utilisés pour gérer des données avec une relation 1 à 1 avec les données d’une couche. Dans ce cas, un enregistrement est ajouté quand un élément est créé, et l’enregistrement est normalement effacé quand l’élément est effacé.
Ils peuvent aussi être utilisés pour gérer des données avec une relation 1 à N avec les données de la couche. Dans ce cas, le formulaire est un type spécial appelé sous-formulaire et est toujours associé avec une composante table d’un formulaire. Voir sous-formulaires pour plus d’information à ce sujet.
La configuration de ce type de formulaires est une fonction avancée de JMap et nécessite l’écriture de requêtes SQL pour l’extraction, l’ajout, la modification et l’effacement des données.
Pour créer un formulaire de bases de données, sélectionnez Formulaires dans le menu des paramètres de la couche. Assurez-vous d’ouvrir l’onglet Formulaire et appuyez ensuite sur Créer.
Vous devez entrer un nom pour le nouveau formulaire. Vous devez ensuite choisir le type Base de données, et sélectionner la base de données qui contient les données à utiliser dans les formulaires.
À l’étape suivante, une fenêtre permet d’entrer les requêtes SQL du formulaire. Ces requêtes servent à extraire, ajouter, modifier et effacer des données. La requête SELECT est obligatoire tandis que les autres sont optionnelles. Les utilisateurs des applications JMap peuvent effectuer seulement les opérations pour lesquelles vous fournissez une requête SQL.
La configuration des requêtes SQL utilise une syntaxe spécialisée. En règle générale, chaque ligne de cette syntaxe doit se terminer par un point-virgule (;). La syntaxe n’est pas sensible à la casse.
Le tableau suivant explique en détails le fonctionnement de cette syntaxe.
ev(attrib) ou elementValue(attrib)
Fonction qui retourne la valeur de l’attribut spécifié en paramètre, pour un élément.
Exemple
ev(city)
Retourne la valeur de l’attribut city de l’élément.
fv(field) ou formValue(field)
Fonction qui retourne la valeur présente dans le formulaire, pour le champ spécifié en paramètre. Le nom du champ doit obligatoirement comporter le nom de la table en préfixe.
Exemple
fv(table.name)
Retourne la valeur saisie dans la composante du formulaire associée au champ TABLE.NAME de la base de données.
ei() ou elementId()
Cette fonction retourne l’identifiant de l’élément. Il peut s’agir du champ jmap_id ou d’un autre champ, tel que configuré dans la source de données spatiales.
$variable
Permet de créer et d’initialiser des variables qui peuvent ensuite être utilisées dans les différentes expressions. Dans le cas de la requête INSERT d’un formulaire, il est obligatoire de créer une variable qui contient l’identifiant unique de l’enregistrement inséré.
Exemple
$city = EV(city);
Crée une variable $city
initialisée avec la valeur de l’attribut CITY de l’élément.
nti(table, field) ou nextTableId(table, field)
Fonction qui retourne la prochaine valeur à utiliser comme identifiant numérique pour la table et le champ spécifiés en paramètres. Le champ spécifié doit exister dans la table spécifiée, et doit être un champ numérique de type entier. La fonction détermine la valeur maximale présente dans la table et retourne cette valeur incrémentée de 1 (max + 1). Cette fonction est utile lors de l’ajout d’un nouvel enregistrement dans la base de données quand la table comporte un identifiant numérique unique.
Exemple
$id = nextTableId(inspections, inspection_id);
Crée et initialise une variable $id avec la valeur du prochain identifiant INSPECTION_ID de la table INSPECTIONS. Si la valeur maximale présente est 100, la valeur retournée est 101.
Base de données
Sélectionnez la base de données contenant les données qui doivent être gérées par le formulaire.
Requête SELECT
Requête SQL qui obtient les données pour peupler les champs du formulaire. Tous les champs qui sont retournés par cette requête peuvent être utilisés pour la configuration des composantes du formulaire et aussi à l’intérieur des autres requêtes définies dans le formulaire en utilisant la fonction fv()
.
La requête doit comporter une condition pour faire la liaison entre un attribut de la couche et un champ de la base de données.
Exemple de requête pour un formulaire de base de données (1 à 1) :
SELECT * FROM ASSET_INFO WHERE ASSET_ID = EI();
Dans cet exemple, tous les champs de la table ASSET_INFO sont obtenus et disponibles pour la configuration des composantes du formulaire.
Le champ ASSET_ID est utilisé pour faire la liaison avec l’élément de la couche ASSETS en utilisant la fonction ei()
.
Si la fonction ei()
retourne une valeur en format texte, pour visualiser la valeur vous devez entourer l’expression d’apostrophes :
SELECT * FROM ASSET_INFO WHERE ASSET_ID = 'EI()';
Exemples de requête pour un formulaire de base de données (1 à N) :
Exemple du sous-formulaire Inspections :
SELECT * FROM INSPECTION WHERE ASSET_ID = EI();
Dans cet exemple, tous les champs de la table INSPECTION sont obtenus et disponibles pour la configuration des composantes du sous-formulaire.
Le champ ASSET_ID est utilisé pour faire la liaison avec l’élément de la couche ASSETS en utilisant la fonction ei()
.
Si la fonction ei()
retourne une valeur en format texte, pour visualiser la valeur vous devez entourer l’expression d’apostrophes :
SELECT * FROM INSPECTION WHERE ASSET_ID = 'EI()';
Exemple du sous-formulaire imbriqué Inspectors :
SELECT * FROM INSPECTOR WHERE INSPECTION_ID = FV(INSPECTION_ID);
Dans cet exemple, tous les champs de la table INSPECTOR sont obtenus et disponibles pour la configuration des composantes du sous-formulaire.
Le champ INSPECTION_ID est utilisé pour faire la liaison avec l’élément de la table INSPECTION en utilisant la fonction fv(field)
.
Exemple du sous-formulaire imbriqué Interventions :
SELECT * FROM INTERVENTION WHERE INSPECTION_ID = FV(INSPECTION_ID);
Dans cet exemple, tous les champs de la table INTERVENTION sont obtenus et disponibles pour la configuration des composantes du sous-formulaire.
Le champ INSPECTION_ID est utilisé pour faire la liaison avec l’élément de la table INSPECTION en utilisant la fonction fv(field)
.
Champ d’identifiant
La requête SELECT doit obligatoirement inclure un champ d’identification unique (numérique ou alphanumérique). Sélectionnez le champ qui doit servir d’identifiant unique.
Exemple de requête du formulaire de base de données (1 à 1) : ASSET_INFO.ASSET_ID Exemple de requête du formulaire de base de données (1 à N) sous-formulaire Inspections : INSPECTION.INSPECTION_ID Exemple de requête du formulaire de base de données (1 à N) sous-formulaire imbriqué Inspectors : INSPECTOR.INSPECTOR_ID Exemple de requête du formulaire de base de données (1 à N) sous-formulaire imbriqué Interventions : INTERVENTION.INTERVENTION_ID
Requête INSERT
Requête SQL qui fait l’insertion de nouvelles données dans la base de données. Configurez cette requête uniquement si le formulaire doit permettre l’ajout d’enregistrements à la base de données. Il est obligatoire de définir une variable qui contient la valeur de l’identifiant unique pour le nouvel enregistrement.
Exemple de requête pour un formulaire de base de données (1 à 1) :
$id = ei();
INSERT INTO ASSET_INFO (ASSET_ID, ASSET_YEAR, BRAND, ASSET_HEIGHT) VALUES (EI(), FV(ASSET_INFO.ASSET_YEAR), FV(ASSET_INFO.BRAND), FV(ASSET_INFO.ASSET_HEIGHT));
Dans cet exemple, les données du formulaire sont insérées dans la table ASSET_INFO lors de l’exécution de la requête SQL de type INSERT.
Les valeurs des champs ASSET_INFO.ASSET_YEAR, ASSET_INFO.BRAND et ASSET_INFO.ASSET_HEIGHT proviennent des valeurs saisies dans le formulaire par l’utilisateur en utilisant la fonction fv(field)
.
La valeur de la variable ASSET_INFO.ASSET_ID provient de la fonction ei()
.
Exemples de requête pour un formulaire de base de données (1 à N) :
Exemple du sous-formulaire Inspections :
$id = nti(INSPECTION, INSPECTION_ID);
INSERT INTO INSPECTION (INSPECTION_ID, ASSET_ID, INSP_DATE, INSP_COMMENT) VALUES ($id, EI(), FV(INSPECTION.INSP_DATE), FV(INSPECTION.INSP_COMMENT));
Dans cet exemple une variable $id
est créée et initialisée avec la prochaine valeur (max + 1) du champ ID de la table INSPECTION.
Les données du formulaire sont insérées dans la table INSPECTION lors de l’exécution de la requête SQL de type INSERT.
Les valeurs des champs INSP_DATE et INSP_COMMENT proviennent des valeurs saisies dans le sous-formulaire par l’utilisateur en utilisant la fonction fv(field)
.
La valeur du champ INSPECTION_ID provient de la variable $id
. La valeur du champ ASSET_ID provient de la fonction ei()
.
Exemple du sous-formulaire imbriqué Inspectors :
$id = nti(INSPECTOR, INSPECTOR_ID);
INSERT INTO INSPECTOR (INSPECTOR_ID, INSPECTION_ID, CONTACT_INFO, TEAM) VALUES ($id, FV(INSPECTOR.INSPECTION_ID), FV(INSPECTOR.CONTACT_INFO), FV(INSPECTOR.TEAM));
Dans cet exemple une variable $id
est créée et initialisée avec la prochaine valeur (max + 1) du champ ID de la table INSPECTOR.
Les données du formulaire sont insérées dans la table INSPECTOR lors de l’exécution de la requête SQL de type INSERT.
Les valeurs des champs INSPECTION_ID, CONTACT_INFO et TEAM proviennent des valeurs saisies dans le sous-formulaire par l’utilisateur en utilisant la fonction fv(field)
.
La valeur du champ INSPECTOR_ID provient de la variable $id
.
Exemple du sous-formulaire imbriqué Interventions :
$id = nti(INTERVENTION, INTERVENTION_ID);
INSERT INTO INTERVENTION (INTERVENTION_ID, INSPECTION_ID, WORK_ORDER, FOLLOW_UP) VALUES ($id, FV(INSPECTION_ID), FV(INTERVENTION.WORK_ORDER), FV(INTERVENTION.FOLLOW_UP));
Dans cet exemple une variable $id
est créée et initialisée avec la prochaine valeur (max + 1) du champ ID de la table INTERVENTION.
Les données du formulaire sont insérées dans la table INTERVENTION lors de l’exécution de la requête SQL de type INSERT.
Les valeurs des champs INSPECTION_ID, WORK_ORDER et FOLLOW_UP proviennent des valeurs saisies dans le sous-formulaire par l’utilisateur en utilisant la fonction fv(field)
.
La valeur du champ INTERVENTION_ID provient de la variable $id
.
Valeur de l’identifiant unique
Sélectionnez la variable qui contient la valeur de l’identifiant unique du nouvel enregistrement inséré dans la table. Celle-ci doit être définie avec la requête INSERT. Pour que vos données s’enregistrent dans la base de données (les photos, par exemple), vous devez définir et sélectionner cette variable.
Exemple de requête du formulaire de base de données (1 à 1) : $id
Exemple de requête du formulaire de base de données (1 à N) sous-formulaire Inspections : $id
Exemple de requête du formulaire de base de données (1 à N) sous-formulaire imbriqué Inspectors : $id
Exemple de requête du formulaire de base de données (1 à N) sous-formulaire imbriqué Interventions : $id
Requête UPDATE
Requête SQL qui fait la mise à jour des données dans la base de données. Configurez cette requête uniquement si le formulaire doit permettre les mises à jour des données.
Exemple de requête pour un formulaire de base de données (1 à 1) :
UPDATE ASSET_INFO SET ASSET_YEAR = FV(ASSET_INFO.ASSET_YEAR), BRAND = FV(ASSET_INFO.BRAND), ASSET_HEIGHT = FV(ASSET_INFO.ASSET_HEIGHT) WHERE ASSET_ID = FV(ASSET_INFO.ASSET_ID);
Dans cet exemple les données du formulaire sont utilisées pour mettre à jour la table ASSET_INFO lors de l’exécution de la requête SQL de type UPDATE.
Les valeurs des champs ASSET_YEAR, BRAND et ASSET_HEIGHT proviennent des valeurs saisies dans le formulaire par l’utilisateur en utilisant la fonction fv(field)
.
La clause WHERE permet de mettre à jour l’enregistrement qui contient l’identifiant unique de l’élément, ASSET_ID, en utilisant aussi la fonction fv(field)
.
Exemples de requête pour un formulaire de base de données (1 à N) :
Exemple du sous-formulaire Inspections :
UPDATE INSPECTION SET INSP_DATE = FV(INSPECTION.INSP_DATE), INSP_COMMENT = FV(INSPECTION.INSP_COMMENT) WHERE INSPECTION_ID = FV(INSPECTION.INSPECTION_ID);
Dans cet exemple les données du sous-formulaire sont utilisées pour mettre à jour la table INSPECTION lors de l’exécution de la requête SQL de type UPDATE.
Les valeurs des champs INSP_DATE et INSP_COMMENT sont mises à jour et elles proviennent des valeurs saisies dans le sous-formulaire par l’utilisateur en utilisant la fonction fv(field).
La clause WHERE utilise la fonction fv(field)
pour obtenir la valeur de l’identifiant unique de l’enregistrement.
Exemple du sous-formulaire imbriqué Inspectors :
UPDATE INSPECTOR SET CONTACT_INFO = FV(INSPECTOR.CONTACT_INFO), TEAM = FV(INSPECTOR.TEAM) WHERE INSPECTOR_ID = FV(INSPECTOR.INSPECTOR_ID);
Dans cet exemple les données du sous-formulaire sont utilisées pour mettre à jour la table INSPECTOR lors de l’exécution de la requête SQL de type UPDATE.
Les valeurs du champ CONTACT_INFO est mise à jour et elle provient de la valeur saisie dans le sous-formulaire par l’utilisateur en utilisant la fonction fv(field)
.
La clause WHERE utilise la fonction fv(field)
pour obtenir la valeur de l’identifiant unique de l’enregistrement.
Exemple du sous-formulaire imbriqué Interventions :
UPDATE INTERVENTION SET WORK_ORDER = FV(INTERVENTION.WORK_ORDER), FOLLOW_UP = FV(INTERVENTION.FOLLOW_UP) WHERE INTERVENTION_ID = FV(INTERVENTION.INTERVENTION_ID);
Dans cet exemple les données du sous-formulaire sont utilisées pour mettre à jour la table INTERVENTION lors de l’exécution de la requête SQL de type UPDATE.
Les valeurs des champs WORK_ORDER et FOLLOW_UP sont mises à jour et elles proviennent de la valeur saisie dans le sous-formulaire par l’utilisateur en utilisant la fonction fv(field)
.
La clause WHERE utilise la fonction fv(field)
pour obtenir la valeur de l’identifiant unique de l’enregistrement.
Requête DELETE
Requête SQL qui fait l’effacement des données dans la base de données. Configurez cette requête uniquement si le formulaire doit permettre d’effacer des données.
Exemple de requête pour un formulaire de base de données (1 à 1) :
DELETE FROM ASSET_INFO WHERE ASSET_ID = FV(ASSET_INFO.ASSET_ID);
Dans cet exemple l’enregistrement correspondant à la valeur de l’attribut ASSET_ID de l’élément est effacé de la table ASSET_INFO, en utilisant la fonction fv(field)
pour obtenir la valeur de l’identifiant de l’élément.
Exemples de requête pour un formulaire de base de données (1 à N) :
Exemple du sous-formulaire Inspections :
DELETE FROM INSPECTION WHERE INSPECTION_ID = FV(INSPECTION.INSPECTION_ID); DELETE FROM INTERVENTION WHERE INSPECTION_ID = FV(INSPECTION.INSPECTION_ID); DELETE FROM INSPECTOR WHERE INSPECTION_ID = FV(INSPECTION.INSPECTION_ID);
Dans cet exemple l’enregistrement correspondant à l’identifiant unique de l’inspection est effacé de la table en utilisant la fonction fv(field)
pour obtenir la valeur de l’identifiant.
Les enregistrements des sous-formulaires imbriqués INTERVENTION et INSPECTOR correspondant à l’identifiant unique de l’inspection sont aussi effacés de la table lorsque l’inspection est effacée.
Exemple du sous-formulaire imbriqué Inspectors :
DELETE FROM INSPECTOR WHERE INSPECTOR_ID = FV(INSPECTOR.INSPECTOR_ID);
Dans cet exemple, l’enregistrement correspondant à l’identifiant unique de l’inspecteur est effacé de la table, en utilisant la fonction fv(field)
pour obtenir la valeur de l’identifiant.
Exemple du sous-formulaire imbriqué Interventions :
DELETE FROM INTERVENTION WHERE INTERVENTION_ID = FV(INTERVENTION.INTERVENTION_ID);
Dans cet exemple, l’enregistrement correspondant à l’identifiant unique de l’intervention est effacé de la table, en utilisant la fonction fv(field)
pour obtenir la valeur de l’identifiant.
Les sous-formulaires sont des formulaires de base de données qui sont ouverts à partir d’une composante Table présente dans un autre formulaire. Ils servent normalement à gérer des données qui ont une relation 1 à N avec les éléments de la couche. Ils pourraient servir, par exemple, pour la gestion des données d’inspection sur des actifs (N inspections peuvent être associées au même objet). Ils se configurent de manière similaire aux autres formulaires de base de données.
Pour créer un sous-formulaire, sélectionnez Formulaires dans le menu des paramètres de la couche. Assurez-vous d’ouvrir l’onglet Sous-formulaire et appuyez ensuite sur Créer. Vous devez entrer un nom pour le nouveau formulaire et sélectionner la base de données qui contient les données à utiliser dans les formulaires.
À l’étape suivante, vous devez configurer les requêtes SQL du sous-formulaire, tel qu’expliqué plus haut pour la création d’un formulaire de base de données.
Plusieurs niveaux de sous-formulaires peuvent être imbriqués dans un sous-formulaire. Ils servent à gérer des données qui ont une relation 1 à N avec les enregistrements du sous-formulaire. Ils peuvent servir, par exemple, pour la gestion des données des interventions qui découlent d’une inspection effectuée à un actif (N interventions peuvent être associées à 1 inspection). Un sous-formulaire imbriqué est ouvert à partir d’une composante Table présente dans le sous-formulaire auquel il se rattache. La création d’un sous-formulaire imbriqué suit les mêmes étapes de la création de sous-formulaires. Des exemples des requêtes sont présentés dans la section Création de formulaires de base de données.
La figure présente un aperçu des sous-formulaires imbriqués de l’exemple dans l’application JMap Pro.
Les formulaires de base de données comportent leurs propres permissions. Les permissions disponibles sont décrites dans le tableau suivant.
Ajouter des données
Permet à un utilisateur ou à un groupe d’utiliser le formulaire pour ajouter de nouvelles données dans la base de données.
Modifier des données
Permet à un utilisateur ou à un groupe d’utiliser le formulaire pour modifier des données existantes dans la base de données.
Effacer des données
Permet à un utilisateur ou à un groupe d’utiliser le formulaire pour effacer des données existantes dans la base de données.