Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
jennybetty
Contributor II
Contributor II

Connexion conditionnelle à un webservice

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

1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

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

View solution in original post

4 Replies
sfatoux72
Partner - Specialist
Partner - Specialist

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.

jennybetty
Contributor II
Contributor II
Author

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

sfatoux72
Partner - Specialist
Partner - Specialist

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

jennybetty
Contributor II
Contributor II
Author

Ah oui d'accord autant pour moi.

Merci c'est exactement ce qu'il me faut.

Bonne journée à toi et un grand merci pour ton aide !