1. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

webservices & JSON

Discussion dans 'Windev' créé par devtn, Fev 12, 2018.

  1. devtn

    devtn New Member

    Inscrit:
    Jan 23, 2018
    Messages:
    12
    J'aime reçus:
    0
    Bonjour,
    J'aimerais bien aborder le sujet des webservices et du format Json

    merci de votre aide
     
    Tags:
  2. chitanous.dz

    chitanous.dz Member

    Inscrit:
    Jan 2, 2018
    Messages:
    14
    J'aime reçus:
    22
    Bonjour

    J'ai vu passé quelques messages concernant la lecture de fichier JSON, nouveau standard qui a tendance à remplacer le XML. Je n'ai pas été convaincu des solutions proposées (autant sur les forums que par les exemples de PC SOFT). J'ai donc refait une petite procédure jLit bien simple pour lire ce type de fichier.
    Code (Text):
    PROCEDURE jLit(LOCAL sSourceJson est une chaîne,sCheminALire est une chaîne, sReponseSiPasTrouve est une chaîne = "", sCheminCourant est une chaîne="")
    nPosVirgule,nPosCrochet,nPosAccolade,nPosOuvreAccolade,n,m,nElement,nCaract sont des entiers
    sElement,sCode,sValeur,sSousElement sont des chaînes
     
    nPosOuvreAccolade=Position(sSourceJson,"{"+Caract(34))
    TANTQUE nPosOuvreAccolade>0
      sSourceJson=Milieu(sSourceJson,2)
      nPosVirgule=Position(sSourceJson,","+Caract(34));nPosCrochet=Position(sSourceJson,":[");nPosAccolade=Position(sSourceJson,":{")
      SI nPosVirgule=0 ALORS nPosVirgule=Position(sSourceJson,"}")
      TANTQUE nPosVirgule>0 OU nPosCrochet>0
        SI nPosVirgule>0 ET ((nPosCrochet=0 OU (nPosCrochet>0 ET nPosVirgule < nPosCrochet)) ET (nPosAccolade=0 OU (nPosAccolade>0 ET nPosVirgule < nPosAccolade))) ALORS
          sElement=Gauche(sSourceJson,nPosVirgule-1)
          sCode=Remplace(ExtraitChaîne(sElement,1,":"),Caract(34),"")
          sValeur=Milieu(sElement,Taille(sCode)+4)    //car peut contenir des : comme une adresse web, +3 car 2 guillemets+:
          SI Gauche(sValeur,1)=Caract(34) ALORS sValeur=Milieu(sValeur,2)
          SI Droite(sValeur,1)=Caract(34) ALORS sValeur=Gauche(sValeur,Taille(sValeur)-1)
          SI sCheminALire~=sCheminCourant+["/"]+sCode ALORS RENVOYER sValeur SINON sSourceJson=Milieu(sSourceJson,nPosVirgule+1)
        SINON SI nPosAccolade>0 _ET_ (nPosCrochet=0 OU (nPosCrochet>0 ET nPosAccolade < nPosCrochet)) ALORS
          sCode=Remplace(Gauche(sSourceJson,nPosAccolade-1),Caract(34),"")
          sSourceJson=Milieu(sSourceJson,nPosAccolade+1)
          //on trouve l'accolade de fin
          n=Position(sSourceJson,"}");m=Position(sSourceJson,"{");nCaract=(m>0 ET m < n)  //d'autres sous-élément si { avant un }
          TANTQUE nCaract>0
            n=Position(sSourceJson,"}",m+1);m=Position(sSourceJson,"{",m+1)
            SI (m>0 ET m < n) ALORS
              nCaract++
            SINON
              nCaract--;m=n
            FIN
          FIN
          SI Position(sCheminALire,sCheminCourant+["/"]+sCode+"/")>0 ALORS
            RENVOYER jLit(Gauche(sSourceJson,n),sCheminALire,sReponseSiPasTrouve,sCheminCourant+["/"]+sCode)
          SINON
            sSourceJson=Milieu(sSourceJson,n+2)
          FIN
        SINON SI nPosCrochet>0 ALORS
          sCode=Remplace(Gauche(sSourceJson,nPosCrochet-1),Caract(34),"")
          sSourceJson=Milieu(sSourceJson,nPosCrochet+1)
          //on trouve le crochet de fin
          n=Position(sSourceJson,"]");m=Position(sSourceJson,"[");nCaract=(m>0 ET m < n)  //d'autres sous-élément si { avant un }
          TANTQUE nCaract>0
            n=Position(sSourceJson,"]",m+1);m=Position(sSourceJson,"[",m+1)
            SI (m>0 ET m < n) ALORS
              nCaract++
            SINON
              nCaract--;m=n
            FIN
          FIN
          SI Position(sCheminALire,sCheminCourant+["/"]+sCode+"[")>0 ALORS
            SI n>0 ET (n < =m OU m=0) ALORS
              sSousElement=Milieu(sSourceJson,2,n-2);nElement=0
            SINON SI n=0 ALORS
              n=Position(sSourceJson,"}");m=Position(sSourceJson,"{");nCaract=(m>0 ET m < n)  //d'autres sous-élément si { avant un }
              TANTQUE nCaract>0
                n=Position(sSourceJson,"}",m+1);m=Position(sSourceJson,"{",m+1)
                SI (m>0 ET m < n) ALORS
                  nCaract++
                SINON
                  nCaract--;m=n
                FIN
              FIN
              sSousElement=Gauche(sSourceJson,n)
            SINON
              //problème, on a pas trouvé le crochet de fin
              RENVOYER sReponseSiPasTrouve
            FIN
     
            BOUCLE
              m=Position(sSousElement,"{")
              SI m>0 ALORS
                nElement++;m=1
                n=Position(sSousElement,"}",m+1);m=Position(sSousElement,"{",m+1)
                SI m>0 _ET_ m < n ALORS
                  nCaract=1
                  TANTQUE nCaract < >-1
                    n=Position(sSousElement,"}",m+1);m=Position(sSousElement,"{",m+1)
                    SI (m>0 ET m < n) ALORS
                      nCaract++
                    SINON
                      nCaract--;m=n
                    FIN
                  FIN
                FIN
                SI n>0 ALORS
                  SI Position(sCheminALire,sCheminCourant+["/"]+sCode+"["+nElement+"]")>0 ALORS
                    RENVOYER jLit(Gauche(sSousElement,n),sCheminALire,sReponseSiPasTrouve,sCheminCourant+["/"]+sCode+"["+nElement+"]")
                  FIN
                  sSousElement=Milieu(sSousElement,n+2)  //+2 correspond au },
                SINON
                  SORTIR
                FIN
              SINON
                POUR TOUTE CHAÎNE sValeur DE sSousElement SEPAREE PAR Caract(34)+","+Caract(34)
                  nElement++
                  SI Position(sCheminALire,sCheminCourant+["/"]+sCode+"["+nElement+"]")>0 ALORS RENVOYER Remplace(sValeur,Caract(34),"")
                FIN
                RENVOYER sReponseSiPasTrouve
              FIN
            FIN
     
          SINON
            sSourceJson=Milieu(sSourceJson,n+2)
          FIN
        FIN
        nPosVirgule=Position(sSourceJson,","+Caract(34));nPosCrochet=Position(sSourceJson,":[");nPosAccolade=Position(sSourceJson,":{")
        SI nPosVirgule=0 ALORS nPosVirgule=Position(sSourceJson,"}")  //pour la dernière accolade
      FIN
      nPosOuvreAccolade=Position(sSourceJson,"{"+Caract(34),nPosOuvreAccolade)
    FIN
    RENVOYER sReponseSiPasTrouve
     
    Son usage est très simple : il suffit de donner le chemin de la donnée pour avoir son résultat. Exemple jLit(sResHTML,"client/commande[1]/numero").

    Les paramètres :

    • sSourceJson : le résultat que vous avez obtenu en faisant une requête (typiquement, le contenu de HTTPDonneRésultat(httpRésultat))
    • sCheminALire : voir exemple ci-dessus. Le "[1]" correspond à la première commande, mettre donc "[2]" pour la seconde commande et ainsi de suite. S'il n'y a pas d'occurrence, juste enlever le chiffre entre crochet : jLit(sResHTML,"client/commande/numero")
    • sRéponseSiPasTrouvé : ce que renvoie la fonction si la valeur du chemin n'a pas été trouvé (car elle n'existe pas ou est indéxée ou ...)
    • sCheminCourant : chemin qui est passé lors d'une seconde lecture de la procédure (elle est récursive) > ne pas renseigner lors de l'appel.
     
  3. suenodesign

    suenodesign Well-Known Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    509
    J'aime reçus:
    739
    Excellent @

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    ça va m aider assurément
     
  4. gelop4

    gelop4 Member
    MEMBRE WX

    Inscrit:
    Fev 7, 2018
    Messages:
    48
    J'aime reçus:
    90
    Sympa la fonction avec récurence!

    Il existe JSONVersVariant() depuis la 19.
    Qu'est-ce qu'il manque/ne vas pas avec la fonction WL ?
     
    agence-digitale apprécie ceci.
  5. devtn

    devtn New Member

    Inscrit:
    Jan 23, 2018
    Messages:
    12
    J'aime reçus:
    0
    Excellent
    merci pour votre aide
     
  6. LAPIPE2018

    LAPIPE2018 Active Member
    MEMBRE WX

    Inscrit:
    Fev 17, 2018
    Messages:
    657
    J'aime reçus:
    232
    Il vaut mieux travailler dans le sens de la maitrise du JSON. Parce que bientôt ils vont standardiser aussi le BSON et là, les soucis vont grimper
     
  7. Pascal

    Pascal Active Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    82
    J'aime reçus:
    126
    Bonjour et merci pour ce code chitanous.dz

    Cordialement,
    Pascal
     
  8. ProDev

    ProDev Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    372
    J'aime reçus:
    373
    Bonjour
    ici comment appeler un webservice REST renvoyant du JSON



    Bàv
     
    suenodesign apprécie ceci.
  9. LAPIPE2018

    LAPIPE2018 Active Member
    MEMBRE WX

    Inscrit:
    Fev 17, 2018
    Messages:
    657
    J'aime reçus:
    232

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour
    ici comment appeler un webservice REST renvoyant du JSON



    Bàv
    Cliquez pour agrandir...
    Tous dépend de ta version de WD ou WB. Mais la gestion des Webservice Rest a beaucoup évolué. Entre la vidéo et actuelement.
     
    Fakirato apprécie ceci.
  • aminej76

    aminej76 Active Member
    MEMBRE WX

    Inscrit:
    Jan 23, 2018
    Messages:
    283
    J'aime reçus:
    102
    Le grand problème des webservices est la mise en place du serveur webdev et la connexion avec le centre de controle de HFSQL. (10 connexion ou illimité).
     
  • Fakirato

    Fakirato New Member
    WXG24 MEMBRE WX WXG 23 WXG 22 WXG 21

    Inscrit:
    Déc 30, 2017
    Messages:
    302
    J'aime reçus:
    816

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Le grand problème des webservices est la mise en place du serveur webdev et la connexion avec le centre de controle de HFSQL. (10 connexion ou illimité).
    Cliquez pour agrandir...
    Avec les v 22 vous pouvez déployé des webservices installable sans le serveur d'application dep!
     
    aminej76 apprécie ceci.
  • aminej76

    aminej76 Active Member
    MEMBRE WX

    Inscrit:
    Jan 23, 2018
    Messages:
    283
    J'aime reçus:
    102

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Avec les v 22 vous pouvez déployé des webservices installable sans le serveur d'application dep!
    Cliquez pour agrandir...
    Si je suis sur le bon chemin , pour utilser les webservices d'une base HFSQL il faut utiliser le le serveur d'application webdev ?
     
  • lejag

    lejag Member
    MEMBRE WX WXG 22

    Inscrit:
    Jan 18, 2018
    Messages:
    31
    J'aime reçus:
    4

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Comment installer un webservice sans le serveur d'application ?
     
    aminej76 apprécie ceci.
  • LAPIPE2018

    LAPIPE2018 Active Member
    MEMBRE WX

    Inscrit:
    Fev 17, 2018
    Messages:
    657
    J'aime reçus:
    232

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Comment installer un webservice sans le serveur d'application ?
    Cliquez pour agrandir...
    Fakirato, pour le faire , il faut uiliser un autre outils que windev. Puisque tout est basé sur leur moteur. Le conseilque je donnerais, c'est utiliser oracle avec son outils de deploiement, il est free jusqu'à un niveau, mais ça peut permettre de contourner. Ce n'est pas une bonne idée mais c'est ce que nous avons fait
     
  • Partager cette page

    Chargement...