Reibungsloser Übergang zu gemeinsam nutzbaren Entitätsauswahlen

In diesemBlog-Beitrag haben Sie erfahren, wie leistungsfähig die Auswahl gemeinsam genutzter Entitäten sein kann. 4D konzentriert sich auf die gemeinsame Nutzung von Daten, weil dies langfristig zu mehr Leistung führt.

Aber wir sind uns bewusst, dass diese Strategie vielleicht nicht Ihre aktuelle Strategie ist. Wir haben die Diskussionen im Forum verfolgt und Ihre Kommentare und Gefühle verstanden.

Um diesen Schritt abzumildern und Ihnen mehr Flexibilität und Werkzeuge zur Verfügung zu stellen, haben wir einige Verbesserungen hinsichtlich der Art (teilbar oder nicht teilbar) der Auswahl von Entitäten vorgenommen.

Bevor Sie fortfahren, empfehlen wir Ihnen dringend, diesen und diesen Blogbeitrag zu lesen, damit Sie die im Folgenden beschriebenen Verbesserungen verstehen können.

HDI: Erweiterungen bei der Auswahl von Entitäten

4D v18 R5 bietet mehr Möglichkeiten zur Handhabung von nicht gemeinsam nutzbaren (veränderbaren) Objektauswahlen. Es hilft Ihnen, so zu arbeiten, wie Sie es gewohnt sind.

Wenn Sie jedoch mit gemeinsam nutzbaren Objektauswahlen arbeiten möchten, haben wir Ihnen geholfen, sich auf diese neue Ära in 4D v18 R5 vorzubereiten. In 4D v18 haben wir eine flexible Methode eingeführt, mit der Sie Ihren Code transparent vorbereiten können.

Kurz gesagt: Bereiten Sie in 4D v18 vor, arbeiten Sie in 4D v18 R5, und machen Sie sich bereit für mehr Leistung!

Über veränderbare Objektauswahlen

Hinzufügen eines Objekts zu einer Objektauswahl

Ein häufiger Anwendungsfall ist die Anzeige einer Entity-Auswahl in einer Listbox (Produkte, Rechnungen usw.) und die Möglichkeit für den Benutzer, neue Entities hinzuzufügen.

Lassen Sie uns mit der Datenklasse Produkte arbeiten.

Wenn das Formular geladen wird, wird Form.products erstellt, die Datenquelle des Listenfeldes:

Case of
: (Form event code=On Load)
Form .products:=ds.Products.all()
End case

Wenn der Benutzer ein neues Produkt hinzufügt:

Form.products.add(Form.product)

Wenn Sie diesen Code so ausführen , wie er in 4D v18 R5 ist, erhalten Sie einen Fehler, wenn Sie die add() Funktion einen Fehler, da ds.Products.all() eine gemeinsam nutzbare Entity-Auswahl (nicht veränderbar) zurückgibt.

Wir sind uns dieser Unannehmlichkeit bewusst. Aus diesem Grund finden Sie die 4D v18 copy() Funktion zur Verfügung, um Ihren Code für 4D v18 R5 vorzubereiten.

Wenn copy() in 4D v18 ausgeführt wird: Sie kopiert einfach Ihre Entity-Auswahl

Wenn copy() in 4Dv18 R5 ausgeführt wird, kopiert sie standardmäßig Ihre nicht änderbare Entity-Auswahl als eine änderbare, so dass Sie keine Probleme mit der Hinzufügen-Aktion haben werden!

Bereiten Sie also Ihren Code wie folgt vor:

Case of
: (Form event code=On Load)
Form .products:=ds.Products.all().copy()
End case

Beibehaltung der Natur von Entitätsselektionen

Entitätsselektionen, die aus einer ursprünglichen Entitätsselektion erstellt werden, behalten dieselbe Beschaffenheit.

Beispiele

Sortieren einer Listbox

Lassen Sie uns noch einmal das Beispiel der angezeigten Produkte betrachten. Diese angezeigte Entitätsauswahl wurde als veränderbar festgelegt, weil der Benutzer neue Produkte hinzufügen muss.

Jede Art von Aktion auf den Spalten der Listbox behält die Veränderbarkeit der Entitätsauswahl bei, so dass Sie weiterhin Produkte hinzufügen können.

Eine Abfrage ausführen

Wenn Sie eine Abfrage auf eine Entitätsauswahl ausführen, wird die Art der Entitätsauswahl für das Ergebnis beibehalten.

Wenn der Benutzer in unserem Beispiel eine Suche nach den angezeigten Produkten durchführt:

Form.products:=Form.products.query("Name = :1"; Form.search)

Das Ergebnis der Abfrage ist veränderbar, so dass neue Produkte hinzugefügt werden können, da Form.products veränderbar ist.

Dies sind nur zwei Beispiele. Schauen Sie in der Dokumentation nach, um alle Fälle zu überprüfen, in denen die Art der ursprünglichen Auswahl beibehalten wird.

Generischer Code

Es kann nützlich sein, die Art einer Entitätsauswahl in generischem Code zu überprüfen, um sie in der richtigen Weise zu verwenden. Stellen Sie sich eine Methode vor, die eine Entity-Auswahl erhält, die entweder geteilt werden kann oder nicht.

In dem folgenden Beispiel erhalten wir eine Entitätsauswahl Products. Bevor wir sie an einen WORKER weitergeben, müssen wir prüfen, ob sie freigegeben werden kann. Ist dies nicht der Fall, verwandeln wir sie in eine gemeinsam nutzbare Entitätsauswahl.

Hierfür verwenden wir die neue OB Is shared() Funktion.

var $products; $1: cs.ProductsSelection
$products :=$1

If (Not(OB Is shared($products)))
$products :=$products.copy(ck shared)
End if
//Generate the catalog of products
CALL WORKER ("worker"; "buildCatalog"; $products; Current form window)

Hinweis: Es gibt auch eine neue Funktion isAlterable() für die Auswahl von Entitäten, um zu prüfen, ob sie veränderbar sind.

Laden Sie das obige HDI für weitere Beispiele herunter!

Weiterarbeiten wie bisher

Wenn Sie das Verhalten früherer 4D Versionen beibehalten wollen (ohne das Konzept der gemeinsam nutzbaren Entitätsauswahlen), können Sie die makeSelectionsAlterable() Klassenfunktion verwenden, die auf dem Datastore-Objekt verfügbar ist.

Dadurch werden die Änderungen, die 4D v18 R5 mit sich bringt, für Sie völlig transparent.

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.