PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → [WD 24] WebService - Mettre le résultat d'une requête SQL dans une variable json
[WD 24] WebService - Mettre le résultat d'une requête SQL dans une variable json
Iniciado por Gurdarr, 21,abr. 2020 18:30 - 7 respuestas
Miembro registrado
237 mensajes
Publicado el 21,abril 2020 - 18:30
Bonjour à tous

Comment ferriez vous pour renvoyer des données depuis un web service au format JSON de manière la plus rapide sans connaitre a l'avance les données à afficher ni les condition de filtre ?
l'utilisateur peux réclamer que certaines rubriques de la requête ou toutes et peux spécifier des conditions pour limiter le nombre de résultat sur la requête.

Je souhaitai construire ma requete sql en fonction des demandes de l'utilisateur et divers contrôles et lui renvoyer les résultats au formats json.


j'ai trouvé HExporteJSON() mais cela génère un fichier en local et j'ai peur de perdre trop de temps à générer un fichier physique pour ensuite le recharger en mémoire et l'envoyer

est ce que VariantVersJSON() fonctionne avec une variable de type source de données ou requete sql ?

ou dois-je parcourir ma requete et faire un HEnregistrementVersJSON() pour chaque ligne ?

Merci.
Miembro registrado
558 mensajes
Publicado el 22,abril 2020 - 10:36
bonjour,
avec JSON_OBJECT
Miembro registrado
4.362 mensajes
Publicado el 22,abril 2020 - 12:10
Bonjour,
Une solution est de créer un tableau de structures (ou de classes)
STLigneRequete est structure
//Membres de la structure respectant la norme de FichierVersTableau https://doc.pcsoft.fr/fr-FR/?1000018833&name=FichierVersTableau
FIN
gtabResRequête est tableau de STLigneRequete
sResRequeteJSON est une chaîne ANSI

HExécuteRequête(REQ_MaRequete)
FichierVersTableau(gtabResRequête,REQ_MaRequete)

Sérialise(gtabResRequête, sResRequeteJSON, psdJSON)


--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
237 mensajes
Publicado el 23,abril 2020 - 12:36
Tout d'abord merci Ralph IGCI et Voroltinquo

Voroltinquo, j'ai essayer avec les structures comme tu me l'a indiqué et effectivement ça fait exactement ce que je veux soit charger en mémoire ma requete dans un format que je peux exporter. le hic c'est que je peux pas construire ma structure dynamiquement enfin je crois pas que ce soit possible ^^.

Du coups j'ai regardé un peu plus ce que disait Ralph IGCI soit le json_object et je suppose le type de variable json de windev (sinon c'est que je ne t'ai pas compris RALPH IGCI)

J'ai donc mélangé vos deux propositions et j'ai fait ceci (je fais peut être des étapes inutiles)
ST_SS_RESULTAT est une structure
Code est un entier
Libelle est une chaîne
FIN

ST_RESULTAT_LISTE est une structure
Contenu est un tableau de JSON
Resultat est une ST_SS_RESULTAT
FIN

Procedure Liste_SQL(sP_MaRequete_SQL est une chaîne)
vSortie est un Variant
R est un ST_RESULTAT_LISTE
QUAND EXCEPTIONEXCEPTION DANS
sdMaR est une Source dede Données
//on remplie le variant du résultat de la requête
SI HExécuteRequêteSQL(sdMaR,hRequêteSansCorrectionHF,sP_MaRequete_SQL) ALORS
FichierVersTableau(R.Contenu,sdMaR)
HAnnuleDéclaration(sdMaR)
R.Resultat.Code = 0
R.Resultat.Libelle = ""
SINON
R.Resultat.Code = 9
R.Resultat.Libelle = "Erreur dans l’exécution de la requête SQL ! "+HErreurInfo(hErrMessage)
FIN
FAIRE
R.Resultat.Code = 9
R.Resultat.Libelle = "Erreur dans l’exécution de la requête SQL ! "+ExceptionInfo(hErrMessage)
FIN
vSortie = R

RENVOYER VariantVersJSON(vSortie )
FIN


La ou je me pose des questions c'est sur la gestion de la réception
Je souhaitait réutiliser ma strucuture ST_RESULTAT_LISTE mais je peux pas faire :
sMonResultat est une chaîne = Liste_SQL(sMaRequete_SQL)
vResulta est un Variant = JSONVersVariant(sMonResultat)
Rfinal est un ST_RESULTAT_LISTE = vResultat // impossible de caster
Miembro registrado
4.362 mensajes
Publicado el 23,abril 2020 - 13:19
Gurdarr a écrit :
j'ai essayer avec les structures comme tu me l'a indiqué et effectivement ça fait exactement ce que je veux soit charger en mémoire ma requete dans un format que je peux exporter. le hic c'est que je peux pas construire ma structure dynamiquement enfin je crois pas que ce soit possible ^^.

On ne peut pas avec une structure mais on peut avec une classe.
Il "suffit" de récupérer les définitions des colonnes de ta requête et de transformer ça en classe cf :
https://doc.pcsoft.fr/?6010015, https://doc.pcsoft.fr/?1000019333

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
237 mensajes
Publicado el 23,abril 2020 - 15:28
Je savais que l'on pouvait récupérer les informations d'une classe mais je ne savais pas que l'on pouvait créer des classes entièrement par programmation

cela m’intéresse beaucoup surtout si derrière je peux mapper ma classe ou mon tableau sur une table en affichage sur le poste final du client.

j'ai regardé tes deux liens mais nulle part il est montré que l'on peut créer ou rajouter des membres dans la définition puis de réintégrer la définitions dans un objet.

Merci encore Voroltinquo
Miembro registrado
558 mensajes
Publicado el 24,abril 2020 - 09:31
Regarde l'exemple WD JSON si tu es en 24 ou 25, c'est plus simple. JSON_OBJET te permet de ne pas faire les tableau de structure.
Miembro registrado
237 mensajes
Publicado el 24,abril 2020 - 15:33
Merci Ralph ICGI

J'ai regardé JSON_OBJET et est-il possible de garder le type de la rubrique ?