Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com

Home

 
4D v19.8
dataClass.fromCollection( )

dataClass.fromCollection( ) 


 

dataClass.fromCollection ( objectCol {; settings} ) -> Funktionsergebnis 
Parameter Typ   Beschreibung
objectCol  Collection in Collection von Objekten zum Abbilden mit Entities
settings  Objekt in Aufbauoption: Kontext
Funktionsergebnis  EntitySelection in Entity-Selection gefüllt aus der Collection

Die Methode dataClass.fromCollection( ) aktualisiert oder erstellt Entities in der Dataclass nach der im Parameter objectCol angegebenen Collection von Objekten und gibt die entsprechende Entity-Selection zurück.

Im Parameter objectCol übergeben Sie eine Collection von Objekten, um vorhandene Entities der Dataclass zu aktualisieren oder neue zu erstellen. Die Eigenschaftsnamen müssen dieselben sein wie die Attributsnamen in der Dataclass. Ist ein Eigenschaftsname in der Dataclass nicht vorhanden, wird er ignoriert. Ist ein Attributswert in der Collection nicht definiert, ist er null.

Die Abbildung zwischen den Objekten der Collection und den Entities erfolgt über die Attributsnamen und passenden Typen. Hat eine Eigenschaft des Objekts den gleichen Namen wie ein Attribut der Entity, aber ihre Typen passen nicht, wird das Attribut der Entity nicht gefüllt.

Modus Erstellen oder Aktualisieren
Für jedes Objekt von objectCol gilt folgendes:

  • Enthält das Objekt keine boolean Eigenschaft "__NEW" oder ist sie auf falsch gesetzt, wird die Entity mit den entsprechenden Werten der Eigenschaften aus dem Objekt aktualisiert oder erstellt. Es wird keine Überprüfung des Primärschlüssels durchgeführt:
    • Ist der Primärschlüssel im Objekt angegeben und existiert, wird die Entity aktualisiert. In diesem Fall kann der Primärschlüssel wie vorgegeben sein oder als Eigenschaft "__KEY" (gefüllt mit dem Wert des Primärschlüssels).
    • Ist der Primärschlüssel im Objekt angegeben und existiert nicht, wird die Entity erstellt
    • Ist der Primärschlüssel im Objekt nicht angegeben, wird die Entity erstellt und der Wert des Primärschlüssels gemäß den standardmäßigen Datenbankregeln zugewiesen.
  • Enthält das Objekt eine boolean Eigenschaft "__NEW", gesetzt auf wahr, wird die Entity mit den entsprechenden Werten der Attribute aus dem Objekt erstellt. Es wird eine Überprüfung des Primärschlüssels durchgeführt:
    • Ist der Primärschlüssel wie vorgegeben angegeben und existiert, wird ein Fehler gesendet
    • Ist der Primärschlüssel wie vorgegeben angegeben und existiert nicht, wird die Entity erstellt
    • Ist der Primärschlüssel nicht angegeben, wird die Entity erstellt  und der Wert des Primärschlüssels gemäß den standardmäßigen Datenbankregeln zugewiesen.
Hinweis: Die Eigenschaft "__KEY" mit einen Wert wird nur berücksichtigt, wenn die Eigenschaft "__NEW" auf falsch gesetzt ist oder weggelassen wird und eine entsprechende Entity existiert. In allen anderen Fällen wird der Wert der Eigenschaft "__KEY" ignoriert, der Wert des Primärschlüssels muss wie vorgegeben übergeben werden.

Verknüpfte Entities
Die Objekte von objectCol können eine oder mehrere eingebettete Objekte enthalten mit einer oder mehreren verknüpften Entities. Diese sind hilfreich, um Links zwischen Entities zu erstellen oder aktualisieren.
Eingebettete Objekte mit verknüpften Entities müssen das Attribut ___KEY enthalten (gefüllt mit dem Primärschlüssel der verknüpften Entity) oder den Primärschlüssel der verknüpften Entity selbst. Das Attribut __KEY ermöglicht Unabhängigkeit vom Namen des Primärschlüssels.

Hinweis: Der Inhalt von verknüpften Entities lässt sich nicht durch diesen Mechanismus erstellen bzw. aktualisieren.

Stempel
Ist ein Attribut __STAMP angegeben, wird eine Überprüfung mit dem Stempel im Datastore durchgeführt und im entsprechenden Fall ein Fehler zurückgegeben ("Angegebener Stempel passt nicht zum aktuellen für Datensatz# XX der Tabelle XXXX"). Weitere Informationen dazu finden Sie im Abschnitt Entity sperren.

Im optionalen Parameter settings können Sie ein Objekt mit zusätzlichen Optionen übergeben. Folgende Eigenschaft wird unterstützt:

EigenschaftTypBeschreibung
contextTextOptimierungskontext für die Entity-Selection. Diesen Kontext verwendet der Code beim Verwalten der Entity-Selection, so dass sie von der Optimierung profitiert. Dieses Feature wurde zur Bearbeitung von ORDA Client/Server eingerichtet. Weitere Informationen dazu finden Sie im Abschnitt Client/Server Optimierung.

Eine vorhandene Entity aktualisieren. Die Eigenschaft __NEW is nicht angegeben, der Primärschlüssel employee ist angegeben und existiert:

 C_COLLECTION($empsCollection)
 C_OBJECT($emp;$employees)
 
 $empsCollection:=New collection
 $emp:=New object
 $emp.ID:=668 //Vorhandener Pirmärschlüssel in der Tabelle Employee
 $emp.firstName:="Arthur"
 $emp.lastName:="Martin"
 $emp.employer:=New object("ID";121) //Vorhandener Pirmärschlüssel in der verknüpften Dataclass Company
  // Für diesen Angestellten können wir die Firma über einen anderen Primärschlüssel in der verknüpften Dataclass Company ändern
 $empsCollection.push($emp)
 $employees:=ds.Employee.fromCollection($empsCollection)

Eine vorhandene Entity aktualisieren. Die Eigenschaft__NEW ist nicht angegeben, der Primärschlüssel employee hat das Attribut __KEY und existiert:

 C_COLLECTION($empsCollection)
 C_OBJECT($emp;$employees)
 
 $empsCollection:=New collection
 $emp:=New object
 $emp.__KEY:=1720 //Vorhandender PK in der Tabelle Employee
 $emp.firstName:="John"
 $emp.lastName:="Boorman"
 $emp.employer:=New object("ID";121) //Vorhandender PK in der verknüpften dataClass Company
  // Für diesen Angestellten können wir über einen anderen vorhandenen PK in der verknüpften dataClass Company die Firma wechseln
 $empsCollection.push($emp)
 $employees:=ds.Employee.fromCollection($empsCollection)

Einfach eine neue Entity aus der Collection erstellen:

 C_COLLECTION($empsCollection)
 C_OBJECT($emp;$employees)
 
 $empsCollection:=New collection
 $emp:=New object
 $emp.firstName:="Victor"
 $emp.lastName:="Hugo"
 $empsCollection.push($emp)
 $employees:=ds.Employee.fromCollection($empsCollection)

Eine Entity erstellen. Die Eigenschaft __NEW ist Wahr, es gibt keinen Primärschlüssel employee:

 C_COLLECTION($empsCollection)
 C_OBJECT($emp;$employees)
 
 $empsCollection:=New collection
 $emp:=New object
 $emp.firstName:="Mary"
 $emp.lastName:="Smith"
 $emp.employer:=New object("__KEY";121) //Vorhandener Primärschlüssel in der verknüpften Dataclass Company
 $emp.__NEW:=True
 $empsCollection.push($emp)
 $employees:=ds.Employee.fromCollection($empsCollection)

Eine Entity erstellen. Die Eigenschaft __NEW ist nicht angegeben, der Primärschlüssel employee ist angegeben und existiert nicht:

 C_COLLECTION($empsCollection)
 C_OBJECT($emp;$employees)
 
 $empsCollection:=New collection
 $emp:=New object
 $emp.ID:=10000 //Nicht vorhandener Primärschlüssel
 $emp.firstName:="Françoise"
 $emp.lastName:="Sagan"
 $empsCollection.push($emp)
 $employees:=ds.Employee.fromCollection($empsCollection)

In diesem Beispiel wird die erste Entity erstellt und gesichert, die zweite schlägt dagegen fehl, da beide denselben Primärschlüssel nutzen:

 C_COLLECTION($empsCollection)
 C_OBJECT($emp;$emp2;$employees)
 
 $empsCollection:=New collection
 $emp:=New object
 $emp.ID:=10001 // Primärschlüssel existiert nicht
 $emp.firstName:="Simone"
 $emp.lastName:="Martin"
 $emp.__NEW:=True
 $empsCollection.push($emp)
 
 $emp2:=New object
 $emp2.ID:=10001 // Gleicher Primärschlüssel, existiert bereits
 $emp2.firstName:="Marc"
 $emp2.lastName:="Smith"
 $emp2.__NEW:=True
 $empsCollection.push($emp2)
 $employees:=ds.Employee.fromCollection($empsCollection)
  //Erste Entity wird erstellt
  //Fehler wegen doppeltem Schlüssel für die zweite Entity



Siehe auch 

entitySelection.toCollection()

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: ORDA - DataClass

 
SEITENINHALT 
 
GESCHICHTE 

Erstellt: 4D v17
Geändert: 4D v17 R5

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v19)
4D Programmiersprache ( 4D v19.1)
4D Programmiersprache ( 4D v19.4)
4D Programmiersprache ( 4D v19.5)
4D Programmiersprache ( 4D v19.6)
4D Programmiersprache ( 4D v19.7)
4D Programmiersprache ( 4D v19.8)