DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Syntaxe WLangage / Opérateurs
  • Quand utiliser l'indirection ?
  • Désigner l'objet en cours
  • Indirection sur une structure
  • Utiliser l'indirection sur les chemins dans un document XML
  • Limitations
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
Les opérateurs { et } permettent d'accéder à un champ, une variable, un membre d'une classe ou une rubrique de fichier en construisant dynamiquement le nom du champ, de la variable, du membre de la classe ou de la rubrique.
L'intérêt des opérateurs { et } est multiple :
  • Passer en paramètre un nom de champ, de variable, de membre d'une classe ou de rubrique.
  • Construire le nom d'un champ, de la variable, d'un membre d'une classe ou d'une rubrique par programme.
Exemple
// Indirection simple
{"NOM"} = NomCli // Est équivalent à NOM=NomCli
{"NOM"} = {"CL.NOMCLI"} // Est équivalent à NOM=CL.NOMCLI
{"FENCLI.NOM"} = NomCli // Est équivalent à FENCLI.NOM=NomCli
{"FENCLI"+".NOM"} = NomCli // Est équivalent à FENCLI.NOM=NomCli
 
// Indirection typée
{"Nom",indChamp} = NomCli
 
// Indirection avec un nom de fichier dans une variable
nNomFic est une chaîne = "Client"
{nNomFic + ".Nom"} = "Durand"
HAjoute({nNomFic})
// Indirection dans une procédure
NomChamp est une chaîne
NomChamp = "SAI_SAISIE1" // SAI_SAISIE1 est le nom du champ
// Appel d'une procédure rendant un champ invisible
Rend_Invisible(NomChamp)
 
PROCÉDURE Rend_Invisible(NChamp)
{NChamp}..Etat = Invisible
// Indirection avec variable
NomAlias est une chaîne
NomAlias = FenPrécédente()
// NOM est le nom du champ
// NomCli est la valeur à affecter
{NomAlias+".NOM"} = NomCli
Abrev est une chaîne
NomRub est une chaîne
{Abrev+"."+NomRub} = NomCli
{Abrev+"."+NomRub} = {NomChamp}
// Déclaration d'une classe avec deux membres
Maclasse est une Classe
Membre1 est une chaîne
Membre2 est une chaîne
// Affichage de la valeur d'un membre
PROCÉDURE GLOBALE AfficheMembre(Numéro)
// Récupération de la valeur du membre global choisi
Valeur est une chaîne = {"::Membre"+Numéro}
Info(Valeur)
c est un cWord
var est une Description de Variable
Def est une Définition
 
Def = RécupèreDéfinition(c)
// Récupère la 2ème variable de la classe : version de Word
var = Def..Variable[2]
 
Trace(var..Nom) // Affiche le nom de la variable
Trace("Version de Word: ",{c, var}) // Affiche la version de Word
Syntaxe

Indirection simple Masquer les détails

{ <Expression> }
<Expression> : Chaîne de caractères
Expression permettant d'identifier le champ, la variable ou la rubrique à manipuler. L'élément est tout d'abord recherché :
  • parmi les variables,
  • selon le nombre de points dans le nom :
    • 0 point : recherche parmi les champs, puis les rubriques HFSQL.
    • 1 point : recherche parmi les rubriques HFSQL, les champs, puis les paramètres de requête.
    • supérieur à 1 point : recherche parmi les champs.
  • parmi les éléments spéciaux conservés par compatibilité (par exemple _Ongletx, ...).
Si cette expression correspond à une chaîne vide (""), une erreur du WLangage est générée.

Indirection sur un membre de classe Masquer les détails

{ <Expression> }
<Expression> : Chaîne de caractères
Expression permettant d'identifier le membre de la classe.
Si le membre est :
  • global, utilisez la syntaxe suivante : {" :: NomDuMembre"}
  • n'est pas global, utilisez la syntaxe suivante : {" : NomDuMembre"}
Si cette expression correspond à une chaîne vide (""), une erreur du WLangage est générée.

Indirection sur un membre de classe Masquer les détails

{ <Classe> , <Membre> }
<Classe> : Chaîne de caractères
Instance de la classe
<Membre> : Chaîne de caractères ou variable de type Description de variable
Correspond :

Indirection en spécifiant le type de l'élément (optimise la vitesse d'exécution) Masquer les détails

{ <Expression>, <Type> }
<Expression> : Chaîne de caractères
Expression permettant d'identifier le champ, la variable ou la rubrique à manipuler. Si cette expression correspond à une chaîne vide (""), une erreur du WLangage est générée.
<Type> : Constante
Constante permettant de préciser le type de l'élément recherché :
indChampÉlément recherché parmi les champs et les groupes.
indConnexionÉlément recherché parmi les connexions.
indEtatÉlément recherché parmi les états.
indFenêtreÉlément recherché parmi les fenêtres.
indFichierÉlément recherché parmi les fichiers.
indGPWÉlément recherché parmi les éléments du groupware utilisateur (permet de récupérer l'état initial des champs).
indLiaisonÉlément recherché parmi les liaisons.
indParamètreRequête Élément recherché parmi les paramètres des requêtes.
indRubriqueÉlément recherché parmi les rubriques.
indVariableÉlément recherché parmi les variables.
indPageÉlément recherché parmi les pages.
Remarques

Quand utiliser l'indirection ?

L'indirection peut être utilisée par exemple :
  • Pour accéder à la valeur d'un élément (champ, variable, rubrique, ...) :
    {s_NomChamp} = 10
    ValeurChamp = {s_NomChamp}
  • Pour utiliser une propriété :
    {s_NomChamp}..Hauteur = 10
  • Pour manipuler une colonne d'un champ Table par programmation :
    {s_NomColonne, indChamp}[Numéro_Ligne] = 10
  • Pour manipuler une colonne d'une table :
    {s_NomTable + "." +s_NomColonne, indChamp}[Numéro_Ligne] = 10
Etats et RequêtesWindows

Désigner l'objet en cours

Pour désigner l'objet en cours, utilisez les mots-clés suivants :
Etats et RequêtesWindows

Indirection sur une structure

Une indirection ne peut pas contenir un accès à une structure ou à une instance de classe. Cependant, il est possible d'utiliser la syntaxe suivante :
{<Variable structure>} : membre
Etats et RequêtesWindows

Utiliser l'indirection sur les chemins dans un document XML

Il est possible d'utiliser les opérateurs d'indirection pour construire le chemin d'un élément dans un document XML.
Exemple :
sDocXML est une chaîne = [
<?xml version="1.0" encoding="UTF-8"?>
<Document>
<InfoVersion>
<Version>21</Version>
<Millesime>2016</Millesime>
</InfoVersion>
</Document>
]
 
xmlExemple est un xmlDocument = XMLOuvre(sDocXML, depuisChaîne)
 
sParam est une chaîne = "WinDev_Param"
 
// Lecture directe d'une information ...
Trace(xmlExemple.Document.InfoVersion.Version)
 
// Lecture avec une partie du chemin XML contenu dans une variable
// (idem si rubrique d'un fichier, paramètre d'une fenêtre, méthode, ...)
sParamètre est une chaîne = "InfoVersion"
Trace ({"xmlExemple.Document." + sParamètre + ".Version"})
Etats et RequêtesWindows

Limitations

L'opérateur d'indirection permet de retrouver un élément par son nom.
Les opérations suivantes ne sont donc pas autorisées dans une indirection :
  • accès à un membre d'une instance de classe ou de structure autre que l'instance de classe courante (opérateurs : et :: ).
  • accès à un sous-élément de champ ou de tableau (opérateur [] ).
  • accès à une sous-partie de chaîne (opérateur [[]] ).
  • accès à une propriété (opérateur ..).
  • indirection (opérateur { } ).
  • appel de procédure ou de méthode d'objet Automation.
  • déclaration de variable.
Remarques :
  • Les opérateurs d'accès sur un élément (opérateurs : et [] et [[]] et .. ) peuvent être utilisés sur l'élément obtenu par indirection. Quelques exemples :
    { <indirection> } : membre

    { <indirection> } [ indice ]

    { <indirection> } [[ indice ]]

    { <indirection> }..propriété
  • Pour appeler une procédure connue par son nom, utilisez les fonctions Exécute ou ExécuteTraitement.
  • Pour combiner ces opérations de manière dynamique, il est possible d'utiliser la compilation dynamique (voir la fonction Compile).
Liste des exemples associés :
Les indirections Exemples unitaires (WINDEV) : Les indirections
[ + ] Manipulation des indirections à l'aide des opérateurs { et }.
Les opérateurs { et } permettent d'accéder à un champ ou une rubrique de fichier en construisant dynamiquement le nom du champ ou le nom de la rubrique.
Ce programme réalisé avec WINDEV met en œuvre le mécanisme d'indirection sur les champs des fenêtres pour gérer le "Undo-Redo" et le "couper-copier-coller" de manière générique.
Les indirections Exemples unitaires (WEBDEV) : Les indirections
[ + ] Utilisation des indirections sur une variable.

Il est à noter que les indirections sont possibles sur les champs, les rubriques, les liaisons, etc. Le principe est identique à celui présenté dans cet exemple.
Les indirections Exemples unitaires (WINDEV Mobile) : Les indirections
[ + ] Utilisation des opérateurs d'indirection { et }.
Les opérateurs { et } permettent d'accéder à un champ ou une rubrique de fichier en construisant dynamiquement le nom du champ ou le nom de la rubrique.
Cet exemple met en œuvre le mécanisme d'indirection sur les champs des fenêtres pour gérer le "Undo-Redo" et le "couper-copier-coller" de manière générique.
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Pourquoi avoir changer ....
Avant on avait l'indirection sur tous les champs ...

Maintenant faut que j'ouvre manuellement la description dans 122 pages, de, en moyenne, 40 champs par page pour activer les indirections une par une, la perte de temps, je lui là pour coder moi, pas passer 1 semaines à aller cocher des cases parce que dans coup vous vous êtes dit allez on inverse le fonctionnement ...

AU SECOURS .... Vous pouviez pas mettre une option pour dire que c'est actif par défaut sur tous les champs non
Poncherello
03 jan. 2023
Indirection requête avec nommage automatique de la source de données
Attention,
Si l'option par défaut de nommage des sources de données qui associe la requête à son nom permet bien d'utiliser la syntaxe suivante :
{"REQ."+sNomRubrique,indRubrique}

Par contre, si les options de compilation "Nom automatique" ou "Nom automatique avec références" sont utilisées, cette même syntaxe conduit à une erreur fatale d'exécution.
Il faut alors soit utiliser la syntaxe simplifiée (plus lente à priori) :
{"REQ."+sNomRubrique}
soit récupérer le nom attribué :
{REQ..Nom+"."+sNomRubrique,indRubrique}
Arthur
28 fév. 2020
Zone Répété Windev Mobile 24
xChamp <- { "ZR_Histo[1].LIB_"+i, indChamp }
Bien que ce code fonctionne sous Windev, il lève une exception java sous Windev Mobile...
Patrick MOIRE
27 déc. 2019
indirection pour déterminer la page courante
Voici un autre exemple :

{PageCourante()+".BTN_Début"}..visible = Vrai

Cela peut être utile lorsqu'il y a un bouton BTN_Début dans toutes les pages (webdev), et qu'on souhaite avoir une procédure globale pour gérer la visibilité ou toute autre propriété.
CV
09 nov. 2017

Dernière modification : 07/07/2022

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