PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 23 → Enumérer les champs d'un champ Disposition
Enumérer les champs d'un champ Disposition
Débuté par Yvan, 19 mar. 2018 17:42 - 5 réponses
Membre enregistré
102 messages
Posté le 19 mars 2018 - 17:42
Bonjour,

J'ai besoin d'énumérer les champs contenus dans un champ disposition par programmation.
Je ne trouve pas le moyen de le faire.
La propriété ..occurence me renvoi bien le nombre d'occurences, mais je ne trouve pas le moyen de savoir de quel type sont les champs de chaque occurence comme on peut le savoir avec les occurences d'un sélecteur ou d'un interrupteur :
Procedure EnumOptions(sFieldName)

POUR i = 1 _À_ {sFieldName,indChamp}..Occurrence
:stField.sField = sFieldName
:stField.nInd = 0
SI ChampExiste(sFieldName) ALORS
:stField.nType = {sFieldName}..Type
:stField.sWording = {sFieldName}..Libellé
:stField.sTipTool = {sFieldName}..Bulle
FIN
TableauAjoute(:tabFields,:stField)
FIN

J'ai aussi essayé avec EnumèreSousElément, mais il ne semble pas qu'une constante de type enumDisposition existe, pour des boites à outil ou des onglets, j'utilise ceci que je ne peux pas pour le disposition:
Procedure EnumVolets(sObjectName)

sFieldName est une chaîne
sObject2Name est une chaîne
sField2Name est une chaîne
nFlag est un entier = enumPremier

SELON {sObjectName}..Type
CAS typOnglet : nFlag+=enumVolet
CAS typBoîteAOutils : nFlag+=enumBoiteOutils
FIN

sFieldName = EnumèreSousElément(sObjectName, nFlag)
TANTQUE sFieldName <> ""
SI sFieldName = "" ALORS SORTIR
// Cas volet (l'indice est extérieur a la désignation)
:stField.sField = sObjectName
:stField.nInd = sFieldName
:stField.nType = {sObjectName}..Type
TableauAjoute(:tabFields,:stField)
sObject2Name = sObjectName
sField2Name = EnumèreSousElément(sObjectName+"."+sFieldName, enumPremier)
TANTQUE sField2Name<>""
:GetType(sObject2Name+"."+sField2Name)
sField2Name = EnumèreSousElément(sObjectName+"."+sFieldName)
FIN
sFieldName = EnumèreSousElément(sObjectName)
FIN


Bref, si vous avez un truc pour parcourir les champs contenus dans le champ disposition, afin d'en déterminer leur type, leur libellé et leur bulle d'aide, toute piste est la bienvenue!
Membre enregistré
1 122 messages
Popularité : +11 (13 votes)
Posté le 20 mars 2018 - 14:05
Salut Yvan,

Voici le code à adapter pour ton besoin, mais le plus simple c'est ceci:

sFieldName est une chaîne
nType est un entier
sLabel est une chaîne
sTipTool est une chaîne

POUR i = 1 _À_ DISP_Test..Occurrence
sFieldName = EnumèreChamp(DISP_Test, i)
sLabel = {sFieldName, indChamp}..Libellé
sTipTool = {sFieldName, indChamp}..Bulle
nType = {sFieldName, indChamp}..Type
FIN


A+
Daryl

--
http://www.concept4u2.com
Membre enregistré
102 messages
Posté le 20 mars 2018 - 16:55
Super Daryl,
Ça fonctionne.
Merci!
Yvan
Membre enregistré
102 messages
Posté le 08 juin 2018 - 08:26
Bonjour,

C'est moi ou bien EnumèreSousElément ne détecte plus un champ disposition sur une fenêtre?
Ca a fonctionné, mais depuis l'update 2 ou 3 ça ne fonctionne plus.

Ce code me détectait bien tout les champs de ma fenêtre:
Procedure EnumFields(sObjectName = FenEnExécution())

sFieldName est une chaîne

sFieldName = EnumèreSousElément(sObjectName, enumPremier )
TANTQUE sFieldName<>""
:GetType(sObjectName+"."+sFieldName)
sFieldName = EnumèreSousElément(sObjectName)
FIN

Mais maintenant, plus le champ disposition. J'ai testé sur une fenêtre avec juste la disposition placée dessus, même pas dans un onglet ou autre ...

Une idée?
Posté le 12 juin 2018 - 16:31
Bonjour,
depuis la version 23 53k, je constate de gros problèmes de régression avec la fonction EnumereSousElement() avec un champ ONGLET.
Nous avons un ticket est ouvert avec le numéro 109042/284035 et 109043 : la fonction EnumereSousElement() est capable dans cette version de lister un champ qui n'existe pas !

Malheureusement, la collection des tickets PcSoft continue : 47 tickets ouverts, en attente de corrections !
Membre enregistré
102 messages
Posté le 12 juin 2018 - 21:11
Bonjour,

En effet, j'ai aussi soumis le problème au ST, j'ai aussi reçu un n° d'incident (107956).
Mes constatations de régression sont:
- plus de détection des champs disposition
- plus de détection des champs indicés
- des détections farfelues des champs sur les onglets, surtout lorsque ceux-ci contiennent des champs indicés
- les colonnes sont énumérées deux fois, une fois mafenetre.matable.macolonne et une seconde fois mafenetre.macolonne
- plus ce qui m'a sans doute échappé ...

C'est critique pour moi car j'utilise cette fonction sur toutes les fenêtres d'un de mes projets pour effectuer des traductions dynamiques de mes champs, et du coup, ça ne va plus du tout.

Tout ça est fort embêtant, surtout lors d'un update 2 ou 3, ce qui ne laisse plus beaucoup d'opportunité pour une correction rapide et efficace.

Perso je vote pour une version 24 avec 924 corrections et 0 nouveautés. Je crois qu'aucun développeur ne leur en voudra. ;)