Les DataQueues sont des objets permettant des canaux de communication entre programmes. Elles sont plus puissantes et plus simples d'emploi que les DataAreas . Tout comme elles, elles permettent l'échange de données entre programmes de type différent (JAVA avec CL par exemple) et bien sûr les applications Easycom.
On distingue :
les DTAQ FIFO (First In, First Out) : réception de msg1 puis msg2 ,3,4...
les DTAQ LIFO : réception de msg4 puis msg3,2,1...
et les KEYED DTAQ qui permettent d'accéder à un message donné suivant une clé .
La Data Queue doit avoir été décrite (voir constructeur) et importée dans l'analyse.
Une Data Queue est écrite de manière directe, mais la lecture peut se faire en mode direct ou temporisée.
Ecriture
Quel que soit le type d’une Data Queue, une écriture est réalisée par la commande HAjoute().
Note: Il n’est pas utile de mettre des valeurs dans les champs de contrôle (les 3 ou 4 premiers, en fonction du type de la Data Queue).
Exemple :
// Initialise les rubriques...
DTAQ_FIFO.Data = DATA
// Ecriture dans la DataQueue
HAjoute(DTAQ_FIFO)
Lecture directe
La récupération des messages est immédiate et se fait avec la commande HLitRecherchePremier.
// Lecture de la DataQueue
HLitRecherchePremier(DTAQ_FIFO,Timeout,"000000")
// Affichage du résultat
SI H.EnDehors = Vrai ALORS
Info("DataQueue vide !")
SINON
// Affichage...
SAI_MSG1=DTAQ_FIFO.Data
FIN
Lecture temporisée
Si : la Data Queue contient au moins un message, la récupération est immédiate, sinon une temporisation paramétrable (en secondes) est lancée pour attendre un nouveau message.
Ceci est réalisé par la commande HLitRecherchePremier, en indiquant le délai dans la clé simple "TIMEOUT".
txtAttente est une chaîne
// Lecture de la Data Queue
txtAttente = TIMEOUT
HLitRecherchePremier (DTAQ_FIFO, TIMEOUT, txtAttente)
// Affichage du résultat
SI HEnDehors ALORS
Info("DataQueue vide !")
SINON
DATA = DT.DATA
FIN
Attention : dans ce cas l'application reste "bloquée" sur la fonction pendant toute la durée du timeout à moins que la Data Queue ne reçoive un message.
Data Queue de type KEYED
Il n’existe qu’une seule façon de lire une Data Queue KEYED : lecture par clé par la commande HLitRecherchePremier.
La composition de la clé suit les règles suivantes:
Le champ "TIMEOUT" indique en secondes une valeur d’attente avant un nouvel essai (il est possible de ne rien indiquer), dans ce cas la réponse est immédiate.
Le champ "FILER" doit être vide,
Le champ "ORDER" donne le type de recherche :
EQ |
= |
égal |
NE |
<> |
différent |
GT |
>= |
strictement supérieur |
GE |
> |
supérieur ou égal |
LT |
< |
strictement inférieur |
LE |
<= |
inférieur ou égal |
Le 4ème champ contient la valeur de recherche, il dépend de votre Data Queue.
Exemple
txtCle est une chaîne
// Lecture de la DataQueue
txtCle=HConstruitValClé(
HLitRecherche(DTAQ_KEY, DTAQ_KEY, txtCle)
// Affichage du résultat
SI H.EnDehors = Vrai ALORS
Info("DataQueue vide !")
SINON
// Affichage...
DATA = DT.DATA
FIN