ENVOYER PAQUET

4D - Documentation   Français   English   German   Español   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant

version 11 (Modifiée)


ENVOYER PAQUET ({docRef; }paquet)

ParamètreTypeDescription
docRefdocRefRéférence de document ou canal courant
(port série ou document)
paquetChaîne | BLOBChaîne ou BLOB à envoyer

Description

La commande ENVOYER PAQUET envoie paquet vers un port série ou un document. Si docRef est spécifié, le paquet est écrit dans le document référencé par docRef. Si docRef n'est pas spécifié, le paquet est envoyé vers le port série ou un document préalablement ouvert par la commande REGLER SERIE.

paquet représente une simple série de données, généralement une chaîne de caractères.

Vous pouvez également passer un BLOB dans paquet. Ce principe permet notamment de s'affranchir des contraintes liées à l'encodage des caractères envoyés en mode texte (cf. exemple 2).

Note : Lorsque vous passez un BLOB dans paquet, la commande ne tient pas compte du jeu de caractères éventuellement défini par la commande UTILISER FILTRE. Le BLOB est envoyé sans aucune modification.

Avant d'utiliser ENVOYER PAQUET, vous devez ouvrir un port série ou un document avec la commande REGLER SERIE, ou un document avec une commande de gestion des documents.

Lorsque vous envoyez un paquet vers un document, le premier ENVOYER PAQUET commence à écrire les données au début du document — à moins que ce dernier n'ait été ouvert par la fonction Ajouter a document. Puis, jusqu'à ce que le document soit refermé, chaque paquet envoyé y est écrit à la suite du précédent.

Note : Ce fonctionnement est valide avec un document ouvert par REGLER SERIE. Cependant, pour un document ouvert par Ouvrir document, Creer document ou Ajouter a document, vous pouvez utiliser les commandes Position dans document et CHANGER POSITION DANS DOCUMENT pour connaître et modifier la position à laquelle, dans le document, la prochaine écriture (ENVOYER PAQUET) ou lecture (RECEVOIR PAQUET) aura lieu.

Important : En mode non Unicode (mode compatibilité), ENVOYER PAQUET envoie des caractères ASCII Mac sous Windows et sous Mac OS. Chacun d'entre eux est codé sur huit bits. Les caractères ASCII standard utilisent uniquement les sept bits inférieurs. De nombreux ordinateurs et périphériques n'utilisent pas le huitième bit de la même manière que Windows/Mac OS. Si la chaîne à envoyer contient des caractères utilisant le huitième bit, créez un filtre ASCII pour convertir les caractères ASCII, et exécutez UTILISER FILTRE avant d'utiliser ENVOYER PAQUET. Vous pouvez aussi utiliser la fonction Mac vers Windows (voir l'exemple de cette fonction).

Des protocoles tels que XON/XOFF utilisent certains codes ASCII inférieurs pour établir la communication entre les machines. Assurez-vous de ne pas envoyer de tels codes ASCII pour ne pas risquer d'interférer avec le protocole, voire de rompre la communication.

Exemples

(1) L'exemple suivant écrit, dans un document, des données en provenance de champs. Les valeurs sont écrites sous forme de champs de taille fixe. Dans ce cas, si la longueur d'un champ est inférieure à la taille fixée, le champ est comblé avec des espaces (c'est-à-dire que des espaces sont ajoutés de manière à ce que le champ corresponde à la taille définie). Bien que les champs de valeurs fixes soient un moyen peu efficace de stocker des données, certains systèmes informatiques et certaines applications l'utilisent encore :

   $Doc := Creer document ("")    ` Création d'un document 
   Si (OK=1)    ` Est-ce que le document a bien été créé ? 
      Boucle ($i; 1; Enregistrements trouves ([Personnes]))  ` Boucle pour chaque enregistrement
         ENVOYER PAQUET ($Doc; Remplacer caracteres(15 * Caractere(Espacement); [Personnes]Prénom;1))
            ` Envoi du paquet créé à partir d'une chaîne de 15 espaces contenant le champ Prénom. 
         ENVOYER PAQUET ($Doc; Remplacer caracteres(15 * Caractere(Espacement); [Personnes]Nom;1))
            ` Envoi d'un second paquet créé à partir d'une chaîne de 15 espaces contenant le champ Nom. 
            ` Cela aurait pu être mis dans le premier paquet, mais est séparé pour des raisons de clarté. 
         ENREGISTREMENT SUIVANT([Personnes]) 
      Fin de boucle
      ENVOYER PAQUET ($Doc; Caractere (ASCII SUB)) 
         ` Envoi du code ASCII SUB, utilisé comme marqueur de fin d'enregistrement par certains ordinateurs. 
      FERMER DOCUMENT ($Doc)    ` Fermeture du document 
   Fin de si

(2) Cet exemple illustre l'envoi et la récupération de caractères étendus via un BLOB dans un document :

   C_BLOB($blob_envoi)
   C_BLOB($blob_reception)
   TEXTE VERS BLOB("âzértÿ";$blob_envoi;UTF8 Texte sans longueur)
   FIXER TAILLE BLOB($blob_envoi;16;255)
   $blob_envoi{6}:=0
   $blob_envoi{7}:=1
   $blob_envoi{8}:=2
   $blob_envoi{9}:=3
   $blob_envoi{10}:=0
   $vlDocRef:=Creer document("blob.test")
   Si (OK=1)
      ENVOYER PAQUET($vlDocRef;$blob_envoi)
      FERMER DOCUMENT($vlDocRef)
   Fin de si
   $vlDocRef:=Ouvrir document(document)
      Si(OK=1)
      RECEVOIR PAQUET($vlDocRef;$blob_reception;65536)
      FERMER DOCUMENT($vlDocRef)
   Fin de si

Référence

CHANGER POSITION DANS DOCUMENT, Position dans document, RECEVOIR PAQUET.


4D - Documentation   Français   English   German   Español   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant