DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Syntaxe WLangage / Procédures WLangage
  • Création d'une procédure
  • Sortie d'une procédure
  • Compilation d'une procédure (locale ou globale) en fonction d'une condition
  • Option "A la fin de l'événement contenant l'appel"
  • Renvoi d'un résultat
  • Typage de la valeur de retour
  • Attributs d'extension
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
La déclaration d'une procédure est la même qu'il s'agisse :
Important : Il ne faut pas déclarer deux procédures avec le même nom (notamment une procédure globale et une procédure locale).
Rappel : En WLangage, il n'existe pas de distinction entre les procédures et les fonctions. Les syntaxes de déclaration et d'utilisation décrites pour les procédures sont les mêmes pour les fonctions.
Exemple
PROCÉDURE Trouve(NomFichier, Clé, Valeur)
HLitRecherche(NomFichier, Clé, Valeur)
SI HTrouve() = Vrai ALORS
RENVOYER Vrai
SINON
RENVOYER Faux
FIN
Syntaxe

Déclarer une procédure avec paramètres Masquer les détails

PROCEDURE <Nom de la procédure>(<Paramètres>) [<Attributs d'extension>] [: <Type du retour>]
<Code de la procédure>
<PROCEDURE> :
Début de déclaration de la procédure.
Remarque : Pour des raisons de lisibilité des programmes, le mot-clé PROCEDURE peut être remplacé par le mot-clé FONCTION.
<Nom de la procédure> :
Nom de la procédure à déclarer.
<Paramètres> :
Paramètres passés à la procédure. Chaque paramètre est séparé par une virgule. Pour plus de détails sur les paramètres, consultez Paramètres d'une procédure.
Si votre procédure ou fonction utilise un élément du projet (fenêtre, page, état, ...), il est possible d'obtenir la liste des éléments voulus dans la complétion. Pour cela, il suffit d'ajouter un attribut d'extension dans la déclaration des paramètres de la fonction ou de la procédure.
<Attributs d'extension> :
Attributs d'extension permettant de définir des options de gestion de l'éditeur de code. Pour plus de détails sur les attributs d'extension disponibles consultez les remarques.
<Type du retour> :
Type de la valeur renvoyée par la procédure. Ce type peut correspondre à un type simple (entier, réel, chaîne, ...) ou structuré (structure, objet, ...).
Cette information permet de s'assurer que la procédure a toujours le même type de valeur en retour. La valeur renvoyée sera toujours convertie dans le type spécifié.
Par exemple, si le type de retour est "Entier", si la valeur renvoyée est une chaîne, la chaîne sera automatiquement convertie en entier.
<Code de la procédure> :
Code WLangage de la procédure à déclarer.

Déclarer une procédure sans paramètre Masquer les détails

PROCEDURE <Nom de la procédure>()  [<Attributs d'extension>] [: <Type du retour>]
<Code de la procédure>
<PROCEDURE> :
Début de déclaration de la procédure.
Remarque : Pour des raisons de lisibilité des programmes, le mot-clé PROCEDURE peut être remplacé par le mot-clé FONCTION.
<Nom de la procédure> :
Nom de la procédure à déclarer.
<Attributs d'extension> :
Attributs d'extension permettant de définir des options de gestion de l'éditeur de code. Pour plus de détails sur les attributs d'extension disponibles consultez les remarques.
<Type du retour> :
Type de la valeur renvoyée par la procédure. Ce type peut correspondre à un type simple (entier, réel, chaîne, ...) ou structuré (structure, objet, etc.).
Cette information permet de s'assurer que la procédure a toujours le même type de valeur en retour. La valeur renvoyée sera toujours convertie dans le type spécifié.
Par exemple, si le type de retour est "Entier", si la valeur renvoyée est une chaîne, la chaîne sera automatiquement convertie en entier.
<Code de la procédure> :
Code WLangage de la procédure.

Déclarer une procédure avec paramètres variables Masquer les détails

PROCEDURE <Nom de la procédure>([<Paramètres>, ]*) [<Attributs d'extension>] [: <Type du retour>]
<Code de la procédure>
<PROCEDURE> :
Début de déclaration de la procédure.
Remarque : Pour des raisons de lisibilité des programmes, le mot-clé PROCEDURE peut être remplacé par le mot-clé FONCTION.
<Nom de la procédure> :
Nom de la procédure à déclarer.
<Paramètres> :
Paramètres passés à la procédure. Chaque paramètre est séparé par une virgule.
Si le nombre de paramètres pouvant être passé à la procédure est variable, il suffit d'utiliser le signe "*". Quelques exemples :
  • Procédure pouvant recevoir entre 0 et 255 paramètres : Procédure MaProc(*).
  • Procédure pouvant recevoir entre 1 et 255 paramètres : Procédure MaProc(Param1, *).
Pour plus de détails sur les paramètres, consultez :
<Attributs d'extension> :
Attributs d'extension permettant de définir des options de gestion de l'éditeur de code. Pour plus de détails sur les attributs d'extension disponibles consultez les remarques.
<Type du retour> :
Type de la valeur renvoyée par la procédure. Ce type peut correspondre à un type simple (entier, réel, chaîne, ...) ou structuré (structure, objet, ...).
Cette information permet de s'assurer que la procédure a toujours le même type de valeur en retour. La valeur renvoyée sera toujours convertie dans le type spécifié.
Par exemple, si le type de retour est "Entier", si la valeur renvoyée est une chaîne, la chaîne sera automatiquement convertie en entier.
<Code de la procédure> :
Code WLangage de la procédure à déclarer.
Remarques

Création d'une procédure

Pour plus de détails sur la création d'une procédure globale, consultez Procédures globales.
Pour plus de détails sur la création d'une procédure locale, consultez Procédures locales.

Sortie d'une procédure

Pour forcer la sortie d'une procédure, utilisez le mot-clé RETOUR. Dans la procédure, tous les traitements suivant le mot-clé RETOUR ne sont pas exécutés.
Par exemple :
PROCÉDURE Calcul(Dividende)
SI Dividende = 0 ALORS
Erreur("Division par 0 impossible")
RETOUR
SINON
...
FIN
Remarques :
  • Si la procédure renvoie un résultat, utilisez le mot-clé RENVOYER.
  • Il n'est pas possible d'utiliser les mot-clés RETOUR et RENVOYER dans le même traitement.

Compilation d'une procédure (locale ou globale) en fonction d'une condition

Il est possible de compiler une procédure en fonction d'une condition, grâce à l'instruction COMPILE SI.
Pour cela, il est nécessaire de positionner l'instruction COMPILE SI AVANT la déclaration de la procédure.
Par exemple :
// Déclaration d'une procédure globale exécutée uniquement dans une configuration Android
<COMPILE SI Configuration = "Android">
PROCÉDURE Gestion_Beacon()
// Code de la procédure
<FIN>

Option "A la fin de l'événement contenant l'appel"

Les procédures avec l'option "A la fin de l'événement contenant l'appel" appelées depuis une procédure de callback (par exemple procédures utilisées par les fonctions fListeFichier, Evénement, ...) sont exécutées à la fin de chaque appel de la callback.
Exemple :
// -----------------
// cas normal
// -----------------
Clic de bouton
// début du code du clic de bouton
Proc1
// début du code de Procédure1
Proc2
// début du code de Procédure2

Appel de Procédure FinEvénément
// fin du code de Proc2
// fin du code de Proc1
// fin du code du clic de bouton
Exécution de Procédure FinEvénément
// -------------------
// cas callback
// -------------------
Clic de bouton
Proc1
Proc2
utilisation de la fonction fListeFichier
Procédure Callback1
// début du code de Procédure Callback1
ProcCallback2
// début du code de Procédure Callback2
Appel de ProcFinEvénément
// fin du code de ProcédureCallback2
// fin du code de ProcédureCallback1
Exécution de ProcFinEvénément
ProcédureCallback1
// début du code de ProcédureCallback1
ProcédureCallback2
// début du code de ProcédureCallback2
Appel de ProcFinEvénément
// fin du code de ProcédureCallback2
// fin du code de ProcédureCallback1
Exécution de ProcFinEvénément

Renvoi d'un résultat

Pour retourner le résultat d'une procédure au traitement appelant, utilisez le mot-clé RENVOYER. Ce mot-clé permet de renvoyer :
  • une valeur,
  • plusieurs valeurs.
Par exemple :
// Procédure renvoyant une valeur
PROCÉDURE Trouve(NomFichier, Clé, Valeur)
HLitRecherche(NomFichier, Clé, Valeur)
SI HTrouve() = Vrai ALORS
RENVOYER Vrai
SINON
RENVOYER Faux
FIN
// Procédure renvoyant plusieurs valeurs
PROCÉDURE MaProc()
 
// Traitement
RENVOYER (1, 2, 3)
 
 
// Code d'appel de la procédure
( x, y, z ) = MaProc()
// x vaut 1, y vaut 2, z vaut 3
Conseil : Pour les procédures qui retournent un résultat, il est conseillé d'utiliser le mot-clé FONCTION au lieu de PROCEDURE pour faciliter la lecture du code.
Important : Il ne faut pas forcer la sortie d'une procédure qui renvoie un résultat avec le mot-clé RETOUR. En effet, l'appel de la procédure attend un compte-rendu qui ne serait pas retourné en cas de sortie forcée de la procédure.

Typage de la valeur de retour

Pour indiquer le type de la valeur de retour, il suffit de préciser ce type (précédé du caractère ':') lors de la déclaration de la procédure. Par exemple :
PROCÉDURE Calcul() : entier
 
SI MonExpression = Vrai ALORS
RENVOYER "1"  // La chaîne "1" sera convertie en entier
SINON
RENVOYER 0
FIN
Remarque : Cas des valeurs de retour multiples
Il est possible de typer les valeurs de retour à une procédure. La syntaxe est la suivante :
PROCEDURE NomProcédure() : ([<Type valeur 1>, [<Type valeur 2>, ... , [<Type valeur N>]]])
Remarque : Il n'est pas obligatoire de typer toutes les valeurs de retour. Pour ne pas typer une des valeurs de retour, il suffit d'omettre le type ou d'utiliser le caractère '?'.
Exemple :
PROCÉDURE Nom_Procédure() : (chaîne,,chaîne)
 
RENVOYER (1,2,3)

PROCÉDURE Nom_Procédure() : (chaîne,?,chaîne)
 
RENVOYER (1,2,3)
Les types de retour autorisés sont les suivants :
TypesVérifications effectuées lors de la compilationVérifications/Actions réalisées en exécution
booléenConversions automatiques du WLangage
entier sans signeConversions automatiques du WLangage
entier sans signe sur 8 octetsConversions automatiques du WLangage
entierConversions automatiques du WLangage
entier sur 8 octetsConversions automatiques du WLangage
entier systèmeConversions automatiques du WLangage
monétaireConversions automatiques du WLangage
numériqueConversions automatiques du WLangage
réelConversions automatiques du WLangage
réel sur 4 octetsConversions automatiques du WLangage
caractèreConversions automatiques du WLangage
chaîneConversions automatiques du WLangage
chaîne ANSISeules les chaînes sans taille sont autoriséesConversions automatiques du WLangage
chaîne UNICODESeules les chaînes sans taille sont autoriséesConversions automatiques du WLangage
bufferSeules les chaînes sans taille sont autoriséesConversions automatiques du WLangage
dateConversions automatiques du WLangage
heureConversions automatiques du WLangage
dateheureConversions automatiques du WLangage
duréeConversions automatiques du WLangage
procédureSeuls les types Procédure sont autorisésSeuls les types Procédure sont autorisés
policeSeuls les types Police sont autorisésSeuls les types Police sont autorisés
<énumération>
<combinaison>
<classe>
  • "dynamique" n'est pas autorisé
  • Les classes doivent être corrélées
Conversions autorisées uniquement
<structure>
  • "dynamique" n'est pas autorisé
  • les structures doivent être les mêmes.
Les structures doivent être les mêmes.
<type avancé>
  • "dynamique" pas autorisé
  • Les types avancés doivent être les mêmes.
Les types avancés doivent être les mêmes.
<classe .NET>"dynamique" pas autorisé
tableau
  • "dynamique" pas autorisé
  • Vérification du type des éléments
  • Vérification du nombre de dimensions
  • Vérification du type des éléments
  • Vérification du nombre de dimensions si les dimensions sont fournies,
  • Vérification de chaque dimension
tableau associatifVérification du type des élémentsVérification du type des éléments
pileVérification du type des élémentsVérification du type des éléments
fileVérification du type des élémentsVérification du type des éléments
listeVérification du type des élémentsVérification du type des éléments

Attributs d'extension

Les attributs d'extension disponibles sont :
  • attribut d'extension de gestion des procédures zombies :
    <zombie [commentaire = "texte"]>Permet de définir une procédure obsolète (également appelée procédure zombie). Le mot-clé optionnel commentaire permet d'indiquer le texte qui sera affiché dans l'erreur de compilation associée à la procédure obsolète. Pour plus de détails, consultez Procédures zombies.
  • attribut d'extension de gestion du débogueur :
    <sans pas à pas>Permet d'indiquer que la procédure sera ignorée par le débogueur lors d'un débogage en mode "Pas à pas".
  • attributs d'extension spécifiques aux procédures locales, globales ou internes :
    "<extension>"Permet d'indiquer que la procédure est une procédure d'extension. Cette procédure WLangage pourra être appelée sur un type WLangage comme une fonction native du WLangage. Pour plus de détails, consultez Procédure d'extension.
    <automatique>Permet d'indiquer que cette procédure sera exécutée automatiquement après le code d'initialisation (de la fenêtre, de la page ou du projet).

    Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.

    En complément, consultez l'aide sur les Procédures automatiques.

    Attention, cet attribut d'extension ne peut pas être appliqué à une procédure interne.
    <fin évènement>Permet d'indiquer que cette procédure sera exécutée lorsque le traitement contenant l'appel de la procédure sera fini. Pour plus de détails, consultez le paragraphe Option "A la fin de l'événement contenant l'appel".

    Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.

    En complément, consultez l'aide sur les Procédures automatiques.
    <fin traitement>Permet d'indiquer que cette procédure sera exécutée lorsque le traitement contenant l'appel de la procédure sera fini.

    Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.

    En complément, consultez l'aide sur les Procédures automatiques.
  • attribut d'extension de gestion des timers :
    <délai=durée en centièmes de seconde>Permet d'indiquer dans un Timer (lors du premier appel) le délai d'attente avant le démarrage de la procédure. Cet attribut d'extension doit être utilisé avec l'attribut d'extension <timer>. La valeur optionnelle délai en centièmes de seconde permet d'indiquer ce temps d'attente.
    Si cette valeur n'est pas précisée, il est nécessaire d'indiquer cette valeur lors de l'utilisation de l'attribut d'extension <timer>.

    Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.

    En complément, consultez l'aide sur les Procédures automatiques.
    <intervalle=durée en centième de secondes>Permet d'indiquer la durée (intervalle de temps) entre 2 appels de la procédure.
    Cet attribut d'extension doit être utilisé avec les attributs d'extension <timer> ou <répétition>. La valeur optionnelle intervalle en centièmes de seconde permet d'indiquer cet intervalle de temps.
    Si cette valeur n'est pas précisée, il est nécessaire d'indiquer cette valeur avec l'attribut d'extension <timer>.

    Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.

    En complément, consultez l'aide sur les Procédures automatiques.
    <appels suivants[=type de rappel]>Permet d'indiquer, dans une procédure appelée dans un Timer, le mode de fonctionnement des appels ultérieurs. Cet attribut d'extension doit être utilisé avec l'attribut d'extension <timer>. La valeur optionnelle de cet attribut d'extension peut être:
    ignorer
    (Valeur par défaut)
    La procédure est appelée immédiatement. Il n'y a pas de délai d'attente pour l'appel de la procédure. La procédure est appelée une seule fois sans répétition.
    nouveauUn nouveau Timer est déclenché. La procédure est appelée dans ce nouveau Timer.
    Attention, le Timer précédent n'est pas arrêté. Les Timers vont donc s'accumuler en mémoire.
    relancerPermet de relancer le Timer automatiquement à la fin de la procédure. L'attribut d'extension <intervalle> permet de définir l'intervalle de temps entre chaque appel de la procédure.

    Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.

    En complément, consultez l'aide sur les Procédures automatiques.
    <répétition [=nombre de répétitions]>Permet d'indiquer que la procédure est appelée plusieurs fois d'affilée (répétitions). La valeur optionnelle nombre de répétitions permet d'indiquer le nombre d'appels de la procédure.
    • Si cette valeur n'est pas précisée, la répétition sera réalisée jusqu'à:
      • l'appel de la fonction FinAutomatismeProcédure.
      • la fermeture de l'élément auquel appartient la procédure (fenêtre, page, état).
      • la destruction de l'instance à laquelle appartient la procédure (pour plus de détails sur la notion d'instance, consultez l'aide sur l'Instanciation d'un objet).
      • la fin de l'application (fermeture de l'application par l'utilisateur ou utilisation de la fonction Finprogramme).
    • Si cette valeur est précisée, la procédure sera appelée autant de fois que le nombre indiqué.
    En complément, consultez l'aide sur les Procédures automatiques.
    <timer [=intervalle en centièmes de seconde]>Permet d'indiquer que la procédure sera exécutée dans un Timer.
    Cet attribut d'extension est équivalent à la fonction TimerSys. La répétition est automatique. La valeur optionnelle intervalle en centièmes de seconde permet d'indiquer l'intervalle de temps entre 2 répétitions :
    • Si cette valeur n'est pas précisée, il est nécessaire d'indiquer l'intervalle de temps entre 2 répétitions via l'attribut d'extension <intervalle>.
    • Si cette valeur est précisée, les valeurs des attributs d'extension <délai> et <intervalle> sont initialisées avec la valeur de l'intervalle précisée.
    Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.

    En complément, consultez l'aide sur les Procédures automatiques.
  • attribut d'extension de gestion des threads :
    <thread>Permet d'indiquer que la procédure sera exécutée dans un thread secondaire. Pour plus de détails sur les threads, consultez Principe d'exécution des threads.

    Cet attribut d'extension est incompatible avec les attributs d'extension <timer> et <thread principal>.

    En complément, consultez l'aide sur les Procédures automatiques.
    <thread principal>Permet d'indiquer que la procédure sera exécutée dans un thread principal. Pour plus de détails sur les threads, consultez Principe d'exécution des threads.

    Cet attribut d'extension est incompatible avec les attributs d'extension <timer> et <thread>.

    En complément, consultez l'aide sur les Procédures automatiques.
    <thread principal asynchrone>Permet d'indiquer que la procédure sera exécutée dans un thread principal, sans attendre la fin de l'exécution de la procédure. Pour plus de détails sur les threads, consultez Principe d'exécution des threads.

    Cet attribut d'extension est incompatible avec les attributs d'extension <timer> et <thread>.

    En complément, consultez l'aide sur les Procédures automatiques.
    <thread sécurisé>Permet d'indiquer que la procédure sera exécutée dans un thread secondaire sécurisé. Pour plus de détails sur les threads, consultez Principe d'exécution des threads.

    Cet attribut d'extension est incompatible avec les attributs d'extension <timer>, <thread principal> et <UI>.

    En complément, consultez l'aide sur les Procédures automatiques.
    <contexte HFSQL léger>Provoque la copie immédiate d'une partie du contexte HFSQL courant.
    Seuls les répertoires où se trouvent les fichiers de données en HFSQL Classic et/ou les connexions en HFSQL Client/Serveur sont mémorisés.

    Cet attribut d'extension doit être utilisé avec l'attribut d'extension <thread>. Pour plus de détails sur la gestion des threads, consultez l'aide sur la fonction ThreadExécute.
    En complément, consultez l'aide sur les Procédures automatiques.
    <contexte HFSQL complet>Provoque la copie immédiate du contexte HFSQL courant.
    Conseillé par exemple si le thread doit tenir compte des positions en cours dans les fichiers et requêtes du contexte de l'appelant.

    Cet attribut d'extension doit être utilisé avec l'attribut d'extension <thread>. Pour plus de détails sur la gestion des threads, consultez l'aide sur la fonction ThreadExécute.

    En complément, consultez l'aide sur les Procédures automatiques.
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 19/08/2024

Signaler une erreur ou faire une suggestion | Aide en ligne locale