4D v16

Procédures stockées

Accueil

 
4D v16
Procédures stockées

Procédures stockées  


 

L'expression "Procédure Stockée" provient du monde des serveurs SQL. Lorsqu'une station cliente envoie une requête à un serveur SQL, elle envoie en réalité du texte en langage SQL au serveur SQL. Cette requête fait l'objet d'une analyse syntaxique (parsing) et est interprétée sur le serveur SQL avant d'être exécutée. De toute évidence, si le texte de la requête est important et si la requête est envoyée plusieurs fois au cours d'une session, il peut y avoir beaucoup de temps passé pour l'envoi de ce code sur le réseau, le parsing et l'interprétation de la requête. Ainsi est née l'idée de faire en sorte que la requête soit envoyée sur le réseau, analysée et interprétée en une seule fois, et qu'ensuite elle soit exécutée à chaque fois qu'elle est envoyée par la station cliente. La solution était de conserver le code source de la requête (en d'autres termes, une procédure) sur le serveur et que le client envoie une requête comportant seulement le nom de la procédure à exécuter. En conséquence, cette procédure est dite "stockée" sur le serveur, d'où le nom de Procédure Stockée. Notez qu'une procédure SQL est une procédure qui peut recevoir des paramètres venant de la station cliente, exécuter les tâches pour lesquelles elle est faite (de façon synchrone ou asynchrone) et le cas échéant retourner un résultat au client. Quand un client demande l'exécution d'une procédure stockée, ce qu'il fait, c'est dans une certaine mesure déléguer l'exécution du code sur le serveur.

Bien que nous utilisions aussi le terme "procédures stockées" par analogie, puisqu'il est compréhensible par tous dans l'industrie, les objets que nous appelons ainsi dans 4D Server ont des fonctionnalités plus larges que celles que l'on trouve habituellement.

Avec 4D en mode local, lorsque par exemple vous utilisez la commande Nouveau process, vous pouvez ouvrir un process utilisateur dans lequel vous allez exécuter une méthode. Cette méthode est appelée une méthode process (voir à ce sujet la section Méthodes projet dans le manuel Langage de 4D).

Avec 4D Server, vous pouvez faire la même chose sur un poste client. De plus, en utilisant la commande Executer sur serveur, vous pouvez créer sur le serveur un process utilisateur dans lequel vous allez exécuter une méthode. De même, en utilisant la commande EXECUTER SUR CLIENT, vous pouvez exécuter une méthode dans un autre process sur un autre poste client.
Dans les deux cas, cette méthode est appelée une procédure stockée, et par extension, le process démarré sur le serveur ou sur un autre poste client est aussi appelé procédure stockée.

La différence principale entre une procédure stockée SQL et une procédure stockée 4D Server est que dans le premier cas vous exécutez une procédure SQL et dans le second, vous exécutez un process 4D autonome.

Comme un process 4D normal, une procédure stockée dispose de son propre environnement :

  • Une sélection courante par table : chaque procédure stockée a sa propre sélection courante. Une table peut avoir une sélection courante différente dans chaque procédure stockée.
  • Un enregistrement courant par table : chaque table peut avoir un enregistrement courant différent dans chaque procédure stockée.
  • Variables : chaque procédure stockée a ses propres variables process. Les variables process ne sont reconnues que dans le contexte de la procédure stockée à laquelle elles appartiennent.
  • Table par défaut : chaque procédure stockée a sa propre table par défaut.
  • Ensembles process : chaque procédure stockée a ses propres ensemble process.
  • Appeler sur erreur : chaque procédure stockée dispose d'une méthode de gestion d'erreur.
  • Fenêtre de debogage : chaque procédure stockée dispose de sa propre fenêtre de débogage.

En termes d'interface utilisateur, une procédure stockée peut ouvrir des fenêtres et afficher des données (i.e. AFFICHER ENREGISTREMENT).
Une procédure stockée exécutée sur un poste client 4D permet la saisie de données.
En revanche, une procédure stockée exécutée sur le serveur ne permet pas la saisie de données.

Vous pouvez démarrer autant de procédures stockées que vous le souhaitez dans la mesure où votre matériel et la mémoire le permettent. En fait, la machine serveur doit être considérée comme une machine qui est non seulement capable de répondre à des clients 4D et à des navigateurs Web, mais aussi capable d'exécuter des process qui peuvent interagir avec d'autres process fonctionnant aussi bien sur le serveur que sur des 4D distants.

De la même façon que 4D fournit un environnement multitâche aux process utilisateurs fonctionnant sur le poste, 4D Server fournit un environnement multitâche aux procédures stockées. Par exemple, 4D Server maintient une table des variables interprocess qui peuvent être utilisées par les procédures stockées pour communiquer entre elles.

Note : La propriété de méthode "Exécuter sur serveur" permet elle aussi d'exécuter une méthode dans un process sur le serveur, mais la méthode utilise dans ce cas le process "jumeau" du process client, ce qui lui permet en particulier de bénéficier de l'environnement de ce process client. Il ne s'agit pas dans ce cas d'une procédure stockée 4D. Pour plus d'informations, reportez-vous à la section Attribut Exécuter sur serveur.

Une grande partie fonctionnalités des process et des commandes décrites dans le manuel Langage de 4D s'appliquent aussi aux procédures stockées — à l'exception de la saisie de données pour les procédures stockées exécutées sur le serveur.

Une procédure stockée peut ajouter, rechercher, trier, mettre à jour ou détruire des enregistrements. Une procédure stockée peut utiliser des ensembles et des sélections temporaires, accéder à des documents sur disque, travailler avec des BLOBs, imprimer des enregistrements, etc. Pensez simplement qu'au lieu d'effectuer une tâche sur votre poste 4D local, vous l'effectuez sur le serveur ou sur un ou plusieurs autres postes clients.

Un avantage évident des procédures stockées exécutées sur le serveur est que précisément une procédure stockée s'exécute sur la machine serveur, là où se trouve le moteur de la base de données. Par exemple, un APPLIQUER A SELECTION n'est pas efficace sur le réseau, mais l'est à l'intérieur d'une procédure stockée. L'exemple proposé dans la section Import basé sur les procédures stockées (exemple) montre les optimisations remarquables que vous pouvez obtenir en utilisant une procédure stockée.

Les procédures stockées exécutées sur un ou plusieurs autres postes clients autorisent, quant à elles, l'optimisation de la répartition des tâches entre les clients, ou encore la communication inter-clients. La description de la commande INSCRIRE CLIENT fournit un exemple simple de messagerie utilisant des procédures stockées exécutées sur les clients.

Cependant, l'avantage le plus évident de l'architecture des procédures stockées se trouve dans la dimension supplémentaire qu'elles apportent à 4D Server : grâce aux procédures stockées, vous pouvez implémenter vos propres services 4D Server. La limite, c'est votre imagination. L'exemple fourni dans la section Services basés sur les procédures stockées (exemple) montre une procédure stockée capable de fournir des informations sur 4D Server à ses clients. Vous pouvez, par exemple, lister les volumes de la machine serveur. Cet exemple pourrait être étendu facilement, pour, notamment, renvoyer les informations sur les répertoires ou documents au client.

De manière générale, les procédures stockées exécutées sur le serveur ne doivent pas effectuer d'opérations impliquant des éléments d'interface (menus, fenêtres, formulaires...). En effet, les mécanismes de gestion d'interface ne sont pas pris en charge sur le serveur.
Les commandes provoquant l'apparition de boîtes de dialogue sur le poste serveur ainsi que celles liées à la saisie de données sont également à proscrire.

Voici la liste des commandes ne devant PAS être utilisées dans le cadre des procédures stockées exécutées sur le serveur. Ces commandes sont classées en trois catégories :

  • Les commandes interdites sur le serveur
La présence d'une de ces commandes dans une procédure stockée provoque l'apparition d'une boîte de dialogue d'alerte indiquant que la commande ne peut pas être exécutée sur 4D Server. L'erreur 67 est retournée, elle peut être interceptée à l'aide d'une méthode installée par la commande APPELER SUR ERREUR.

ACTIVER LIGNE MENU
AFFICHER BARRE MENUS
AJOUTER ENREGISTREMENT
AJOUTER LIGNE MENU
AJOUTER SOUS ENREGISTREMENT
APPELER PROCESS
APPELER SUR EVENEMENT
CACHER BARRE MENUS
CHANGER LICENCES
CHANGER PRIVILEGES
CHERCHER PAR EXEMPLE
Creer fenetre externe 
CREER FORMULAIRE UTILISATEUR
CUMULER SUR

ECRIRE IMAGE DANS BIBLIOTHEQUE
FILTRER EVENEMENT
FIXER MARQUE LIGNE MENU
FIXER RACCOURCI LIGNE MENU
FIXER STYLE LIGNE MENU
FIXER TEXTE LIGNE MENU
GRAPHE SUR SELECTION
INACTIVER LIGNE MENU
INSERER LIGNE MENU
Lire marque ligne menu
Lire style ligne menu
Lire texte ligne menu
Lire titre menu
Lire touche ligne menu
LISTE FORMULAIRES UTILISATEURS
Menu choisi
MODIFIER ENREGISTREMENT
MODIFIER FORMULAIRE
MODIFIER SELECTION
MODIFIER SOUS ENREGISTREMENT
Niveau
NIVEAUX DE RUPTURES
Nombre de lignes de menu
Nombre de menus
Page impression
PARAMETRES IMPRESSION
QR ETAT
SAUT DE PAGE
Sous total
SUPPRIMER FORMULAIRE UTILISATEUR
SUPPRIMER IMAGE DANS BIBLIOTHEQUE
SUPPRIMER LIGNE MENU
UTILISER PARAMETRES IMPRESSION
VISUALISER SELECTION

  • Les commandes déconseillées sur le serveur
L'utilisation de ces commandes dans des procédures stockées est fortement déconseillée car leur fonctionnement n'est pas adapté à une exécution sur le serveur. Ces commandes peuvent bloquer le serveur, provoquer des erreurs, et plus généralement ne produisent pas les effets escomptés. Aucun code d'erreur spécifique n'est retourné.

Activation
ACTIVER BOUTON
AFFICHER FENETRE
AJOUTER A LISTE
AJOUTER DONNEES AU CONTENEUR
AJOUTER SEGMENT DE DONNEES
ALLER A OBJET
Ancien
Appartient au groupe
Appel exterieur
Apres
Avant
BLOB VERS DOCUMENT
BLOB vers liste
CACHER BARRE OUTILS
CACHER FENETRE
CACHER PROCESS
CHANGER COORDONNEES FENETRE
CHANGER ELEMENT
CHANGER MOT DE PASSE
CHANGER POINTEUR SOURIS
CHANGER PROPRIETES ELEMENT
CHANGER PROPRIETES LISTE
CHANGER UTILISATEUR COURANT
Charger liste
CHERCHER PAR FORMULE (2)
Chercher fenetre
CHERCHER (2)
Commande Procédures stoCOORDONNEES ECRAN
COORDONNEES FENETRE
Copier liste
Creer document (1)
Creer fichier ressources (1)
C_GRAPHE
DEPLACER FENETRE
Desactivation
DIALOGUE
Ecran principal
Ecrire proprietes groupe
Ecrire proprietes utilisateur
EFFACER CONTENEUR
EFFACER FENETRE
Element parent
Elements selectionnes
En entete
En pied
En rupture
Evenement formulaire
EXPORTER DONNEES (1)
Fenetre premier plan
Fenetre suivante
FILTRER FRAPPE CLAVIER
FIXER IMAGE DANS CONTENEUR
FIXER FICHIER HISTORIQUE
FIXER MINUTEUR
FIXER PROFONDEUR ECRAN
FIXER TEXTE DANS CONTENEUR
FIXER TITRES CHAMPS
FIXER TITRES TABLES
FORM ALLER A PAGE
FORM FIXER ENTREE
FORM FIXER SORTIE
FORM DERNIERE PAGE
FORM PAGE PRECEDENTE
FORM PAGE SUIVANTE
FORM Lire page courante
FORM LIRE PROPRIETES
FORM PREMIERE PAGE
Frappe clavier
GENERER CLIC
GENERER EVENEMENT
GENERER FRAPPE CLAVIER
Hauteur barre de menus
Hauteur ecran
IMPORTER DONNEES (1)
INACTIVER BOUTON
INFORMATION ELEMENT
INSCRIRE CLIENT
INSERER DANS LISTE
INVERSER FOND
Largeur ecran
LIRE DONNEES CONTENEUR
LIRE IMAGE DANS CONTENEUR
LIRE LISTE GROUPE
LIRE LISTE UTILISATEURS
LIRE PROPRIETES ELEMENT
LIRE PROPRIETES GROUPE
LIRE PROPRIETES LISTE
LIRE PROPRIETES UTILISATEUR
Lire texte dans conteneur
Lire texte edite
LISTE DES POLICES
LISTE FENETRES
LISTE VERS BLOB
Liste existante
Majuscule enfoncee
MARQUER ENREGISTREMENTS
MAXIMISER FENETRE
MINIMISER FENETRE
Modifie
MONTRER PROCESS
NE PAS VALIDER
Nom de police
Nombre ecrans
Nombre elements
Nouvelle liste
Numero de police
OBJET DEPLACER
OBJET FIXER COULEUR
OBJET FIXER COULEURS RVB
OBJET FIXER NOM ENUMERATION
OBJET FIXER FILTRE SAISIE
OBJET FIXER FORMATAGE
OBJET FIXER SAISISSABLE
OBJET FIXER TITRE
OBJET FIXER VISIBLE
OBJET LIRE COORDONNEES
Objet focus
Ouvrir document (1)
Ouvrir fichier ressources (1)
PARAMETRES DU GRAPHE
PASSER AU PREMIER PLAN
Pendant
Pop up menu
POSITION SOURIS
Position deposer
Position element liste
Process de la fenetre
Process de premier plan
PROFONDEUR ECRAN
PROPRIETES GLISSER DEPOSER
REDESSINER
REDESSINER FENETRE
REDESSINER LISTE
REFUSER
SELECTIONNER ELEMENTS PAR POSITION
SELECTIONNER ELEMENTS PAR REFERENCE
SELECTIONNER TEXTE
Selectionner dossier
Self
STOCKER LISTE
SUPPRIMER DANS LISTE
SUPPRIMER LISTE
SUPPRIMER UTILISATEUR
Table du formulaire courant
Tester conteneur
TEXTE SELECTIONNE
Titre fenetre
TRIER LISTE
TRIER (2)
Type fenetre
Utilisateur courant
Utilisateur supprime
VALIDER
Valider mot de passe

(1) Uniquement lorsque le premier paramètre est une chaîne vide.
(2) Uniquement lorsque la syntaxe utilisée provoque l'apparition de la boîte de dialogue (ex : TRIER ([Table])).

  • Les commandes sans effet sur le serveur
Ces commandes sont sans effet lorsqu'elles sont exécutées dans une procédure stockée sur le serveur. Aucun code d'erreur spécifique n'est retourné.

FIXER BARRE MENUS
LAISSER MESSAGES
SUPPRIMER MESSAGES
GRAPHE
AFFICHER BARRE OUTILS

  • Depuis 4D, vous pouvez lancer manuellement une procédure stockée dans la boîte de dialogue d'exécution de méthode :

Vous pouvez l'exécuter sur 4D Server ou sur un autre poste 4D client. Notez que, pour que les postes clients 4D apparaissent dans cette liste, ils doivent auparavant avoir été inscrits (cf. sections Procédures stockées sur les clients et commande INSCRIRE CLIENT).

Note : Il n'est pas possible d'utiliser les commandes de gestion des process ENDORMIR PROCESS, SUSPENDRE PROCESS et REACTIVER PROCESS à partir d'un 4D distant avec des procédures stockées sur le serveur.

  • Une méthode exécutée sur 4D Server (méthode base du serveur, méthode avec attribut Exécuter sur serveur, trigger ou procédure stockée) peut elle-même lancer une procédure stockée à l'aide des commandes Executer sur serveur, Nouveau process ou EXECUTER SUR CLIENT.

Les procédures stockées peuvent communiquer entre elles à l'aide des :

Reportez-vous aux sections correspondantes du manuel Langage de 4D. Une fois encore, gardez à l'esprit que les commandes 4D agissent sur le poste qui exécute la procédure stockée (serveur ou clients) de la même manière qu'en local sur un poste client.

Note : Les mécanismes APPELER PROCESS et Appel exterieur n'ont pas de signification sur le poste serveur car les procédures stockées ne disposent pas d'interface utilisateur avec saisie de données.

En outre, notez cette fonctionnalité importante : les process utilisateur des clients (process tournant sur un poste client) peuvent lire et écrire les variables process (*) d'une procédure stockée à l'aide des commandes LIRE VARIABLE PROCESS, ECRIRE VARIABLE PROCESS et VARIABLE VERS VARIABLE.

(*) ainsi que les variables interprocess du poste serveur.

Important : La communication process “Intermachine” permise par les commandes LIRE VARIABLE PROCESS, ECRIRE VARIABLE PROCESS et VARIABLE VERS VARIABLE n'est possible que du client vers le serveur. C'est toujours un process client qui lit ou écrit les variables d'une procédure stockée.



Voir aussi  

Import basé sur les procédures stockées (exemple)
Services basés sur les procédures stockées (exemple)

 
PROPRIÉTÉS 

Produit : 4D
Thème : 4D Server et le langage 4D
Nom intl. : Stored Procedures

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

4D Server - Référence ( 4D v16)