Procédures stockées

4D - Documentation   Français   English   German   Manuel de référence de 4D Server, Sommaire   Manuel de référence de 4D Server, Index   Retour   Précédent   Suivant

version 2004 (Modifiée)


Qu'est-ce qu'une procédure stockée dans un système SQL ?


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.

Qu'est-ce qu'une procédure stockée dans 4D Server ?


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.

Architecture des procédures stockées de 4D


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.

Que peut faire une procédure stockée ?


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.

Que ne peut pas faire une procédure stockée (exécutée sur le serveur) ?


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 DE MENUS

AJOUTER ENREGISTREMENT

AJOUTER LIGNE MENU

AJOUTER SOUS ENREGISTREMENT

APPELER PROCESS

APPELER SUR EVENEMENT

CACHER BARRE DE MENUS

CHANGER LICENCES

CHANGER PRIVILEGES

CHERCHER PAR EXEMPLE

Creer fenetre externe

CREER FICHIER DONNEES

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

Menu choisi

MODIFIER ENREGISTREMENT

MODIFIER SELECTION

MODIFIER SOUS ENREGISTREMENT

Niveau

NIVEAUX DE RUPTURES

Nombre de lignes de menu

Nombre de menus

OUVRIR FICHIER DONNEES

Page impression

PARAMETRES IMPRESSION

QR ETAT

SAUT DE PAGE

Sous total

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 CHAMP

ALLER A PAGE

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 JEU DE CARACTERES

CHANGER MOT DE PASSE

CHANGER POINTEUR SOURIS

CHANGER PROPRIETES ELEMENT

CHANGER PROPRIETES LISTE

CHANGER STYLE

CHANGER TAILLE

CHANGER UTILISATEUR COURANT

Charger liste

CHERCHER PAR FORMULE (2)

Chercher fenetre

CHERCHER (2)

CHOIX COULEUR

CHOIX ENUMERATION

CHOIX FILTRE SAISIE

CHOIX FORMATAGE

CHOIX SAISISSABLE

CHOIX VISIBLE

COORDONNEES ECRAN

COORDONNEES FENETRE

Copier liste

Creer document (1)

Creer fichier ressources (1)

C_GRAPHE

DEPLACER FENETRE

DEPLACER OBJET

DERNIERE PAGE

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 COULEURS RVB

FIXER IMAGE DANS CONTENEUR

FIXER FICHIER HISTORIQUE

FIXER MINUTEUR

FIXER PROFONDEUR ECRAN

FIXER TEXTE DANS CONTENEUR

FIXER TITRES CHAMPS

FIXER TITRES TABLES

FORMULAIRE ENTREE

FORMULAIRE SORTIE

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 FORMULAIRE

LIRE PROPRIETES GROUPE

LIRE PROPRIETES LISTE

LIRE PROPRIETES UTILISATEUR

LIRE RECT OBJET

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 focus

Ouvrir document (1)

Ouvrir fichier ressources (1)

PAGE PRECEDENTE

PAGE SUIVANTE

Page formulaire courante

PARAMETRES DU GRAPHE

PASSER AU PREMIER PLAN

Pendant

Pop up menu

POSITION SOURIS

Position deposer

Position element liste

PREMIERE PAGE

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 BOUTON

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

Comment lancer une procédure stockée ?


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).

Toujours sur 4D, vous pouvez lancer une procédure stockée par programmation à l'aide des commandes Executer sur serveur ou EXECUTER SUR 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.

Communication interprocess entre les procédures stockées et les process utilisateurs


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

variables interprocess

sémaphores globaux ou locaux

enregistrements

ensembles interprocess et sélections temporaires interprocess

commandes LIRE VARIABLE PROCESS, ECRIRE VARIABLE PROCESS et VARIABLE VERS VARIABLE.

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.

Référence

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


4D - Documentation   Français   English   German   Manuel de référence de 4D Server, Sommaire   Manuel de référence de 4D Server, Index   Retour   Précédent   Suivant