4D v16.3

RECEVOIR ENREGISTREMENT

Accueil

 
4D v16.3
RECEVOIR ENREGISTREMENT

RECEVOIR ENREGISTREMENT 


 

RECEVOIR ENREGISTREMENT {( laTable )} 
Paramètre Type   Description
laTable  Table in Table dans laquelle recevoir l'enregistrement, ou Table par défaut si omis

RECEVOIR ENREGISTREMENT ajoute dans laTable un enregistrement reçu par l'intermédiaire du port série ou d'un document ouvert par la commande REGLER SERIE. L'enregistrement doit avoir été envoyé par la commande ENVOYER ENREGISTREMENT. Lorsque vous exécutez RECEVOIR ENREGISTREMENT, un nouvel enregistrement est automatiquement créé dans laTable. Si l'enregistrement a été correctement reçu, vous pouvez le sauvegarder à l'aide de STOCKER ENREGISTREMENT.

L'enregistrement est reçu en totalité, ce qui signifie que les images et BLOBs stockés dans ou avec l'enregistrement sont également reçus.

Important : Lorsque des enregistrements sont envoyés et reçus par ENVOYER ENREGISTREMENT et RECEVOIR ENREGISTREMENT, la structure de la table source et celle de la table de destination doivent être compatibles. Si ce n'est pas le cas, 4D convertira les valeurs en fonction des définitions des tables lorsque RECEVOIR ENREGISTREMENT sera exécutée.

Notes :

  1. Si vous recevez un enregistrement provenant d'un document avec cette commande, le document doit avoir été ouvert par la commande REGLER SERIE. Vous ne pouvez pas utiliser RECEVOIR ENREGISTREMENT avec un document ouvert par Ouvrir document, Creer document ou Ajouter a document.
  2. Pendant l'exécution d'un RECEVOIR ENREGISTREMENT, l'utilisateur peut interrompre l'opération en appuyant sur les touches Ctrl+Alt+Maj (sous Windows) ou Commande+Option+Maj (sous Mac OS). Cette interruption génère une erreur -9994 que vous pouvez intercepter à l'aide d'une méthode installée par la commande APPELER SUR ERREUR. Généralement, vous devez gérer les interruptions d'une réception uniquement lors d'une communication série.

Exemple  

L'utilisation combinée de ENVOYER VARIABLE, ENVOYER ENREGISTREMENT, RECEVOIR VARIABLE et RECEVOIR ENREGISTREMENT est idéale pour archiver des données ou échanger des données entre des bases monopostes identiques utilisées à différents endroits. Certes, vous pouvez échanger des données entre des bases 4D à l'aide des commandes d'import/export telles que EXPORTER TEXTE et IMPORTER TEXTE. Cependant, si vos données contiennent des images et/ou des tables liées, l'utilisation de  ENVOYER ENREGISTREMENT et RECEVOIR ENREGISTREMENT est, de loin, plus pratique.

Par exemple, imaginons une documentation créée à l'aide de 4D et 4D Write. Comme plusieurs rédacteurs basés dans différents pays travaillent sur ce projet, nous avons besoin d'un système simple pour échanger les données entre les différentes bases. Voici une vue simplifiée de la structure de la base :

La table [Commands] contient la description de chaque commande ou section. Les tables [CM US Params] et [CM FR Params] contiennent respectivement les paramètres de chaque commande en anglais et en français. La table [CM See Also] contient les commandes indiquées en tant que Références pour chaque commande ou section. L'échange de la documentation entre les bases consiste donc à envoyer les enregistrements de [Commands] ainsi que leurs enregistrements liés. Pour cela, nous utilisons ENVOYER ENREGISTREMENT et RECEVOIR ENREGISTREMENT. De plus, nous utilisons ENVOYER VARIABLE et ENVOYER ENREGISTREMENT pour "cocher" les enregistrements importés/exportés.

Voici la méthode projet (simplifiée) d'export de la documentation :

  ` Méthode projet CM_EXPORT_SEL
  ` Cette méthode fonctionne avec la sélection courante de la table [Commands]
 
 REGLER SERIE(12;"") ` Laissons l'utilisateur créer et ouvrir un document série
 Si(OK=1)
  ` Marquons le document avec une variable décrivant son contenu
  ` Note: la variable process BUILD_LANG indique si des données US (anglaises)
  ` ou FR (françaises) sont envoyées
    $vsTag:="4DV6COMMAND"+BUILD_LANG
    ENVOYER VARIABLE($vsTag)
  ` Envoyer une variable indiquant combien de [Commands] sont exportées
    $vlNbCmd:=Enregistrements trouves([Commands])
    ENVOYER VARIABLE($vlNbCmd)
    DEBUT SELECTION([Commands])
  ` Pour chaque commande
    Boucle($vlCmd;1;$vlNbCmd)
  ` Envoyer l'enregistrement [Commands]
       ENVOYER ENREGISTREMENT([Commands])
  ` Sélection de tous les enregistrements liés
       LIEN RETOUR([Commands])
  ` En fonction de la langue, envoyer une variable indiquant
  ` le nombre de paramètres qui va suivre
       Au cas ou
          :(BUILD_LANG="US")
             $vlNbParm:=Enregistrements trouves([CM US Params])
          :(BUILD_LANG="FR")
             $vlNbParm:=Enregistrements trouves([CM FR Params])
       Fin de cas
       ENVOYER VARIABLE($vlNbParm)
  ` Envoyer les enregistrements des paramètres (s'il y en a)
       Boucle($vlParm;1;$vlNbParm)
          Au cas ou
             :(BUILD_LANG="US")
                ENVOYER ENREGISTREMENT([CM US Params])
                ENREGISTREMENT SUIVANT([CM US Params])
             :(BUILD_LANG="FR")
                ENVOYER ENREGISTREMENT([CM FR Params])
                ENREGISTREMENT SUIVANT([CM FR Params])
          Fin de cas
       Fin de boucle
  ` Envoyer une variable indiquant combien de “Références” vont suivre
       $vlNbSee:=Enregistrements trouves([CM See Also])
       ENVOYER VARIABLE($vlNbSee)
  ` Envoyer les enregistrements [See Also] (s'il y en a)
       Boucle($vlSee;1;$vlNbSee)
          ENVOYER ENREGISTREMENT([CM See Also])
          ENREGISTREMENT SUIVANT([CM See Also])
       Fin de boucle
  ` Aller à l'enregistrement [Commands] suivant et continuer l'export
       ENREGISTREMENT SUIVANT([Commands])
    Fin de boucle
    REGLER SERIE(11) ` Fermer le document
 Fin de si

Voici la méthode projet (simplifiée) d'import de la documentation :

  ` Méthode projet CM_IMPORT_SEL
 
 REGLER SERIE(10;"") ` Laissons l'utilisateur ouvrir un document existant
 Si(OK=1) ` Si un document a été ouvert
    RECEVOIR VARIABLE($vsTag` Essayons de recevoir la variable marqueur attendue
    Si($vsTag="4DV6COMMAND@") ` Avons-nous le bon marqueur ?
       $CurLang:=Sous chaine($vsTag;Longueur($vsTag)-1) ` Extrayons la langue du marqueur
       Si(($CurLang="US") | ($CurLang="FR")) ` Avons-nous reçu un langage valide ?
          RECEVOIR VARIABLE($vlNbCmd` Combien de commandes dans ce document?
          Si($vlNbCmd>0) ` S'il en existe une au moins
             Boucle($vlCmd;1;$vlNbCmd` Pour chaque enregistrement [Commands] archivé
  ` Réception de l'enregistrement
                RECEVOIR ENREGISTREMENT([Commands])
  ` Appelons une sous-routine qui sauvegarde le nouvel enregistrement ou le copie
  ` dans un enregistrement existant
                CM_IMP_CMD($CurLang)
  ` Réception du nombre de paramètres (s'il y en a)
                RECEVOIR VARIABLE($vlNbParm)
                Si($vlNbParm>=0)
  ` Appelons une sous-routine qui appelle RECEVOIR ENREGISTREMENT puis stocke
  ` les nouveaux enregistrements ou les copie dans des enregistrements existants
                   CM_IMP_PARM($vlNbParm;$CurLang)
                Fin de si
  ` Réception du nombre de “Références” (s'il y en a)
                RECEVOIR VARIABLE($vlNbSee)
                Si($vlNbSee>0)
  ` Appelons une sous-routine qui appelle RECEVOIR ENREGISTREMENT puis stocke
  ` les nouveaux enregistrements ou les copie dans des enregistrements existants
                   CM_IMP_SEEA($vlNbSee;$CurLang)
                Fin de si
             Fin de boucle
          Sinon
             ALERTE("Le nombre de commandes dans ce document d'export est invalide.")
          Fin de si
       Sinon
          ALERTE("Le langage de ce document d'export est inconnu.")
       Fin de si
    Sinon
       ALERTE("Ce document n'est pas un document d'export.")
    Fin de si
    REGLER SERIE(11) ` Fermer document
 Fin de si

Notez que nous n'avons pas testé la variable OK pendant la réception des données, ni intercepté les éventuelles erreurs. Cependant, comme nous avons stocké dans le document des variables décrivant le document lui-même, si ces variables, une fois reçues, sont correctes, la probabilité d'erreur est très faible. Si par exemple un utilisateur ouvre un mauvais document, le premier test stoppe l'opération entière.

La variable système OK prend la valeur 1 si l'enregistrement est correctement reçu, sinon elle prend la valeur 0.



Voir aussi  

ENVOYER ENREGISTREMENT
ENVOYER VARIABLE
RECEVOIR VARIABLE

 
PROPRIÉTÉS 

Produit : 4D
Thème : Communications
Numéro : 79
Nom intl. : RECEIVE RECORD

Cette commande modifie la variable système OKCette commande modifie la variable système ErrorCommande(s) éligible(s) à l'exécution dans un process préemptif

 
HISTORIQUE 

Créé : < 4D v6

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)