J'ai trouvé une super API qui permet de générer des datas "client" par millier.... De quoi enrichir votre base de démonstration avec des données pertinentes. Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! le résultat peut être du Json, CSV, XML, YALM Ici je traite en Json, cela permet par la même occasion, de voir comment parcourir un Json dont la structure est inconnue... Code (Text): MonXML est une chaîne LeTitre,LePrenom ,LeNom, Ladresse, LeCP,LaVille ,Lemail ,LePhone ,LeCell sont des chaînes SI PAS HTTPRequête("https://randomuser.me/api/?results=1000") ALORS SELON ErreurInfo(errCode) // Certificat invalide // ou ne provenant pas d'une société connue CAS httpErreurCertificatInvalide : // Ignorer le certificat ? SI OuiNon("Alerte de sécurité détectée !", ... "Certificat invalide.", ... "Ignorer ce certificat ?") = Oui ALORS HTTP.IgnoreErreur = httpIgnoreCertificatInvalide // Nouveau lancement de la requête // en ignorant cette erreur HTTPRequête("https://www.MonServeur.com") FIN // Date du certificat non-valide ou expiré CAS httpErreurCertificatExpiré : // Ignorer la date du certificat ? SI OuiNon("Alerte de sécurité détectée !", ... "Date du certificat invalide ou expiré.", ... "Ignorer cette date ?") = Oui ALORS HTTP.IgnoreErreur = httpIgnoreCertificatExpiré // Nouveau lancement de la requête // en ignorant cette erreur HTTPRequête("https://www.MonServeur.com") FIN FIN SINON MonXML = HTTPDonneRésultat(httpRésultat) vJSON est un Variant = JSONVersVariant(MonXML) ParcoursMembresVariant(vJSON) PROCEDURE INTERNE ParcoursMembresVariant(_ObjetOuTableau) SELON _ObjetOuTableau..Type CAS wlVariantObjet : POUR TOUT _Membre DE _ObjetOuTableau..Membre SI _Membre..Membre..Occurrence = 0 ALORS SELON _Membre..Type CAS wlVariantTableau : //Trace(Répète("--", ChaîneOccurrence(dbgInfo(dbgPile), RC)) +"(1) Le membre " + _Membre..Nom + " contient un tableau...") ParcoursMembresVariant(_Membre) AUTRES CAS : //Trace(Répète("--", ChaîneOccurrence(dbgInfo(dbgPile), RC)) +"(2) Le membre " + _Membre..Nom + " a la valeur " + _Membre..Valeur) SI SansEspace(_Membre..Nom) = "title" ALORS LeTitre = _Membre..Valeur SI SansEspace(_Membre..Nom) = "first" ALORS LePrenom = _Membre..Valeur SI SansEspace(_Membre..Nom) = "last" ALORS LeNom = _Membre..Valeur SI SansEspace(_Membre..Nom) = "street" ALORS Ladresse = _Membre..Valeur SI SansEspace(_Membre..Nom) = "postcode" ALORS LeCP = _Membre..Valeur SI SansEspace(_Membre..Nom) = "city" ALORS LaVille = _Membre..Valeur SI SansEspace(_Membre..Nom) = "email" ALORS Lemail = _Membre..Valeur SI SansEspace(_Membre..Nom) = "phone" ALORS LePhone = _Membre..Valeur SI SansEspace(_Membre..Nom) = "cell" ALORS LeCell = _Membre..Valeur SI SansEspace(_Membre..Nom) = "nat" ALORS // L'astuce, ecrire lorsque l'on rencontre le dernier champ du json //fltrace("**********>" + LeTitre,LePrenom +LeNom+ Ladresse+ LeCP+LaVille +LaVille +Lemail +LePhone +LeCell) SI ChaîneOccurrence(lenom,"?") = 0 ALORS // Evite les noms a caracteres spéciaux Arabe, Japonais.... HRAZ(Client) Client.SejourOrientation = "" Client.Nom = Majuscule(LeNom) Client.Prénom = LePrenom Client.Adresse = Ladresse Client.CodePostal = LeCP Client.Ville = Majuscule(LaVille) Client.EMail = Lemail Client.TEL_INSCRIPTION = Lephone Client.TelPortable = LeCell Client.Observations = LeTitre+" "+LePrenom +" "+LeNom+" "+ RC+Ladresse+" "+RC+ LeCP+" "+LaVille+" "+ RC+ Lemail +" "+RC+LePhone +" "+LeCell HAjoute(Client) DoublonIntegrite() FIN FIN FIN SINON //Trace(Répète("--", ChaîneOccurrence(dbgInfo(dbgPile), RC)) +"(3) Le membre " + _Membre..Nom + " a " +_Membre..Membre..Occurrence + " autres membres...") ParcoursMembresVariant(_Membre) FIN FIN CAS wlVariantTableau : //Trace(Répète("--", ChaîneOccurrence(dbgInfo(dbgPile), RC)) +"Tableau de "+_ObjetOuTableau..Occurrence+" éléments...") POUR TOUT ELEMENT UnElement, Compteur DE _ObjetOuTableau //Trace(Répète("--", ChaîneOccurrence(dbgInfo(dbgPile), RC)) +"Exploration de l'élément "+Compteur+"/"+_ObjetOuTableau..Occurrence) ParcoursMembresVariant(UnElement) FIN AUTRES CAS : Trace("A gérer ("+_ObjetOuTableau..Type+") !?"+_ObjetOuTableau) FIN FIN FIN Développé un peu à l'arrache, mais cela fonctionne...
J’aime bien cette procédure interne qui nous montre le parcours des différents niveaux du résultat JSON, en utilisant la récursivité. Mais si on connait la structure, autant l’utiliser pour des raisons de performances sur les comparaisons de chaines, qui seront exponentielles sur chaque branche de l’arbre. A la place de la procédure, il faut simplement boucler sur le résultat : Code (Text): POUR TOUT InfoUser DE vJSON.results LeTitre = InfoUser.name.title LePrenom = InfoUser.name.first LeNom = InfoUser.name.last Ladresse = InfoUser.location.street LeCP = InfoUser.location.postcode LaVille = InfoUser.location.city Lemail = InfoUser.email LePhone = InfoUser.phone LeCell = InfoUser.cell SI ChaîneOccurrence(LeNom,"?") = 0 ALORS // Evite les noms a caracteres spéciaux Arabe, Japonais.... HRAZ(Client) Client.SejourOrientation = "" Client.Nom = Majuscule(LeNom) Client.Prénom = LePrenom Client.Adresse = Ladresse Client.CodePostal = LeCP Client.Ville = Majuscule(LaVille) Client.EMail = Lemail Client.TEL_INSCRIPTION = LePhone Client.TelPortable = LeCell Client.Observations = LeTitre+" "+LePrenom +" "+LeNom+" "+ RC+Ladresse+" "+RC+ LeCP+" "+LaVille+" "+ RC+ Lemail +" "+RC+LePhone +" "+LeCell HAjoute(Client) DoublonIntegrite() FIN FIN Edit : Je n'utilise pas la table, du coup j'ai gardé les variables, mais on peut mettre directement le contenu dans la table, sans passer par les variables.