DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Syntaxe WLangage / Procédures WLangage / Paramètres d'une procédure
  • Présentation
  • Passage de paramètres par référence
  • Fonctionnement par défaut
  • Passage d'un champ, d'une fenêtre ou d'un état
  • Passage de paramètres par valeur
  • Présentation
  • Solution 1 : Utilisation des doubles parenthèses
  • Solution 2 : Utilisation de paramètres "locaux" dans la procédure
  • Paramètre correspondants à un élément du projet
  • Cas particulier
  • Passage d'une liste de valeurs
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
Présentation
Les paramètres peuvent être passés à une procédure :
Passage de paramètres par référence

Fonctionnement par défaut

Par défaut, lors de l'appel d'une procédure, les paramètres sont passés par référence (par variable ou par adresse). Si le paramètre est modifié dans la procédure, le traitement appelant la procédure récupérera le paramètre avec sa valeur modifiée.
Pour passer un paramètre par variable à une procédure, utilisez la syntaxe suivante :
<Nom de la procédure>(<Nom de la variable passée en paramètre>)
Par exemple :
Indice est un entier = 1
// Avant l'appel de la procédure, Indice vaut 1
AjouteUn(Indice)
// Après l'appel de la procédure, Indice vaut 2
// -- Déclaration de la procédure
PROCÉDURE AjouteUn(Compteur)
Compteur += 1

Passage d'un champ, d'une fenêtre ou d'un état

Lors de l'appel d'une procédure, les paramètres peuvent être un champ, une fenêtre ou un état. Cet objet (champ, fenêtre ou état) est alors manipulé comme un objet "classique".
Pour passer un élément en paramètre à une procédure, utilisez la syntaxe suivante :
<Nom de la procédure>(<Nom de l'élément>)
Par exemple :
// Appel de la procédure ChampNonVisible
ChampNonVisible(ChampAdresse)
// -- Déclaration de la procédure
PROCÉDURE ChampNonVisible(ChampAdresse)
ChampAdresse..Visible = Faux
Remarques :
  • Le mot-clé MoiMême permet de manipuler le champ en cours.
  • Le mot-clé MaFenêtre permet de manipuler la fenêtre en cours.
  • Le mot-clé MonEtat permet de manipuler l'état en cours.
Passage de paramètres par valeur

Présentation

Lors de l'appel d'une procédure, les paramètres peuvent être passés par valeur. Si le paramètre est modifié dans la procédure, le traitement appelant la procédure récupérera le paramètre avec sa valeur NON modifiée.
Il existe deux possibilités pour passer les paramètres par valeur :

Solution 1 : Utilisation des doubles parenthèses

Pour passer un paramètre par valeur à une procédure, utilisez la syntaxe suivante :
<Nom de la procédure>((<Nom de la variable passée en paramètre>))
Par exemple :
Indice est un entier = 1
// Avant l'appel de la procédure, Indice vaut 1
AjouteUn((Indice))
// Après l'appel de la procédure, Indice vaut toujours 1
// -- Déclaration de la procédure
PROCÉDURE AjouteUn(Compteur)
Compteur += 1

Solution 2 : Utilisation de paramètres "locaux" dans la procédure

Lors de la déclaration d'une procédure, les variables passées en paramètre peuvent devenir locales à cette procédure. Pour cela, il suffit de faire précéder le paramètre local par le mot-clé LOCAL. Par exemple :
PROCEDURE MaProc(LOCAL Indice, LOCAL Compteur, Numéro)
Si ce paramètre est modifié dans la procédure, le traitement appelant la procédure récupérera le paramètre avec sa valeur NON modifiée.
Remarques :
  • Le mot-clé LOCAL force la copie de l'élément passé en paramètre dans les cas suivants :
    • instance de classe ou de tableau passée à un paramètre non typé.
      Exemple :
      Procédure MaProcédure(LOCAL Paramètre)
    • instance de classe passée à un paramètre typé.
      Exemple :
      Procédure MaProcédure(LOCAL Paramètre est CClasse)
  • Le mot-clé LOCAL peut être remplacé par le mot-clé LOCALE ou LOCALES.

Paramètre correspondants à un élément du projet

Si votre procédure utilise des éléments du projet, jusqu'à la version 19, le nom de l'élément devait être mis entre guillemets lors de l'appel de la procédure. Par exemple :
MaProcédure("FEN_Exemple")
A partir de la version 19, il est possible de passer directement le nom de l'élément sans guillemets et de disposer de la complétion sur le paramètre lors de la saisie.
WEBDEV - Code Serveur Cas des pages
Il suffit d'utiliser l'attribut d'extension <nom de page>. La syntaxe à utiliser est la suivante :
PROCEDURE NomProcédure(NomPage est une chaîne <nom de page>)
Exemple :
// Déclaration de la procédure
PROCÉDURE ContrôleSaisie(sNomPage est une chaîne <nom de page>)
Dans cet exemple, lors de l'appel de la procédure, le paramètre sNomPage contient le nom de la page. La complétion proposera toutes les pages présentes dans le projet.
Les appels de la procédure pourront correspondre aux syntaxes suivantes :
  • ContrôleSaisie(NomPage)
  • ContrôleSaisie("NomPage")
  • ContrôleSaisie(Nom variable chaîne contenant le nom de la page)
Cas des états
Il suffit d'utiliser l'attribut d'extension <nom d'état> (ou <nom de état>). La syntaxe à utiliser est la suivante :
PROCEDURE NomProcédure(NomEtat est une chaîne <nom d'état>)
Exemple :
// Déclaration de la procédure
PROCÉDURE VérifDonnées(sNomEtat est une chaîne <nom d'état>)
Dans cet exemple, lors de l'appel de la procédure, le paramètre sNomEtat contient le nom de l'état. La complétion proposera tous les états présents dans le projet.
Les appels de la procédure pourront correspondre aux syntaxes suivantes :
  • ContrôleSaisie(NomEtat)
  • ContrôleSaisie("NomEtat")
  • ContrôleSaisie(Nom variable chaîne contenant le nom de l'état)
Cas des sources de données
La syntaxe à utiliser est la suivante :
PROCEDURE NomProcédure(NomFichier est une Source de Données)
Exemple :
// Déclaration de la procédure
PROCÉDURE VérifDonnées(sNomFicher est une Source de Données)
Dans cet exemple, lors de l'appel de la procédure, le paramètre sNomFichier contient le nom d'une source de données. La complétion proposera toutes les sources de données (fichiers, requêtes, variables de type Source de données) présentes dans le projet.
Les appels de la procédure pourront correspondre aux syntaxes suivantes :
  • VérifDonnées(Fichier)
  • VérifDonnées(Requête)
  • VérifDonnées("Fichier")
  • VérifDonnées("Requête")
  • VérifDonnées(Nom variable chaîne contenant le nom du fichier ou de la requête)
  • VérifDonnées(Nom variable de type source de données)
Remarque : Pour associer la source de données à un fichier de données (ou une requête) existant, il suffit d'ajouter un attribut d'extension spécifique. Dans ce cas, la complétion automatique permettra d'accéder directement aux rubriques. Pour plus de détails, consultez Variable de type Source de données.
Cas particulier

Passage d'une liste de valeurs

Lors de l'appel d'une procédure, les paramètres peuvent être une liste de valeurs ("[1,2,3]" par exemple).
Pour passer une liste de valeurs en paramètre à une procédure, utilisez la syntaxe suivante :
<Nom de la procédure>(<Liste de valeurs>)
Par exemple :
// Appel de la procédure
MaProcédure([1,2,3])
// -- Déclaration de la procédure
PROCÉDURE MaProcédure(Valeurs)
MonTableau est un tableau d'entiers = Valeurs
Remarques :
  • Si le paramètre de la procédure n'est pas typé, la liste de valeurs est passée directement à la procédure. Comme les listes de valeurs ne sont pas manipulables directement, ce paramètre peut être utilisé uniquement dans des fonctionnalités qui acceptent les listes de valeurs :
    • appel d'une fonction du WLangage qui autorise les listes de valeurs (HFiltre, HLitRecherche, ...).
    • affectation dans une variable de type structuré (tableau, classe, structure, ...).
    • appel d'une procédure utilisateur qui autorise une liste de valeurs.
  • Si le paramètre de la procédure est de type tableau, un tableau est automatiquement alloué et rempli avec les valeurs de la liste de valeurs.
  • Si le paramètre de la procédure est d'un autre type, une erreur de compilation apparaîtra (ou une erreur WLangage se produira à l'exécution si le paramètre réel n'est pas typé).
Surcharge de fonctions WLangage : Grâce aux paramètres de type "liste de valeurs", il est possible de surcharger les fonctions WLangage acceptant des listes de valeurs, notamment :
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Tableau et passage de paramètres par valeur au moyen des doubles parenthèses
Si le paramètre est un tableau passé par référence (sans le mot clé LOCAL) et que dans l'appel de la procédure on encadre le paramètre avec des parenthèses dans le but de forcer un passage par valeur, le tableau est quand même passé par référence.

Donc, la solution est de créer une copie temporaire.

LE CODE CI-DESSOUS NE DONNE PAS LE RESULTAT SOUHAITE :

tabValeursAProtéger est un tableau de chaînes

// le tableau est quand même passé par référence
MaProcédure( (tabValeursAProtéger) )


CODE POUR CONTOURNER LE PROBLEME :

// on crée une copie du tableau, et c'est cette copie qui est passée en paramètre
// ainsi la procédure ne peut pas accéder au tableau original.
tabCopieTemporaire est un tableau Dynamique <= tabValeursAProtéger
MaProcédure(tabCopieTemporaire)

:-)
=JBO=
05 mar. 2020

Dernière modification : 25/05/2022

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