4D v16.3

APPEND DATA TO PASTEBOARD

Home

 
4D v16.3
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 ( Nummer )
  ` SET RECORD TO PASTEBOARD ( Tabellennummer )
 
 C_LONGINT($1;$vlField;$vlFieldType)
 C_POINTER($vpTable;$vpField)
 C_STRING(255;$vsDocName)
 C_TEXT($vtRecordData;$vtFieldData)
 C_BLOB($vxRecordData)
 
  ` Inhalt des Pasteboard löschen (Gibt es keinen aktuellen Datensatz, bleibt sie leer)
 CLEAR PASTEBOARD
  ` Hole Zeiger auf die Tabelle mit der als Parameter übergebenen Nummer
 $vpTable:=Table($1)
  ` Gibt es einen aktuellen Datensatz für diese Tabelle
 If((Record number($vpTable->)>=0)|(Is new record($vpTable->)))
  ` Initialisiere die Textvariable mit dem Textbild des Datensatzes
    $vtRecordData:=""
  ` Hole für jedes Feld des Datensatzes:
    For($vlField;1;Count fields($1))
  ` Feldtyp
       GET FIELD PROPERTIES($1;$vlField;$vlFieldType)
  ` Hole Zeiger auf das Feld
       $vpField:=Field($1;$vlField)
  ` Kopiere bzw. kopiere nicht je nach Feldtyp die Daten in geeigneter Weise
       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
  ` Überspringe und ignoriere andere Felddatentypen
             $vtFieldData:=""
       End case
  ` Sammle die Felddaten in der Textvariablen mit dem Textbild des Datensatzes
       $vtRecordData:=$vtRecordData+Fieldname($1;$vlField)+":"+Char(9)+$vtFieldData+CR
  ` Beachte: Die Methode CR gibt unter Windows Char(13)+Char(10), auf Macintosh Char(13) zurück.
    End for
  ` Setze Textbild des Datensatzes in das Pasteboard
    SET TEXT TO PASTEBOARD($vtRecordData)
  ` Name für Übertragungsdatei in temporärem Ordner
    $vsDocName:=Temporary folder+"Scrap"+String(1+(Random%99))
  ` Lösche Übertragungsdatei, falls vorhanden (hier sollte Fehler getestet werden)
    DELETE DOCUMENT($vsDocName)
  ` Erstelle Teildatei
    SET CHANNEL(10;$vsDocName)
  ` Sende den ganzen Datensatz in die Übertragungsdatei
    SEND RECORD($vpTable->)
  ` Schließe die Übertragungsdatei
    SET CHANNEL(11)
  ` Lade Übertragungsdatei in ein BLOB
    DOCUMENT TO BLOB($vsDocName;$vxRecordData)
  ` Übertragungsdatei wird nicht länger benötigt
    DELETE DOCUMENT($vsDocName)
  ` Füge Gesamtbild des Datensatzes in das Pasteboard ein
  ` Hinweis: Wir verwenden wilkürlich "4Drc" als Datentyp
    APPEND DATA TO PASTEBOARD("4Drc";$vxRecordData)
  ` Das Pasteboard enthält nun:
  ` (1) Ein Textbild des Datensatzes (wie in u.a. Screenshots)
  ` (2) Ein Gesamtbild des Datensatzes (Bild, Unterdatei und darin enthaltene BLOB Felder)
 End if

Geben Sie folgenden Datensatz ein:

und wenden die Methode SET RECORD TO PASTEBOARD auf die Tabelle [Angestellte] 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:
 <gen9> ` Methode GET RECORD FROM PASTEBOARD
  ` GET RECORD FROM PASTEBOARD ( Nummer )
  ` GET RECORD FROM PASTEBOARD ( Tabellennummer )
 C_LONGINT($1;$vlField;$vlFieldType;$vlPosCR;$vlPosColon)
 C_POINTER($vpTable;$vpField)
 C_STRING(255;$vsDocName)
 C_BLOB($vxPasteboardData)
 C_TEXT($vtPasteboardData;$vtFieldData)
 
  ` Hole Zeiger auf die Tabelle mit der in Parameter übergebenen Nummer
 $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, entnimm Inhalt dem Pasteboard
          GET PASTEBOARD DATA("4Drc";$vxPasteboardData)
  ` Name für Übertragungsdatei in temporärem Ordner
          $vsDocName:=Temporary folder+"Scrap"+String(1+(Random%99))
  ` Lösche Übertragungsdatei, falls vorhanden (hier sollte Fehler getestet werden)
          DELETE DOCUMENT($vsDocName)
  ` Sichere BLOB in der Übertragungsdatei
          BLOB TO DOCUMENT($vsDocName;$vxPasteboardData)
  ` Öffne Übertragungsdatei
          SET CHANNEL(10;$vsDocName)
  ` Erhalte den gesamten Datensatz aus der Übertragungsdatei
          RECEIVE RECORD($vpTable->)
  ` Schließe Übertragungsdatei
          SET CHANNEL(11)
  ` Übertragungsdatei wird nicht länger benötigt
          DELETE DOCUMENT($vsDocName)
  ` Enthält das Pasteboard TEXT?
       :(Pasteboard data size("TEXT")>0)
  ` Entnimm Text aus dem Pasteboard
          $vtPasteboardData:=Get text from pasteboard
  ` Initialisiere Feldnummer für die Erhöhung
          $vlField:=0
          Repeat
  ` Suche nach der nächsten Feldzeile im Text
             $vlPosCR:=Position(CR;$vtPasteboardData)
             If($vlPosCR>0)
  ` Entnimm die Feldzeile
                $vtFieldData:=Substring($vtPasteboardData;1;$vlPosCR-1)
  ` Bei einem Doppelpunkt ":"
                $vlPosColon:=Position(":";$vtFieldData)
                If($vlPosColon>0)
  ` Nimm nur die Felddaten (lösche den Feldnamen)
                   $vtFieldData:=Substring($vtFieldData;$vlPosColon+2)
                End if
  ` Erhöhe die Feldnummer
                $vlField:=$vlField+1
  ` Pasteboard enthält evtl. mehr Daten als benötigt
                If($vlField<=Count fields($vpTable))
  ` Hole Typ des Feldes
                   GET FIELD PROPERTIES($1;$vlField;$vlFieldType)
  ` Hole Zeiger auf das Feld
                   $vpField:=Field($1;$vlField)
  ` Je nach Feldtyp kopiere bzw. kopiere nicht Text in geeigneter Art
                   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
  ` Überspringe und ignoriere andere Felddatentypen
                      Else
  ` Alle Felder wurden zugewiesen, verlasse die Schleife
                         $vtPasteboardData:=""
                      End if
  ` Entferne den soeben entnommenen Text
                      $vtPasteboardData:=Substring($vtPasteboardData;$vlPosCR+Length(CR))
                   Else
  ` Kein Begrenzer gefunden, verlasse die Schleife
                      $vtPasteboardData:=""
                   End if
  ` Wiederhole, solange Daten vorhanden
                Until(Length($vtPasteboardData)=0)
             Else
                ALERT("Pasteboard enthält keine Daten für die Übertragung als Datensatz.")
          End case
       End if</gen9>

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 v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)