Dieses Dokument ist eine Zusammenfassung aller Features, die in 4D v17 verfügbar sind. Sie wurden entweder mit den verschiedenen R-Versionen in v16 oder mit dem letzten Schritt von 4D v16 R6 zu 4D v17 eingeführt. Beachten Sie, dass jedem Feature ein Blog Post zugeordnet ist, das Sie durch konkrete Beispiele führt. Zum Öffnen des Blog Post klicken Sie einfach auf den Titel dieses Features.
Bereiche, die mit gekennzeichnet sind, beschreiben die neuen Features, die mit dem Release 4D v16 R6 und 4D v17 veröffentlicht wurden.
Dieses Dokument ist in sieben Abschnitte gegliedert:
ORDA
4D v17 führt ein innovatives Konzept ein, um Ihre Datenbank mit objektorientierter Ausrichtung zu verwalten, genannt ORDA (Object Relational Data Access). Stellen Sie sich einen Weg vor, Ihre Datenbank objektorientiert zu nutzen, ohne sich um die physische Struktur zu kümmern. Stellen Sie sich vor, Sie können mehrere aktuelle Auswahlen gleichzeitig beibehalten oder rekursive Suchläufe mit einer einzigen Zeile Code ausführen. Mit ORDA ist all das jetzt Realität. In 4D v17 lässt sich Ihr Code in objektorientierter Form schreiben und Sie können ganz einfach durch Ihre gesamtes Datenmodell navigieren. Außer den Auswirkungen auf die Programmierung bietet ORDA aber auch erhebliche Erweiterungen für die Datendarstellung für den Benutzer, z.B. in Listboxen.
Hier sind die Features, die wir mit diesem Release ausliefern:
Update erstellen und Daten löschen
CRUD (Create, Read, Update and Delete) Operationen in Ihrer Datenbank laufen über eine Abstraktionsschicht, den Datastore. Das ist ein Objekt, das eine Schnittstelle zum Datenbankmodell und den Daten über Objekte bietet. Mit ORDA werden die Operationen Erstellen, Updaten und Löschen nicht über eine aktuelle Auswahl oder einen aktuellen Datensatz durchgeführt, sondern über Entities:
- Erstellen: Wird durch Anlegen einer Instanz zu einer neuen Entity über die Methode new() und Sichern mit der Methode save() durchgeführt.
- Updaten: Wird für eine Entity mit der gleichen Methode save() durchgeführt.
- Löschen: Wird für eine Entity oder eine Entity-Selection mit der Methode drop() durchgeführt.
Der Datastore bietet über Objekte eine Oberfläche zum Datenbankmodell und den Daten. Sie arbeiten nicht mehr mit der aktuellen Auswahl für jede Tabelle und den aktuellen Datensatz, sondern mit den Objekten Entities. Sie können einfach mehrere verknüpfte Tabellen durchsuchen, rekursive Verknüpfungen auf die gleiche Tabelle verwalten und in einem einzelnen Suchlauf mehrere logische Operatoren verwenden. 4D v17 bietet verschiedene Wege für Suchläufe in Ihrer dataClass (z.B. Tabelle): Sie können die Suche als einzelnen String oder Suchkriterien und Werte getrennt voneinander einrichten, entweder über Platzhalter oder über eine dynamisch erstellte Collection. Dokumentation lesen
Zwischen aktueller Auswahl und ORDA vor und zurück wechseln
Sie können ORDA in Ihren vorhandenen Code integrieren. Die aktuelle Auswahl einer Tabelle lässt sich über eine Entity-Selection aktualisieren und aus der aktuellen Auswahl einer Tabelle lässt sich eine Entity-Selection erhalten. Dafür verwenden Sie die neu hinzugefügten Befehle: USE ENTITY SELECTION zum Aktualisieren der aktuellen Auswahl in der entsprechenden Tabelle und Create entity selection zum Erhalten der Entity-Selection, die mit der entsprechenden DataClass verbunden ist. Dokumentation lesen
In Entities, Objekte und Collections konvertieren
Sie können Entities und Entity-Selections von der Datenbank trennen, um separat damit zu arbeiten, und umgekehrt auch vorhandene Objekte und Collections in die Datenbank setzen. Mit der Methode toObject() exportieren Sie eine Entity in ein Objekt; mit der Methode toCollection() exportieren Sie eine Entity-Selection in eine Collection. Zum Importieren einer Entity via Objekt wählen Sie die Methode fromObject(), zum Importieren einer Entity-Selection via Collection wählen Sie die Methode fromCollection(). Dokumentation lesen
Sperrverfahren
Entities in der Entity-Selection verwalten
ORDA bietet einfache Methoden, um Entity-Selections zu erstellen bzw. hinzuzufügen, und um innerhalb von Selections durch die Entities zu navigieren. Auf diese Weise können Sie mehrere Entity-Selections gleichzeitig verwalten und unabhängig voneinander darin navigieren. Mit der Methode newSelection() erstellen Sie die Entity-Selection, mit der Methode add() fügen Sie weitere Entities hinzu. Über die Methoden first() und last() der Entity-Selection erhalten Sie die erste und letzte Entity, über die Methoden previous() und next() erhalten Sie die vorige und nächste Entity. Dokumentation lesen
Logische Operationen in Entity-Selections
Analog zur klassischen Programmiersprache gibt es auch für Entity-Selections spezifische Methoden, um direkt die Schnittmenge, Gesamtmenge oder Differenz zwischen zwei Entity-Selections zu bestimmen. Dokumentation lesen
Berechnungen in Entity-Selections
Über Filter lassen sich die Daten in Entity-Selections auch kanalisieren und Berechnungen durchführen. So gibt z.B. die Methode sum() die Summe aller Werte eines bestimmten Attributs zurück. Weitere Berechnungen können Sie über die Methoden average(), count(), min() und max() ausführen. Dokumentation lesen
4D Programmiersprache
Hier sehen Sie die bedeutendsten Verbesserungen in der 4D Programmiersprache, die das Erstellen von Code um einiges leichter und intuitiver machen:
Dieses Feature verändert drastisch, wie Sie Code schreiben und die Datenbank-Engine verwenden. Objektnotation macht Ihre Programmierung schneller und verständlicher. Sie können beispielsweise einfach schreiben $myobject.attribute.subattribute:=5 oder mit $person.children[2].firstname auf ein Attribut zugreifen. Sie können Objektnotation auch als Ausdruck verwenden, beispielsweise ein Formularobjekt als Textvariable verwenden und direkt das Objektattribut zuweisen, zum Beispiel [person]relatives.grandfather.grandfather.firstname. Sie müssen nicht länger OB Get rekursiv verwenden, um den Wert zu lesen und einer temporären Variablen zuzuweisen, nur um ihn anzuzeigen. Ein weiterer Vorteil ist die Verwendung undefinierter Eigenschaften und Werte, denn die 4D Sprache akzeptiert nun undefinierte Werte überall in einem Ausdruck. Und immer wenn Sie einer Variablen einen undefinierten Wert zuweisen, wird sie entsprechend ihrem Typ auf einen Standardwert gesetzt. Das Lesen der Eigenschaft eines nicht existierenden Objekts erzeugt weder einen Fehler, noch stoppt es die Ausführung von Code. Dokumentation lesen
Mit Shared Objects und shared Collections lassen sich Informationen zwischen preemptive Prozessen auf einfache und effiziente Weise teilen. Sie verhalten sich wie Standardobjekte und müssen nur beim Setzen einer Instanz über die beiden neuen Funktionen New shared object und New shared collection als “shared” deklariert werden. Dann lassen sie sich, wie jede andere Variable, direkt zum Lesen verwenden. Zum Schreiben oder Ändern müssen sie in die Struktur Use und End use eingebettet werden. Dokumentation lesen
Neue Struktur: For each/ End for each
In der 4D Programmiersprache gibt es die neue Schleife For each / End for each, um fortschrittliche Datentypen wie Collections zu durchlaufen, ohne vorab zu wissen, wieviel Einträge zu einer Collection gehören. Diese Schleife lässt sich auch für Objekteigenschaften verwenden. Sie ist sehr hilfreich, wenn Sie generischen Code schreiben wollen und die Namen von Objekteigenschaften nicht im Voraus kennen. Dokumentation lesen
Collection ist ein neuer Datentyp in der 4D Programmiersprache. Collections sind flexibel und können Ihre Entwicklungszeit beschleunigen. Auf den ersten Blick sieht eine Collection wie ein Array aus. Während jedoch ein Array eine optimierte Liste von Daten desselben Typs ist (Array vom Typ Lange Ganzzahl, Array Text, …), ist eine Collection eine Art Container, die eine Liste unterschiedlicher Typen speichert (eine Lange Ganzzahl, dann ein Text, als nächstes eine Zahl, dann ein Bild, ein Objekt und sogar eine andere Collection, etc.) und die den Zugriff mit Objektnotation erlaubt. Die Funktion New collection erstellt eine neue leere oder vorab gefüllte Collection. Und eine ganze Reihe neuer Methoden vereinfachen das Arbeiten mit Collection und Objektnotation. Sie können z.B. Elemente hinzufügen oder entfernen, die Collection sortieren, u.v.m. Es gibt bereits über 40 solcher Methoden, hier eine kleine Auswahl: pop(), push(), concat(), resize(), query(), slice(), … Dokumentation lesen
Mit der neuen Funktion Null können Sie prüfen, ob ein Objektattribut oder Element einer Collection einen unbekannten Wert oder keinen Wert hat (Achten Sie auf den Unterschied zwischen dem Wert 0 und einem leeren String “” mit einem nicht gesetzten Wert). Sie können damit auch den Wert eines Attributs auf unbekannt setzen und Objektnotation verwenden. Dokumentation lesen
Entwickeln mit Objekten
Unterstützung von Datum in Objekten
Datumsangaben lassen sich in einem Objekt auch als Datum und nicht nur als String setzen. Das macht die Verwendung von Datum innerhalb von Objekten einfacher und intuitiver. Die Konstante is date ist in OB SET und OB Get nicht mehr erforderlich, und Objektnotation lässt sich wie für andere typische Objekte anwenden. Sie müssen nur in den Datenbank-Eigenschaften auf der Seite Kompatibilität die Option “Verwende Datumstyp statt ISO Datumsformat in Objekten” markieren und schon können Sie Datum auch innerhalb von Objekten verwenden. Dokumentation lesen
Unterstützung von Bildern in Objekten
Bilder lassen sich in einem Feld oder einer Variablen vom Typ Objekt speichern. Die Befehle OB Get und OB SET unterstützen den neuen Typ Is picture. Sie können ein Bild in einem Feld vom Typ Objekt speichern und mit Objektnotation arbeiten. Dokumentation lesen
Es gibt eine neue Option, über die Sie beim Analysieren von JSON Strings Zeit beim Debuggen einsparen können. Der optionale Parameter * von JSON Parse liefert zusätzliche Angaben beim Debuggen (__symbols property) wie Pfad, Zeilenposition und -versatz jeder Eigenschaft und Untereigenschaft des Objekts. Denn, selbst wenn ein Objekt “well formed” ist, erfüllt es u.U. nicht die spezifischen Regeln oder Inhaltsnormen. Mit der neuen Funktion JSON Validate können Sie prüfen, ob die Struktur des Objekts der vorgegebenen Spezifikation entspricht (JSON schema). Dokumentation lesen
Ein Objekt ganz einfach initialisieren
Mit der Funktion New Object können Sie in einer einzelnen Zeile Code ein leeres oder ein vorab gefülltes Objekt erstellen. Dokumentation lesen
Suchen in einer Liste von Elementen in einem einzelnen Objekt
Sie können jetzt in einem Array innerhalb eines Objekts über verknüpfte Argumente suchen. Mit QUERY BY ATTRIBUTE lassen sich in einer Liste von Elementen komplexe Suchläufe in einem einzelnen Objekt ausführen. Suchen Sie in Array Attributen mit mehrfachen Suchkriterien, die mit dem Operator UND verbunden sind, können Sie festlegen, ob Sie die Datensätze erhalten wollen, auf die Argumente in mindestens einem Element oder im selben Element zutreffen. Dokumentation lesen
Datensätze nach Attribut des Objekts sortieren
Über den neuen Befehl ORDER BY ATTRIBUTE können Sie Datensätze nach einen spezifischen Objektattribut suchen, z.B. beim Anzeigen einer Auswahl in einer Listbox. Dokumentation lesen
Mit preemptive Multi-threading kann Ihre Anwendung die Vorteile von multi-core Computern voll ausnutzen. Das beschleunigt Ihre Anwendungen und es können mehr angemeldete Benutzer unterstützt werden. Dafür wurden über 20 vorhandene Befehle angepasst und sind jetzt in preemptive Prozessen verwendbar. Dokumentation lesen
Sie können jetzt dynamische Formulare erstellen und verwenden. Da sie in einem textbasierten Format (JSON) gespeichert werden, erschließen sie eine ganze Reihe neuer Möglichkeiten, wie z.B. Formulare erstellen, die sich vollkommen an den Kontext des Endnutzers anpassen oder mehrere Anwendungen können dasselbe Formular gemeinsam nutzen. Die Textbeschreibung des Formulars lässt sich in einem 4D Objekt oder einer Datei speichern und dann im laufenden Betrieb laden. Die nachfolgenden Befehle wurden ergänzt, so dass ein 4D Objekt oder Pfad zur JSON Datei übergeben werden kann: Open form window, DIALOG, FORM SET INPUT, FORM SET OUTPUT, OBJECT SET SUBFORM, OBJECT GET SUBFORM, FORM LOAD, Print form. Dokumentation lesen
Vereinfachte Kommunikation zwischen den Formularen
Verabschieden Sie sich von komplexem Code und globalen Variablen und binden einfach ein Objekt an ein Formular, das Sie dann intern mit der neuen Funktion Form verwenden können. Dazu müssen Sie nur mit der Funktion DIALOG Parameter in einem Objekt zu einem Formular übergeben. Über Form ist dann jede Eigenschaft dieses Objekts aus dem Formular heraus verfügbar. Das gilt auch für Unterformulare. Dokumentation lesen
Neue Möglichkeiten durch Standardaktionen per Programmierung
Standardaktionen – wie First Record oder color?value=red – lassen sich einer Schaltfläche oder einem Menübefehl in der Benutzeroberfläche oder per Programmierung zuweisen. Einer der Vorteile ist, dass 4D, immer wenn die Aktion nicht anwendbar ist, die Deaktivierung des Menüeintrags oder der Schaltfläche automatisch verwaltet. Die 4D Programmiersprache enthält zwei neue Befehle, über die sich Standardaktionen per Programmierung ganz einfach verwalten lassen:
- INVOKE ACTION dient zum Auslösen einer beliebigen Standardaktion, optional im Zielkontext (aktuelles Formular oder Hauptformular).
- Über Get action info erfahren Sie, ob eine Standardaktion möglich und im aktuellen Kontext gültig ist.
4D 64-bit enthält einen voll optimierten Cache Manager, der die Priorität für Objekte im Cache Speicher automatisch verwaltet. Das sorgt für hohe Effizienz und Performance beim Zugriff auf Daten.
Für fortgeschrittene Anwendung und besondere Fälle können Sie die Priorität im Cache individuell anpassen. Dafür gibt es zwei Gruppen von 4D Befehlen:
- Priorität für die gesamte Sitzung und alle Prozesse definieren: SET TABLE CACHE PRIORITY, SET INDEX CACHE PRIORITY und SET BLOBS CACHE PRIORITY.
- Priorität für den aktuellen Prozess festlegen: ADJUST TABLE CACHE PRIORITY, ADJUST INDEX CACHE PRIORITY und ADJUST BLOBS CACHE PRIORITY.
Sicherheit
In Sicherheitsbelangen macht 4D v17 einen gewaltigen Sprung vorwärts. Hierzu gibt es verschiedene Verbesserungen:
Alle Details zu den eingebauten Tools und Techniken, die zum Erstellen einer abgesicherten Umgebung für Ihre Business-Anwendungen relevant sind, finden Sie in unserem Security Guide.
Sie können für Ihre Web Sites das A+ Ranking (höchste Stufe) von SSL Labs bekommen. Dazu aktivieren Sie einfach HSTS (HTTP Strict Transport Security) auf Ihrem 4D Web Server! Auf diese Weise können Web Server deklarieren, dass Browser nur über gesicherte HTTPS Verbindungen laufen sollen. Ist dieses Feature aktiviert, fügt 4D Web Server in den jeweiligen Kopfteilen der zurückgesendeten Seiten automatisch die Angaben zu HSTS ein. Empfängt ein Browser erstmalig die Antwort des 4D Web Server mit der Angabe HSTS, speichert er dies ab. Alle zukünftigen HTTP Anfragen werden dann automatisch in HTTPS umgeleitet. Mit der Option Web HSTS max age können Sie angeben, wie lange der Browser diese Information speichern soll. Dokumentation lesen
Der Einsatz von Perfect Forward Secrecy (PFS) erhöht weiter die standardmäßige Sicherheit des 4D Web Server. PFS bietet Ihrer Applikation eine bessere Übereinstimmung mit einigen Sicherheitsvorkehrungen im Netzverkehr, sowie ein höheres Ranking bei audit Tests zur Web Sicherheit. PFS ist automatisch aktiviert, wenn TLS auf dem Server aktiv ist. Mit dem Befehl WEB Get server info können Sie sicherstellen, dass PFS aktiviert ist. Der Wert des neuen Attributs perfectForwardSecrecy ist wahr, wenn alle für PFS erforderlichen Bedingungen erfüllt sind. Beachten Sie, dass der RC4 Algorithmus aufgrund einiger bekannter Sicherheitsmängel in 4D Web Server jetzt überholt ist. Dokumentation lesen
Verbesserte Sicherheit für 4D Web Server
4D unterstützt Transport Layer Security (TLS v1.0, TLS v1.1 und TLS v1.2), um die verschlüsselte Kommunikation zwischen Clients und Servern zu aktivieren. Die in 4D unterstützte Mindestversion ist standardmäßig TLS v1.2, ältere Versionen werden zurückgewiesen, da sie unsicher sein können. Wollen Sie ältere Browser oder Tools verwenden, die TLS v1.2 nicht unterstützen, können Sie die Sicherheitsebene über den neuen Selector Min TLS version für die Befehle Get database parameter und SET DATABASE PARAMETER herabsetzen. Dokumentation lesen
Der Hash-Mechanismus ist ideal zum Speichern sicherer Kennwörter. Es gibt zwei neue Befehle zum Generieren und Prüfen sicherer Kennwort-Hash: Generate password hash und Verify password hash. Sie basieren auf dem Algorithmus bcrypt, der gezielt verlangsamt, so dass brute force Attacken zuviel Zeit beanspruchen und zu teuer werden. Dokumentation lesen
Die Digest Funktionen sind von Vorteil, wenn beim Datenaustausch oder bei Vergleichen die Datenintegrität geprüft wird. Die Funktion Generate digest wurde erweitert und unterstützt jetzt SHA-2, und zwar die beiden Algorithmen SHA-256 und SHA-512. Die Syntax bleibt gleich, hinzugefügt wurden die beiden Konstanten SHA256 digest und SHA512 digest. Dokumentation lesen
Standardmäßig letztes Backup wiederherstellen, wenn Datenbank beschädigt
Um Ihre Daten vor Beschädigung zu schützen, ist für neue Datenbanken standardmäßig die Option “Letztes Backup wiederherstellen, wenn Datenbank beschädigt” in den Datenbank-Eigenschaften auf der Seite Backup markiert. Das schützt Ihre Daten besser, wenn Unregelmäßigkeiten auftreten. Dokumentation lesen
4D Write Pro
Sie wissen sicher schon, dass 4D Write Pro komplett neu geschrieben wurde und das veraltete Plug-In 4D Write ersetzt. Der Satz Funktionen beschränkt sich aber nicht darauf, die Möglichkeiten von 4D Write abzudecken. Vielmehr bot Neuschreiben die Gelegenheit, neue Features hinzufügen, was im Plug-In nicht möglich war. Als Ergebnis übertrumpft 4D Write Pro das bisherige 4D Write in vielen Bereichen. Hier sehen Sie einen Überblick:
Mehrspaltige Dokumente erstellen
Sie können mit 4D Write Pro Dokumente mit mehrenen Spalten erstellen und Ihre vorhandenen mehrspaltigen 4D Write Dokumente konvertieren. Die Befehle WP SET ATTRIBUTES und WP GET ATTRIBUTES wurden entsprechend angepasst und unterstützen neue Attribute für Spalten:
- wk column count: definiert die Anzahl der Spalten für das Dokument oder den Ausschnitt
- wk column spacing: definiert den Abstand zwischen zwei Spalten
- wk column rule style, wk column rule color, wk column rule width: definieren Stil (gepunktet, gestrichelt, etc.), Farbe und Breite des vertikalen Spaltentrenners.
Die aktuelle Position innerhalb eines 4D Write Pro Dokuments erhalten
In 4D Write Pro ist die neue Funktion WP Get position verfügbar. Sie gibt in einem bestimmten Ausschnitt, Element oder einer Referenz eine Variable vom Typ Objekt mit fünf wichtigen Positionsangaben zurück: Nummer des zutreffenden Ausschnitts, Nummer der Seite, der Spalte, der Zeile und sogar die Position des ersten Zeichens in diesem Ausschnitt. Dokumentation lesen
Per Programmierung auf Elemente in 4D Write Pro zugreifen
Die Funktion WP Get elements gibt eine Collection mit verschiedenen Elementtypen zurück (Absätze, Tabellen, Bilder, etc.). Wird ein typisierter Bereich übergeben, gibt sie eine Collection zurück, die nur Referenzen auf Elemente dieses Typs enthält. Sonst erhalten Sie eine Collection mit allen verfügbaren Elementen, unabhängig vom Typ. Dokumentation lesen
Text einfügen ist ganz einfach
Mit dem Befehl WP SET TEXT können Sie mühelos Text an eine bestimmte Stelle im Dokument setzen. Er funktioniert wie die meisten 4D Write Pro Befehle zum Einfügen. Er verwendet drei Elemente: das Objekt Ausschnitt (wo der Text eingefügt werden soll), den Text selbst und eine Konstante, die definiert, ob der Text am Anfang oder Ende des Ausschnitts eingesetzt oder ihn ersetzen soll. Dokumentation lesen
Tabellen in 4D Write Pro einrichten und gestalten
Tabellen sind in 4D Write Pro angekommen! Echte Tabellen, individuelle Zellen; geben Sie in eine Zelle einen längeren Text ein, wird er automatisch umgebrochen und die Zellenbreite bleibt gleich. Sie können eine Tabelle von Grund auf neu erstellen, den Stil der Tabelle oder ihrer Spalten, Zeilen und sogar einzelner Zellen ändern, alles per Programmierung.
Mit der Funktion WP Insert table können Sie eine Tabelle mit einer definierten Anzahl Zellen, Zeilen oder leer anlegen. Und es gibt einige Befehle für Tabellen in Ihrem 4D Write Dokument: WP Table append row, WP Table get rows, WP Table get columns, WP Table get cells. All diese neuen Befehle sind thread-safe. Dokumentation lesen
Standardaktionen jetzt auch in 4D Write Pro
Ihre eigene Toolbar mit Standardaktionen gestalten
Sie können in 4D Write Pro Ihre eigene Toolbar einrichten, ganz ohne Programmierung. Der einfache und effektive Mechanismus der Standardaktionen wurde erweitert und ist jetzt auch für Optionsfelder und PopUp-Menüs möglich.
Mit Standardaktionen können Sie die Vorteile von Automatismen nutzen und Zeit einsparen: 4D verwaltet Aktivieren/Deaktivieren von Objekten entsprechend dem Kontext automatisch. So wird der aktuelle Status (für Optionsfelder) bzw. Wert (für PopUp-Menüs) automatisch anhand der aktuellen Textauswahl aktualisiert. Dokumentation lesen
Eigenes Kontextmenü für 4D Write Pro anlegen
Die Funktion Dynamic pop up menu wurde aktualisiert und ermöglicht jetzt, über Standardaktionen in 4D Write Pro eigene Kontextmenüs anzulegen. Dokumentation lesen
Bilder verwalten in 4D Write Pro
Sie haben volle Kontrolle beim Positionieren von Bildern: vor oder hinter dem Text, mit der Seite verankert oder mit bestimmten Teilen, wie Kopfteil, Fußteil, Abschnitt des Dokuments. WP Add picture fügt das Bild auf der Seite hinzu und definiert dann seine exakte Position, sowie andere Eigenschaften. Sie können entweder Standardaktionen verwenden oder den Satz Selektoren, der in den Befehlen WP GET ATTRIBUTES und WP SET ATTRIBUTES hinzugefügt wurde. Dokumentation lesen
Unterstützung von Bildausdrücken
Mit dem Befehl ST INSERT EXPRESSION können Sie 4D Ausdrücke einfügen, die ein Bild in 4D Write Pro zurückgeben. Das kann eine Variable, Funktion, ein Feld oder eine benutzerdefinierte Methode sein. Rufen Sie eine 4D Methode als Ausdruck auf, beachten Sie, dass sie zuvor mit dem Befehl SET ALLOWED METHODS aktiviert wurde. Dokumentation lesen
Hintergrundbilder bis zum Druckrand
In 4D Write Pro können Sie Hintergrundbilder setzen, die den gesamten druckbaren Bereich ausfüllen. Das ist über spezifische Hintergrundattribute möglich, die Startpunkt und Bildrand definieren. Sie haben verschiedene Möglichkeiten:
- 4D Programmiersprache: Sie verwenden WP SET ATTRIBUTES und setzen für Positionierung und Zeichenbereich des den neuen Selector wk paper box.
- Standardaktionen: Sie verwenden den Befehl INVOKE ACTION oder führen die entsprechende Standardaktion im Designmodus aus.
- 4D Write Pro Widget: Sie wählen Sie im Kontextmenü “Dokument” den Eintrag “Hintergrund>Begrenzung>Papierrand”.
Kopf- und Fußteile per Programmierung steuern
Kopf- und Fußteile in 4D Write Pro lassen sich per Programmierung steuern, um andere Dokumente zu erstellen, die auf einer Vorlage basieren. Dafür gibt es neue Befehle, die in zwei Kategorien gegliedert sind:
- Befehle, um Referenzen auf Kopf-, Fuß- oder Hauptteil im Dokument zu erhalten, um die entsprechenden Ausschnitte zu erhalten oder für einen spezifischen Abschnitt zu verwenden: WP Get header, WP Get body und WP Get footer.
- Befehle, die den Cursor an eine bestimmte Position setzen: WP Get frame liefert eine Referenz auf den Rahmen, in dem der Cursor sich gerade befindet, WP SET FRAME setzt den Cursor in einen bestimmten Rahmen.
Hyperlinks in 4D Write Pro setzen
Mit dem Attribut wk link url können Sie einen Link zu Ihrem Firmenlogo oder Firmennamen setzen. Über die Befehle WP SET ATTRIBUTES und WP GET ATTRIBUTES lassen sich Hyperlinks für Bilder, Text oder einer Kombination aus beiden hinzufügen. Dokumentation lesen
Führende Zeichen für Tabulatoren verwenden
Sie können in 4D Write Pro führende Zeichen bei Tabulatoren setzen, die Ihr Design weiter verbessern. Das können sich wiederholende Punkte, Striche oder Sternchen in einer Tabellenzeile sein. Sie lassen sich entweder über das Kontextmenü setzen, wenn Sie im Lineal auf einen gesetzten Tabulator klicken oder per Programmierung mit dem Befehl WP SET ATTRIBUTES und dem neuen Selector wk tab stop leadings Dokumentation lesen
Horizontales Lineal in 4D Write Pro
Mit dem horizontalen Lineal in einem 4D Write Pro Bereich können Sie Ränder und Einrückungen im Dokument anpassen, sowie Text, Grafiken, Tabulatoren und andere Elemente horizontal ausrichten. Dokumentation lesen
Dokumente in 4D View Pro konvertieren
Der erste Schritt zum Konvertieren Ihrer vorhandenden 4D View Dokumente in 4D View Pro ist gemacht. Mit der neuen Funktion VP Convert from 4D View werden die meisten Eigenschaften und Informationen, die in 4D View gespeichert sind, automatisch konvertiert. Das gilt für die Struktur des Dokuments, Werte, Formate, Stilarten, Ränder und Formeln. Dokumentation lesen
Mit dem neuen 4D View Pro Formularobjekt und den neuen Befehlen können Sie 4D View Pro Bereiche mit Tabellenkalkulation einrichten. Sie erstellen ein neues Dokument mit VP NEW DOCUMENT, sichern es auf der Festplatte mit VP EXPORT DOCUMENT oder in der Datenbank mit VP Export to object und öffnen es erneut mit VP IMPORT DOCUMENT oder VP IMPORT FROM OBJECT. Dokumentation lesen
Automatische Zeilenhöhe in Listboxen
4D View Pro unterstützt die automatische Variable Zeilenhöhe, d.h. die Listbox passt die Höhe jeder Zeile an ihren Inhalt an, so dass Text oder Bild vollständig angezeigt werden und nicht Teile davon abgeschnitten werden. Dafür gibt es in der Eigenschaftenliste drei Eigenschaften: Automatische Zeilenhöhe, Min Zeilenhöhe und Max Zeilenhöhe. Damit können Entwickler für eine Listbox den Modus automatische Zeilenhöhe definieren und zusätzlich Werte für die Mindest- und Maximumhöhe der Zeilen festlegen.
Diese Einstellungen lassen sich mit LISTBOX SET PROPERTY und dem neuen Befehl LISTBOX SET AUTO ROW HEIGHT auch per Programmierung steuern. Dokumentation lesen
Information zu Hard- und Software des Rechners
Die Funktion Get system info liefert alle Details zur Hard- und Software des eingesetzten Rechners, also welches Betriebssystem verwendet wird, welcher bzw. welche Prozessoren, wieviel RAM verfügbar ist, u.v.m. Dokumentation lesen
Ausführliche Information zum 4D Web Server
Die Funktion WEB Get server info liefert detaillierte Angaben zum eingesetzten 4D Web Server. Der optionale Parameter CacheInfo ist hilfreich, wenn Sie Angaben zum Web Cache benötigen. Da dies u.U. sehr umfangreich sein kann, ist er standardmäßig auf “Falsch” gesetzt. Dokumentation lesen
Ausführliche Information über Benutzer und Prozesse
Die Funktion Get process activity gibt eine Momentaufnahme (snapshot) der verbundenen Benutzersitzungen, der dazugehörigen laufenden Prozesse und aller aktuellen Prozesse zurück, d.h. auch interne Prozesse, die durch den Befehl PROCESS PROPERTIES nicht erreichbar sind. Über die Eigenschaft systemID können Sie jeden Prozess identifizieren, also ob es ein Benutzerprozess, ein 4D oder ein wartender Prozess ist. Anhand der Angaben zu Sitzung/Prozess können Sie auch die vom Prozess verbrauchte CPU Zeit seit dem Sitzungsbeginn (in Sekunden) und die Aktivität in Prozent (z.B.: 2%) berechnen. All diese Angaben machen das Analysieren der Ergebnisse übersichtlicher und einfacher. Dokumentation lesen
Die Funktion Get license info gibt detaillierte Informationen zu den installierten und den benutzten bzw. verfügbaren Lizenzen zurück. Dokumentation lesen
Bessere Verwaltung von Datei- und Ordnerpfaden
Zwei neue Funktionen vereinfachen die Verwaltung von Datei- und Ordnerpfaden. Path to object gibt ein Objekt mit den spezifischen Eigenschaften des Parameters Pfad zurück (Verzeichnisinfo, Datei- oder Ordnername, Datei- oder Ordnerendung). Object to path erstellt einen Pfad anhand der Angaben im Parameter PfadObjekt. So können Sie problemlos einen neuen Pfad zusammenzustellen, denn Sie müssen nur die entsprechenden Attribute im angegebenen Objekt ändern und neu kombinieren. Dokumentation lesen
Zugriff auf einzelne Logbücher
Die Funktion Get 4D file bietet besseren Zugriff auf Logbücher. Sie finden nun leicht ein bestimmtes Logbuch und nicht nur den Ordner mit allen Logbüchern. Dafür steht ein Satz neuer Selectoren zur Verfügung: Request log file, Debug log file, Backup log file, Verification log file, Compacting log file, Repair log file, HTTP debug log file und Build application log file. Dokumentation lesen
Timestamp gibt die aktuelle UTC Zeit (Weltzeit) inkl. Millisekunden zurück. Dokumentation lesen
Code automatisch vervollständigen und Vorschläge für Objektattribute
Der Methodeneditor bietet “autocomplete” auch für Objektattribute. Setzen Sie nach dem Objekt einen Punkt, erscheint eine Liste mit vorgeschlagenen Attributen. Das beschleunigt Schreiben von Code und vermeidet Tippfehler. Auf der Seite Methoden der 4D Einstellungen können Sie für “autocomplete” einstellen, ob Sie einen Vorschlag aus der Liste per Tab gleich mit passendem Begrenzer, wie (; [ übernehmen (Option markiert) oder nur per Tab, um Begrenzer selbst einzugeben (Option nicht markiert). Dokumentation lesen
4D Windows Produktreihe in 64-bit ohne Altura
Die gesamte 4D Windows Produktreihe in 64-bit enthält nicht mehr die Library Mac2Win von Altura. Der letzte noch fehlende Teil war 4D Server Windows 64-bit, der seit 4D v16 R4 verfügbar ist. So kann 4D intern moderne Technologien auf Windows verwenden, und Sie können die Vorteile neuer Funktionalitäten nutzen, wie z.B. SDI. Dokumentation lesen
4D Windows Applikationen hatten in der Regel ein graues Hauptfenster (genannt MDI – Multiple Document Interface), in dem alle enthaltenen Fenster vom Hauptfenster abhängen. Im Gegensatz dazu haben SDI (Single Document Interface) Anwendungen ein Hauptfenster, das viele weitere Fenster öffnen kann, die vom Hauptfenster unabhängig sind. Sie lassen sich auf andere Bildschirme ziehen, bleiben auch bei ausgeblendetem Hauptfenster sichtbar, usw.… In 64-bit Anwendungen unter Windows mit einkompilierter Engine sind jetzt beide Modi möglich. Dokumentation lesen
Mit dem Befehl SET DATABASE PARAMETER können Sie alle Hilfetipps in einer 4D Anwendung per Programmierung aktivieren bzw. deaktivieren und auch eine verzögerte Anzeige oder maximale Dauer der Anzeige definieren. Das ist aber noch nicht alles, denn mit dem Befehl OBJECT SET HELP TIP können Sie den Text eines Hilfetipps dynamisch ändern. Der Befehl LISTBOX GET CELL POSITION unterstützt zwei neue optionale Parameter (x und y Position, in Pixels) und gibt die entsprechende Spalten- und Zeilennummern zurück, so dass Sie Hilfetipps in eine Spalte, Zeile oder bestimmte Zelle einer Listbox setzen können. Dokumentation lesen
Eingabereihenfolge im Formular per Programmierung definieren
Definieren Sie die Eingabereihenfolge der Objekte in einem Formular per Programmierung, können Sie steuern, welches Formularobjekt als nächstes den Fokus hat, wenn der Benutzer die Tabulatortaste drückt. Mit den neuen Befehlen FORM SET ENTRY ORDER und FORM GET ENTRY ORDER können Sie die Eingabereihenfolge der aktuellen Formularobjekte für den aktuellen Prozess dynamisch setzen und erhalten. Dokumentation lesen
Ergebnisse von “Suche in Struktur” exportieren
Das Dialogfenster “Suche in Struktur” hat im Ergebnisfenster zwei neue Funktionalitäten erhalten und macht Suchen noch leistungsstärker. Es gibt eine neue Schaltfläche, um eine laufende Suche zu unterbrechen. Über das Menü Optionen können Sie wählen, welche Suchergebnisse Sie beibehalten wollen und alle anderen Einträge außer diese Auswahl entfernen. Die Ergebnisse der Operation “Suche in Struktur” erscheinen in einer hierarchischen Liste. Sie können die Suchergebnisse in eine Textdatei exportieren und später z.B. in einer Tabellenkalkulation öffnen. Dazu wählen Sie einfach im Menü Optionen den neuen Eintrag Exportiere Ergebnisse. Auf diese Weise können Sie die Ergebnisse leicht speichern und teilen. Dokumentation lesen
Farbe für ausgewählte Zeilen in Listboxen selbst definieren
Sie können die Farbe der Auswahlmarkierung selbst steuern, für jede einzelne Zeile und sogar pro Zelle. Dafür gibt es in der Eigenschaftenliste für Listboxen die neue Option Auswahlmarkierung ausblenden. Ist sie markiert, muss der Entwickler zuerst die Auswahlen in der Listbox über spezifische Oberflächenoptionen sichtbar machen. Dann kann er eine bestimmte Hintergrundfarbe, Schriftfarbe bzw. Schriftstil per Programmierung definieren und die Darstellung der ausgewählten Zeilen individuell festlegen. Das ist je nach Typ (Auswahl oder Array) der angezeigten Listbox für Arrays oder Ausdrücke möglich. Dokumentation lesen
Fenster Tabs im Designmodus auf macOS Sierra
Auf macOS Sierra können Anwendungen Fenster Tabs anstelle mehrfacher Fenstern verwenden, was besonders bei kleinen Bildschirmen hilfreich ist. Die 4D Developer Edition in 64-bit kann Apple’s neues Feature im Designmodus nutzen. Die neue Option Fenster Tabs (nur macOS) ist in den 4D Einstellungen verfügbar. Ist sie aktiviert, werden die Fenster des Methoden- und Formulareditors in einem übergeordneten Fenster gestapelt und lassen sich über Tabs aufrufen. Dokumentation lesen
Kreuztabelle im Schnellberichteditor
Der Schnellberichteditor in 64-bit unterstützt Berichte als Liste und als Kreuztabelle. Das bietet Benutzern mehr Vielfalt beim Gestalten von Berichten, da sie ihren Bericht auch als zweidimensionale Tabelle darstellen können. Außerdem ist es weiterhin möglich, einen mit 4D in 32-bit erstellten Bericht erneut zu öffnen. Dokumentation lesen
Neue Rendering Engine für Web Areas
4D hat in allen 64-bit Versionen die interne Komponente für eingebundene Web Areas auf Blink von Google upgedated. Das ist die aktuellste und modernste Rendering-Engine auf dem Markt, die für mehr Benutzerfreundlichkeit sorgt und neue HTML Features und Technologien unterstützt. Für den Wechsel auf Blink sind keine Änderungen im Code Ihrer Anwendung erforderlich und es gibt keinerlei Auswirkung in Web Areas; alle Befehle und Ereignisse für eingebundene Web Areas funktionieren wie bisher, außer wenige Voreinstellungen, die nicht unterstützt und somit ignoriert werden. Ist in der Eigenschaftenliste für Web Areas die Option Integrierte Web Rendering-Engine markiert, verwendet 4D WebKit auf 32-bit Versionen und Blink auf 64-bit Versionen. Dokumentation lesen
R-Releases zum Vertiefen