ORDA – Gemeinsame Nutzung einer Entitätsauswahl durch Prozesse

4D v16 R6 hat ein neues Konzept für die Kommunikation zwischen Prozessen eingeführt: Shared Object und Shared Collection Variablen! Damit können Sie auf einfache Weise Informationen zwischen Prozessen austauschen.

Bis jetzt war es nicht möglich, Objektauswahlen zwischen Prozessen zu teilen. Das hat sich jedoch geändert … wir freuen uns, Ihnen mitteilen zu können, dass in 4D v18 R5 die Auswahl von Objekten gemeinsam genutzt werden kann!

Vorbei sind die Zeiten, in denen Sie eine Liste von Primärschlüsseln erstellen mussten, um eine Auswahl von Entitäten in einen anderen Prozess zu verschieben. Verbessern Sie Ihren Multiprozess-Code , indem Sie ORDA-Entity-Selektionen als gemeinsam genutzte Objekte einbinden.

Lesen Sie weiter, um mehr zu erfahren.

HDI: Gemeinsame Nutzung von ORDA-Entitätsselektionen

Prinzip

Mit 4D v18 R5 sind die meisten Entitätsselektionen gemeinsam nutzbar. Das bedeutet:

  • Sie sind nicht änderbar (erlaubt nicht das Hinzufügen neuer Entitäten).
  • sie können von mehreren Prozessen oder Arbeitern gemeinsam genutzt werden.

Einige Objektauswahlen sind nicht gemeinsam nutzbar (zum Beispiel, wenn sie mit dataClass.newSelection() oder Create entity selection() erstellt wurden). Das bedeutet:

  • sie sind veränderbar (erlaubt das Hinzufügen neuer Entitäten)
  • sie können nicht von mehreren Prozessen gemeinsam genutzt werden

gemeinsam nutzbare Entity-Auswahlen

Ab 4D v18 R5 sind die meisten Entity-Auswahlen (abgerufen mit query(), all(), …) gemeinsam nutzbar.

Schauen wir uns zum besseren Verständnis ein Beispiel an.

Beispiel

In dem folgenden Beispiel erstellen wir zwei Entitätsselektionen:

  • eine für bezahlte Rechnungen.
  • eine für unbezahlte Rechnungen.

Wir möchten sie an einen Worker weitergeben, um das Senden zu delegieren:

  • Bestätigungs-E-Mails für bezahlte Rechnungen.
  • Erinnerungs-E-Mails für unbezahlte Rechnungen.

Hier ist der Code:

If
End use

CALL WORKER Storageinfo(Storage.info=Null)
Use (Storage)
Storage .info:=New shared object()
End use
End if

Use (Storage.info)
//Put entity selections in a shared object
Storage .info.paid:=ds.Invoices.query("status=:1"; "Paid")
Storage .info.unpaid:=ds.Invoices.query("status=:1"; "Unpaid") xml-ph-0034@de

Hier ist die sendMails-Methode :

var $info; $1: Object
var $paid ; $unpaid: cs.InvoicesSelection
var $invoice : cs.InvoicesEntity
var $server ; $transporter; $email; $status: Object

//Prepare emails s
$server :=New object
$server .host:="exchange.company.com"
$server .user:="myName@company.com"
$server .password:="mein Passwort"

$transporter :=SMTP New transporter($server)

$email :=New object
$email .from:="myName@company.com"

//Get entity selections
$info:=$1
$paid:=$info.paid
$unpaid:=$info.unpaid

//Loops on entity selections
For each ($invoice; $paid)
$email .to:=$invoice.customer.address // email address of the customer
$email .subject:="Zahlung OK für Rechnung #"+String($invoice.number)
$status :=$transporter.send($email)
End for each

For each ($invoice; $unpaid)
$email .to:=$invoice.customer.address // email address of the customer
$email .subject:="Bitte bezahlen Sie Rechnung #"+String($invoice.number)
$status :=$transporter.send($email)
End for each

Wie Sie sehen können, kann der Worker mit der Auswahl der Entitäten umgehen!

Hin- und Hergehen zwischen gemeinsam nutzbaren und nicht gemeinsam nutzbaren Entitätsauswahlen

In einigen Fällen kann es vorkommen, dass Sie eine Entity-Auswahl haben , die nicht gemeinsam genutzt werden kann. Wenn Sie sie für einen anderen Prozess freigeben müssen, verwenden Sie einfach die Funktion new .copy() Klassenfunktion, die für Entitätsauswahlobjekte verfügbar ist.

Hier ist ein Beispiel für genau das:

Die Form.products ist eine neue leere Entity-Auswahl, die mit der Klassenfunktion newSelection() erzeugt wurde. Sie ist also nicht teilbar und erlaubt das Hinzufügen einer Entität.

Form.products:=ds.Products.newSelection()

//Form.product is entered by the user
Form .products.add(Form.product)

Wenn Sie versuchen, es „so wie es ist“ in das gemeinsam genutzte Objekt $sharedObj einzufügen, erhalten Sie einen Fehler:

var $sharedObj : Object
$sharedOb j:=New shared object()

Use ($sharedObj)
//Error "Not supported value type in a shared object or a shared collection"

$sharedObj.products:=Form.products
End use

Da ORDA an alles denkt, gibt es eine neue .copy() Klassenfunktion für Entity-Auswahl-Objekte zur Verfügung.

Es gibt eine Kopie der angegebenen Entitätsauswahl zurück, so dass wir diese Kopie fragen können, ob sie geteilt werden kann oder nicht.

var $sharedObj : Object
$sharedObj :=New shared object()

Use ($sharedObj)
//Returns a shareable copy of the Form.products entity selection
$sharedObj .products:=Form.products.copy(ck shared)
End use

Das war’s!

Natürlich können Sie mit dieser neuen Klassenfunktion auch eine gemeinsam nutzbare Entitätsauswahl in eine nicht gemeinsam nutzbare umwandeln, indem Sie den optionalen Parameter weglassen.

Beachten Sie, dass der Befehl OB Copy ebenfalls aktualisiert wurde:

  • Er akzeptiert eine Entity-Auswahl als Parameter.
  • Entity-Auswahlen, die in dem zu kopierenden Objekt verschachtelt sind, werden ebenfalls entsprechend der übergebenen Option kopiert.

Laden Sie den HDI herunter und lesen Sie die Dokumentation, um mehr zu erfahren!

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.