4 Replies Latest reply: Jan 19, 2018 3:32 AM by Jennifer Bettiol RSS

    Connexion conditionnelle à un webservice

    Jennifer Bettiol

      Bonjour,

       

      J'ai un souci avec une application.

      J'ai besoin de me connecter à un webservice et récupérer un certain nombre de données. Ce processus est très long (6 minutes) pour une application qui est lancée toutes les 5-10 minutes. Je n'ai besoin de me connecter à ce service une seule fois par jour, lors du premier lancement de l'application le matin puis plus jusqu'au lendemain.

       

      L'instruction "Buffer (Stale After 1 day)" ne fonctionne pas juste avant l'instruction

       

      CUSTOM CONNECT TO "Provider......";

       

      Quelqu'un aurait une solution à ce souci pour avoir une connexion "conditionelle" ?

       

      Merci à tous

        • Re: Connexion conditionnelle à un webservice
          Sébastien Fatoux

          Bonjour, voici le script qu'il te faut pour exécuter du code une fois par jour :

           

           

          LET WebService_LastExecution = Today();

          IF DayStart(Today()) <> DayStart(WebService_LastExecution) THEN
                
          // Cette partie du code va s'executer une fois par jour
                
          LET WebService_LastExecution = Today();


          ENDIF

           

          Après la 1ère exécution, il faut supprimer ou commenter la première initialisation de la variable WebService_LastExecution.

            • Re: Connexion conditionnelle à un webservice
              Jennifer Bettiol

              Bonjour et merci pour votre réponse.

               

              Cela nécessite alors une intervention manuelle dans le script tous les jours après la première exécution...

              C'est justement mon souci, car l'application est lancée automatiquement tous les jours, ouvrés et non ouvrés alors je ne peux pas intervenir dans le script tous les jours...

               

              De plus, j'ai besoin de garder les informations précédemment chargées via le webservice, hors le fait de "sauter" cette partie de script ne me permet pas d'obtenir la dernière valeur des champ, obtenue à la 1ère execution...

              Je ne sais pas si je suis claire, mais en gros l'instruction

              "buffer (stale after 1 day)"

              réalise ce que je veux faire, mais j'ai besoin de l'attribuer à une connexion et pas à un LOAD.

               

              Merci

              Jenny

                • Re: Connexion conditionnelle à un webservice
                  Sébastien Fatoux

                  C'est juste après la première exécution qu'il faut supprimer la 1ère ligne. Après la variable est créée et initialisée dans l'application, donc on a plus besoin de cette ligne.

                   

                  Je te propose de simuler "buffer (stale after 1 day)" en sauvegardant le résultat de ton WebService dans un QVD lors de la première exécution de la journée (il sera écrasé chaque jour) et en chargeant ce QVD lors des exécutions suivantes.

                   

                   

                  //A supprimer après la première exécution, car sert uniquement à créer et initialiser la variable
                  LET WebService_LastExecution = Today();


                  IF DayStart(Today()) <> DayStart(WebService_LastExecution) THEN
                      
                  // Cette partie du code va s'executer une fois par jour
                      
                  LET WebService_LastExecution = Today();

                      
                  //Exécution du WebService

                      
                  //Sauvegarde du résultat dans un QVD (en imaginant que les données du webService se trouve dan sla table WebServiceTable)
                      
                  STORE WebServiceTable into WebServiceTable.qvd (qvd);

                  ELSE

                      
                  //Chargement du QVD à la place d'appeler le web service
                      
                  LOAD *
                      
                  From WebServiceTable.qvd (qvd);

                  ENDIF