Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
RECEIVE RECORD
|
RECEIVE RECORD {( Tabellenname )} | ||||||||
Parameter | Typ | Beschreibung | ||||||
Tabellenname | Tabelle |
![]() |
Tabelle für den zu empfangenden Datensatz Ohne Angabe Standardtabelle |
|||||
Der Befehl RECEIVE RECORD empfängt in Tabellenname einen Datensatz aus einer seriellen Schnittstelle oder von einem durch den Befehl SET CHANNEL geöffneten Dokument. Der Datensatz muss mit SEND RECORD gesendet worden sein. Führen Sie RECEIVE RECORD aus, wird automatisch eine neuer Datensatz für Tabellenname angelegt. Wurde der Datensatz korrekt empfangen, müssen Sie ihn mit dem Befehl SAVE RECORD sichern.
Der komplette Datensatz wird empfangen, dazu gehören auch alle im oder mit dem Datensatz gespeicherten Bilder oder BLOBs.
Wichtig: Werden Datensätze mit den Befehlen SEND RECORD und RECEIVE RECORD gesendet bzw. empfangen, müssen die Struktur der Quell- bzw. der Zieltabelle zueinander kompatibel sein. Ist das nicht der Fall, konvertiert 4D die Werte gemäß den Tabellendefinitionen beim Ausführen von RECEIVE RECORD.
Anmerkungen:
Die Kombination von SEND VARIABLE, SEND RECORD, RECEIVE VARIABLE und RECEIVE RECORD ist ideal zum Archivieren von Daten oder für den Austausch von Daten zwischen identischen Datenbanken im Einzelplatzbetrieb an verschiedenen Orten. Sie können Daten zwar auch mit den Befehlen EXPORT TEXT und IMPORT TEXT austauschen. Sobald sie jedoch Bilder und/oder verknüpfte Tabellen enthalten, sind die Befehle SEND RECORD und RECEIVE RECORD besser geeignet.
Nehmen wir z.B. eine Dokumentation, die auf 4D und 4D Write basiert. Da mehrere Verfasser an verschiedenen Orten auf der Welt daran arbeiten, benötigen wir einen einfachen Weg für den Datenaustausch zwischen den verschiedenen Datenbanken. Nachfolgend sehen Sie eine vereinfachte Darstellung der Datenbankstruktur:
Die Tabelle [Commands] enthält die Beschreibung jedes Befehls oder Abschnitts. Die Tabellen [CM US Params] und [CM FR Params] enthalten jeweils die Liste der Parameter für jeden Befehl in Englisch und Französisch. Die Tabelle [CM See Also] enthält die Befehle, die für jeden Befehl als Referenz aufgeführt werden. Für den Datenaustausch werden die Datensätze aus der Tabelle [Commands] und die damit verknüpften Datensätze gesendet. Dazu verwenden wir die Befehle SEND RECORD und RECEIVE RECORD. Zusätzlich benützen wir SEND VARIABLE und SEND RECORD, um das Import-/Exportdokument mit Tags zu markieren.
Hier ist die vereinfachte Projektmethode für den Datenexport:
` Projektmethode CM_EXPORT_SEL
` Diese Methode arbeitet mit der aktuellen Auswahl der Tabelle [Commands]
SET CHANNEL(12;"") ` Lässt den Benutzer ein Kanaldokument erstellen und öffnen
If(OK=1)
` Markiere Dokument mit Variable, die den Inhalt angibt
` Hinweis: Die Prozessvariable BUILD_LANG gibt an, ob US (Englisch) oder FR (Französisch) Daten gesendet werden
$vsTag:="4DV6COMMAND"+BUILD_LANG
SEND VARIABLE($vsTag)
` Sende Variable, die anzeigt wie viele [Commands] gesendet werden
$vlNbCmd:=Records in selection([Commands])
SEND VARIABLE($vlNbCmd)
FIRST RECORD([Commands])
` Für jeden Befehl
For($vlCmd;1;$vlNbCmd)
` Sende den [Commands] Datensatz
SEND RECORD([Commands])
` Wähle alle verknüpften Datensätze aus
RELATE MANY([Commands])
[ ` Sende je nach Sprache eine Variable, welche die Anzahl der folgenden Parameter angibt
Case of
:(BUILD_LANG="US")
$vlNbParm:=Records in selection([CM US Params])
:(BUILD_LANG="FR")
$vlNbParm:=Records in selection([CM FR Params])
End case
SEND VARIABLE($vlNbParm)
` Sende die [CM US Params] Datensätze (falls vorhanden)
For($vlParm;1;$vlNbParm)
Case of
:(BUILD_LANG="US")
SEND RECORD([CM US Params])
NEXT RECORD([CM US Params])
:(BUILD_LANG="FR")
SEND RECORD([CM FR Params])
NEXT RECORD([CM FR Params])
End case
End for
` Sende eine Variable, die die Anzahl der folgenden Referenzen angibt
$vlNbSee:=Records in selection([CM See Also])
SEND VARIABLE($vlNbSee)
` Sende die [CM See Also] Datensätze (falls vorhanden)
For($vlSee;1;$vlNbSee)
SEND RECORD([CM See Also])
NEXT RECORD([CM See Also])
End for
` Gehe zum nächsten [Commands] Datensatz und fahre fort mit Export
NEXT RECORD([Commands])
End for
SET CHANNEL(11) `Schließe Dokument
End if
Hier ist die vereinfachte Projektmethode für den Datenimport
` Projektmethode CM_IMPORT_SEL
SET CHANNEL(10;"") ` Lässt den Benutzer ein vorhandenes Dokument öffnen
If(OK=1) ` War ein Dokument offen
RECEIVE VARIABLE($vsTag) ` Versuche, die erwartete Tag Variable zu erhalten
If($vsTag="4DV6COMMAND@") ` War es das richtige Tag?
$CurLang:=Substring($vsTag;Length($vsTag)-1) ` Entnehme Sprache aus dem Tag
If(($CurLang="US")|($CurLang="FR")) ` War es eine gültige Sprache?
RECEIVE VARIABLE($vlNbCmd)
  ` Wieviele Befehle gibt es in diesem Dokument?
If($vlNbCmd>0) ` Ist mindestens einer vorhanden
For($vlCmd;1;$vlNbCmd) ` Für jeden archivierten [Commands] Datensatz empfange den Datensatz
RECEIVE RECORD([Commands])
` Rufe Unterroutine, die den neuen Datensatz sichert oder seinen Inhalt in bereits vorhandenen Datensatz kopiert
CM_IMP_CMD($CurLang) ` Empfange Anzahl der Parameter (falls vorhanden)
RECEIVE VARIABLE($vlNbParm)
If($vlNbParm>=0)
` Rufe Unterroutine, die RECEIVE RECORD aufruft, dann den neuen Datensatz sichert oder in bereits vorhandene Datensätze kopiert
CM_IMP_PARM($vlNbParm;$CurLang)
End if
` Erhalte Anzahl von “Referenz” (falls vorhanden)
RECEIVE VARIABLE($vlNbSee)
If($vlNbSee>0)
` Rufe Unterroutine, die RECEIVE RECORD aufruft, dann den neuen Datensatz sichert oder in bereits vorhandene Datensätze kopiert
CM_IMP_SEEA($vlNbSee;$CurLang)
End if
End for
Else
ALERT("Anzahl der Befehle in Exportdokument ist ungültig.")
End if
Else
ALERT("Sprache in Exportdokument ist unbekannt.")
End if
Else
ALERT("Dieses Dokument ist KEIN Exportdokument für Befehle.")
End if
SET CHANNEL(11) ` Schließe Dokument
End if
Beachten Sie, dass wir beim Datenempfang weder die Systemvariable OK testen, noch versuchen, Fehler abzufangen. Da wir jedoch Variablen im Dokument gespeichert haben, welches das Dokument selbst beschreibt, ist die Fehlerwahrscheinlichkeit sehr gering. Öffnet der Benutzer z.B. ein falsches Dokument, stoppt der erste Test sofort die Operation.
Die Systemvariable OK hat den Wert 1, wenn der Datensatz empfangen wurde. Wurde die Kommunikation unterbrochen oder trat ein Übertragungsfehler auf, ergibt OK den Wert 0.
Produkt: 4D
Thema: Kommunikation
Nummer:
79
Erstellt: < 4D v6
4D Programmiersprache ( 4D v20 R7)