4D v15.4

APPEND DATA TO PASTEBOARD

Home

 
4D v15.4
APPEND DATA TO PASTEBOARD

APPEND DATA TO PASTEBOARD 


 

APPEND DATA TO PASTEBOARD ( DatenTyp ; Daten ) 
Parameter Typ   Beschreibung
DatenTyp  String in Typ der hinzuzufügenden Daten
Daten  BLOB in Daten, die im Pasteboard angefügt werden sollen

Der Befehl APPEND DATA TO PASTEBOARD fügt im Pasteboard die im BLOB Daten enthaltenen Daten mit dem in DatenTyp angegebenem Typ an.

Hinweis: Bei Kopieren/Einsetzen Operationen entspricht Pasteboard der Zwischenablage.

In DatenTyp können Sie eine 4D Signatur, ein UTI (Mac OS), Formatnamen oder -nummer (Windows) oder einen Typ aus vier Zeichen (Kompatibilität) angeben. Weitere Informationen dazu finden Sie im Abschnitt Pasteboards verwalten.

Mit dem Befehl APPEND DATA TO PASTEBOARD hängen Sie normalerweise die verschiedenen Instanzen derselben Daten im Pasteboard an oder Daten, die weder vom Typ TEXT noch PICT sind. Wollen Sie neue Daten im Pasteboard anhängen, müssen Sie den Inhalt des Pasteboard zuerst mit dem Befehl CLEAR PASTEBOARD löschen.

Enthält ein BLOB jedoch derzeit Text oder ein Bild, können Sie mit dem Befehl APPEND DATA TO PASTEBOARD Text oder Bilder im Pasteboard anfügen.

Wollen Sie:

Mit den Befehlen für Pasteboards und BLOBs können Sie ausgeklügelte Schemata für Ausschneiden/Kopieren/Einsetzen erstellen, die auch mit strukturierten Daten und nicht nur mit einem einzigen Datenteil arbeiten können. Im nachfolgenden Beispiel können Sie mit Hilfe der Projektmethoden SET RECORD TO PASTEBOARD und GET RECORD FROM PASTEBOARD einen ganzen Datensatz als ein Teil behandeln, das in bzw. aus dem Pasteboard kopiert wird.

  //Projektmethode SET RECORD TO PASTEBOARD
  //SET RECORD TO PASTEBOARD (Number)
  //SET RECORD TO PASTEBOARD (Table number)
 
 C_LONGINT($1;$vlField;$vlFieldType)
 C_POINTER($vpTable;$vpField)
 C_TEXT($vsDocName)
 C_TEXT($vtRecordData;$vtFieldData)
 C_BLOB($vxRecordData)
 
  //Inhalt des Pasteboard löschen (gibt es keinen aktuellen Datensatz, bleibt es leer)
 CLEAR PASTEBOARD
  //Zeiger auf die Tabelle mit der als Parameter übergebenen Nummer holen
 $vpTable:=Table($1)
  //Gibt es einen aktuellen Datensatz für diese Tabelle
 If((Record number($vpTable->)>=0)|(Is new record($vpTable->)))
  //Die Textvariable initialisieren, die das Textbild des Datensatzes enthält.
    $vtRecordData:=""
  //Für jedes Feld des Datensatzes:
    For($vlField;1;Get last field number($1))
  //Typ des Feldes holen
       GET FIELD PROPERTIES($1;$vlField;$vlFieldType)
  //Zeiger auf das Feld holen
       $vpField:=Field($1;$vlField)
  //Je nach Feldtyp dessen Daten in geeigneter Weise kopieren (oder nicht)
       Case of
          :(($vlFieldType=Is alpha field)|($vlFieldType=Is text))
             $vtFieldData:=$vpField->
          :(($vlFieldType=Is real)|($vlFieldType=Is integer)|($vlFieldType=Is longint)|($vlFieldType=Is date)|($vlFieldType=Is time))
             $vtFieldData:=String($vpField->)
          :($vlFieldType=Is Boolean)
             $vtFieldData:=String(Num($vpField->);"Yes;;No")
          Else
  //Andere Datenfeldtypen überspringen und ignorieren
             $vtFieldData:=""
       End case
  //Die Felddaten in der Textvariablen sammeln, die das Textbild des Datensatzes enthält
       $vtRecordData:=$vtRecordData+Field name($1;$vlField)+":"+Char(9)+$vtFieldData+CR
  //Hinweis: Die Methode CR gibt Char(13) auf Macintosh und Char(13)+Char(10) unter Windows zurück
    End for
  //Textbild des Datensatzes in Pasteboard setzen
    SET TEXT TO PASTEBOARD($vtRecordData)
  //Name der Übertragungsdatei im temporären Ordner
    $vsDocName:=Temporary folder+"Scrap"+String(1+(Random%99))
  //Übertragungsdatei löschen, falls vorhanden (Fehler sollte hier getestet werden)
    DELETE DOCUMENT($vsDocName)
  //Übertragungsdatei erstellen
    SET CHANNEL(10;$vsDocName)
  //Den ganzen Datensatz an die Übertragungsdatei senden
    SEND RECORD($vpTable->)
  //Übertragungsdatei schließen
    SET CHANNEL(11)
  //Übertragungsdatei in ein BLOB laden
    DOCUMENT TO BLOB($vsDocName;$vxRecordData)
  //Übertragungsdatei wird nicht mehr benötigt
    DELETE DOCUMENT($vsDocName)
  //Gesamtbild des Datensatzes in das Pasteboard setzen
  //Hinweis: Wir verwenden wilkürlich "4Drc" als Datentyp
    APPEND DATA TO PASTEBOARD("4Drc";$vxRecordData)
  //Das Pasteboard enthält jetzt:
  //(1) Ein Textbild des Datensatzes (wie in u.a. Screenshots gezeigt)
  //(2) Ein Gesamtbild des Datensatzes (Bild, Unterdatei und enthaltene BLOB Felder)
 End if

Geben Sie folgenden Datensatz ein:

und wenden die Methode SET RECORD TO PASTEBOARD auf die Tabelle [Employees] an, enthält die Zwischenablage das Textbild sowie das Gesamtbild des Datensatzes:



Über die Methode GET RECORD FROM PASTEBOARD können Sie dieses Bild des Datensatzes in einen anderen Datensatz kopieren:

  //Methode GET RECORD FROM PASTEBOARD
  //GET RECORD FROM PASTEBOARD(Number)
  //GET RECORD FROM PASTEBOARD(Table number)
 C_LONGINT($1;$vlField;$vlFieldType;$vlPosCR;$vlPosColon)
 C_POINTER($vpTable;$vpField)
 C_TEXT($vsDocName)
 C_BLOB($vxPasteboardData)
 C_TEXT($vtPasteboardData;$vtFieldData)
 
  //Zeiger auf die Tabelle mit der als Parameter übergebenen Nummer holen
 $vpTable:=Table($1)
  //Gibt es einen aktuellen Datensatz
 If((Record number($vpTable->)>=0)|(Is new record($vpTable->)))
    Case of
  //Enthält das Pasteboard einen Datensatz als Gesamtbild?
       :(Pasteboard data size("4Drc")>0)
  //Wenn ja, Inhalt aus Pasteboard entnehmen
          GET PASTEBOARD DATA("4Drc";$vxPasteboardData)
  //Name der Übertragungsdatei im temporären Ordner
          $vsDocName:=Temporary folder+"Scrap"+String(1+(Random%99))
  //Übertragungsdatei löschen, falls vorhanden (Fehler sollte hier getestet werden)
          DELETE DOCUMENT($vsDocName)
  //BLOB in Übertragungsdatei sichern
          BLOB TO DOCUMENT($vsDocName;$vxPasteboardData)
  //Übertragungsdatei öffnen
          SET CHANNEL(10;$vsDocName)
  //Den ganzen Datensatz aus Übertragungsdatei empfangen
          RECEIVE RECORD($vpTable->)
  //Übertragungsdatei schließen
          SET CHANNEL(11)
  //Übertragungsdatei wird nicht mehr benötigt
          DELETE DOCUMENT($vsDocName)
  //Enthält das Pasteboard TEXT?
       :(Pasteboard data size("TEXT")>0)
  //Text aus dem Pasteboard entnehmen
          $vtPasteboardData:=Get text from pasteboard
  //Feldnummer für Erhöhung initialisieren
          $vlField:=0
          Repeat
  //Nach der nächsten Feldzeile im Text suchen
             $vlPosCR:=Position(CR;$vtPasteboardData)
             If($vlPosCR>0)
  //Feldzeile entnehmen
                $vtFieldData:=Substring($vtPasteboardData;1;$vlPosCR-1)
  //Gibt es einen Doppelpunkt ":"
                $vlPosColon:=Position(":";$vtFieldData)
                If($vlPosColon>0)
  //Nur die Felddaten entnehmen (Feldname löschen)
                   $vtFieldData:=Substring($vtFieldData;$vlPosColon+2)
                End if
  //Feldnummer erhöhen
                $vlField:=$vlField+1
  //Pasteboard kann mehr Daten als benötigt enthalten...
                If($vlField<=Get last field number($vpTable))
  //Feldtyp holen
                   GET FIELD PROPERTIES($1;$vlField;$vlFieldType)
  //Zeiger auf das Feld holen
                   $vpField:=Field($1;$vlField)
  //Je nach Feldtyp dessen Daten in geeigneter Weise kopieren (oder nicht)
                   Case of
                      :(($vlFieldType=Is alpha field)|($vlFieldType=Is text))
                         $vpField->:=$vtFieldData
                      :(($vlFieldType=Is real)|($vlFieldType=Is integer)|($vlFieldType=Is longint))
                         $vpField->:=Num($vtFieldData)
                      :($vlFieldType=Is date)
                         $vpField->:=Date($vtFieldData)
                      :($vlFieldType=Is time)
                         $vpField->:=Time($vtFieldData)
                      :($vlFieldType=Is Boolean)
                         $vpField->:=($vtFieldData="Yes")
                      Else
  //Andere Datenfeldtypen überspringen und ignorieren
                   End case
                Else
  //Alle Felder wurden zugewiesen, Schleife verlassen
                   $vtPasteboardData:=""
                End if
  //Gerade entnommenen Text löschen
                $vtPasteboardData:=Substring($vtPasteboardData;$vlPosCR+Length(CR))
             Else
  //Kein Begrenzer gefunden, Schleife verlassen
                $vtPasteboardData:=""
             End if
  //Wiederhole, solange Daten vorhanden
          Until(Length($vtPasteboardData)=0)
       Else
          ALERT("Pasteboard enthält keine Daten zur Übertragung als Datensatz.")
    End case
 End if

Wird BLOB Daten korrekt im Pasteboard angefügt, hat die Systemvariable OK den Wert 1; andernfalls hat OK den Wert 0 und es wird u.U. eine Fehlermeldung erzeugt.



Siehe auch 

CLEAR PASTEBOARD
SET PICTURE TO PASTEBOARD
SET TEXT TO PASTEBOARD

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Pasteboard
Nummer: 403

Dieser Befehl ändert die Systemvariable OK

 
GESCHICHTE 

Geändert: 4D v11 SQL

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v15.4)
4D Programmiersprache ( 4D v15.3)