Objects Corner: Einfaches Teilen und andere gute Nachrichten

Wie oft haben Sie die Fehlermeldung„Not supported value type in a shared object“ erhalten, wenn Sie versucht haben, ein Objekt in ein gemeinsames Objekt zu setzen?

Was haben Sie dann getan? Haben Sie einen längeren Code geschrieben, um Ihr unschuldiges Objekt in ein gemeinsam genutztes Objekt zu verwandeln, vielleicht durch Iteration über alle Eigenschaften des Objekts?

Wie wäre es, ein gemeinsames Objekt von einer gemeinsamen Gruppe in eine andere zu übertragen?

Eine interessante Sache über Objekte: Sie wissen bereits, dass sie als Hash-Map (ein Schlüssel/Wert-System) verwendet werden können, aber wie wäre es, alle Schlüssel oder alle Werte mit einer einzigen Codezeile zu erhalten?

Lesen Sie weiter, denn 4D v18 R3 ist da und bringt gute Nachrichten!

COPY freigegebene Objekte und Sammlungen

Kopieren eines Objekts als Shared

Der Befehl OB Copy() Befehl wurde um eine neue Option erweitert, die den Wert: ck shared haben kann

Im folgenden Beispiel wird das Objekt $person als gemeinsames Objekt in das Objekt $copy kopiert.

Dann können wir das Objekt $copy in das gemeinsame Objekt $personsList kopieren.

C_OBJECT$copy ($person;$copy;$personsList)
C_TEXT ($text)

$text :=Document to text(Get 4D folder(Current resources folder)+"person.txt")
//$person is a standard object
$person :=JSON Parse($text)

$personsList :=New shared object()

//$copy is a shared object
$copy :=OB Copy($person;ck shared)

Use ($personsList)
//We can put $copy in $personsList because $copy is a shared object
$personsList .person:= xml-ph-003

End use

ein gemeinsames Objekt aus einer gemeinsamen Gruppe einer anderen zuweisen

Der Befehl OB Copy() wurde außerdem um einen neuen Parameter erweitert: groupWith (der ein gemeinsames Objekt oder eine gemeinsame Sammlung sein muss).

Durch die Übergabe des groupWith-Parameters kann das kopierte Objekt in dieselbe gemeinsame Gruppe wie groupWith eingefügt werden.

In dem folgenden Beispiel gehören $sharedObj und $sharedColl zu zwei verschiedenen gemeinsamen Gruppen.

Wir können $sharedObj nicht in $sharedColl einfügen, ohne einen Fehler zu erhalten, aber wir können $sharedObj einfach in ein neues Objekt kopieren, das zur gleichen gemeinsamen Gruppe gehört wie $sharedColl.

C_OBJECT($sharedObj;$objCopy)
C_COLLECTION ($sharedColl)

//$sharedObj belongs to a shared group

$sharedObj :=New shared object("Nachname"; "Smith"; "Adresse";New shared object("Stadt"; "New York"))

//$sharedColl belongs to another shared group

$sharedColl :=New shared collection(New shared object("Nachname"; "Brown"))

//$objCopy is in the same shared group as $sharedColl

$objCopy:=OB Copy($sharedObj;ck shared;$sharedColl)

//So we can put $objCopy into $sharedColl without error

Use ($sharedColl)
$sharedColl .push($objCopy)
End use

Und was ist mit gemeinsamen Sammlungen?

Die obigen Beispiele beziehen sich auf den OB Copy() Befehl.

Die Member-Methodecollection.copy() wurde auf genau die gleiche Weise erweitert.

Behandlung eines Objekts als Hash-Map

Es gibt neue Befehle, die den Umgang mit einem Objekt als Hash-Map vereinfachen. Wenn Sie Objekte haben, deren Eigenschaftsnamen dynamische Daten enthalten, sind diese Befehle genau das Richtige für Sie!

Lassen Sie uns dies anhand eines Beispiels erklären.

Betrachten Sie dieses $persons Objekt, das Vornamen als Eigenschaftsnamen und Alter als Eigenschaftswert enthält:

C_OBJECT($persons)
$persons :=New object
$persons ["John"]:=42 // John is 42
$persons ["Andy"]:=24 // Andy is 24
$persons ["Mary"]:=30 // Mary is 30
$persons ["Paul"]:=50 // Paul is 50
$persons ["Fred"]:=51// Fred is 51

Befehl OB Keys

Dieser Befehl gibt die Eigenschaftsnamen eines Objekts als Sammlung zurück:

ALERT("Es gibt "+String(OB Keys($persons).length)+" Personen")

OB-Werte-Befehl

Dieser Befehl gibt die Eigenschaftswerte eines Objekts als Sammlung zurück:

ALERT("Der Altersdurchschnitt ist "+String(OB Values($persons).average()))

Befehl OB-Einträge

Dieser Befehl gibt eine Sammlung von Objekten mit Schlüsseleigenschaften (Eigenschaftsname) und Wert (Eigenschaftswert) zurück:

C_COLLECTION($agesOK)

$agesOK:=OB Entries($persons).query("Wert>:1";45)
ALERT ("Es gibt "+String($agesOK.length)+" Personen, die über 45 sind")
ALERT ("Ihre Namen sind: "+$agesOK.extract("Schlüssel").join("-"))

Die Verwendung eines Objekts, wie oben gezeigt, ermöglicht einen schnellen, direkten Zugriff auf die Daten, wie bei der Verwendung eines Indexes.

Es ist schneller als die Verwendung einer Sammlung von Objekten mit den Eigenschaften Vorname und Alter.

Beachten Sie auch, dass diese Befehle eine Sammlung zurückgeben. Dies ermöglicht die Verwendung aller Methoden, die für Sammlungen verfügbar sind (wie average(), query(), …).

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert ist seit 2017 als Product Owner im 4D Produktteam tätig. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Marie-Sophie ist Absolventin der ESIGELEC Ingenieurschule und begann ihre Karriere als Ingenieurin bei IBM im Jahr 1995. Sie nahm an verschiedenen Projekten teil (Wartungs- oder Build-Projekte) und arbeitete als Cobol-Entwicklerin. Dann arbeitete sie als UML-Designerin und Java-Entwicklerin. In letzter Zeit bestand ihre Hauptaufgabe darin, funktionale Anforderungen zu analysieren und zu schreiben sowie Geschäfts- und Entwicklungsteams zu koordinieren.