4D Doc Center : 4D v15 - Upgrade (Standard Edition)

Werbung
4D v15 - Upgrade (Standard Edition)
Willkommen zu 4D v15. Dieses Handbuch beschreibt alle Funktionen und Neuerungen für dieses Major Release von 4D.
4D v15 ist ein entscheidender Schritt im Entwicklungsprozess, um 4D Anwendungen in neue Technologien zu integrieren, die sowohl
Hardware als auch Software betreffen. Sie bietet außerdem viele von der 4D Entwicklergemeinde erwartete Funktionalitäten:
Neuer Datenfeldtyp "Objekt" zum Definieren dynamischer Felder.
Zahlreiche Optimierungen, wie Suchen über die SQL Engine und sortierte Arrays, neue Netzwerkschicht ServerNet,
angehobene Ebenen für Netzwerksicherheit, erweiterte Unterstützung für Unicode, etc.
Neue Features, die 4D Code von lokalen Einstellungen unabhängig machen (Unicode Modus und internationaler Modus für
Methoden),
Einstieg in neue Technologien: 4D Mobile zur Anbindung an Wakanda Applicationen, LDAP zur Anbindung an
Unternehmensverzeichnisse, neue 4D Tags als Alternativen zu XSLT Technologie, die aufgegeben wird.
Viele neue Befehle und Funktionen zum Verwalten von Formularen und ihren Objekten (z.B. Listboxen), die beim Gestalten
moderner und dynamischer Oberflächen wertvolle Unterstützung bieten.
Neues integriertes Objekt 4D Write Pro zum Editieren und für Textbearbeitung
Features zum Überwachen und Introspection von Code und Suchen.
Neue OS X 64-bit Versionen: 4D v15 liefert nicht nur die 64-bit Version für 4D Server auf OS X (Vorabversion), sondern auch
für 4D Internet Commands, 4D Pack, 4D For OCI, 4D ODBC Pro und 4D ODBC Driver. So können Sie eine vollständige
Umgebung auf den leistungsstärksten Apple Rechnern einsetzen. Beachten Sie jedoch, dass 4D Server 64-bit für OS X als
Vorabversion geliefert wird und nicht empfohlen wird, sie in einer Produktionsumgebung einzusetzen.
Hinweis: Wenn Sie am kontinuierlichen Lieferprogramm von 4D in Form vom R-Releases teilnehmen, hatten Sie bereits
Gelegenheit, mehrere progressive Updates für Ihre 4D Applikationen durchzuführen. Dann ist diese Version einfach ein weiteres
neues Release. Verwenden Sie z.B. v14 R5, haben Sie bereits alle neuen Features, die in diesem Handbuch mit "v14 Rx"
gekennzeichnet sind und aus den Upgrade Handbüchern der bisherigen R-Releases stammen. In diesem Fall genügt es, wenn Sie nur
das Handbuch 4D v15 - Upgrade (R-Release Edition) lesen.
Designmodus
Programmiersprache
4D Server
4D SQL Server
Optimierungen
4D Write Pro
4D Internet Commands
4D View
4D SVG
4D Pack
Neues Kapitel LDAP Befehle
Alphabetische Liste der Befehle
-1-
Designmodus
Erweiterte Command Line Interface
Datenfeldtyp Objekt
Index für einmalige Felder zwingend
Formulare
Überholte Befehle jetzt ausgeblendet
Unicode Modus für Methoden
Englisch-Einstellungen im Methodeneditor
Debugger and Runtime Explorer
Sucheditor
Standard Datendatei in doppelklickbaren Anwendungen
-2-
Erweiterte Command Line Interface
Eingeführt mit 4D v14 R3
Die Steuerung von 4D Programmen über Befehlszeilen, die bisher nur auf OS X unterstützt wurde, wurde erweitert. Sie funktioniert
jetzt für Mac OS X und Windows. Hier ein Beispiel für Windows:
%HOMEPATH%\Desktop\4D\4D.exe --structure %HOMEPATH%\Documents\myBase.4dbase --data
%HOMEPATH%\Documents\data\myData.4DD
-3-
Datenfeldtyp Objekt
Ab 4D v15 wird in der 4D Datenbank Engine der neue Feldtyp Objekt unterstützt.
Seit 4D v14 können Sie bereits Objekte in Ihren 4D Anwendungen verwalten, jedoch nur per Programmierung (siehe Objekte
(Sprache)). Mit dem Datenfeldtyp Objekt können Sie jetzt folgendes ausführen:
Objekte in der Datendatei speichern
Attribute von Objekten dynamisch hinzufügen, ändern oder entfernen
Objekte nach Attributen suchen
Objektwerte, etc. importieren/exportieren
Hinweis zur Implementierung: Einige Funktionalitäten werden derzeit noch nicht mit Datenfeldern vom Typ Objekt unterstützt (siehe
unten Liste im Abschnitt Aktuelle Einschränkungen).
Warum Felder vom Typ Objekt verwenden?
Mit Datenfeldern vom Typ Objekt lassen sich dynamische Felder ohne Schema definieren, d.h. sie sind sozusagen benutzerdefinierte
bzw. eigene Felder. In 4D v15 können Sie im Datenmodell jetzt zwischen Feld mit bzw. ohne Schema wählen. Beide Fälle erlauben
rasche indizierte Suchen.
Darüberhinaus können Objektfelder standardmäßige Datenmodelle vereinfachen. So sorgt z.B. ein Objektfeld in einer klassischen
Tabelle "Kontakte" dafür, dass nicht dutzende Felder mit allen möglichen Werten angelegt werden - und in 90% der Fälle meist
unbenutzt bleiben. Das Informationsmodell wird von Fall zu Fall on-the-fly erstellt.
Definition Objektfeld
Der neue Datenfeldtyp Objekt lässt sich wie jeder andere Datentyp im Inspektorfenster des Struktureditors setzen:
4D Objektfelder speichern verschiedene Arten von Eigenschaft/Wert Paaren ohne vordefiniertes Datenschema. Die gespeicherte
Datenstruktur zwischen verschiedenen Datensätzen ist nicht zwingend dieselbe. So kann z.B. ein Objektfeld [Person]Adresse je nach
Stadt, Land, etc. verschiedene Eigenschaften haben:
record1= {"street1":"Cotton Treasure Grounds", "street2":"Place Corners", "state":"MD",...} record2=
{"street1":"Umber Road", "Number":"28", "state":"MO",...}
Die Struktur von 4D Objekten basiert auf dem klassischen Prinzip "Eigenschaft/Wert" Paare. Die Syntax dieser Objekte basiert auf
einer JSON Notation, folgt ihr aber nicht komplett:
Eine Eigenschaft Name ist immer ein Text, z.B. "Name".
Eine Eigenschaft Wert kann von folgenden Typ haben:
Zahl (Zahl, Ganzzahl, etc.)
Text
Array (Text, Zahl, Lange Ganzzahl, Ganzzahl, Boolean, Objekt, Zeiger)
Null
Boolean
-4-
Zeiger (als solcher gespeichert, wird beim Verwenden der Funktion JSON Stringify oder beim Kopieren bewertet),
Datum (Iso-Format "YYYY-MM-DDTHH:mm:ssZ")
Objekt (Objekte können in mehrere Stufen verschachtelt sein)
Warnung: Beachten Sie, dass Namen von Eigenschaften zwischen Klein- und Großschreibung unterscheiden.
Ein Objektfeld kann bis zu 2 Gigabyte groß sein. Arbeiten Sie mit einem Datensatz, der ein Objektfeld enthält, wird das gesamte
Objekt in den Speicher geladen. Objektfelder lassen sich wie Felder vom Typ Text, Bild oder BLOB in der Datendatei speichern
(innerhalb oder außerhalb des Datensatzes) oder außerhalb der Datendatei; weitere Informationen dazu finden Sie im Abschnitt
Daten extern speichern des Handbuchs 4D Designmodus.
Ein Objektfeld kann indiziert sein (nur Option Automatisch), d.h. alle Attributpfade sind automatisch indiziert. Es kann auch
Unsichtbar sein oder die Option Mit 4D Mobile Service veröffentlichen haben. Dagegen ist die Eigenschaft Einmalig nicht
möglich.
Sie verwenden Befehle aus dem Kapitel Objekte (Sprache) zum Verwalten von Objektfeldern. Mit den Befehlen OB Get und OB SET
lesen Sie Daten aus und schreiben Daten in Objektfelder. Über die Befehle OB SET ARRAY und OB GET ARRAY können Sie
Arrays auch als Eigenschaften speichern und lesen.
Da Objektfelder auf Text basieren, wird der Inhalt eines Objektfeldes in einem 4D Formular standardmäßig als Text angezeigt und in
JSON formatiert (siehe nächster Abschnitt).
Hinweis: Zum Arbeiten mit JSON Objekten können Sie die Befehle aus dem Kapitel "JSON" verwenden.
Objektfelder in Formularen anzeigen und eingeben
Objektfelder werden standardmäßig als Textfelder in 4D Formularen angezeigt. In diesen Bereichen müssen Objektdaten entweder
undefiniert oder als JSON Text definiert sein, andernfalls wird ein Fehler zurückgegeben.
Haben Sie z.B. das Feld [Rect]Desc als Objektfeld definiert, können Sie schreiben:
CREATE RECORD([Rect])
[Rect]Name:="Blue square"
OB SET([Rect]Desc;"x";"50";"y";"50";"color";"blue")
SAVE RECORD([Rect])
Wird das [Rect]Desc Feld in Ihr Formular eingebunden, erscheint folgender Inhalt:
Sie können angezeigte Werte direkt im Textfeld anzeigen oder Objektdaten direkt mit der standardmäßigen Objekt Notation
eingeben. Drücken Sie die Tabulatortaste, werden sie direkt in JSON formatiert:
Machen Sie direkte Eingaben jedoch mit Bedacht, da fehlende oder falsch gesetzte Zeichen in JSON zu einem Fehler beim Parsen
führt und die bearbeiteten Daten nicht gesichert werden:
Es ist in der Regel präziser, Inhalt von Objektfeldern über Befehle der Kapitel Objekte (Sprache) und JSON zu verwalten.
Werte von Objektfeldern setzen oder erhalten
-5-
Alle Befehle im Kapitel Objekte (Sprache) akzeptieren jetzt als ersten Parameter ein Objektfeld (Objekt).
Werte von Objektfeldern werden wie standardmäßige Objekte der Programmiersprache über Befehle aus dem Kapitel Objekte
(Sprache) verwaltet. Zum Beispiel:
// Um einen Wert zu setzen
OB SET([Persons]Identity_OB;"First Name";$firstName)
OB SET([Persons]Identity_OB;"Last Name";$lastName)
// Um einen Wert zu erhalten
$firstName:=OB Get([Persons]Identity_OB;"First Name")
$lastName:=OB Get([Persons]Identity_OB;"Last Name")
Arrays werden ebenfalls unterstützt, zum Beispiel:
ARRAY TEXT($arrGirls;3)
$arrGirls{1}:="Emma"
$arrGirls{2}:="Susan"
$arrGirls{3}:="Jamie"
OB SET ARRAY([Persons]Children;"Girls";$arrGirls)
Unterstützung von Objektfeldern in der Programmiersprache
Die 4D Programmiersprache wurde entsprechend angepasst, um Objektfelder zu unterstützen:
Alle Befehle aus dem Kapitel Objekte (Sprache) unterstützen jetzt Objektfelder als ersten Parameter (Objekt)
Ein neuer Befehl wurde hinzugefügt, um Suchen in Objektfeldern zu verwalten. Weitere Informationen dazu finden Sie im
Abschnitt QUERY BY ATTRIBUTE.
SELECTION TO ARRAY, SELECTION RANGE TO ARRAY und ARRAY TO SELECTION unterstützen Objektfelder über
ARRAY OBJECT Anbindungen.
Selection to JSON und JSON TO SELECTION unterstützen Objektfelder, die automatisch aus oder in JSON konvertiert
werden.
Beachten Sie jedoch, dass folgender 4D Ausdruck zweideutig ist:
Selection to JSON([aTable];objectField)
könnte interpretiert werden als:
- erzeuge JSON aus allen Werten von objectField in der aktuellen Auswahl von table
- erzeuge JSON über den Wert von 'objectField' des aktuellen Datensatzes als Vorlage
4D wählt hier die erste Variante, da dies die gängigste Verwendungsart ist.
Old und Modified unterstützen Objektfelder.
SET FIELD VALUE NULL löscht den Inhalt des Objektfeldes.
GET FIELD PROPERTIES kann jetzt Is object zurückgeben.
PROCESS 4D TAGS unterstützt Objektfelder nur in 4D Formeln.
Beachten Sie jedoch, dass bestimmte Befehle aus technischen Gründen keine Objektfelder unterstützen. Die Liste dieser Befehle
finden Sie im nachfolgenden Abschnitt.
Formeln mit Objektfeldern
Objektfelder lassen sich in Formeln verwenden. Dazu verwenden Sie den standardmäßigen Formeleditor oder den Befehl EXECUTE
FORMULA. In diesem Kontext lassen sich Objektfelder dann aber nur über folgende Funktionen verwalten:
OB Get
OB Is empty
OB Is defined
OB Get type
Sie können z.B. folgende Suchformel ausführen:
OB Get([Rect]Desc;"color")="blue"
-6-
Aktuelle Einschränkungen
Die meisten der standardmäßigen 4D Funktionalitäten unterstützen Objektfelder genauso wie andere Datentypen. Einige
fortgeschrittene Bereiche des Programms sind dagegen im aktuellen Release noch nicht für Objektfelder verfügbar. Diese Bereiche
werden schrittweise erweitert und sind dann in kommenden Releases auch für Objektfelder verfügbar.
Teilweise Unterstützung durch 4D Formeln
Folgende Features oder Befehle unterstützen Objektfelder teilweise über 4D Formeln:
Feature/Befehl
Sucheditor
Sortiereditor
Import-/Exporteditor (automatische Unterstützung für 4D Anwendungsformat, Textformate benötigen Formulare)
4D Write
4D Write Pro
4D View
4D Tags
PROCESS 4D TAGS (mit Objektfeldern außerhalb von 4D Formeln)
Keine Unterstützung
Folgende 4D Features bzw. Befehle unterstützen Objektfelder nicht:
Feature/Befehl
Schnellberichteditor
Etiketteneditor
Diagramme
PHP
SDK Plugin
SQL Data Definition Language (CREATE TABLE)
SQL Data Manipulation Language (SELECT, INSERT, UPDATE)
SQL EXPORT DATABASE und SQL EXPORT SELECTION
DISTINCT VALUES
RELATE ONE
RELATE MANY
ORDER BY
SCAN INDEX
-7-
Index für einmalige Felder zwingend
Eingeführt mit 4D v14 R4
In 4D müssen Felder mit der Eigenschaft Einmalig indiziert werden. Sie können einmalige Felder im Struktureditor nicht mehr ohne
Index definieren. Das war in bisherigen Releases für Wartungszwecke noch möglich.
Der Struktureditor wurde entsprechend angepasst:
Wählen Sie für ein Feld die Eigenschaft Einmalig, zeigt ein Icon im Inspektorfenster an, dass ein Index erstellt wird (falls noch
keiner existiert):
Der Index für ein einmaliges Feld lässt sich nicht entfernen, d.h. Optionen wie Nichts oder Entfernen sind für dieses Feld nicht
verfügbar:
Wollen Sie den Index zu einem einmaligen Feld entfernen, müssen Sie zuvor die Eigenschaft Einmalig deaktivieren.
-8-
Formulare
Neuer Icon für nicht verfügbare Bildformate
Eingeführt mit 4D v14 R3
Für Bilder, die auf dem verwendeten Computer nicht darstellbar sind, ein Ersatzsymbol angezeigt. Die Endung des benutzten
Bildformats wird darunter angezeigt:
Dieses Symbol wird beim Anzeigen von Bildern automatisch dargestellt:
Es gibt an, dass das Bild nicht angezeigt bzw. konvertiert werden kann -- es lässt sich aber speichern und ggf. auf anderen Rechnern
anzeigen. Das ist z.B. bei PDF Bildern auf einer Windows Plattform, PICT-basierten Bildern auf einem 64-bit 4D Server auf OS X
(siehe 4D Server, 64-bit Version für OS X (Preview)) oder mit QuickTime komprimierten Bildern der Fall.
Neue Eigenschaft Eckradius
Eingeführt mit 4D v14 R4
Sie können den Radius für gerundete Ecken im Formularobjekt Rundes Viereck selbst bestimmen. Die Eigenschaft Eckradius
definiert den Radius der gerundeten Ecken.
Hinweis: In bisherigen Versionen war diese Eigenschaft fest eingestellt, der Wert war immer 5 Pixel.
Diese Eigenschaft lässt sich jetzt in der Eigenschaftenliste des Formulareditors über die Option Eckradius (siehe unten) oder über
zwei neue Befehle der 4D Programmiersprache (siehe OBJECT SET CORNER RADIUS und OBJECT Get corner radius)
verändern.
Eckradius
Im Formulareditor ist für runde Vierecke unter der Gruppe "Koordinaten & Größe" jetzt die Eigenschaft Eckradius verfügbar.
-9-
Als Radius ist standardmäßig 5 Pixel vorgegeben. Diesen Wert können Sie an eigene Bedürfnisse anpassen. Hier ein Beispiel:
Der Mindestwert ist 0, in diesem Fall wird das Viereck ohne gerundete Ecken gezeichnet.
Der maximale Wert richtet sich nach der Größe des Vierecks und wird dynamisch berechnet. Er kann maximal halb so lang wie die
kürzere Seite des Vierecks sein.
Längere Namen für Formularobjekte
Eingeführt mit 4D v14 R5
Namen von Formularobjekten können jetzt bis zu 255 Bytes enthalten. Bisher waren sie auf 31 Zeichen begrenzt.
Längere Namen für Formularobjekte bieten mehr Spielraum zum Klassifizieren spezifischer Objekte, wie z.B. "xxxx_Button" oder
"xxx_Mac".
- 10 -
Überholte Befehle jetzt ausgeblendet
Ab 4D v15 erhalten alle überholten (veralteten) 4D Befehle systematisch die Vorsilbe "_o_" und werden aus den 4D Listen, sowie den
Listen mit automatischer Vervollständigung (auto-complete) entfernt.
Hinweis: Die Liste der überholten Befehle in 4D v15 finden Sie im Abschnitt Überholte Befehle mit Vorsilbe gekennzeichnet.
In bisherigen Releases wurden überholte Befehle nicht immer mit "_o_" gekennzeichnet und weiterhin gelistet, was z.T. zu Verwirrung
führen konnte. In 4D v15 lassen sich überholte Befehle nicht mehr auswählen:
Das betrifft folgende Listen:
Seite Befehle im Explorer
Hilfelisten im Methodeneditor (Liste mit Befehlen in alphabetischer Reihenfolge bzw. sortiert nach Themen) und PopUp-Menü
mit automatischer Vervollständigung
Hilfelisten im Formeleditor
In Ihrem bestehenden Code werden überholte Befehle natürlich nicht entfernt. Sie erhalten lediglich die Vorsilbe "_o_" und
funktionieren wie dokumentiert, solange sie noch unterstützt werden. Bei Bedarf können Sie einen überholten Befehl auch in Ihrer
Methode hinzufügen. Sie müssen nur seinen Namen schreiben, er wird dann korrekt interpretiert:
Wir raten jedoch davon ab, überholte Befehle in neuem Code zu verwenden. Weitere Informationen dazu finden Sie im Abschnitt
Überholte und entfernte Funktionalitäten.
- 11 -
Unicode Modus für Methoden
In 4D v15 können Sie in 4D Methoden Code-Strings in Unicode sichern:
In Anwendungen, die mit 4D v15 und neuer erstellt wurden, wird der Code der Methode automatisch in Unicode gesichert.
in Anwendungen, die aus einer älteren Version konvertiert wurden, können Sie unter Datenbank-Eigenschaften >
Kompatibilität die Option Sichere Methode in Unicode markieren, um in den Unicode Modus zu wechseln:
Hinweis: Die Änderung wird erst nach Neustart der Anwendung berücksichtigt und gilt nur für anschließend gesicherte
Methoden. Sie können die Option jederzeit aktivieren/deaktivieren.
Warum Code in Unicode sichern?
In bisherigen Releases wurden Code Strings (Formeln, Variablen- und Methodennamen, Kommentare, etc.) von 4D Methoden über
die aktuelle lokale Codierung gespeichert. Das konnte zu Problemen führen, insbesondere wenn Entwickler aus verschiedenen
Ländern den 4D Code gemeinsam nutzten: Wird z.B. 4D Code mit französischen Akzenten oder deutschen Umlauten an einen
englischen Entwickler gesendet, können diese Sonderzeichen verloren gehen. Größere Probleme treten bei Code auf, der mit einer
japanischen Version geschrieben wird.
Solche Probleme entfallen bei Methoden, die in Unicode gesichert werden, und ermöglicht den korrekten Austausch von 4D Code mit
spezifischen landessprachlichen Zeichen.
Wir empfehlen, die Option Unicode Modus für Methoden in Ihren Anwendungen sobald wie möglich zu aktivieren, insbesondere wenn
Sie auf internationaler Ebene arbeiten.
Hinweis zur Implementierung: Die neue Funktionalität gilt für die Sprache selbst und ihre Interpretation. Einige Fenster des 4D
Editors, wie die Eigenschaftenliste, verwenden noch die aktuelle lokale Codierung und zeigen so u.U. manche Strings nicht korrekt an.
Das behindert jedoch nicht die Ausführung von Code.
Kompatibilität
Das Speichern von 4D Methoden in Unicode (in einer neuen 4D v15 Anwendung oder in einer konvertierten Anwendung mit der
markierten Option Sichere Methode in Unicode) ist für Benutzer transparent.
Es waren jedoch interne Änderungen nötig, die die Darstellung von Zeigern in 4D Code grundlegend verändert haben. Neue Zeiger
sind intern besser optimiert und unterstützen auch zusätzliche Features, wie z.B. Elemente von 2D Arrays (siehe RESOLVE
POINTER).
Zur Wahrung der Kompatibilität mit früher kompilierten Komponenten und Plug-Ins wurde in der 4D Programmiersprache nicht der
vorhandene Typ ersetzt, sondern ein neuer Datentyp Zeiger hinzugefügt. Dieser neue Typ wird in Ihren Anwendungen transparent
verwaltet. Sie müssen jedoch auf folgendes achten:
RESOLVE POINTER gibt im vierten Parameter anstelle von 0 den Wert -1 für Zeiger auf Variablen und eindimensionale Arrays
zurück.
Get pointer verhält sich bei ungültigen Variablen oder Extra-Leerzeichen anders.
- 12 -
Englisch-Einstellungen im Methodeneditor
Der 4D Methodeneditor verwendet ab Version 15, unabhängig von der 4D Version oder lokalen Systemeinstellung, standardmäßig
internationale Formate. Das neutralisiert regionale Unterschiede, die beim Austausch von Code zwischen 4D Entwicklern zu
Problemen führen können, wie Datumsformate. Befehls- und Konstantennamen in französischen Versionen erscheinen jetzt in
Englisch.
Diese neue Standardeinstellung bietet 4D Entwicklern zwei bedeutsame Vorteile:
Es vereinfacht die gemeinsame Nutzung von Code zwischen Entwicklern, unabhängig von dem Land, den regionalen
Einstellungen oder der eingesetzten 4D Version. Eine 4D Methode lässt sich einfach per Copy/Paste, oder in einer Textdatei
gesichert, austauschen. Es gibt keine Kompatibilitätsprobleme mehr.
4D Methoden lassen sich in Source-Control Tools einsetzen, die oft Exporte, unabhängig von regionalen Einstellungen und
Programmiersprachen, benötigen.
Der Entwickler kann diese neue Standardeinstellung im Dialogfenster 4D Einstellungen auf der Seite Methoden deaktivieren.
Neue Option in den 4D Einstellungen
Die neue Option Verwende regionale Systemeinstellungen im Dialogfenster 4D Einstellungen auf der Seite Methoden >
Optionen ermöglicht, die "internationale" Einstellung für Code zu deaktivieren:
Ist diese Option deaktiviert (Standard in 4D v15), verwenden 4D Methoden der aktuellen 4D Applikation die Englisch-US
Einstellung.
Ist diese Option markiert, verwenden 4D Methoden der aktuellen 4D Applikation die regionalen Einstellungen wie in den
bisherigen 4D Versionen.
Ändern Sie diese Option, müssen Sie die 4D Applikation neu starten, damit die Einstellung berücksichtigt wird.
Was verändert die Umstellung auf Englisch?
Die neue Standardeinstellung Englisch-US hat verschiedene Auswirkungen auf die Art, Methoden zu schreiben. Das gilt sowohl für
Code, der im Entwicklungsmodus geschrieben wird, als auch für Formeln, die in Anwendungen im Einsatz geschrieben werden.
Es gelten folgende Regeln:
In Zahlen müssen Dezimaltrenner in allen Versionen ein Punkt sein ("."), nicht Kommas (",") unabhängig von der Einstellung des
Betriebssystems.
Datumskonstanten müssen in allen Versionen das ISO Format (!YYYY-MM-DD!) verwenden.
Befehls- und Konstantennamen müssen in Englisch sein (betrifft nur die französischen Versionen von 4D).
Hinweise: Der Methodeneditor enthält spezifische Mechanismen, die inkorrekte Eingaben bei Bedarf automatisch korrigieren:
- Wird auf einem deutschen System bei der Code-Eingabe ein Komma als Dezimaltrenner verwendet, wird es automatisch mit Punkt
ersetzt.
- Eine Datumseingabe im Format !DD.MM.YYYY! wird automatisch umgewandelt in !YYYY-MM-DD!
- Eingaben der Anwender in Felder vom Typ Zahl oder Datum bleiben unverändert.
Nachfolgende Tabelle erläutert die Unterschiede zwischen Code in 4D v15 und in früheren Versionen:
- 13 -
Beispiel für Code in Methoden/Formeln
4D v15 (Standardmodus, alle Versionen)
a:=12.50
b:=!2013-12-31!
Current date
4D v14 oder 4D v15 (Einstellung markiert, alle Versionen außer Französisch) a:=12.50
b:=!12/31/2013!
Current date
4D v14 oder 4D v15 (Einstellung markiert, französische Version)
a:=12,50
b:=!31/12/2013!
Date du jour
Hinweis: Es gibt Unterschiede zwischen 4D v14 und 4D v15, wenn diese Einstellung markiert ist. Die Formate vom Typ Zahl und
Datum richten sich nach den Systemeinstellungen.
Änderungen in französischen Versionen
Einige spezifische Änderungen betreffen nur die französischen Versionen von 4D. Diese verwendeten bisher französische Namen für
die Befehle und Konstanten der Programmiersprache, für die online Hilfe und die Dokumentation.
Weitere Informationen dazu finden Sie in der französischen Version dieses Handbuchs.
Kompatibilität
In Anwendungen, die aus einer früheren 4D Version konvertiert wurden, erfordert die Umstellung auf Englisch für 4D Code in 4D v15
manchmal Anpassungen in Bereichen, wo Code direkt interpretiert wird und nicht tokenized ist, wie z.B. mit EXECUTE FORMULA.
Das betrifft den 4D Entwicklungsmodus und auch Deployment-Produkte, wie 4D im remote Modus und doppelklickbare 4D
Anwendungen.
Nachfolgende Tabelle zeigt die Auswirkungen in 4D v15 Anwendungen, abhängig von der ausführenden Sprache (für andere
Sprachen ist die Auswirkung wie für die US Version):
Features
Editor Formel anwenden
Schnellbericht
4D Write
Auswirkung für
US
In Formeln: Nur
Datumsformat
In Formeln: Nur
Datumsformat
In Formeln: Nur
Datumsformat
4D View
Keine
PROCESS 4D TAGS
Nur
Datumsformat
Nur
Datumsformat
EXECUTE FORMULA
Auswirkung für FR
Auswirkung für DE
In Formeln: Programmiersprache (US) und
Datum/Zeit/Dezimaltrenner
In Formeln: Programmiersprache (US) und
Datum/Zeit/Dezimaltrenner
In Formeln: Programmiersprache (US) und
Datum/Zeit/Dezimaltrenner
In Formeln (bei 4D Befehlen, nicht bei 4D View
Befehlen): Programmiersprache (US)
Befehle (wenn nicht :Cxxx verwendet wird)
Datum/Zeit/Dezimaltrenner
Programmiersprache (US) und
Datum/Zeit/Dezimaltrenner
In Formeln: Datumsformat
+ Dezimaltrenner
In Formeln: Datumsformat
+ Dezimaltrenner
In Formeln: Datumsformat
+ Dezimaltrenner
Keine
Datumsformat +
Dezimaltrenner
Datumsformat +
Dezimaltrenner
METHOD GET
Nur
Programmiersprache (US) und
Datumsformat +
CODE/METHOD SET
Datumsformat
Datum/Zeit/Dezimaltrenner
Dezimaltrenner
CODE
Hinweis: Bei Bedarf können Sie die Option Verwende regionale Systemeinstellungen in den 4D Einstellungen markieren, um
davon abweichend fest regionale Systemeinstellungen zu verwenden. Da die Voreinstellung "Verwende regionale
Systemeinstellungen" lokal für Ihren Rechner gilt, muss sie für jeden Rechner gesetzt werden, auf dem das 4D Programm läuft. Bei
doppelklickbaren Anwendungen müssen Sie die 4D v15 Preference Datei auf jedem lokalen Rechner bearbeiten und den Schlüssel
"use_localized_language" auf "true" setzen.
-
- 14 -
Debugger and Runtime Explorer
Seite Prozess
Eingeführt mit 4D v14 R3
Die Seite Prozess wurde geändert, sie zeigt jetzt folgende Informationen:
Die Liste der Prozesse ist jetzt ähnlich wie die Seite Prozesse des 4D Server Verwaltungsfensters.
Die Werte für ID, Name, Status und Zeit sind gleichgeblieben. Folgende Informationen wurden verändert:
CPU: die grafische Ansicht ist nicht mehr verfügbar. Eine Einfärbung des Hintergrunds zeigt die aktuelle Auslastung des
Prozesses an.
Jedem Prozess ist ein Icon zugeordnet, Farbe und Form kennzeichnen die Art des Prozesses:
Anwendungsserver
SQL Server
DB4D Server (Datenbank Engine)
Web Server
SOAP Server
Geschützter 4D Client Prozess (Prozess für Entwicklungsumgebung eines Client)
4D Client Hauptprozess (Hauptprozess eines Client; unterstützender Prozess, Spiegelprozess eines 4D Client auf dem
Server)
4D Client Basisprozess (Prozess existiert parallel zu einem 4D Client Prozess; präemptiver Prozess zur Kontrolle des
jeweiligen 4D Client Hauptprozesses)
Reserve Prozess (ehemaliger oder zukünftiger "4D Client Prozess")
4D Client Prozess (auf einem Client gestarteter Prozess)
Serverprozedur (von einem Client gestarteter Prozess auf dem Server)
Web Methode (z.B. über 4DACTION gestartet)
SOAP Methode (über einen Web Service gestartet)
SQL Methode (über eine SQL Anfrage gestartet)
Die Leiste mit Schaltflächen am unteren Rand wurde ebenfalls aktualisiert. Anstelle der bisherigen Schaltfläche "Optionen" mit
DropDown Liste erscheinen jetzt drei separate Schaltflächen:
Zähler für gesperrte Datensätze
Eingeführt mit 4D v14 R4
Im Bereich Überprüfung des Runtime Explorer bzw. des 4D Debugger wird jetzt angezeigt, wieviele Datensätze gesperrt sind. Diese
Information ist im 4D Einzelplatz und in 4D Server verfügbar.
- 15 -
4D Debugger:
Liste Current Form Values
Eingeführt mit 4D v14 R4
Im Debugger und Runtime Explorer gibt es die neue Liste Current Form Values. Sie enthält die Namen der dynamischen Objekte im
aktuellen Formular, sowie den Wert der zugeordneten Variable:
Einige Objekte, wie z.B. Listbox Arrays erscheinen mit zwei unterschiedlichen Einträgen: Die Variable des Objekts selbst und ihre
Datenquelle.
Diese neue Liste ist besonders hilfreich bei Formularen mit mehreren dynamischen Variablen: Über die Formularobjektnamen lassen
sich dynamische Variablen leicht identifizieren.
In bisherigen 4D Versionen waren diese in der Liste Variablen/Prozesse enthalten. Hier wurden dynamische Variablen über ihren
internen Namen angegeben, wie z.B. $form.9.8. Dynamische Variablen erscheinen nicht mehr in dieser Liste, sondern nur in der Liste
Current Form Values. Über den Eintrag Zeige Typen des Kontextmenüs können Sie den internen Namen von dynamischen
Variablen weiterhin anzeigen:
- 16 -
Dynamische Variablennamen haben oft die Form "$form.4B9.42":
- 17 -
Sucheditor
Vordefinierte Suchläufe
Der Sucheditor in 4D v15 unterstützt vordefinierte Suchen. Eine vordefinierte Suche enthält, wie eine standardmäßig gesicherte
Suche, die vollständige Definition der Suche mit allen Suchkriterien und kann jederzeit in den Sucheditor geladen werden.
Vordefinierte Suchen lassen sich in Anwendungen im Einsatz einbinden und werden in einem neuen DropDown-Menü des
Sucheditors aufgelistet.
Um eine vordefinierte Suche einzurichten:
1. Erstellen Sie im Ordner Resources Ihrer Anwendung einen Unterordner "Queries".
2. Legen Sie in diesen Ordner die gesicherten Suchdateien, die als vordefinierte Suchen dienen sollen:
Wird im Ordner Resources->Queries mindestens eine .4df Suchdatei zur aktuellen Tabelle gefunden, wird im Sucheditor am Ende
des Bearbeitenmenüs ein neuer Eintrag Laden > angefügt. Das DropDown-Menü zeigt die Einträge der vordefinierten Suchen:
Klicken Sie auf einen Eintrag im DropDown-Menü, wird die entsprechende Suche in den Sucheditor geladen.
Zur Erinnerung: Im DropDown-Menü erscheinen nur die Suchdateien zur aktuellen Tabelle.
Anpassung für japanische Anwender
Der Sucheditor wurde speziell zur besseren Verwaltung von Suchläufen in Japanisch angepasst. Für Suchkriterien und die zuletzt
ausgeführten Suchen wird jetzt eine spezifische Reihenfolge angewendet.
Diese Änderungen betreffen nur die japanische 4D Version.
- 18 -
Standard Datendatei in doppelklickbaren Anwendungen
In 4D v15 wurde das Verwalten von Standard Datendateien in doppelklickbaren Anwendungen geändert (Einzelplatz und
Client/Server):
Entwickler können jetzt beim Erstellen der Anwendung eine standardmäßige Datendatei definieren.
Wird keine Datendatei, aber eine "Standard Datendatei" gefunden, öffnet 4D diese automatisch und stillschweigend im NurLesen Modus.
Auf diese Weise haben Entwickler eine bessere Kontrolle beim Erstellen oder Öffnen der Datendatei, wenn eine doppelklickbare
Anwendung zum ersten Mal geöffnet wird. Das ist besonders in folgenden Fällen von Vorteil:
Beim Starten einer neuen oder aktualisierten doppelklickbaren Anwendung wird nicht das 4D Dialogfenster "Öffne Datendatei"
angezeigt. Sie können beispielsweise in der Datenbankmethode On Startup feststellen, dass die Standard Datendatei geöffnet
wurde und so Ihren eigenen Code ausführen bzw. bestimmte Dialogfenster öffnen, um eine lokale Datendatei zu erstellen oder
auszuwählen.
Doppelklickbare Anwendungen mit Daten im Nur-Lesen Modus ausliefern, z.B. für Demo-Anwendungen.
Standard Datenordner definieren
4D v15 bietet einen einfachen Weg, um eine Standard Datendatei in eine doppelklickbare Anwendung einzubinden, damit sich die
Anwendung auf Rechnern von Endnutzern ohne zusätzliches Dialogfenster installieren und aktualisieren lässt. Um eine Standarddatei
zu definieren:
Legen Sie eine Standard Datendatei mit Namen "Default.4DD an" und speichern diese in einem Ordner mit Namen "Default
Data" innerhalb des Datenbank Package (4dbase). Diese Standard Datendatei muss alle erforderlichen Dateien enthalten:
Index, Journal, externe BLOBS, etc. Der Entwickler muss selbst dafür sorgen, dass die Standard Datendateien funktionsfähig
sind. Da die Standard Datendatei jedoch im Nur-Lesen Modus geöffnet wird, ist es wichtig, vor dem Erstellen der Datendatei
die Option "Benutze Logbuch" in der Original Strukturdatei zu deaktivieren.
Beim Erstellen der Anwendung wird dieser Standard Datenordner in die doppelklickbare Anwendung integriert. Alle Dateien mit
dem Standard Dateiordner werden ebenfalls eingebunden.
Das folgende Diagramm veranschaulicht die Arbeitsweise:
Wird beim ersten Starten ein Standard Datenordner gefunden, wird dieser automatisch im Nur-Lesen Modus geöffnet. Das ermöglicht
Ihnen, beliebige eigene Operationen auszuführen, die die Datendatei selbst nicht ändern.
Neuer Schritt beim Öffnen
Wird eine doppelklickbare Anwendung zum ersten Mal gestartet, versucht 4D, eine gültige Datendatei auszuwählen. In bisherigen
Versionen wurde, wenn keine Standard Datendatei (gleicher Name und gleiche Ebene wie die Datei .4dc) vorhanden war, ein
Standard Dialogfenster "Datendatei öffnen" angezeigt und der Benutzer aufgefordert, die Datendatei im Anwendungsordner zu
erstellen.
In 4D v15 wurde ein neuer Schritt in den Ablauf beim Öffnen eingefügt, damit Entwickler die Vorteile des neuen Feature Standard
Datendatei nutzen können (siehe oben). Die Anwendung öffnet sich jetzt in Schritt 2 ohne das Standarddialogfenster "Öffne
Datendatei", so dass Entwickler hier passenden eigenen Code ausführen können.
Beim Öffnen einer doppelklickbaren Anwendung passiert jetzt folgendes:
1. 4D versucht, die zuletzt geöffnete Datendatei zu öffnen
2. Wird sie nicht gefunden, versucht 4D, die Datendatei im Standard Datenordner neben der Datei .4DC im Lesemodus zu
öffnen (neu in 4D v15)
3. Wird sie nicht gefunden, versucht 4D, die Standard Datendatei neben der gleichlautenden Strukturdatei zu öffnen
- 19 -
4. Wird sie nicht gefunden, zeigt 4D das Standard Dialogfenster "Öffne Datendatei" an
- 20 -
Programmiersprache
4D Transformation Tags
Application version
DELAY PROCESS
FORM GET OBJECTS
FORM GET PROPERTIES
Geringere Anzahl signifikanter Stellen beim Datentyp Zahl
GET ACTIVITY SNAPSHOT
Get database parameter und SET DATABASE PARAMETER
GET FIELD PROPERTIES
Get pointer
Is licence available
Listbox: Spalten mit dynamischen Variablen erstellen
MAXIMIZE WINDOW
METHOD GET CODE und METHOD SET CODE
Neues Formularereignis On Scroll
Neues Thema LDAP Befehle
OBJECT GET COORDINATES
Objekt Arrays in Spalten von Listboxen (4D View Pro)
OPEN URL (Neuer Name für OPEN WEB URL)
PROCESS 4D TAGS
QR Get text property und QR SET TEXT PROPERTY
RESOLVE POINTER
Toolbar form windows
TRANSFORM PICTURE
Überholte Befehle mit Vorsilbe gekennzeichnet
Unterdatensätze konvertieren
WA GET PREFERENCE und WA SET PREFERENCE
WEB GET OPTION und WEB SET OPTION
WEB SET HTTP HEADER
XSLT Befehle sind überholt
Clickcount
EXPORT STRUCTURE
Find in sorted array
Get database measures
Get locked records info
IMPORT STRUCTURE
LISTBOX GET CELL COORDINATES
METHOD GET ATTRIBUTES
METHOD SET ATTRIBUTES
MOBILE Return selection
OBJECT Get corner radius
OBJECT SET CORNER RADIUS
OPEN DATABASE
QUERY BY ATTRIBUTE
WEB Is server running
- 21 -
4D Transformation Tags
Eingeführt mit 4D v14 R4
Die 4D Transformation Tags (bisheriger Name 4D HTML Tags) wurden erweitert:
das Tag 4DEVAL wurde hinzugefügt
das Tag 4DLOOP unterstützt jetzt als Parameter alle 4D Ausdrücke oder einen Zeiger auf ein Array.
Hinweis: Der Befehl PROCESS 4D TAGS wurde ebenfalls erweitert. Weitere Informationen dazu finden Sie im Abschnitt
PROCESS 4D TAGS.
4DEVAL (neues Tag)
Syntax: <!--#4DEVAL VarName--> oder <!--#4DEVAL 4DExpression-->
Über das neue Tag 4DEVAL können Sie auf eine Variable oder einen 4D Ausdruck zugreifen.
Wie das Tag 4DHTML löst auch 4DEVAL die HTML Zeichen im zurückgegebenen Text nicht auf. Im Gegensatz zu 4DHTML oder
4DTEXT kann 4DEVAL jedoch jede gültige 4D Anweisung ausführen, d.h. auch Anweisungen und Ausdrücke, die keinen Wert
zurückgeben.
Sie können z.B. folgendes ausführen:
$input:="<!--#4DEVAL a:=42-->" //Zuweisung ohne Ausgabe
$input:=$input+"<!--#4DEVAL a+1-->" //Berechnung mit Ausgabe
PROCESS 4D TAGS($input;$output)
//$output = "43"
Wollen Sie 4D Befehle oder Funktionen direkt als Ausdruck verwenden, müssen Sie im Parameter 4DExpression den jeweiligen
Code der Befehlsnummer verwenden. So können Sie sicherstellen, dass der Befehl auch bei geänderten Befehlsnamen in zukünftigen
4D Versionen korrekt erkannt wird. Die Syntax lautet wie folgt: "<command_name>:C<command_number>. Um z.B. Current time
aufzurufen, schreiben Sie "Current time:C178".
Hinweis: Die Befehlsnummer finden Sie im Explorer unter Befehle.
Bei fehlerhafter Interpretation wird der Text in Form von <!--#4DEVAL expression--> : ## Fehler # Fehlernummer” eingefügt.
Hinweis: Sie müssen im Dialogfenster Methode-Eigenschaften die Option "Zugang per 4D Tags und URLs (4DACTION...)"
markieren, damit eine 4D Methode mit 4DEVAL über eine Web Anfrage ausführbar ist. Weitere Informationen dazu finden Sie im
Abschnitt Sicherheit der Verbindung > Zugang per 4D Tags und URLs.
4DLOOP
Das Tag 4DLOOP akzeptiert jetzt zwei weitere Bedingungen (zusätzlich zu Tabelle, Array und Methode): 4D Ausdruck und Zeiger
Array.
<!--#4DLOOP 4DAusdruck-->
Mit dieser Syntax führt das Tag 4DLOOP eine Schleife aus, solange der 4D Ausdruck Wahr zurückgibt. Das kann jeder gültige
Boolean Ausdruck sein und dieser sollte in jeder Schleife einen variablen Part zur Bewertung haben, um unendliche Schleifen zu
vermeiden.
- 22 -
Der HTML Code:
<!--#4DEVAL $i:=0--> <!--#4DLOOP ($i<4)--> <!--#4DEVAL $i--> <!--#4DEVAL $i:=$i+1--> <!-#4DENDLOOP-->
ergibt folgendes:
0
1
2
3
<!--#4DLOOP ZeigerArray-->
In diesem Fall arbeitet das Tag 4DLOOP wie mit einem Array, d.h. es macht für jeden Eintrag im Array eine Schleife. Der
aktuelle Eintrag des Array erhöht sich, wenn dieser Part im Code wiederholt wird.
Diese Syntax ist hilfreich, wenn Sie in der Methode PROCESS 4D TAGS als Parameter einen Array Zeiger übergeben.
Beispiel:
ARRAY TEXT($array;2)
$array{1}:="hello"
$array{2}:="world"
$input:="<!--#4DEVAL $1-->"
$input:=$input+"<!--#4DLOOP $2-->"
$input:=$input+"<!--#4DEVAL $2->{$2->}--> "
$input:=$input+"<!--#4DENDLOOP-->"
PROCESS 4D TAGS($input;$output;"elements = ";->$array)
// $output = "elements = hello world"
- 23 -
Application version
Application version {( ErstellungsNr {; *} )} -> Funktionsergebnis
Beschreibung
Eingeführt mit 4D v14 R2
Zur Unterstützung der neuen 4D "R" Releases wurden die von der Funktion Application version (Kapitel 4D Umgebung)
zurückgegebenen Werte angepasst.
Jetzt gilt folgendes: Bei einer "R" Version wird die Release Nummer mit "R" gekennzeichnet und die Revision Nummer bleibt immer
"0". Bugfixes werden mit fortlaufender Versionsnummer xx.1, xx.2, etc. angezeigt. Dieses Prinzip gilt sowohl in der kurzen als auch in
der langen Versionsnummer.
Beispiel für kurze Versionsnummer:
Wert:=Application version // kurze Versionsnummer
Version
Zurückgegebener Wert
4D v14 R2
4D v14 R3
4D v14.1
4D v14.2
"1420"
"1430"
"1401"
"1402"
4D v14 Release R2
4D v14 Release R3
erste Bugfix Revision von 4D v14
zweite Bugfix Revision von 4D v14
Beispiel für lange Versionsnummer. Hier wird auch zwischen beta und final-Version unterschieden:
value:=Application version(*) // lange Versionsnummer
Version
Zurückgegebener Wert
4D v14 beta R2
4D v14 final R3
4D v14.1 beta
"B0011420"
"F0011430"
"B0011401"
beta Release R2
final Release R3
Erste beta Bugfix Revision von 4D v14
Beispiel
Folgender Code erstellt die Versionsnummer der Anwendung und ermöglicht die Unterscheidung zwischen "R" Releases und "Bug
fix" Revisions:
C_LONGINT($Lon_build)
C_TEXT($Txt_info;$Txt_major;$Txt_minor;$Txt_release;$Txt_version)
$Txt_version:=Application version($Lon_build)
$Txt_major:=$Txt_version[[1]]+$Txt_version[[2]] //Versionsnummer, z.B. 14
$Txt_release:=$Txt_version[[3]] //Rx
$Txt_minor:=$Txt_version[[4]] //.x
$Txt_info:="4D v"+$Txt_major
If($Txt_release="0") //4D v14.x
$Txt_info:=$Txt_info+Choose($Txt_minor#"0";"."+$Txt_minor;"")
Else //4D v14 Rx
$Txt_info:=$Txt_info+" R"+$Txt_release
End if
- 24 -
DELAY PROCESS
DELAY PROCESS (Prozess ; Dauer )
Parameter Typ
Prozess
Dauer
Beschreibung
Lange Ganzzahl -> Prozessnummer
-> Dauer in Ticks
Zahl
Beschreibung
Eingeführt mit 4D v14 R3
Der Befehl DELAY PROCESS akzeptiert den Parameter Dauer vom Typ Zahl (bisher wurde ein Wert vom Typ Lange Ganzzahl
erwartet).
Die Zeiteinheit ist weiterhin ein Tick (1 tick = 1/60stel Sekunde). Sie können jedoch die Ausführung eines Prozesses auf eine Dauer
kleiner als ein Tick verzögern. Übergeben Sie in Dauer z.B. 0,5, wird der Prozess um 1/2 Tick verzögert, also um 1/120stel Sekunde.
- 25 -
FORM GET OBJECTS
FORM GET OBJECTS ( ArrayObjekte {; ArrayVariablen {; ArraySeiten}} {; * | FormSeiteOption} )
Parameter
Typ
ArrayObjekte
ArrayVariablen
ArraySeiten
* | FormSeiteOption
Array String
Array Zeiger
Array Ganzzahl
Operator | Lange Ganzzahl
Beschreibung
<<<->
Name der Formularobjekte
Zeiger auf Variablen oder Felder, die Objekten zugeordnet sind
Seitennummer für jedes Objekt
Mit * = Auf aktuelle Seite beschränken oder
1=Form current page, 2=Form all pages, 4=Form inherited
Beschreibung
Eingeführt mit 4D v14 R2
Der Befehl FORM GET OBJECTS (Kapitel Formulare) hat jetzt den neuen Parameter FormSeiteOption. Damit können Sie den bzw.
die Teile im Formular angeben, aus denen Sie Objekte erhalten wollen.
Standardmäßig, d.h. ohne den Parameter FormSeiteOption sowie ohne den Parameter *, werden Objekte von allen Seiten,
einschließlich vererbter Objekte, zurückgegeben (wie in bisherigen 4D Versionen).
Um die Reichweite des Befehls zu reduzieren, übergeben Sie einen Wert in FormSeiteOption. Sie können eine oder mehrere
kombinierte Konstanten aus dem Thema Formularobjekte (Zugriff) übergeben:
Konstante
Typ
Wert Beschreibung
Form current
page
Lange
Ganzzahl
Lange
Ganzzahl
Lange
Ganzzahl
1
gibt alle Objekte der aktuellen Seite zurück, einschließlich der Seite 0, aber ohne
vererbte Objekte
2
gibt alle Objekte von allen Seiten ohne vererbte Objekte zurück
4
gibt nur die vererbten Objekte zurück
Form all pages
Form inherited
Hinweis: Die Übergabe des Parameters * ist dasselbe wie Übergeben der Konstanten Form current page+Form inherited. Die
Syntax mit dem Parameter * ist jetzt überholt und sollte nicht mehr verwendet werden.
Beispiel 1
Information auf allen Seiten erhalten, einschließlich Objekten von vererbten Formularen (sofern vorhanden):
//offenes Formular
FORM GET OBJECTS(objectsArray;variablesArray;pagesArray)
Oder:
//geladenes Formular
FORM LOAD([Table1];"MyForm")
FORM GET OBJECTS(objectsArray;variablesArray;pagesArray;Form all pages+Form inherited)
Beispiel 2
Nur Information auf der aktuellen Seite erhalten, mit Seite 0 des geladenen Formulars und vererbten Formularobjekten (sofern
vorhanden):
FORM LOAD("MyForm")
FORM GOTO PAGE(2)
FORM GET OBJECTS(objectsArray;variablesArray;pagesArray;Form current page+Form inherited)
Beispiel 3
Information von allen Objekten im vererbten Formular (sofern vorhanden) erhalten. Gibt es kein vererbtes Formular, werden die Arrays
- 26 -
leer zurückgegeben.
FORM LOAD("MyForm")
FORM GET OBJECTS(objectsArray;variablesArray;pagesArray;Form inherited)
Beispiel 4
Information von Objekten auf Seite 4 erhalten, einschließlich Objekten von Seite 0, aber ohne vererbte Formularobjekte (sofern
vorhanden):
FORM LOAD([Table1];"MyForm")
FORM GOTO PAGE(4)
FORM GET OBJECTS(objectsArray;variablesArray;pagesArray;Form current page)
Beispiel 5
Information von Objekten auf allen Seiten erhalten, jedoch ohne vererbte Formularobjekte (sofern vorhanden):
FORM LOAD([Table1];"MyForm")
FORM GET OBJECTS(objectsArray;variablesArray;pagesArray;Form all pages)
- 27 -
FORM GET PROPERTIES
FORM GET PROPERTIES ( {{Tabellenname};Formularname ;} Breite; Höhe{; AnzSeiten {; festeBreite {; festeHöhe {; Titel}}}} )
Eingeführt mit 4D v14 R2
Der Parameter Formularname ist jetzt optional: Wird er weggelassen, gilt der Befehl für das aktuelle Formular, das mit dem Befehl
FORM LOAD geladen wird.
Referenz: FORM GET PROPERTIES
- 28 -
Geringere Anzahl signifikanter Stellen beim Datentyp Zahl
Eingeführt mit 4D v14 R3
Die Anzahl signifikanter Stellen beim Datentyp Zahl wurde reduziert:
in bisherigen Versionen waren es 15 Stellen
in 4D v15 und höher sind es 13 Stellen
Diese Änderung betrifft nur die Konvertierung von Zahlen in Text, nicht die Art der internen Darstellung (Speichern) oder
Rechenoperationen mit Zahlen. Die Genauigkeit bei Daten vom Typ Zahl wird nicht beeinträchtigt.
Mit dieser neuen Regelung sind die letzten beiden Stellen nicht mehr enthalten, da sie in der Textdarstellung nicht als signifikant
garantiert werden konnten. Das soll Fälle, wo Operationen mit Daten vom Typ Zahl nicht korrekte Ergebnisse erzeugen, weitgehend
eingrenzen.
Beispiel: Für folgende Fälle erhalten wir jetzt ein gültiges Ergebnis:
Operation
Ergebnis in 4D < v15
String(3216,36 - 3214,89)
"1,47000000000025"
String(0,321636-0,321489) "0,000146999999999953"
Ergebnis in 4D v15 und höher
"1,47"
"0,000147"
Im allgemeinen reichen 13 signifikante Stellen für Computer-Anwendungen aus, das verbessert auch die Bearbeitung solcher Zahlen.
Bedenken Sie, dass Computer-Berechnungen mit Daten vom Typ Zahl immer als Annäherung erfolgen, da diese Zahlen intern in
binärer und nicht in dezimaler Form ausgedrückt werden. Der Konvertierungsalgorithmus führt die erforderliche Rundung und
Annäherung für die erwartete Darstellung anhand der Anzahl der signifikanten Stellen aus. In ähnlicher Weise werden Vergleiche auf
Gleichheit von Daten vom Typ Zahl ausgeführt. Dabei wird das Ergebnis verglichen, wenn zwei Zahlen voneinander subtrahiert
werden. Mit dem Befehl SET REAL COMPARISON LEVEL lässt sich der standardmäßige Grad der Genauigkeit solcher Vergleiche
in 4D verändern.
Verwendet Ihre 4D Anwendung mehr als 13 Stellen in Daten vom Typ Zahl, müssen Sie u.U. andere Datenformate, wie z.B. Text oder
Lange Ganzzahl verwenden. Beachten Sie, dass Daten vom Typ Zahl nicht geeignet sind zum Speichern bzw. Berechnen von Werten
mit einer großen Anzahl signifikanter Stellen, wie z.B. Seriennummern oder astronomische Messungen, da deren Genauigkeit von
Natur aus begrenzt ist.
- 29 -
GET ACTIVITY SNAPSHOT
GET ACTIVITY SNAPSHOT ( arrAktivität | arrUUID ; arrStart ; arrDauer ; arrInfo {; arrDetails}{; *} )
Parameter
Typ
Beschreibung
arrAktivität | arrUUID Array Objekt, Array Text <- Komplette Beschreibung der Operationen (Array Objekt) oder
Operation UUIDs (Array Text)
arrStart
Array Text
<- Startzeit der Operation
arrDauer
Array Lange Ganzzahl
<- Dauer der Operation in Sekunden
arrInfo
Array Text
<- Beschreibung
Array Objekt
<- Kontext Details und Unteroperationen (sofern vorhanden)
arrDetails
*
Operator
-> Mit Stern = Erhalte Server Aktivität
Neue Eigenschaften
Eingeführt mit 4D v14 R3
Dieser Befehl gibt zusätzliche Information zurück. Das ergibt sich durch die Erweiterung der Seite Real Time Monitor (RTM) des 4D
Server Verwaltungsfensters (siehe Seite Real Time Monitoring).
Die zusätzliche Information wird in den beiden Eigenschaften dbContextInfo und dbOperationDetails zurückgegeben. Diese
Eigenschaften sind für beide Syntaxarten verfügbar.
GET ACTIVITY SNAPSHOT(arrAktivität{; *})
Mit dieser Syntax erscheinen die neuen Eigenschaften auf der ersten Ebene des Objekts arrAktivität:
[
{
"message":"xxx",
"maxValue":12321,
"currentValue":63212,
"interruptible:0,
"remote":0,
"uuid":"deadbeef",
"taskId":xxx,
"startTime":"2014-03-20 13:37:00:123",
"duration":92132,
"dbContextInfo":{
"task_id": xxx,
"user_name": myName,
"host_name": HAL,
"task_name": "CreateIndexLocal",
"client_uid": "DE4DB33F33F"
"user4d_id ": 1,
"client_version ": 123456
},
"dbOperationDetails":{
table: "myTable"
field: "Field_1"
},
"subOperations":[...]
},...
]
GET ACTIVITY SNAPSHOT(arrUUID;arrStart;arrDauer;arrInfo{;arrDetails}{; *})
Mit dieser Syntax erscheinen die neuen Eigenschaften im letzten Parameter, der für mehr Klarheit in arrDetails umbenannt wurde. Die
Struktur dieses Array lautet:
[
{
"dbContextInfo":{...} //siehe unten
- 30 -
"dbOperationDetails":{...} //siehe unten
"subOperations":[...]
},...
]
Beschreibung
dbContextInfo
Diese Eigenschaft enthält Information, wenn eine Operation über die Datenbank-Engine verwaltet wird. Es gibt folgende
Eigenschaften:
host_name (String): Name des Host, der die Operation gestartet hat
user_name (String): Name des 4D Anwenders, dessen Sitzung die Operation gestartet hat
task_name (String): Name des Prozesses, der die Operation gestartet hat
task_id (Zahl): Nummer des Prozesses, der die Operation gestartet hat
client_uid (String): optional, uuid des Client, der die Operation gestartet hat
is_remote_context (Boolean, 0 oder 1): optional, gibt an, ob die Datenbankoperation von einem Client (Wert 1) oder von einem
Server über eine Serverprozedur (Wert 0) gestartet wurde
user4d_id (Zahl): Nummer des aktuellen 4D Anwenders auf der Client-Seite
client_version (String): vier Stellen für die 4D Engine Version, auf der die Anwendung basiert, so wie vom Befehl Application
version zurückgegeben.
client_uid und is_remote_context sind nur in der Client/Server Umgebung verfügbar. client_uid wird nur zurückgegeben, wenn eine
Datenbankoperation client-seitig gestartet wird.
dbOperationDetails
Diese Eigenschaft wird nur zurückgegeben, wenn die Operation die Datenbank-Engine verwendet. Das gilt z.B. für Suchläufe bzw.
Sortierungen. Es ist ein Objekt mit spezifischen Informationen zur Aktivität. Die zurückgegebenen Eigenschaften richten sich nach den
ausgeführten Datenbankoperationen. Sie können z.B. enthalten:
Tabelle (String): Name der Tabelle, die von der Operation verwendet wird
Feld (String): Name des Feldes, das von der Operation verwendet wird
SuchPlan (String): interner Plan für die Suche...
- 31 -
Get database parameter und SET DATABASE PARAMETER
Get database parameter ( {Tabellenname ;} Selector {; StringWert} ) -> Funktionsergebnis
SET DATABASE PARAMETER ( Tabellenname ;} Selector ; Wert )
Beschreibung
Für Get database parameter und SET DATABASE PARAMETER gibt es einen neuen Parameter Selector:
Konstante
Typ
Wert
Circular log limitation Lange Ganzzahl 90
Reichweite: 4D im lokalen Modus und 4D Server.
Wird zwischen 2 Sitzungen beibehalten: Nein
Beschreibung: Maximale Anzahl der beizubehaltenden Journale pro Typ. Standardmäßig werden alle Dateien beibehalten.
Übergeben Sie einen Wert X, werden nur die letzten X Dateien behalten, wobei bei Erstellen eines neuen Journals das älteste
automatisch entfernt wird. Diese Einstellung gilt jeweils pro Journal für folgende Typen: request logs (Selector 28 und 45), debug
log (Selector 34), events log (Selector 79), sowie Web request logs und Web debug logs (Selector 29 und 84 des Befehls WEB
SET OPTION).
Mögliche Werte: Jeder Wert vom Typ Zahl, 0 = Alle Journale beibehalten
Standardwert: 0 (keine Einschränkung)
Beschreibung
Eingeführt mit 4D v14 R3
Für Get database parameter und SET DATABASE PARAMETER gibt es einen neuen Parameter Selector:
Konstante
Typ
Wert
SQL Server Port ID
Lange Ganzzahl 88
Reichweite: 4D im lokalen Modus und 4D Server.
Wird zwischen 2 Sitzungen beibehalten: Ja
Beschreibung: Setzt oder erhält die Nummer des TCP Port, den der in 4D integrierte SQL Server mit 4D im lokalen Modus
oder 4D Server verwendet. Der Wert ist standardmäßig 19812. Die TCP Port Nummer lässt sich auch auf der Seite "SQL" in
den Datenbank-Eigenschaften setzen. Mit diesem Selector wird die Datenbank-Eigenschaft entsprechend aktualisiert und bleibt
auch nach Beenden und Neustart erhalten.
Mögliche Werte: 0 bis 65535.
Standardwert: 19812
Beschreibung
Eingeführt mit 4D v14 R5
Für Get database parameter und SET DATABASE PARAMETER gibt es einen neuen Parameter Selector:
Konstante
Typ
Wert
Use legacy Network Layer Lange Ganzzahl 87
Reichweite: 4D im lokalen Modus und 4D Server.
Wird zwischen 2 Sitzungen beibehalten: Ja
Beschreibung: Setzt oder erhält den aktuellen Status der legacy Netzwerk-Schicht für Client/Server Verbindungen. Die legacy
Netzwerk-Schicht ist ab 4D v14 R5 überholt und sollte in Ihren Anwendungen nach und nach durch die Netzwerk-Schicht
ServerNet ersetzt werden. ServerNet ist in den nächsten 4D Releases erforderlich, um auch in Zukunft von Netzwerk Evolutionen
zu profitieren. Zur Wahrung der Kompatibilität wird die legacy Netzwerk-Schicht noch unterstützt, um den allmählichen Übergang
für vorhandene Anwendungen zu ermöglichen. Sie wird in konvertierten Anwendungen aus einem Release vor v14 R5
standardmäßig genutzt. Übergeben Sie 1, um für Ihre Client/Server Verbindungen die legacy Netzwerk-Schicht zu verwenden
(und ServerNet zu deaktivieren); 0, um sie zu deaktivieren (und ServerNet zu verwenden).
Diese Eigenschaft lässt sich auch über die Option "Verwende legacy Netzwerk Schicht" auf der Seite "Kompatibilität" der
Datenbank-Eigenschaften setzen. Weitere Informationen dazu finden Sie im Abschnitt Neue Netzwerkschicht ServerNet.
Hier wird auch die Vorgehensweise zum Migrieren erläutert. Wir empfehlen, so bald wie möglich in all Ihren Anwendungen auf
ServerNet umzustellen.
Sie müssen die Anwendung neu starten, damit dieser Parameter berücksichtigt wird. In 4D Server v14 R5 64-bit für OS X ist er
- 32 -
nicht verfügbar, hier wird nur ServetNet unterstützt (er gibt immer 0 zurück).
Mögliche Werte: 0 oder 1 (0 = legacy Schicht nicht verwenden, 1 = legacy Schicht verwenden)
Standardwert: 0 in Anwendungen, die mit 4D v14 R5 oder höher erstellt wurden, 1 in Anwendungen, die von 4D v14 R4 oder
früher konvertiert wurden.
- 33 -
GET FIELD PROPERTIES
GET FIELD PROPERTIES ( FeldPtr | TabelleNum {; FeldNum}; FeldTyp {; FeldLänge {; Indiziert {; Einmalig {; Ausgeblendet}}}} )
Beschreibung
Ab 4D v15 können Felder auch vom Typ Objekt sein. Weitere Informationen dazu finden Sie im Abschnitt Datenfeldtyp Objekt.
Für den Parameter FeldTyp gibt es unter dem Konstantenthema "Feld und Variablentypen" eine neue Konstante:
Konstante Typ
Is object
Wert
Lange Ganzzahl 38
- 34 -
Get pointer
Get pointer ( VarName ) -> Funktionsergebnis
Beschreibung
Die Funktion Get pointer wurde umgeschrieben, um die neuen Zeigertypen in 4D v15 zu unterstützen (siehe Abschnitt Unicode
Modus für Methoden). Es gibt folgende Änderungen:
Jetzt werden Zeiger auf zweidimensionale Arrays, inkl. Verwenden von Ausdrücken, unterstützt:
$pt:=Get pointer("a{1}{2}")
//$pt=->a{1}{2}
$pt2:=Get pointer("atCities"+"{2}{6}")
//$pt2=->atCities{}{6}
Ungültige Namen für Variablen erzeugen jetzt den Fehler 77 ("Falscher Variablenname"). In bisherigen Releases wurden sie
akzeptiert. Beispiel:
$pt:=Get pointer("123") //wird in 4D vor v15 akzeptiert
//wird in 4D v15 und höher zurückgewiesen
Zusätzliche Leerzeichen werden jetzt unterstützt:
$pt:=Get pointer(" a ") //wird in 4D v15 akzeptiert: "->a"
//wird in 4D vor v15 zurückgewiesen
- 35 -
Is licence available
Is license available {( license )} -> Funktionsergebnis
Parameter
Typ
Beschreibung
Lizenz
Lange Ganzzahl -> Feature, für das die Gültigkeit der Lizenz getestet werden soll
Funktionsergebnis Boolean
<- Wahr, wenn das Feature verfügbar ist, sonst Falsch
Beschreibung
Eingeführt mit 4D v14 R3
Die Funktion Is licence available akzeptiert jetzt zwei neue Konstanten (unter dem Konstantenthema "Is License Available"
hinzugefügt):
Konstante
Typ
Wert
4D Mobile License
4D Mobile Test License
Lange Ganzzahl 808464439
Lange Ganzzahl 808465719
Hinweis: 4D Developer Pro enthält für Testzwecke drei 4D Mobile Testlizenzen.
- 36 -
Listbox: Spalten mit dynamischen Variablen erstellen
Eingeführt mit 4D v14 R3
Ein neues Feature in 4D ermöglicht, neue Spalten mit dynamischen Variablen in Echtzeit ein- oder anzufügen. Damit verwaltet 4D die
erforderlichen Defininitionen der Variablen (Spalte, Fußteil und Kopfteil) automatisch.
Als Folge davon wurden drei 4D Befehle aktualisiert:
LISTBOX INSERT COLUMN
LISTBOX INSERT COLUMN FORMULA
LISTBOX DUPLICATE COLUMN
Neue Syntax (Zeiger Nil)
Die Syntax dieser drei Befehle wurde aktualisiert, um die dynamische Erstellung der Variablen zu verwalten.
LISTBOX INSERT COLUMN ( {* ;} Objekt ; SpaltePos ; SpalteName ; SpalteVariable ; KopfName ; KopfVar {; FußName ; FußVar} )
LISTBOX INSERT COLUMN FORMULA ( {* ;} Objekt ; SpaltePos ; SpalteName ; Formel ; DatenTyp ; KopfName ; KopfVar {;
FußName ; FußVar} )
LISTBOX DUPLICATE COLUMN ( {* ;} Objekt ; SpaltePos ; SpalteName ; SpalteVariable ; KopfName ; KopfVar {; FußName ;
FußVar} )
Parameter
Typ
Beschreibung
...
SpalteVariable Array, Feld, Variable, Zeiger Nil -> Arrayname Spalte oder Feld oder Variable
KopfVar
Variable Zahl oder Zeiger Nil
-> Spaltenkopfteil Variable
...
FußVar
Variable oder Zeiger Nil
-> Spaltenfußteil Variable
Diese Befehle akzeptieren jetzt einen Zeiger Nil (->[]) als Wert für die Parameter SpalteVariable (falls zutreffend), KopfVar und
FußVar. In diesem Fall erstellt 4D beim Ausführen der Befehle die erforderlichen Variablen dynamisch. Weitere Informationen dazu
finden Sie im Abschnitt "Dynamische Variablen" im Handbuch 4D Programmiersprache.
Beachten Sie, dass Variablen für Kopfteil bzw. Fußteil immer mit einem bestimmten Typ erstellt werden (jeweils Lange Ganzzahl und
Text). Dagegen lässt sich der Typ der Spaltenvariable nicht beim Erstellen definieren, da die Listbox für diese Variable verschiedene
Arraytypen erlaubt (Array Text, Array Ganzzahl, etc.). Deshalb müssen Sie den Arraytyp manuell setzen. Zum Beispiel:
C_POINTER($NilPtr)
LISTBOX INSERT COLUMN(*;"MyListBox";1;"MyNewColumn";$NilPtr;"MyNewHeader";$NilPtr)
ColPtr:=OBJECT Get pointer(Object named;"MyNewColumn")
ARRAY TEXT(ColPtr->;0) // 0 durch einen positiven Wert ersetzen, um Elemente im Array vorab
zuzuweisen
Es ist wichtig, den Arraytyp vor dem Verwenden von Befehlen wie LISTBOX INSERT ROWS zu setzen, um neue Elemente in das
Array einzufügen. Alternativ lässt sich auch der Befehl APPEND TO ARRAY verwenden, um gleichzeitig den Arraytyp zu setzen und
das Einfügen von Elementen zu starten.
- 37 -
MAXIMIZE WINDOW
Eingeführt mit 4D v14 R3
Das Verhalten des Befehls MAXIMIZE WINDOW unter Windows für Fenster mit Größenbeschränkungen wurde geändert (zum
Beispiel ein Formularfenster):
Liegen die Größenbeschränkungen innerhalb der Zielgröße, wird das Fenster wie bisher auf die maximale Größe gesetzt. Es
wird z.B. an die Ausmaße des übergeordneten MDI-Fensters (MDI - Multiple Document Interface) angepasst; Titelleiste und
Ränder werden ausgeblendet, die Icons der Titelleiste (Minimieren, Maximieren und Schließbox) werden rechts neben die
Menüleiste des Hauptbildschirms gesetzt.
Liegt jedoch mindestens ein Wert außerhalb der Zielgröße, hat z.B. das MDI Fenster die Breite 100 und ist die maximale Breite
des Formularfensters 80, wird das Fenster nicht auf die maximalen Ausmaße gesetzt, sondern nur auf die maximal zugelassene
Größe. Die Größe wird entweder über die Maße des MDI-Fensters oder die jeweilige Beschränkung definiert. Auf diese Weise
bleibt die Konsistenz der Oberfläche erhalten.
Beispiel
Nachfolgendes Formular wurde mit der Größeneinschränkung maximale Breite=400 definiert:
Der Code der Schaltfläche lautet:
MAXIMIZE WINDOW(Current form window)
Klickt der Benutzer im folgenden Kontext auf die Schaltfläche:
- 38 -
... wird das Fenster nicht auf die maximalen Ausmaße gesetzt, sondern nur in der Höhe vergrößert:
- 39 -
- 40 -
METHOD GET CODE und METHOD SET CODE
METHOD GET CODE (Pfad ; Code {; *} )
METHOD SET CODE (Pfad ; Code {; *} )
Beschreibung
Kapitel: Zugriff Designobjekte
Die beiden Befehle METHOD GET CODE und METHOD SET CODE unterstützen jetzt das neue Attribut Metadaten. Damit lassen
sich die 4D Mobile zugeordneten Eigenschaften erhalten oder setzen.
Das neue Attribut mit Namen "published4DMobile" wurde hinzugefügt und kann in der Zeile %attribute eingesetzt werden:
// %attribute = { "published4DMobile": { "table": "aTableName", "scope": "table" } }
Die Eigenschaft mit Namen "scope" kann folgende Werte annehmen: "none", "table", "currentRecord" oder "currentSelection".
Folgende Attribute werden unterstützt:
{
"invisible" : false, // true, wenn sichtbar
"publishedWeb" : false, // true, wenn durch 4D tags und URLs
verfügbar
"publishedSoap": false, // true, wenn als Web Service angeboten
"publishedWsdl": false, //
true, wenn in WSDL veröffentlicht
"shared" : false, // true, wenn gemeinsam mit Kompontenten und Host
Datenbank genutzt
"publishedSql" : false, // true, wenn über SQL verfügbar
"executedOnServer" : false, //
true, wenn auf dem Server ausgeführt
"published4DMobile" : {
"scope": "table", // "none" oder "table"
oder "currentRecord" oder "currentSelection"
"table": "aTableName" // erscheint, wenn die Reichweite
anders als "none" ist
} }
Hinweis: Das Attribut "published4DMobile" wird ignoriert, wenn der Wert "table" nicht existiert oder "scope" ungültig ist.
- 41 -
Neues Formularereignis On Scroll
On Picture Scroll geändert
In bisherigen 4D Versionen ließ sich das Scrollen von Variablen und Feldern vom Typ Bild über das Formularereignis On Picture
Scroll (Wert 59) verwalten.
In 4D v15 wurde das Scrollen auf Listbox Objekte erweitert (siehe unten) und das Formularereignis On Picture Scroll umbenannt in On
Scroll. Es ist jetzt in der Eigenschaftenliste auch für Listboxen verfügbar. Die Arbeitsweise für Bilder ist gleichgeblieben.
Hinweis zur Kompatibilität:
Es gibt zwei geringe Unterschiede zwischen der Implementation von On Picture Scroll und On Scroll:
On Picture Scroll wurde in der Objektmethode und der Formularmethode erzeugt, konnte aber auf Ebene der
Formulareigenschaften nicht aktiviert bzw. deaktiviert werden. Zur besseren Konsistenz wird das Ereignis On Scroll ab 4D v15
nur in der Objektmethode generiert. Falls Ihre konvertierte Anwendung Scrollen für Bilder über die Formularmethode verwaltet
hat, müssen Sie den Code in die passende Objektmethode verschieben.
Im Stapel der Ereignisse konnte On Picture Scroll vor anderen Benutzerereignissen wie On Click aufgerufen werden. On Scroll
wird immer nach den anderen Benutzerereignissen generiert.
Formularereignis On Scroll
In 4D v15 ist das Ereignis On Scroll für zwei scrollbare Objekte verfügbar:
Felder und Variablen vom Typ Bild mit dem Format "Abgeschnitten (nicht zentriert)". Das war bereits in bisherigen 4D
Versionen unter dem Namen On Picture Scroll verfügbar.
Listboxen (neu in 4D v15).
Dieses Ereignis ist für Objekte in der Eigenschaftenliste standardmäßig nicht markiert.
Das Formularereignis On Scroll wird erzeugt, sobald ein Benutzer im Formularobjekt, das im Bereich enthalten ist, scrollt. Das
Ereignis wird nur generiert, wenn das Scrollen durch eine Benutzeraktion erfolgt, d.h. über Scroll-Balken bzw. Cursor, Mausrädchen
oder Tastatur. Es wird nicht generiert, wenn über den Befehl OBJECT SET SCROLL POSITION im Objekt gescrollt wird.
Das Ereignis wird nach allen anderen Benutzerereignissen im Zusammenhang mit dem Scrollen ausgelöst (On Clicked, On After
Keystroke...).
Das Ereignis wird nur in der Objektmethode generiert (nicht in der Formularmethode).
Beispiel
Die ausgewählte Zelle einer Listbox rot umrahmen und den Rahmen mitbewegen, wenn der Benutzer in der Listbox in vertikaler
Richtung scrollt. In der Objektmethode zur Listbox schreiben Sie folgenden Code:
Case of
:(Form event=On Clicked)
LISTBOX GET CELL POSITION(*;"LB1";$col;$raw)
LISTBOX GET CELL COORDINATES(*;"LB1";$col;$raw;$x1;$y1;$x2;$y2)
OBJECT SET VISIBLE(*;"RedRect";True) //rotes Rechteck initialisieren
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
:(Form event=On Scroll)
LISTBOX GET CELL POSITION(*;"LB1";$col;$raw)
LISTBOX GET CELL COORDINATES(*;"LB1";$col;$raw;$x1;$y1;$x2;$y2)
OBJECT GET COORDINATES(*;"LB1";$xlb1;$ylb1;$xlb2;$ylb2)
$toAdd:=LISTBOX Get headers height(*;"LB1") //Höhe des Kopfteils, damit es nicht überlappt
If($ylb1+$toAdd<$y1) & ($ylb2>$y2) //sind wir innerhalb der Listbox,
//verwalten wir der Einfachheit halber nur Kopfteile
//wir sollten auch horizontales Scrollen
//sowie Rollbalken verwalten
OBJECT SET VISIBLE(*;"RedRect";True)
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
Else
OBJECT SET VISIBLE(*;"RedRect";False)
End if
End case
- 42 -
Als Ergebnis folgt das rote Rechteck dem Scrollen der Listbox:
- 43 -
Neues Thema LDAP Befehle
4D v15 enthält neue LDAP Funktionalitäten, über die Ihre 4D Anwendungen sich via LDAP an ein vorhandenes
Unternehmensverzeichnis anmelden können. Es gibt folgende LDAP Befehle:
Die ausführliche Beschreibung der Befehle finden Sie im Kapitel "LDAP" dieses Upgrade Handbuchs.
- 44 -
OBJECT GET COORDINATES
OBJECT GET COORDINATES ( {* ;} Objekt ; Links ; Oben ; Rechts ; Unten)
Beschreibung
Eingeführt mit 4D v14 R5
Kapitel: Objekte (Formulare)
Der Befehl OBJECT GET COORDINATES kann jetzt Koordinaten für Teile der Listbox zurückgeben, z.B. Spalten, Kopf- oder
Fußteile, und nicht nur für das Objekt Listbox selbst.
In bisherigen Versionen gab dieser Befehl immer die Koordinaten des Objekts Listbox zurück, egal auf welchen Teil er angewendet
wurde. Jetzt werden die Koordinaten des jeweiligen Unterobjekts zurückgegeben, wenn die angegebene Referenz in Objekt ein
Unterobjekt Kopfteil, Spalte oder Fußteil der Listbox ist.
Auf diese Weise können Sie z.B. beim Klicken in eine Kopfteilzelle der Listbox ein Icon anzeigen, über das sich ein Kontextmenü
öffnen lässt.
Hinweis zur Kompatibilität: Haben Sie diesen Befehl in Ihrer Anwendung für den Kopfteil, Fußteil oder eine Spalte einer Listbox
verwendet, passen die Koordinaten nach der Konvertierung in 4D v14 R5 oder höher nicht mehr. Um die Koordinaten für die ganze
Listbox zu erhalten, müssen Sie den Code entsprechend anpassen, damit er für die Listbox selbst und nicht für ein Unterobjekt
aufgerufen wird.
Zur Wahrung der Konsistenz bleibt der Referenzrahmen gleich, egal, ob das Objekt ein Unterobjekt der Listbox oder die Listbox selbst
ist: Ausgangspunkt ist die obere linke Ecke des Formulars, welches das Objekt enthält. Für Unterobjekte der Listbox sind die
zurückgegebenen Koordinaten theoretisch, d.h. sie berücksichtigen den Scrollen-Status der Listbox vor dem Zuschneiden. So kann es
vorkommen, das das Unterobjekt nicht oder nur teilweise sichtbar ist, wenn die angegebenen Koordinaten außerhalb der
Formulargrenzen oder negativ sind. Um herauszufinden, ob das Unterobjekt bzw. welcher Teil davon sichtbar ist, müssen Sie die
zurückgegebenen Koordinaten mit den Koordinaten der Listbox vergleichen. Dabei gelten folgende Regeln:
Alle Unterobjekte werden auf die Koordinaten der zugehörigen Listbox zugeschnitten, d.h. wie sie vom Befehl OBJECT GET
COORDINATES für die Listbox zurückgegeben werden.
Die Unterobjekte Kopfteil und Fußteil erscheinen vor dem Inhalt der Spalte: Überschneiden sich die Koordinaten einer Spalte
mit den Koordinaten der Zeilen für Kopf- bzw. Fußteil, wird die Spalte an dieser Schnittstelle nicht angezeigt.
Elemente gesperrter Spalten erscheinen vor den Elementen scrollbarer Spalten: Überschneiden sich die Koordinaten eines
Elements in einer scrollbaren Spalte mit den Koordinaten eines Elements in einer gesperrten Spalte, erscheint es nicht an
dieser Schnittstelle.
Nehmen wir als Beispiel folgende Darstellung eines Formulars:
Die Koordinaten von Capital werden als rotes Rechteck dargestellt. Wie Sie im ersten Bild sehen können, ist die Spalte länger als die
Listbox, d.h. ihre Koordinaten liegen außerhalb der unteren Grenze der Listbox, inkl. Fußteil. Im zweiten Bild wurde die Listbox
gescrollt, so dass die Spalte jetzt auch die Spalte Language und den Kopfteil überlagert. Um den tatsächlich sichtbaren Bereich
(grüner Teil) zu berechnen, müssen Sie die roten Bereiche davon subtrahieren.
Beispiel
Für eine Oberflächenanzeige soll der angeklickte Bereich mit einem roten Rechteck eingerahmt werden:
- 45 -
Die Objektmethode der Listbox lautet wie folgt:
OBJECT SET VISIBLE(*;"rectangleInfo";False) //Roten Rahmen für Rechteck setzen
$ptr:=OBJECT Get pointer(Object current)
OBJECT GET COORDINATES($ptr->;$x1;$y1;$x2;$y2)
OBJECT SET VISIBLE(*;"RedRect";True)
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
OBJECT GET COORDINATES(*;"LB1";$lbx1;$lby1;$lbx2;$lby2)
If($lby1>$y1)|($lby2<$y2) // liegt der angeklickte Bereich außerhalb der Listbox
OBJECT SET VISIBLE(*;"Alert";True) //eine Meldung zeigen
Else
OBJECT SET VISIBLE(*;"Alert";False)
End if
Diese Methode gibt theoretische Koordinaten zurück. Wird die Größe der Listbox verändert, müssen Sie u.U. den Ausschnitt
berechnen, um den sichtbaren Teil herauszufinden:
- 46 -
Objekt Arrays in Spalten von Listboxen (4D View Pro)
Ab 4D v15 können Spalten von Listboxen Arrays vom Typ Objekt verwalten. Da diese Arrays unterschiedliche Datentypen erlauben,
ermöglicht dieses leistungsstarke Feature, jetzt in den Zeilen einer Spalte verschiedene Eingabetypen zu mischen und auch
unterschiedliche Widgets anzuzeigen. Sie können z.B. in der ersten Zeile eine Texteingabe, in der zweiten ein Optionsfeld und in der
dritten ein DropDown-Menü setzen. Objekt Arrays ermöglichen auch Zugriff auf neue Widget-Typen, wie Schaltflächen oder
Farbpaletten.
Die folgende Listbox wurde mit einem Objekt Array gestaltet:
Hinweis zur Lizensierung: Der Einsatz von Objekt Arrays in Listboxen ist der erste Schritt für das geplante Tool "4D View Pro", das
dann nach und nach das Plug-In 4D View ersetzen wird. Deshalb benötigen Sie zur Nutzung dieser Funktionalität eine gültige 4D View
Lizenz. Weitere Informationen dazu finden Sie auf der 4D Web Site.
Objekt Array in Spalte einrichten
Um ein Objekt Array einer Spalte der Listbox zuzuordnen, setzen Sie den Namen des Objekt Array entweder in der Eigenschaftenliste
im Feld "Variablenname" oder im Befehl LISTBOX INSERT COLUMN, genauso wie für eine Spalte mit zugeordnetem Array. In der
Eigenschaftenliste können Sie jetzt für die Spalte als Variablentyp Objekt auswählen:
Für Spalten vom Typ Objekt sind Standardeigenschaften zu Koordinaten, Größe und Stil verfügbar. Sie können über die
Eigenschaftenliste oder per Programmierung Stil, Schriftfarbe und Ein-/Ausblenden für jede Zeile einer Spalte vom Typ Objekt
definieren. Solche Spalten lassen sich auch ausblenden.
Für objektbasierte Spalten der Listbox ist die Gruppe Datenquelle nicht verfügbar. Der Inhalt jeder Zelle der Spalte richtet sich nach
den Attributen, die dem jeweiligen Element des Objekt Array zugewiesen ist. Jedes Objekt Element kann folgendes definieren:
Wertetyp (zwingend): Text, Farbe, Ereignis...
Eigentlicher Wert (optional): wird für Eingabe/Ausgabe verwendet
Anzeige des Zelleninhalts (optional): Schaltfläche, Liste...
Zusätzliche Einstellungen (optional): richtet sich nach dem Wertetyp
Um diese Eigenschaften zu definieren, müssen Sie im Objekt passende Attribute setzen (Liste siehe unten). Sie können z.B. "Hello
World!" in einer Spalte vom Typ Objekt mit folgendem Code schreiben :
ARRAY OBJECT(obColumn;0) //Spalten Array
C_OBJECT($ob) //erstes Element
- 47 -
OB SET($ob;"valueType";"text") //definiert den Wertetyp (zwingend)
OB SET($ob;"value";"Hello World!") //definiert den Wert
APPEND TO ARRAY(obColumn;$ob)
Hinweis: Für eine Spalte vom Typ Objekt lassen sich keine Anzeigeformate und Eingabefilter setzen. Diese richten sich automatisch
nach dem Typ des Werts.
Wertetyp und Anzeige der Daten
Wird eine Spalte der Listbox einem Objekt Array zugewiesen, basiert die Anzeige, Eingabe oder Bearbeitung der Zelle auf dem
Attribut "valueType" des Array Elements. Es gibt folgende Werte:
"text" für einen Wert vom Typ Text
"real" für eine Zahl inkl. Trennern wie <Abstand>, <.>, oder <,>
"integer" für einen Wert Ganzzahl
"boolean" für einen Wert wahr/falsch
"color" zum Definieren einer Hintergrundfarbe
"event" zum Anzeigen einer Schaltfläche mit Bezeichnung
4D verwendet Standard Widgets für den Wertetyp, z.B. "text" wird als Widget für Texteingabe angezeigt, "boolean" als Optionsfeld.
Über Optionen sind auch Alternativen verfügbar. So lässt sich ein Boolean Wert auch als DropDown-Liste mit den Optionen "ja"/"nein"
darstellen. Nachfolgende Tabelle zeigt die verschiedenen Möglichkeiten:
Wertetyp Standard Widget
Alternative Widget(s)
text
Dropdown-Menü (Erforderlich-Liste) oder Combobox (Auswahlliste)
real
integer
boolean
color
event
Texteingabe
vorgegebene
Eingabe (Zahlen und
Trenner)
vorgegebene
Eingabe (nur Zahlen)
Optionsfeld
Hintergrundfarbe
Schaltfläche mit
Bezeichnung
Dropdown-Menü (Erforderlich-Liste) oder Combobox (Auswahlliste)
Dropdown-Menü (Erforderlich-Liste), Combobox (Auswahlliste) oder Optionsfeld mit drei
Stadien
Dropdown-Menü (Erforderlich-Liste)
Text
Alle Widgets können eine zusätzliche Schaltfläche zum Wählen der Einheit (unit toggle
button) oder für weitere Optionen (...) (ellipsis button) haben, die der Zelle zugeordnet ist
Sie können die Zellenanzeige und Optionen über spezifische Attribute in jedem Objekt anpassen (siehe unten).
Anzeigeformate und Eingabefilter
Für Spalten vom Typ Objekt können Sie keine Anzeigeformate oder Eingabefilter setzen. Sie werden automatisch gemäß dem Typ
des Werts definiert. Es gibt folgende Optionen:
WerteTyp Standardformat
text
real
integer
boolean
color
event
Eingabekontrolle
so wie in Objekt definiert
beliebig (keine Kontrolle)
so wie in Objekt definiert (mit Dezimaltrenner des Systems) "0-9" und "." und "-"
"0-9" und "." wenn min>=0
so wie in Objekt definiert
"0-9" und "-"
"0-9" wenn min>=0
Optionsfeld
-
Attribute
Jedes Element des Objekt Array ist ein Objekt mit einem oder mehreren Attributen, die den Inhalt der Zelle und die Anzeige der Daten
definieren (siehe Beispiel oben).
Nur das Attribut "valueType" ist zwingend, unterstützt werden "text", "real", "integer", "boolean", "color" und "event". Nachfolgende
Tabelle zeigt alle Attribute, die abhängig vom Typ, in Objekt Arrays in Listboxen unterstützt werden (alle anderen Attribute werden
ignoriert). Details zu den Anzeigeformaten und Beispiele siehe unten.
- 48 -
valueType
Attribut
value
min
max
behavior
requiredList
choiceList
requiredListReference
requiredListName
saveAs
choiceListReference
choiceListName
unitList
unitReference
unitsListReference
unitsListName
alternateButton
text real integer boolean color event
Beschreibung
Zellenwert (Eingabe oder Ausgabe)
Mindestwert
Maximumwert
"DreiStadien" Wert
Im Objekt definierte Dropdown-Liste
In Objekt definierte Combobox
4D Listenref, richtet sich nach "SichernAls" Wert
4D Listenname, richtet sich nach "SichernAls" Wert
"Referenz" oder "Wert"
4D Listenref, Anzeige Combobox
4D Listenname, Anzeige Combobox
Array mit n Elementen
Index des gewählten Elements
4D Listenref für Einheiten
4D Listenname für Einheiten
Wechsel-Schaltfläche hinzufügen
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
Wert
Zellenwerte werden im Attribut "value" gespeichert. Es wird für Eingabe und Ausgabe verwendet.
Beispiel:
ARRAY OBJECT(obColumn;0) //Spalten Array
C_OBJECT($ob1)
$entry:="Hello world!"
OB SET($ob1;"valueType";"text")
OB SET($ob1;"value";$entry)
C_OBJECT($ob2)
OB SET($ob2;"valueType";"integer")
OB SET($ob2;"value";2/3)
C_OBJECT($ob3)
OB SET($ob3;"valueType";"boolean")
OB SET($ob3;"value";True)
APPEND TO ARRAY(obColumn;$ob1)
APPEND TO ARRAY(obColumn;$ob2)
APPEND TO ARRAY(obColumn;$ob3)
min und max
Ist "valueType" vom Typ "real" oder "integer", erlaubt das Objekt auch min und max Attribute mit passenden Werten (die Werte
müssen vom gleichen Typ wie der Wertetyp sein).
Damit können Sie den Bereich von Eingabewerten steuern, wenn die Zelle bestätigt wurde, d.h. wenn sie den Fokus verliert:
Ist der Eingabewert kleiner als der Mindestwert (min), wird er abgewiesen: Der vorige Wert bleibt bestehen und es erscheint
eine Meldung mit Erklärung.
Ist der Eingabewert größer als der Maximumwert (max), wird er abgewiesen: Der vorige Wert bleibt bestehen und es erscheint
eine Meldung mit Erklärung.
Beispiel:
C_OBJECT($ob3)
$entry3:=2015
OB SET($ob3;"valueType";"integer")
OB SET($ob3;"value";$entry3)
OB SET($ob3;"min";2000)
OB SET($ob3;"max";3000)
- 49 -
Verhalten
Das Attribut"behavior" bietet Variationen zur regulären Darstellung von Werten. In 4D v15 ist folgende Variante verfügbar:
Attribut
Verfügbare
WerteTyp(en) Beschreibung
Werte
behavior threeStates
Ganzzahl
Zeigt einen numerischen Wert als Optionsfeld mit drei Stadien. 2=halb-markiert,
1=markiert, 0=nicht markiert, -1=unsichtbar, -2=nicht markiert ist deaktiviert, 3=markiert ist deaktiviert, -4=halb-markiert ist deaktiviert
Beispiel:
C_OBJECT($ob3)
OB SET($ob3;"valueType";"integer")
OB SET($ob3;"value";-3)
C_OBJECT($ob4)
OB SET($ob4;"valueType";"integer")
OB SET($ob4;"value";-3)
OB SET($ob4;"behavior";"threeStates")
Auswahlliste und Erforderlich-Liste
Ist im Objekt ein Attribut "choicelist" oder "requiredList" vorhanden, wird die Texteingabe je nach Typ durch eine DropDown-Liste oder
eine Combobox ersetzt:
Beim Attribut "choicelist" wird die Zelle als Combobox angezeigt, d.h. der Benutzer kann einen Wert auswählen oder eingeben.
Beim Attribut "requiredList" wird die Zelle als DropDown-Liste angezeigt, d.h. der Benutzer kann nur einen der vorgegebenen
Werte auswählen.
In beiden Fällen wird über das Attribut "value" ein Wert im Widget vorab ausgewählt.
Hinweis: Die Werte des Widget werden über ein Array definiert. Wollen Sie dem Widget eine vorhandene 4D Liste zuweisen,
müssen Sie die Attribute "requiredListReference", "requiredListName", "choiceListReference", oder "choiceListName" verwenden.
Beispiele:
Eine DropDown-Liste mit den beiden Optionen "Open" oder "Closed" anlegen, wobei "Closed" vorab ausgewählt ist:
ARRAY TEXT($RequiredList;0)
APPEND TO ARRAY($RequiredList;"Open")
APPEND TO ARRAY($RequiredList;"Closed")
C_OBJECT($ob)
OB SET($ob;"valueType";"text")
OB SET($ob;"value";"Closed")
OB SET ARRAY($ob;"requiredList";$RequiredList)
Jeden Wert vom Typ Ganzzahl zulassen, jedoch eine Combobox mit den am häufigsten verwendeten Werten anzeigen:
ARRAY LONGINT($ChoiceList;0)
APPEND TO ARRAY($ChoiceList;5)
APPEND TO ARRAY($ChoiceList;10)
APPEND TO ARRAY($ChoiceList;20)
APPEND TO ARRAY($ChoiceList;50)
APPEND TO ARRAY($ChoiceList;100)
C_OBJECT($ob)
OB SET($ob;"valueType";"integer")
OB SET($ob;"value";10) //10 als Standardwert
OB SET ARRAY($ob;"choiceList";$ChoiceList)
- 50 -
Erforderlich-Liste als Name oder Referenz
Über die Attribute "requiredListName" und "requiredListReference" können Sie in einer Zelle der Listbox eine in 4D definierte Liste
anzeigen, die entweder über die Toolbox im Designmodus oder über den Befehl New list erstellt wurde. Die Zelle erscheint dann als
DropDown-Liste, d.h. der Benutzer kann nur einen der vorgegebenen Werte auswählen.
Je nachdem, wo die Liste angelegt wird, wählen Sie "requiredListName" oder "requiredListReference": Stammt sie von der Toolbox,
übergeben Sie einen Namen, wurde Sie per Programmierung erstellt, übergeben Sie eine Referenz. In beiden Fällen lässt sich über
das Attribut "value" im Widget ein Wert vorab auswählen.
Hinweis: Wollen Sie die Werte über ein einfaches Array definieren, müssen Sie das Attribut "requiredList" verwenden.
In diesem Fall definiert das Attribut "saveAs", ob der gewählte Eintrag als "value" oder "reference" gespeichert wird.
Ist "saveAs" = "reference", wird es als Referenz gesichert. "valueType" muss vom Typ Zahl oder Ganzzahl sein.
Ist "saveAs" = "value", wird der Wert gesichert. "valueType" muss vom gleichen Typ wie die Werte der Liste sein, in der Regel
"text" oder "integer", andernfalls versucht 4D, den Wert der Liste in das Objekt "valueType" zu konvertieren (siehe Beispiele
unten).
Weitere Informationen dazu finden Sie im Abschnitt Als Wert oder Referenz sichern des Handbuchs Designmodus.
Hinweis: Enthält die Liste Texteinträge mit Zahlenwerten, muss der Dezimaltrenner ein Punkt (".") sein, unabhängig von den lokalen
Einstellungen. Beispiel: "17.6" "1234.456".
Beispiele:
Eine DropDown Liste mit der Liste "colors" anzeigen, die in der Toolbox definiert wurde (mit den Werten "blue", "yellow" und
"green"), als Wert sichern und standardmäßig "blue" anzeigen:
C_OBJECT($ob)
OB SET($ob;"valueType";"text")
OB SET($ob;"saveAs";"value")
OB SET($ob;"value";"blue")
OB SET($ob;"requiredListName";"Farben")
Eine DropDown Liste mit einer per Programmierung erstellten Liste anzeigen, als Referenz sichern und standardmäßig London
anzeigen:
<>List:=New list
APPEND TO LIST(<>List;"Paris";1)
APPEND TO LIST(<>List;"London";2)
APPEND TO LIST(<>List;"Berlin";3)
APPEND TO LIST(<>List;"Madrid";4)
C_OBJECT($ob)
OB SET($ob;"valueType";"Ganzzahl")
OB SET($ob;"saveAs";"reference")
OB SET($ob;"value";2) //zeigt standardmäßig London an
OB SET($ob;"requiredListReference";<>List)
Auswahlliste als Name oder Referenz
Über die Attribute "choiceListName" und "choiceListReference" können Sie in einer Zelle der Listbox eine in 4D definierte Liste
anzeigen, die entweder über die Toolbox im Designmodus oder über den Befehl New list erstellt wurde. Die Zelle erscheint dann als
DropDown-Liste, d.h. der Benutzer kann einen Wert auswählen oder eintippen.
Je nachdem, wo die Liste angelegt wird, wählen Sie "choiceListName" oder "choiceListReference": Stammt sie von der Toolbox,
übergeben Sie einen Namen, wurde Sie per Programmierung erstellt, übergeben Sie eine Referenz. In beiden Fällen lässt sich über
das Attribut "value" im Widget ein Wert vorab auswählen.
- 51 -
Hinweis: Wollen Sie die Werte über ein einfaches Array definieren, müssen Sie das Attribut "choiceList" verwenden.
In diesem Fall lässt sich das Attribut "saveAs" nicht verwenden. Ausgewählte Einträge werden automatisch als "value" gesichert.
Weitere Informationen dazu finden Sie im Abschnitt Erforderlich-Liste als Name oder Referenz .
Hinweis: Enthält die Liste Texteinträge mit Zahlenwerten, muss der Dezimaltrenner ein Punkt (".") sein, unabhängig von den lokalen
Einstellungen. Beispiel: "17.6" "1234.456".
Beispiel:
Eine Combobox mit der Liste "colors" anzeigen, die in der Toolbox definiert wurde (mit den Werten "blue", "yellow" und "green"),
"blue" standardmäßig auswählen:
C_OBJECT($ob)
OB SET($ob;"valueType";"text")
OB SET($ob;"value";"blue")
OB SET($ob;"choiceListName";"colors")
Listen für Einheiten
Sie können spezifische Attribute für Einheiten verwenden, die Zellenwerten zugeordnet sind, wie z.B. "10 cm", "20 Pixel". Dafür
können Sie folgende Attribute verwenden:
"unitsList": Ein Array mit n Elementen zum Definieren der verfügbaren Einheiten, wie "cm", "inches", "km", "miles", etc. Damit
definieren Sie Einheiten innerhalb des Objekts.
"unitsListReference": Referenz auf eine 4D Liste mit den verfügbaren Einheiten. Damit definieren Sie Einheiten über eine 4D
Liste, die mit dem Befehl New list erstellt wurde.
"unitsListName": Name einer im Designmodus angelegten 4D Liste mit den verfügbaren Einheiten. Damit definieren Sie
Einheiten über eine 4D Liste, die in der Toolbox angelegt wurde.
Jede dieser Einheitenliste lässt sich über folgendes Attribut zuordnen:
"unitsReference": Ein einzelner Wert mit dem Index (von 1 zu n) des gewählten Eintrags in der Werteliste "unitsList",
"unitsListReference" oder "unitsListName".
Die aktuelle Einheit wird als Schaltfläche angezeigt, die bei jedem Anklicken die Werte von "unitsList", "unitsListReference" oder
"unitsListName" durchläuft ("Pixel" -> "Zeilen" -> "cm" -> "Pixel" -> etc.)
Beispiel: Die numerische Eingabe mit den beiden Einheitenvarianten "Zeilen" oder "Pixel" einrichten. Der aktuelle Wert ist "2" +
"Zeilen". Wir verwenden Werte, die direkt im Objekt definiert wurden (Attribut "unitsList"):
ARRAY TEXT($_units;0)
APPEND TO ARRAY($_units;"Zeilen")
APPEND TO ARRAY($_units;"Pixel")
C_OBJECT($ob)
OB SET($ob;"valueType";"integer")
OB SET($ob;"value";2) // 2 "units"
OB SET($ob;"unitsReference";1) //"Zeilen"
OB SET ARRAY($ob;"unitsList";$_units)
alternateButton
Um in einer Zelle die Schaltfläche [...] hinzuzufügen, müssen Sie im Objekt "alternateButton" mit dem Wert True übergeben. Die
Schaltfläche erscheint automatisch in der Zelle.
Klickt der Benutzer auf diese Schaltfläche, wird das Ereignis On Alternate Click generiert, das Sie nach eigenen Wünschen
verwalten können. Weitere Informationen dazu finden Sie im Abschnitt "Ereignisverwaltung".
Beispiel:
C_OBJECT($ob1)
$entry:="Hello world!"
- 52 -
OB SET($ob;"valueType";"text")
OB SET($ob;"alternateButton";True)
OB SET($ob;"value";$entry)
valueType color
Über valueType "color" können Sie entweder eine Farbe oder einen Text anzeigen.
Ist der Wert eine Zahl, wird die Zelle farbig ausgefüllt. Beispiel:
C_OBJECT($ob4)
OB SET($ob4;"valueType";"color")
OB SET($ob4;"value";0x00FF0000)
Wird die Zelle angeklickt, öffnet sich die Farbpalette des Systems mit der aktuell gewählten Farbe der Zelle. Der Benutzer kann
eine andere Farbe wählen.
Ist der Wert ein Text, wird der Text angezeigt, z.B. "value";"Automatic".
valueType event
valueType "event" zeigt eine einfache Schaltfläche, die bei Anklicken das Ereignis On Clicked generiert. Es lassen sich keine Daten
oder Werte übergeben bzw. zurückgeben.
Optional können Sie ein Attribut "label" übergeben.
Beispiel:
C_OBJECT($ob)
OB SET($ob;"valueType";"event")
OB SET($ob;"label";"Edit...")
Ereignisverwaltung
In Listboxen mit einem Objekt Array lassen sich verschiedene Ereignisse verwalten:
On Data Change: Ein Ereignis On Data Change wird ausgelöst, wenn ein Wert geändert wird in:
einem Bereich für Texteingabe
einer DropDown Liste
einem Bereich Combobox
einer Schaltfläche für Einheit (Wechsel von Wert n zu Wert n+1)
einem Optionsfeld (Wechsel markiert/nicht markiert)
On Clicked: Klickt der Benutzer auf eine Schaltfläche, die über das Attribut valueType "event" installiert wurde, wird ein
Ereignis On Clicked generiert. Dieses Ereignis verwaltet der Entwickler.
On Alternative Click: Klickt der Benutzer auf eine Schaltfläche [...] (Attribut "alternateButton"), wird ein Ereignis On Alternative
Click generiert. Dieses Ereignis verwaltet der Entwickler.
Hinweis: On Alternative Click ist der neue Name für das Ereignis On Arrow Click, das in bisherigen 4D Versionen schon
verfügbar war. Es wurde umbenannt, da seine Reichweite in 4D v15 erweitert wurde.
- 53 -
OPEN URL (Neuer Name für OPEN WEB URL)
OPEN URL ( Pfad {;AppName} {; *} )
Parameter Typ
String
Pfad
AppName String
Beschreibung
-> Pfad des zu öffnenden Dokuments oder URL
-> Name der Applikation
Operator -> MIt Stern = URL wird nicht übersetzt; Ohne Stern = URL wird übersetzt
*
Beschreibung
Eingeführt mit 4D v14 R3
Hinweis zur Kompatibilität: OPEN URL ist der neue Name des Befehls OPEN WEB URL (Kapitel "Werkzeuge"), da seine
Funktionsweise erweitert wurde.
Der Befehl OPEN URL akzeptiert den neuen Parameter AppName. Damit definieren Sie die Applikation zum Öffnen des Dokuments
oder der URL.
Ist dieser Parameter angegeben, sucht der Befehl im System nach einer installierten Applikation mit dem angegebenen Namen. Wird
sie gefunden, startet er diese und die angegebene URL oder das Dokument wird geöffnet.
Unter Windows läuft das Erkennen des Applikationsnamens genauso ab wie über den Menübefehl 'Ausführen' im Menü 'Start'. Zum
Beispiel:
"iexplore" zum Starten des Internet Explorer
"chrome" zum Starten von Chrome (wenn installiert)
"winword" zum Starten von MS Word (wenn installiert)
Hinweis: Die Liste der erkannten Applikationen lässt sich im Register unter folgendem Pfad abrufen:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
Auf OS X wird die Finder Datenbank verwendet, die alle installierten Applikationen automatisch indiziert. Sie erkennt jede .app
Applikation über ihren Bundle Namen (mit oder ohne die Endung .app). Zum Beispiel:
"safari"
"FireFox"
"TextEdit"
Wird die Applikation AppName nicht gefunden, erscheint kein Fehler; der Befehl arbeitet dann ohne diesen Parameter. Das System
wählt z.B. die am nächsten geeignete Applikation für den Dokumenttyp oder die URL.
Beispiel
Sie können eine Textdatei mit verschiedenen Programmen öffnen:
OPEN URL("C:\\temp\\cookies.txt") //öffnet die Datei mit Notepad
OPEN URL("C:\\temp\\cookies.txt";"winword") //öffnet die Datei mit MS Word (wenn installiert)
OPEN URL("C:\\temp\\cookies.txt";"excel") //öffnet die Datei mit MS Excel (wenn installiert)
- 54 -
PROCESS 4D TAGS
PROCESS 4D TAGS (EingabeVorlage ; AusgabeErgebnis {;Param1;...;ParamN} )
Parameter
Typ
EingabeVorlage
Text, BLOB
AusgabeErgebnis Text, BLOB
Param1...N
Beschreibung
-> Vorlage mit Tags zur Bearbeitung
<- Ergebnis der ausgeführten Vorlage
Text, Datum, Zeit, Zahl, Zeiger -> Parameter zur Übergabe in Vorlage in Bearbeitung
Beschreibung
Eingeführt in 4D v14 R4
Kapitel: Werkzeuge
Der Befehl PROCESS 4D TAGS unterstützt jetzt das Einfügen von Parametern in die Vorlage, die gerade ausgeführt wird.
PROCESS 4D TAGS akzeptiert eine undefinierte Anzahl zusätzlicher Parameter Param. Das können wie für Projektmethoden
skalare Werte jedes Typs sein (Text, Datum, Zeit, Lange Ganzzahl, Zahl...). Über Array Zeiger können Sie auch Arrays verwenden.
Diese Parameter sind während der Ausführung der Vorlage, wie für 4D Methoden, über gängige $1, $2... Argumente verfügbar (siehe
Beispiel).
Während der Ausführung von PROCESS 4D TAGS steht jetzt ein eigener Satz lokaler Variablen bereit, der während der Bearbeitung
verwendet werden kann.
Hinweis zur Kompatibilität: In bisherigen 4D Versionen war das Nutzen lokaler Variablen der rufenden Methode während der
Ausführung von PROCESS 4D TAGS möglich, jedoch ausschließlich im interpretierten Modus. Das ist jetzt nicht mehr der Fall.
Hinweis: In 4D wurde das neue Tag 4DEval hinzugefügt, und das Tag 4DLOOP erlaubt jetzt Zeiger. Weitere Informationen dazu
finden Sie im Abschnitt 4D Transformation Tags.
Beispiel
ARRAY TEXT($array;2)
$array{1}:="hello"
$array{2}:="world"
$input:="<!--#4DEVAL $1-->"
$input:=$input+"<!--#4DLOOP $2-->"
$input:=$input+"<!--#4DEVAL $2->{$2->}--> "
$input:=$input+"<!--#4DENDLOOP-->"
PROCESS 4D TAGS($input;$output;"elements = ";->$array)
// $output = "elements = hello world"
- 55 -
QR Get text property und QR SET TEXT PROPERTY
QR Get text property (Bereich ; SpaltenNr ; ZeilenNr ; Eigenschaft ) -> Funktionsergebnis
Parameter
Typ
Beschreibung
Bereich
SpaltenNr
ZeilenNr
Eigenschaft
Funktionsergebnis
Lange Ganzzahl
Lange Ganzzahl
Lange Ganzzahl
Lange Ganzzahl
Lange Ganzzahl | String
->
->
->
->
<-
Referenz auf den Bereich
Nummer der Spalte
Nummer der Zeile
Nummer der Eigenschaft
Wert der gewählten Eigenschaft
QR SET TEXT PROPERTY ( Bereich ; SpaltenNr ; ZeilenNr ; Eigenschaft ; Wert )
Parameter
Typ
Bereich
SpaltenNr
ZeilenNr
Eigenschaft
Wert
Lange Ganzzahl
Lange Ganzzahl
Lange Ganzzahl
Lange Ganzzahl
Lange Ganzzahl | String
Beschreibung
->
->
->
->
->
Referenz auf den Bereich
Nummer der Spalte
Nummer der Zeile
Nummer der Eigenschaft
Wert der gewählten Eigenschaft
Beschreibung
Eingeführt mit 4D v14 R3
Diese Befehle wurden geändert, um in Texteigenschaften Schriftnamen anstelle von Schriftnummern zu unterstützen, die ab der 4D
v14 Serie überholt sind. Diese Änderung gehört zur allgemeinen 4D Strategie, Quick Draw Aufrufe aus dem Programm zu entfernen.
Der Parameter Eigenschaft wurde geändert:
Die Konstante qr font (1) wurde umbenannt in _O_qr font. Sie ist überholt und sollte nicht mehr verwendet werden. Die
Kompatibilät bleibt erhalten, wird aber in zukünftigen Releases nicht mehr unterstützt.
Unter dem Thema "QR Texteigenschaften" wurde die neue Konstante qr font name (10) hinzugefügt. Verwenden Sie zum
Definieren der Schrift diese Konstante und einen Wert String. Sie können einen Namen übergeben, der vom Befehl FONT LIST
zurückgegeben wird.
Beispiel
Diese Methode definiert das Attribut Schrift für den Titel der ersten Spalte:
// Folgende Anweisung weist die Schrift Times zu:
QR SET TEXT PROPERTY(qr_area;1;-1;qr font name;"Times")
- 56 -
RESOLVE POINTER
RESOLVE POINTER ( Zeiger ; VarName ; TabNum ; FeldNum )
Parameter Typ
Zeiger
VarName
TabNum
FeldNum
Beschreibung
Zeiger
String
Lange Ganzzahl
Lange Ganzzahl
->
<<<-
Zeiger, für den das referenzierte Objekt gefunden werden soll
Name der referenzierten Variable oder leerer String
Nummer der referenzierten Tabelle, des Array Elements oder 0 bzw. -1
Nummer des referenzierten Felds oder 0 bzw. -1
Beschreibung
Kapitel: Programmiersprache
4D v15 unterstützt Zeiger auf zweidimensionale Arrays. Sie können jetzt beispielsweise schreiben ->a{1}{2}.
Übergeben Sie einen Zeiger auf ein Element eines zweidimensionalen Array, empfängt der Parameter FeldNum als Ergebnis die
Elementnummer der zweiten Dimension. Außerdem gibt RESOLVE POINTER jetzt in FeldNum anstatt 0 den Wert -1 für Zeiger auf
Variablen und eindimensionale Arrays zurück.
Das Ergebnis ist jetzt wie folgt:
Referenziertes Objekt Parameter
VarName
TabNum
...
Variable
Array Element
-1
Elementnummer
2D Array Element
Name der Variable
Name des Array
FeldNum
-1
-1
Name des 2D Array Nummer des Zeilenelements Nummer des Spaltenelements
...
Beispiel
Beispiel für einen Zeiger auf ein 2D Array:
ARRAY TEXT(atCities;100;50)
C_POINTER($city)
atCities{1}{2}:="Rom"
atCities{1}{5}:="Paris"
atCities{2}{6}:="New York"
// ...andere Werte
$city:=->atCities{1}{5}
RESOLVE POINTER($city;$var;$rowNum;$colNum)
//$var="atCities"
//$rowNum="1"
//$colNum="5"
- 57 -
Toolbar form windows
Eingeführt mit 4D v14 R5
4D v15 bietet eine Reihe Features, die Entwickler beim Gestalten und Verwalten eigener Toolbars unterstützen. Toolbars haben
spezifische Eigenschaften, die ihre Position und ihre Größe definieren.
Dafür gibt es folgende Befehle:
Open form window: akzeptiert den neuen Typ Toolbar form window
Tool bar height: gibt eine individuelle Höhe der Toolbar an
HIDE TOOL BAR und SHOW TOOL BAR: waren bisher überholt. Diese Befehle werden zum Verwalten eigener Toolbars
wieder aktiviert.
Open form window
Kapitel: Fenster
Open form window ( {Tabellenname ;} FormularName {; Typ {; hPos {; vPos {; *}}}} ) -> Funktionsergebnis
Die Funktion Open form window kann jetzt ein Formularfenster vom Typ Toolbar erstellen.
Unter dem Thema "Open Form Window" wurde eine neue Konstante hinzugefügt, die sich mit dem Parameter Typ verwenden lässt:
Konstante
Typ
Wert
Toolbar form window Lange Ganzzahl 35
Ist die Konstante Toolbar form window übergeben, wird das Fenster mit der Position, Größe und den grafischen Eigenschaften der
Toolbar erstellt. Hier ein paar Beispiele:
Das Fenster erscheint immer direkt unter der Menüleiste.
Die Breite des Fensters wird automatisch an den horizontalen Bereich angepasst, der auf dem Desktop (OS X) oder im
Hauptfenster von 4D (Windows) verfügbar ist. Die Höhe richtet sich wie bei allen anderen Arten von Formularfenstern nach den
Formulareigenschaften.
Das Fenster hat keinen Rand. Es lässt sich weder bewegen noch manuell größer oder kleiner ziehen. Sind die Parameter hPos,
vPos und * angegeben, werden sie ignoriert.
Es können nicht gleichzeitig zwei unterschiedliche Fenster mit Toolbar angelegt werden. Wird Open form window mit dem Typ
Toolbar form window aufgerufen, wenn schon ein Fenster mit Toolbar existiert, wird der Fehler -10613 ("Cannot create two form
windows of type toolbar") zurückgegeben.
Hinweis zum Formularfenster mit Toolbar und Vollbildmodus in OS X: Zeigt Ihre Anwendung ein Fenster mit Toolbar und ein
Standardfenster an, das den Vollbildmodus unterstützt (Option Has full screen mode Mac), muss die Toolbar ausgeblendet werden,
wenn das Standardfenster in den Vollbildmodus geht. Ob das Fenster im Vollbildmodus ist, erkennen Sie daran, dass seine vertikale
Größe genau der Höhe des Bildschirms entspricht (siehe Beispiel unter ).
Tool bar height
Kapitel: Fenster (bisher im Kapitel Benutzeroberfläche)
Tool bar height -> Funktionsergebnis
Parameter
Typ
Beschreibung
Funktionsergebnis Lange Ganzzahl <- Höhe der Werkzeugleiste in Pixel oder 0 bei ausgeblendeter Leiste
Diese Funktion funktioniert jetzt auch mit eigenen Werkzeugleisten, die mit der Funktion Open form window und dem Typ Toolbar
form window angelegt wurden.
Sie gibt die Höhe der aktuell sichtbaren Werkzeugleiste in Pixel zurück. Das kann je nach Kontext die Werkzeugleiste im
- 58 -
Designmodus oder eine über Open form window angelegte Leiste sein. Die Leiste im Designmodus wird automatisch
ausgeblendet, wenn über die Funktion Open form window eine eigene Leiste erscheint.
Ist die Werkzeugliste ausgeblendet, gibt die Funktion 0 zurück.
HIDE TOOL BAR und SHOW TOOL BAR
Kapitel: Fenster (bisher im Kapitel Benutzeroberfläche)
SHOW TOOL BAR
Dieser Befehl benötigt keine Parameter
HIDE TOOL BAR
Dieser Befehl benötigt keine Parameter
Diese Befehle sind nicht mehr überholt: Sie lassen sich für Formularfenster mit eigenen Werkzeugleisten verwenden, die über die
Funktion Open form window für den aktuellen Prozess erstellt wurden.
SHOW TOOL BAR: Wurde ein Fenster mit Werkzeugleiste über Open form window mit der Option Toolbar form window
aufgerufen, blendet der Befehl dieses Fenster ein. Ist das Fenster mit Werkzeugleiste bereits sichtbar oder nicht vorhanden, hat
der Befehl keine Auswirkung.
HIDE TOOL BAR: Wurde ein Fenster mit Werkzeugleiste über Open form window mit der Option Toolbar form window
geöffnet, blendet der Befehl dieses Fenster aus. Ist das Fenster mit Werkzeugleiste bereits ausgeblendet oder existiert nicht,
hat dieser Befehl keine Auswirkung.
Beispiel
Sie haben in OS X ein Formularfenster mit eigener Werkzeugleiste und Standardfenster mit der Option Has full screen mode Mac
definiert. Zieht ein Benutzer ein Standardfenster mit eingeblendetem Fenster mit Werkzeugleiste auf Bildschirmgröße, soll die
Werkzeugleiste nicht das maximierte Fenster überlappen.
Um das zu verhindern, müssen Sie im Formularereignis "On Resize" des Standardfensters feststellen, wenn das Fenster auf
Bildschirmgröße geht und dann HIDE TOOL BAR aufrufen:
Case of
:(Form event=On Resize)
GET WINDOW RECT($left;$top;$right;$bottom)
If(Screen height=($bottom-$top))
HIDE TOOL BAR
Else
SHOW TOOL BAR
End if
End case
Konstante Has toolbar button Mac ist überholt
Die Konstante Has toolbar button Mac ist überholt. Die entsprechende Option ist bei Apple seit OS X 10.6 veraltet.
Die Konstante stammt aus den beiden Konstantenthemen "Open Form Window" und "Open Window". Sie wurde umbenannt in
_O_Has toolbar button Mac.
- 59 -
TRANSFORM PICTURE
TRANSFORM PICTURE ( Bild ; Operator {; Param1 {; Param2 {; Param3 {; Param4}}}} )
Neuer Operator
Eingeführt mit 4D v14 R2
Der Befehl TRANSFORM PICTURE (Kapitel Bilder) akzeptiert im Parameter Operator die neue Konstante Transparency. Damit
lässt sich in umgewandelten Bildern eine individuelle Transparenz anwenden.
Dieses Feature dient speziell zum Verwalten von Transparenz in Bildern, die aus dem überholten PICT Format konvertiert wurden. Es
lässt sich aber auch für Bilder in anderen Formaten verwenden.
Die neue Konstante ist dem Thema Bildtransformation zugeordnet. Ist sie übergeben, lässt sich nur Param1 verwenden:
Operator (Wert)
Param1
Transparency (102) RGB Farbe
Param2 Param3 Param4 Werte
-
-
-
hexadezimal
Transparency: Auf das Bild wird Transparenz gemäß der in Param1 angegebenen Farbe angewandt. Übergeben Sie z.B.
0x00FFFFFF (weiß) in Param1, werden alle weißen Pixel im Originalbild im umgewandelten Bild transparent. Diese Operation
lässt sich auf Bitmap- oder Vektor-Bilder anwenden. Standardmäßig, d.h. ohne Param1, wird die Farbe Weiß (0x00FFFFFF)
als Zielfarbe gesetzt.
Beispiel
Mit folgendem Code können Sie die weißen Teile eines Bildes auf transparent setzen:
TRANSFORM PICTURE(Pict1;Transparency;0x00FFFFFF) //0x00FFFFFF ist weiß
Sie erhalten folgendes Ergebnis:
- 60 -
Überholte Befehle mit Vorsilbe gekennzeichnet
Sind Befehle als überholt deklariert, raten wir dringend davon ab, sie weiter zu verwenden. Sie werden in zukünftigen Versionen des
Programms nicht mehr unterstützt.
In 4D v15 haben alle überholten Befehle für mehr Klarheit die Vorsilbe "_o_" erhalten, sofern das noch nicht der Fall war.
Überholte Befehle sind in 4D Listen nicht mehr verfügbar (siehe Abschnitt Überholte Befehle jetzt ausgeblendet), d.h. Sie können
diese nicht mehr auswählen. In vorhandenem Code werden sie nur umbenannt und funktionieren weiterhin, solange sie noch unterstützt
werden.
Nachfolgende Tabelle zeigt die überholten Befehle, die in 4D v15 mit "_o_" gekennzeichnet und somit aus den Listen entfernt wurden:
- 61 -
Bisheriger Name
Neuer Name in 4D v15
ADD DATA SEGMENT
ADD SUBRECORD
ALL SUBRECORDS
APPLY TO SUBSELECTION
ARRAY STRING
ARRAY TO STRING LIST
Before subselection
C_INTEGER
C_STRING
Convert cas
Create resource file
CREATE SUBRECORD
DATA SEGMENT LIST
DELETE RESOURCE
DELETE SUBRECORD
DISABLE BUTTON
During
ENABLE BUTTON
End subselection
FIRST SUBRECORD
Font name
Font number
Get component resource ID
Get platform interface
INVERT BACKGROUND
ISO to Mac
LAST SUBRECORD
Mac to ISO
Mac to Win
MODIFY SUBRECORD
NEXT SUBRECORD
ORDER SUBRECORDS BY
PICTURE TYPE LIST
PREVIOUS SUBRECORD
QT COMPRESS PICTURE
QT COMPRESS PICTURE FILE
QT LOAD COMPRESS PICTURE FROM FILE
QUERY SUBRECORDS
Records in subselection
REDRAW LIST
SAVE PICTURE TO FILE
SET PICTURE RESOURCE
SET PLATFORM INTERFACE
SET RESOURCE
SET RESOURCE NAME
SET RESOURCE PROPERTIES
SET STRING RESOURCE
SET TEXT RESOURCE
USE EXTERNAL DATABASE
USE INTERNAL DATABASE
Win to Mac
_o_ADD DATA SEGMENT
_o_ADD SUBRECORD
_o_ALL SUBRECORDS
_o_APPLY TO SUBSELECTION
_o_ARRAY STRING
_o_ARRAY TO STRING LIST
_o_Before subselection
_o_C_INTEGER
_o_C_STRING
_o_Convert case
_o_Create resource file
_o_CREATE SUBRECORD
_o_DATA SEGMENT LIST
_o_DELETE RESOURCE
_o_DELETE SUBRECORD
_o_DISABLE BUTTON
_o_During
_o_ENABLE BUTTON
_o_End subselection
_o_FIRST SUBRECORD
_o_Font name
_o_Font number
_o_Get component resource ID
_o_Get platform interface
_o_INVERT BACKGROUND
_o_ISO to Mac
_o_LAST SUBRECORD
_o_Mac to ISO
_o_Mac to Win
_o_MODIFY SUBRECORD
_o_NEXT SUBRECORD
_o_ORDER SUBRECORDS BY
_o_PICTURE TYPE LIST
_o_PREVIOUS SUBRECORD
_o_QT COMPRESS PICTURE
_o_QT COMPRESS PICTURE FILE
_o_QT LOAD COMPRESS PICTURE FROM FILE
_o_QUERY SUBRECORDS
_o_Records in subselection
_o_REDRAW LIST
_o_SAVE PICTURE TO FILE
_o_SET PICTURE RESOURCE
_o_SET PLATFORM INTERFACE
_o_SET RESOURCE
_o_SET RESOURCE NAME
_o_SET RESOURCE PROPERTIES
_o_SET STRING RESOURCE
_o_SET TEXT RESOURCE
_o_USE EXTERNAL DATABASE
_o_USE INTERNAL DATABASE
_o_Win to Mac
XSLT Befehle
XSLT Befehle sind seit 4D v14 R4 überholt und wurden umbenannt:
Bisheriger Name
Neuer Name 4D v15
XSLT APPLY TRANSFORMATION _o_XSLT APPLY TRANSFORMATION
XSLT GET ERROR
_o_XSLT GET ERROR
XSLT SET PARAMETER
_o_XSLT SET PARAMETER
Weitere Informationen dazu finden Sie im Abschnitt XSLT Befehle sind überholt.
- 62 -
4D Pack Befehle
Einige 4D Pack Befehle sind seit 4D v14 R5 überholt und wurden ebenfalls umbenannt:
Bisheriger Name
Neuer Name
_o_AP FCLOSE
_o_AP fopen
_o_AP FPRINT
_o_AP fread
_o_AP Save BMP 8 bits
_o_AP Add table and fields
_o_AP Create relation
_o_AP Get file MD5 digest
_o_AP ShellExecute
Weitere Informationen dazu finden Sie im Abschnitt Überholte Befehle mit Vorsilbe gekennzeichnet .
AP FCLOSE
AP fopen
AP FPRINT
AP fread
AP Save BMP 8 bits
AP Add table and fields
AP Create relation
AP Get file MD5 digest
AP ShellExecute
Nicht mehr überholte Befehle
Dagegen wurden ein paar als überholt deklarierte Befehle wieder integriert. Sie sind zwar nur von begrenztem Interesse, da sie zu
älteren Programmierweisen gehören oder durch effizienteren Code ersetzt werden können. Ihr Fortbestehen ansich wird aber nicht
infrage gestellt:
Activated
Outside call
After
Before
Deactivated
In header
In footer
In break
Modified
Document type
- 63 -
Unterdatensätze konvertieren
Eingeführt mit 4D v14 R3
Sie können dem speziellen Feld "id_added_by_converter" auch selbst einen Wert zuweisen. Dieser Wert wurde in bisherigen
Releases nur von 4D verwaltet, und Sie mussten Befehle wie _o_CREATE SUBRECORD verwenden, um neue Datensätze in
konvertierten Untertabellen hinzuzufügen.
Mit diesem neuen Feature können Sie Ihre alten Datenbanken mit Untertabellen nach und nach konvertieren: Sie können die spezielle
Verknüpfung "Untertabelle Verknüpfung" beibehalten und verknüpfte Datensätze ändern oder hinzufügen, als ob sie normale
Datensätze wären. Sind dann all Ihre Methoden aktualisiert, können Sie diese spezielle Verknüpfung durch eine reguläre Verknüpfung
ersetzen, ohne Ihren Code zu verändern.
Sie können beispielsweise schreiben:
CREATE RECORD([Employees])
[Employees]Last Name:="Jonas"
CREATE RECORD([Employees_Children])
[Employees_Children]First Name:="Natascha"
[Employees_Children]Birthday:=!24.12.2013!
[Employees_Children]id_added_by_converter:=4 //Typfehler in früheren Releases
SAVE RECORD([Employees_Children])
SAVE RECORD([Employees]
Dieser Code funktioniert für spezielle und reguläre Verknüpfungen gleichermaßen.
- 64 -
WA GET PREFERENCE und WA SET PREFERENCE
Neues Standardverhalten
Eingeführt mit 4D v14 R2
Aus Sicherheitsgründen lässt sich ab 4D v15 in Web Area standardmäßig keine Datei oder URL per Drop-Technik einfügen. Der
Mauszeiger zeigt jetzt das Icon
, wenn der Benutzer versucht, eine Datei oder URL in den Bereich zu ziehen.
In bisherigen Versionen musste über den Befehl WA SET URL FILTERS ein spezifischer Filter installiert werden, um die Drop-Aktion
zu deaktivieren.
Um die Drop-Aktion in 4D Anwendungen zu aktivieren, müssen Sie für Web Area die Konstante wa enable url drop setzen.
Neuer Selektor
Der Parameter Selector im Befehl WA SET PREFERENCE hat eine neue Konstante erhalten, um Ziehen einer URL oder Datei in
Web Area zu erlauben:
Konstante
Typ
Wert Kommentar
WA enable URL drop Lange Ganzzahl 101 Ziehen einer URL oder Datei in Web Area erlauben (Standard = False)
Damit das Ziehen einer URL funktioniert, müssen Sie die Konstante vor dem Laden der URL setzen, am besten während dem
Formularereignis On load.
Beispiel
Ziehen einer URL in den Web Bereich 'myarea' aktivieren:
WA SET PREFERENCE(*;"myarea";WA enable URL drop;True)
- 65 -
WEB GET OPTION und WEB SET OPTION
WEB GET OPTION ( Selector ; Wert )
WEB SET OPTION ( Selector ; Wert )
Beschreibung
Eingeführt in 4D v14 R3
Für die Befehle WEB GET OPTION und WEB SET OPTION ist im Parameter Selector ein neuer Wert verfügbar:
Konstante
Typ
Wert
Web Session enable IP address validation Lange Ganzzahl 83
Reichweite: Lokaler Web Server
Wird zwischen 2 Sitzungen beibehalten: Nein
Beschreibung: Damit können Sie die Überprüfung der IP Adresse für Session Cookies aktivieren oder deaktivieren. Aus
Sicherheitsgründen prüft der 4D Web Server standardmäßig die IP Adresse einer Anfrage mit einem Session Cookie und weist
sie ab, wenn sie nicht zur IP Adresse passt, über die das Cookie erstellt wurde. Sie können diese Überprüfung bei bestimmten
Applikationen deaktivieren und das Session Cookie akzeptieren, auch wenn die IP Adresse nicht dazu passt. Wechseln z.B.
mobile Geräte zwischen Wifi und 3G/4G Netzwerken, ändert sich die IP Adresse. In diesem Fall übergeben Sie den Wert 0,
damit Clients weiterhin ihre Web Sessions verwenden können, auch wenn sie die IP Adresse wechseln. Beachten Sie, dass
diese Einstellung die Sicherheitstufe Ihrer Applikation herabsetzt.
Die Einstellung ist sofort wirksam, d.h. Sie müssen den HTTP Server nicht neu starten.
Mögliche Werte: 0 (deaktiviert) oder 1 (aktiviert)
Standardwert: 1 (IP Adressen werden geprüft)
Beschreibung
In 4D v15 gibt es eine neue Konstante für den Parameter Selector: Web debug log (84).
Damit können Sie den Status für das neue Logbuch HTTP Anfrage des 4D Web Server erhalten oder setzen. Ist es aktiviert, wird die
Datei mit Namen "HTTPDebugLog_nn.txt" im Ordner "Logs" des Programms gespeichert (nn ist die Dateinummer). Das ist
hilfreich, um Fehler im Zusammenhang mit dem Web Server zu beheben. Jede Anfrage (inkl. Header) und jede Antwort werden in
Rohform aufgezeichnet; optional lassen sich auch Body Bereiche protokollieren.
Übergeben Sie Web debug log in Selector, können Sie je nach gewünschter Information in Wert verschiedene Optionen erhalten oder
setzen. Unter dem Thema "Web Server" sind folgende neuen Konstanten verfügbar:
Konstante (Wert)
Typ
Beschreibung
Lange
Web HTTP Fehlerprotokoll ist deaktviert
Ganzzahl
wdl enable without body
Lange
Web HTTP Fehlerprotokoll ist aktiviert ohne Body Bereiche (in diesem Fall wird die
(1)
Ganzzahl
Body Größe angezeigt)
wdl enable with response
Lange
Web HTTP Fehlerprotokoll ist aktiviert nur mit Body Bereichen der Antwort
body (3)
Ganzzahl
wdl enable with request
Lange
Web HTTP Fehlerprotokoll ist aktiviert nur mit Body Bereichen der Anfrage
body (5)
Ganzzahl
wdl enable with all body
Lange
Web HTTP Fehlerprotokoll ist aktiviert mit Body Bereichen der Anfrage und der
parts (7)
Ganzzahl
Antwort
Hinweis: Das Logbuch HTTP Anfrage lässt sich nur über diesen Befehl aktivieren bzw. deaktivieren.
wdl disable (0)
Beispiel 1
//
WEB
...
//
WEB
Überprüfung der IP Adresse deaktivieren
SET OPTION(Web session enable IP address validation;0)
// spezifischer Code
Überprüfung der IP Adresse aktivieren
SET OPTION(Web session enable IP address validation;1)
Beispiel 2
- 66 -
Das http Fehlerprotokoll ohne Body Bereiche aktivieren:
WEB SET OPTION(Web debug log;wdl enable without body)
Das Protokoll lautet wie folgt:
# REQUEST
# SocketID: 1592
# PeerIP: 127.0.0.1
# PeerPort: 54912
# TimeStamp: 39089388
GET /4DWEBTEST HTTP/1.1
Connection: Close
Host: 127.0.0.1
User-Agent: 4D_HTTP_Client/0.0.0.0
# RESPONSE
# SocketID: 1592
# PeerIP: 127.0.0.1
# PeerPort: 54912
# TimeStamp: 39089389 (elapsed time: 1 ms)
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: close
Content-Length: 3555
Content-Type: text/plain; charset=UTF-8
Date: Tue, 20 Jan 2015 10:51:29 GMT
Expires: Tue, 20 Jan 2015 10:51:29 GMT
Pragma: no-cache
Server: 4D/14.6.0
[Body Size: 3555]
- 67 -
WEB SET HTTP HEADER
WEB SET HTTP HEADER ( Kopfteil|FeldArray {; WertArray} )
Server Header änderbar
Eingeführt mit 4D v14 R3
Mit dem Befehl WEB SET HTTP HEADER lässt sich das Server Feld der Antwort setzen, die von 4D an Web Clients gesendet wird.
Dieser Header wurde in bisherigen Releases automatisch von 4D gesetzt und ließ sich nicht verändern.
- 68 -
XSLT Befehle sind überholt
Eingeführt mit 4D v14 R4
Die Befehle zum Bearbeiten von XSLT sind überholt. Die Befehlsnamen wurden mit der entsprechenden Vorsilbe gekennzeichnet:
Bisheriger Name
Neuer Name in 4D v15
XSLT APPLY TRANSFORMATION _o_XSLT APPLY TRANSFORMATION
XSLT GET ERROR
_o_XSLT GET ERROR
XSLT SET PARAMETER
_o_XSLT SET PARAMETER
Zur Wahrung der Kompatibilität werden XSL Transformationen in 4D noch unterstützt. Wir raten jedoch von einer weiteren
Verwendung ab. Die Bearbeitung von XSLT wird in zukünftigen 4D Releases entfernt.
Hinweis zu 4D Server 64-bit OS X: XSLT ist in 4D Server 64-bit für OS X nicht mehr verfügbar. Deshalb wird beim Aufrufen von
XSLT Befehlen der Fehler 33 "Der Befehl oder die Methode ist nicht vorhanden" generiert.
4D bietet zwei Wege, um XSLT Technologie in Ihren Anwendungen zu ersetzen:
Entsprechende Funktionen des PHP Moduls libxslt verwenden, das seit Version 14.2 in 4D installiert ist. Ausführliche
Informationen zur Verwendung von PHP XSL anstelle der überholten XSLT 4D Befehle finden Sie unter: Download XSLT with
PHP technical document (PDF)
Die neuen Möglichkeiten nutzen, die der Befehl PROCESS 4D TAGS bietet. Sein Leistungsumfang wurde signifikant erweitert.
- 69 -
Clickcount
Clickcount -> Funktionsergebnis
Parameter
Funktionsergebnis
Typ
Lange Ganzzahl
Beschreibung
Anzahl aufeinanderfolgender Klicks
Beschreibung
Eingeführt mit 4D v14 R5
Kapitel: Formularereignis
Die neue Funktion Clickcount gibt bei Ereignissen mit Mausklicks an, wie oft der Benutzer mit derselben Maustaste in rascher
Abfolge/kurz nacheinander geklickt hat. So gibt sie z.B. bei einem Doppelklick den Wert 2 zurück.
Mit dieser Funktion lassen sich Doppelklicks in Kopf- oder Fußzeilen einer Listbox herausfinden oder Sequenzen von Dreifachklicks
oder mehr verwalten.
Jeder Mausklick generiert ein eigenes Klick-Ereignis. Macht der Benutzer z.B. einen Doppelklick, wird für den ersten Klick ein
Ereignis gesendet, in dem Clickcount 1 zurückgibt. Dann wird ein anderes Ereignis für den zweiten Klick gesendet, in dem
Clickcount 2 zurückgibt.
Diese Funktion ist nur für die Formularereignisse On Clicked, On Header Click oder On Footer Click verwendbar. Deshalb muss zuvor
im Designmodus geprüft werden, ob in den Formulareigenschaften bzw. im spezifischen Objekt das passende Ereignis ausgewählt
ist.
Sind beide Formularereignisse On Clicked und On Double Clicked aktiviert, gibt die Funktion Clickcount folgendes zurück:
1 beim Ereignis On Clicked
2 beim Ereignis On Double Clicked
2+n beim Ereignis On Clicked
Beispiel 1
Dieser Code könnte im Kopfteil einer Listbox stehen, um einfache und doppelte Klicks zu verwalten:
Case of
:(Form event=On Header Click)
Case of
:(Clickcount=1)
... //einfacher Klick
:(Clickcount=2)
... //Doppelklick
End case
End case
Beispiel 2
Sie wollen Benutzern erlauben, Etiketten bei Bedarf zu bearbeiten. Sie sind nicht eingebbar, werden aber nach dreifachem Klick
eingebbar. Die Objektmethode lautet folgendermaßen:
If(Form event=On Clicked)
Case of
:(Clickcount=3)
OBJECT SET ENTERABLE(*;"Etikett";True)
EDIT ITEM(*;"Bezeichnung")
End case
End if
- 70 -
EXPORT STRUCTURE
EXPORT STRUCTURE ( xmlStruktur )
Parameter
xmlStruktur
Typ
Textvariable
Beschreibung
Exportierte 4D Datenbankstruktur in XML Format
Beschreibung
Eingeführt in 4D v14 R4
Kapitel: Strukturzugriff
Der neue Befehl EXPORT STRUCTURE exportiert in xmlStruktur die aktuelle Struktur der 4D Datenbank im XML Format. Er
verwendet dieselben Mechanismen wie der Menübefehl Exportieren > Strukturdefinition in XML Datei... im Designmodus (siehe
Strukturdefinitionen exportieren und importieren).
Im Parameter xmlStruktur übergeben Sie eine Textvariable zum Füllen mit der Strukturdefinition. Die exportierte Definition enthält
Tabellen, Felder, Indizes und Verknüpfungen zusammen mit ihren Attributen und verschiedenen Merkmalen, die für eine komplette
Definition der Struktur erforderlich sind. Unsichtbare Elemente sind enthalten, gelöschte Elemente werden dagegen nicht exportiert.
Der interne Aufbau von 4D Strukturdefinitionen wird durch DTD Dateien dokumentiert — die auch zum Prüfen von XML Dateien
dienen. Die von 4D verwendeten DTD Dateien liegen im DTD Ordner, der neben der 4D Applikation liegt. Die Dateien
base_core.dtd und common.dtd dienen zur Definition der Struktur. Sie enthalten auch weitere Informationen und Kommentare zum
Definieren der 4D Struktur.
Beispiel
Die Datenbankstruktur in ein Textdokument exportieren:
C_TEXT($vTStruc)
EXPORT STRUCTURE($vTStruc)
TEXT TO DOCUMENT("myStructure.xml";$vTStruc)
- 71 -
Find in sorted array
Find in sorted array ( Array ; Wert ; > oder < {; ErstePos {; LetztePos}} ) -> Funktionsergebnis
Parameter
Array
Wert
> oder <
Typ
Array
Ausdruck
Operator
ErstePos
Lange Ganzzahl
LetztePos
Funktionsergebnis
Lange Ganzzahl
Boolean
Beschreibung
Array zum Suchen
Wert (gleicher Typ wie Array) zum Suchen im Array
> wenn Array in aufsteigender Reihenfolge sortiert ist,
< wenn Array in absteigender Reihefolge sortiert ist
Position des ersten Vorkommens, wenn der Wert gefunden wird;
sonst Position, an der der Wert eingefügt werden soll.
Postion des letzten Vorkommens, wenn der Wert gefunden wird; sonst gleicher Wert wie ErstePos
Wahr, wenn mindestens ein Element im Array zum Wert passt, sonst Falsch
Beschreibung
Eingeführt mit 4D v14 R4
Kapitel: Arrays
Die neue Funktion Find in sorted array gibt wahr zurück, wenn mindestens ein Element im sortierten Array zum Parameter Wert
passt. Sie gibt optional auch die Position des Elements zurück. Im Gegensatz zu Find in array funktioniert Find in sorted array nur
mit einem sortierten Array und gibt außerdem die Position der Vorkommen an. So lassen sich auch Elemente einfügen, wenn keine
Vorkommen gefunden werden.
Das Array muss bereits sortiert und in derselben Reihenfolge sein, wie im Parameter > oder < angegeben wurde, d.h. "größer als" für
aufsteigende und "kleiner als" für absteigende Reihenfolge. Andernfalls ist das Suchergebnis u.U. nicht korrekt. Find in sorted array
nutzt die Sortierung und einen binären Suchalgorithmus, was bei umfangreichen vorsortierten Arrays in der Regel effektiver ist.
Weitere Informationen dazu finden Sie unter Wikipedia, binäre Suche.
In folgenden Fällen ignoriert die Funktion die Sortierrichtung und arbeitet wie die Funktion Find in array (sequentielle Suche, gibt für
ErstePos und LetztePos -1 zurück, wenn Wert nicht gefunden wird):
bei Arraytypen, die sich nicht sortieren lassen, wie z.B. Zeiger Arrays,
bei Anwendungen im Nicht-Unicode Modus (Kompatibilitätsmodus) und wenn das Array vom Typ String oder Text ist,
wenn in einem Array vom Typ Text nach einem String mit Joker ('@') am Anfang oder in der Mitte gesucht wird. Hier ist kein
binärer Suchalgorithmus möglich, da die passenden Elemente im Array evtl. nicht in fortlaufender Reihenfolge sind.
Gibt die Funktion False zurück, kann der in ErstePos zurückgegebene Wert an INSERT IN ARRAY übergeben werden, um den Wert
in das bereits vorsortierte Array einzufügen. Das ist schneller, als erst einen neuen Eintrag ans Ende des Array zu setzen und dann
SORT ARRAY aufzurufen, um es an die richtige Stelle zu bewegen.
Die in LetztePos und ErstePos zurückgegebenen Werte lassen sich miteinander kombinieren, um jedes Element des Arrays zu
durchlaufen, das zu Wert passt (mit einer For...End for Schleife) oder um die Anzahl der Vorkommen zu finden (wie mit dem Befehl
Count in array, nur schneller).
Beispiel 1
Bei Bedarf einen Wert einfügen und dabei das sortierte Array beibehalten:
C_LONGINT($pos)
If(Find in sorted array($array ;$value ;>;$pos)
ALERT("Found at pos "+String($pos))
Else
INSERT IN ARRAY($array ;$pos)
$array{$pos}:=$value
End if
Beispiel 2
Die Anzahl der Vorkommen von Strings finden, die mit "test" beginnen und einen String erstellen, der diese Elemente zusammenfasst:
C_LONGINT($posFirst ;$posLast)
C_TEXT($output)
If(Find in sorted array($array ;"test@";>;$posFirst ;$posLast))
$output:="Found "+String($posLast-$posFirst+1)+" results :\n"
End if
For($i ;$posFirst ;$posLast)
- 72 -
$output:=$output+$array{$i}+"\n"
End for
- 73 -
Get database measures
Get database measures {( Optionen )} -> Funktionsergebnis
Parameter
Optionen
Funktionsergebnis
Typ
Objekt
Objekt
Beschreibung
Optionen für zurückgegebene Information
Objekt mit Datenbankinformation
Beschreibung
Eingeführt mit 4D v14 R3, geändert mit 4D v14 R5
Mit der Funktion Get database measures können Sie detaillierte Informationen über Ereignisse der 4D Datenbank Engine erhalten.
Dies umfasst Lese- und Schreibzugriffe auf die Festplatte oder den Memory Cache, sowie die Verwendung von Indizes, Suchen und
Sortieren in der Datenbank.
Get database measures gibt ein einzelnes Objekt mit allen relevanten Messwerten zurück. Im Parameter Optionen können Sie die
gewünschten Informationen genauer definieren.
Übersicht über das zurückgegebene Objekt
Das zurückgegebene Objekt enthält eine einzelne Eigenschaft mit Namen "DB" mit folgender Grundstruktur:
{
"DB": {
"diskReadBytes": {…},
"cacheReadBytes": {…},
"cacheMissBytes": {…},
"diskWriteBytes": {…},
"diskReadCount": {…},
"cacheReadCount": {…},
"cacheMissCount": {…},
"diskWriteCount": {…},
"dataSegment1": {…},
"indexSegment": {…},
"tables": {…},
"indexes": {…}
}
}
Dieses Objekt enthält bis zu acht elementare Eigenschaften mit Messwerten ("diskReadBytes", "cacheReadBytes",
"cacheMissBytes", "diskWriteBytes", "diskReadCount", "cacheReadCount", "cacheMissCount", "diskWriteCount") gültig für die
gesamte Datenbank, sowie zusätzlich eine weitere Unterteilung in "dataSegment1", "indexSegment", "tables", "indexes". Diese
Eigenschaften haben wiederum selbst die elementaren Eigenschaften, jeweils gültig für die entsprechende Untergruppe. Diese fein
abgestimmte Unterteilung erlaubt die Analyse der Datenzugriffe je nach Bedarf vom Gesamtsystem bis hin zu Zugriffen auf einzelne
Tabellen oder Indizes.
Hinweis: Eine Eigenschaft erscheint nur im Objekt, wenn sie Inhalt enthält. Eine Eigenschaft ohne Inhalt wird nicht in das Objekt
aufgenommen. Wurde die Anwendung z.B. im Nur-Lesen Modus geöffnet und keine Indizes verwendet, enthält das zurückgegebene
Objekt nicht die Messwerte "diskWriteBytes", "diskWriteCount", "indexSegment" und "indexes".
Elementare Eigenschaften
Elementare Eigenschaften gibt es auf verschiedenen Ebenen im Objekt DB. Sie enthalten dieselbe Informationsart, aber für
unterschiedliche Datenbankobjekte. Hier die Beschreibung der einzelnen Eigenschaften:
Name
zurückgegebene Information
diskReadBytes
cacheReadBytes
cacheMissBytes
diskWriteBytes
diskReadCount
cacheReadCount
cacheMissCount
diskWriteCount
von der Festplatte gelesene Bytes
vom Cache gelesene Bytes
im Cache nicht enthaltene Daten in Bytes
auf die Festplatte geschriebene Bytes
Anzahl der Lesezugriffe von der Festplatte
Anzahl der Lesezugriffe vom Cache
im Cache nicht enthaltene Daten; Anzahl Zugriffe
Schreibzugriffe auf die Festplatte
- 74 -
Alle acht elementaren Eigenschaften enthalten dieselbe Objektunterstruktur. Hier ein Beispiel:
"diskReadBytes": {
"value": 33486473620,
1665},
{"value": 54202,"time": -1649},
"history": [
…
// optional
{"value": 52564,"time": -
] }
"value" (Zahl): Die Eigenschaft "value" enthält eine Zahl, die entweder eine Anzahl Bytes oder eine Anzahl Zugriffe angibt.
Dieser Wert ist im allgemeinen die Summe der Werte des Objekts "history" (auch wenn das Objekt "history" nicht vorhanden ist).
"history" (Array der Objekte): Das Array "history" ist eine Zusammenstellung von Ereigniswerten, gruppiert nach Sekunden. Die
Eigenschaft "history" gibt es nur, wenn sie über den Parameter Optionen angefordert wurde (siehe unten). Dieses Array enthält
maximal 200 Einträge. Jedes Element des Array ist selbst ein Objekt mit den beiden Eigenschaften "value" und "time".
"value" (Zahl): Anzahl Bytes oder Zugriffe, die während der Zeitspanne, definiert in der zugeordneten Eigenschaft "time",
verwaltet wird.
"time" (Zahl): Anzahl Sekunden, die seit Aufrufen der Funktion verstrichen ist. Im obigen Beispiel ("time": -1649) bedeutet
die Zahl vor 1649 Sekunden, oder genauer zwischen den Sekunden 1649 und 1650. In dieser Zeitspanne von einer
Sekunde wurden 54.202 Bytes auf die Festplatte gelesen.
Das Array "history" enthält keine sequentiellen Werte (-1650,-1651,-1652, etc.). Der vorige Wert ist -1665, d.h., in den 15
Sekunden zwischen 1650 und 1665 wurde nichts von der Festplatte gelesen.
Hinweis: Das Array enthält nur vorhandene Informationen. Werte mit Null sind nicht aufgeführt.
Da die Größe des Array auf 200 begrenzt ist, ist "history" bei intensiver Nutzung der Datenbank (jede Sekunde wird etwas
auf die Festplatte gelesen) 200 Sekunden lang. Passiert dagegen nur wenig, gibt es z.B. nur alle 3 Minuten ein Ereignis,
kann "history" 600 Minuten (3*200) enthalten.
Hierzu ein Beispiel:
dataSegment1 und indexSegment
Die Eigenschaften "dataSegment1" und "indexSegment" enthalten bis zu vier der elementaren Eigenschaften (sofern verfügbar):
"dataSegment1": {
"diskReadBytes": {…},
"diskWriteBytes": {…},
"diskReadCount": {…},
"diskWriteCount": {…}
},
"indexSegment": {
"diskReadBytes": {…},
"diskWriteBytes": {…},
"diskReadCount": {…},
"diskWriteCount": {…}
}
Diese Eigenschaften enthalten dieselbe Information wie die elementaren Eigenschaften, jedoch aufgeschlüsselt nach Datei der
Datenbank:
"dataSegment1" ist die Datendatei .4dd auf der Festplatte
"indexSegment" ist die Indexdatei .4dx auf der Festplatte
Ihr Objekt könnte z.B. folgendermaßen aussehen:
{ "DB": { "diskReadBytes": {
"value": 718260
}, "diskReadCount": {
{
"diskReadBytes": {
"value": 679092
},
"diskReadCount": {
- 75 -
"value": 229
"value": 212
}, "dataSegment1":
}
},
"indexSegment": {
"diskReadBytes": {
"value": 39168
},
"diskReadCount": {
"value": 17
} }
Die Werte werden so berechnet:
diskReadBytes.value = dataSegment1.diskReadBytes.value + indexSegment.diskReadBytes.value
diskWriteBytes.value = dataSegment1.diskWriteBytes.value + indexSegment.diskWriteBytes.value
diskReadCount.value = dataSegment1.diskReadCount.value + indexSegment.diskReadCount.value
diskWriteCount.value = dataSegment1.diskWriteCount.value + indexSegment.diskWriteCount.value
Tabellen
Die Eigenschaft "tables" enthält alle Tabellen, auf die seit Öffnen der Datenbank im Lese- oder Schreibmodus zugegriffen wurde. Der
Name der Eigenschaft leitet sich vom jeweiligen Tabellennamen ab, zum Beispiel:
"tables": {
"Employees": {…)
"Companies": {…)
}
Jedes Objekt "table" enthält 10 Eigenschaften:
Die ersten acht Eigenschaften sind die elementaren Eigenschaften (siehe oben) mit Werten zur betreffenden Tabelle.
Die beiden anderen Eigenschaften "records" und "blobs" haben dieselben acht Eigenschaften, jedoch nur für bestimmte
Feldtypen:
Die Eigenschaft "records" betrifft alle Feldtypen der Tabelle (Strings, Datum, Zahlenarten, etc.) mit Ausnahme von Text,
Bild und Blobs
Die Eigenschaft "blobs" betrifft die Felder vom Typ Text, Bild und Blob der Tabelle.
Je nach Such- oder Sortierläufen in der Tabelle können zusätzliche Eigenschaften "fields" und "queries" vorhanden sein:
Die Eigenschaft "fields" enthält soviel Attribute "field name" (die auch Unterobjekte sind), wie Felder für Suchen oder Sortieren
verwendet werden.
Jedes Objekt Feldname enthält:
Ein Objekt "queryCount" (mit oder ohne Chronik, abhängig vom Parameter Optionen), wenn eine Suche mit diesem Feld
ausgeführt wurde.
und/oder ein Objekt "sortCount" (mit oder ohne Chronik, abhängig vom Parameter Optionen), wenn eine Sortierung mit
diesem Feld ausgeführt wurde.
Dieses Attribut basiert nicht auf der Verwendung von Indizes; alle Such- und Sortierläufe werden berücksichtigt.
Beispiel: Seit Starten der Datenbank wurden mehrere Such- und Sortierläufe mit den Feldern CompID, Name und FirstName
ausgeführt. Das zurückgegebene Objekt enthält das folgende Unterobjekt "fields" (Optionen sind mit Pfad und ohne Chronik):
{
"DB": {
"CompID": {
"queryCount": {
"sortCount": {
2
"tables": {
"Employees": {
"fields": {
"queryCount": {
"value": 3
}
},
"Name": {
"value": 1
},
"value": 3
}
"FirstName": {
"sortCount": {
}
} (...)
},
"value":
Hinweis: Das Attribut "fields" wird nur erstellt, wenn in der Tabelle eine Suche oder Sortierung durchgeführt wurde; andernfalls
ist dieses Attribut nicht vorhanden.
"queries" ist ein Array mit Objekten, das jede in der Tabelle durchgeführte Suche beschreibt. Jedes Element des Array enthält
drei Attribute:
"queryStatement" (String): Suchstring (enthält Feldnamen, aber keine Werte der Suchkriterien). Zum Beispiel: "
(Companies.PK_ID != ?)"
"queryCount" (Objekt):
"value" (Zahl): wieviele Male die Suchanweisung ausgeführt wurde, unabhängig von den Werten der Suchkriterien.
"history" (Array mit Objekten) (wenn in Optionen angefordert): "value" und "time" standardmäßige ChronikEigenschaften
"duration" (Objekt) wenn "value" >0)
"value" (Zahl): Anzahl Millisekunden
"history" (Array mit Objekten) (wenn in Optionen angefordert): "value" und "time" standardmäßige ChronikEigenschaften
Beispiel: Seit dem Start der Datenbank wurde in der Tabelle Employees eine Suche durchgeführt (Optionen sind mit Pfad und
ohne Chronik):
{
{
"DB": {
"tables": {
"Employees": {
"queries": [
"queryStatement": "(Employees.Name == ?)",
"queryCount": {
"value": 1,
"history": [
{
"value": 1,
"time": -2022
}
]
},
"duration": {
"value": 2,
"history": [
{
"value": 2,
"time": -2022
}
]
}
}, (...)
Hinweis: Das Attribut "queries" wird erstellt, wenn in der Tabelle mindestens eine Suche durchgeführt wurde.
- 76 -
Indizes
Dies ist das umfangreichste Objekt. Alle Tabellen, auf die über einen oder mehrere Indizes zugegriffen wurde, werden als
Eigenschaften gespeichert, die verwendeten Indizes darin wieder als Eigenschaften aufgeführt. Volltextindexes erscheinen separat
und an ihren Namen wird "(Keyword)" angehängt. Schließlich erscheint jede Eigenschaft Indexname jeweils wieder mit den acht
elementaren Eigenschaften und, je nach Index-Verwendung seit Starten der Datenbank, mit bis zu vier Unterobjekten. Jedes dieser
Unterobjekte existiert nur, wenn die dazugehörige Operation seit Starten der Datenbank an irgendeinem Punkt ausgeführt wurde.
Beispiel: Seit dem Starten der Datenbank wurden mehrere Indizes des Feldes [Employees]EmpLastName angefordert. Außerdem
wurden in der Tabelle [Companies] 2 Datensätze erstellt und 16 gelöscht. Diese Tabelle hat das indizierte Feld "name". Sie wurde
über dieses Feld auch durchsucht und sortiert. Als Ergebnis ergibt sich folgendes:
"indexes": {
"Employees": {
"EmpLastName": {
"diskReadBytes": {…},
"cacheReadBytes": {…},
"cacheMissBytes": {…},
"diskWriteBytes": {…},
"diskReadCount": {…},
"cacheReadCount": {…},
"cacheMissCount": {…},
"diskWriteCount": {…}
}
"EmpLastName (Keyword)":
{...},
"index3Name": {…},
"index4Name": {…},
…
}
"Companies": {
"Name":
(...)
"queryCount": {
"value": 41
},
"sortCount": {
"value": 3
},
"insertKeyCount": {
"value": 2
},
"deleteKeyCount": {
"value":
16
}
table3Name: {…} }
Parameter Optionen
Mit dem Parameter Optionen können Sie die zurückgegebene aktuelle Information anpassen. In Optionen übergeben Sie ein Objekt
mit bis zu drei Eigenschaften: "withHistory", "historyLength" und "path".
Eigenschaft
Typ
"withHistory"
Boolean
"historyLength"
Zahl
"path"
string |
string
array
Beschreibung
bei "true" erscheint die Chronik über die Funktion im zurückgegebenen Objekt; bei "false" enthält das
zurückgegebene Objekt keine Chronik
Definiert die Größe des zurückgegebenen Array "history" in Sekunden (*).
Kompletter Pfad einer bestimmten Eigenschaft oder Array mit kompletten Pfaden für alle spezifischen
Eigenschaften, die Sie erhalten wollen. Übergeben Sie einen String, wird nur der entsprechende Wert
im Objekt "DB" zurückgegeben (wenn der Pfad gültig ist). Beispiel
"DB.tables.Employee.records.diskWriteBytes" (bei gültigen Pfaden). Übergeben Sie ein Array mit
Strings, werden im Objekt "DB" alle entsprechenden Werte zurückgegeben. Beispiel:
["DB.tables.Employee.records.diskWriteBytes",
"DB.tables.Employee.records.diskReadCount","DB.dataSegment1.diskReadBytes"]
(*) Wie oben beschrieben, wird der Verlauf nicht sekundenweise gespeichert, sondern nur nach relevanten Werten. Passiert ein paar
Sekunden lang nichts, wird nichts gespeichert und im internen Verlauf des Array entsteht eine zeitliche Lücke. "time" kann z.B. -2, -4, 5, -10, -15, -30 mit den Werten 200, 300, 250, 400, 500,150 enthalten. Hat die Eigenschaft "historyLength" den Wert 600 (10
Minuten), enthält das zurückgegebene Array 0, -1, -2, -3 … -599 für Zeit, aber nur die Werte von -2, -4, -5, -10, -15, -30 werden gefüllt.
Alle anderen Werte erhalten den Wert 0 (Null). Wie bereits beschrieben, ist die Begrenzung des internen Array die Größe (200) und
nicht die Zeit. Folglich kann bei geringer Aktivität einer bestimmten Eigenschaft die älteste Zeit länger zurückliegen, z.B. -3600 für eine
ganze Stunde. Das Array kann auch weniger als 200 Werte enthalten, wenn die Datenbank gerade gestartet wurde. Liegt dann die
interne Zeitspanne der Chronik unter der angeforderten ODER erscheinen alle relevanten Werte bereits im zurückgegebenen Array,
lautet der zurückgegebene Wert -1.
Beispiel: Die Datenbank wurde vor 20 Sekunden gestartet, die Chronik der Anfrage ist 60 Sekunden. Die zurückgegebenen Werte
zwischen 0 und -20 werden mit Werten oder Nullen gefüllt, die anderen werden auf -1 gesetzt. Wird ein Wert "-1" zurückgegeben,
bedeutet dies entweder, dass die Anfragezeit zu alt ist oder der Wert nicht mehr in der Chronik liegt, z.B. weil der 200. Eintrag erreicht
ist bzw. ältere Werte entfernt wurden.
Hinweis: Das Filtern über "historyLength" verlangsamt deutlich die Abarbeitung des Befehls. Zur statistischen Auswertung belasteter
Server ist es sinnvoller, das gesamte Objekt ohne Angabe von "historyLength" abzufragen und das Ergebnis offline auszuwerten.
Über Client/Server und Komponenten
Get database measures gibt ein gültiges Objekt mit relevanten Werten nur in folgendem Kontext zurück:
bei 4D im lokalen Modus (bei Aufruf über eine Komponente wird Information über die Host Datenbank zurückgegeben)
auf dem Server im Client/Server-Modus
Bei Aufruf über ein remote 4D bleibt das Objekt leer.
Benötigen Sie in remote 4D Information über die Datenbank auf dem Server, legen Sie einfach eine Methode an und aktivieren dafür
die Option "auf Server ausführen".
Dieses Prinzip funktioniert auch für eine Komponente: Im lokalen Kontext von 4D gibt sie Information über die Host Datenbank zurück;
im remote Kontext von 4D gibt sie Information über die Server Datenbank zurück.
Beispiel 1
Im zurückgegebenen Objekt die Chronik anzeigen:
C_OBJECT($param)
C_OBJECT($measures)
OB SET($param;"withHistory";True)
$measures:=Get database measures($param)
- 77 -
Beispiel 2
Nur die globale Anzahl der im Cache gelesenen Bytes anfordern ("cacheReadBytes"):
C_OBJECT($oStats)
C_OBJECT($oParams)
OB SET($oParams;"path";"DB.cacheReadBytes")
$oStats:=Get database measures($oParams)
Das zurückgegebene Objekt könnte folgendermaßen aussehen:
{
"DB": {
"cacheReadBytes": {
"value": 9516637
Beispiel 3
Die Meßwerte für im Cache gelesene Bytes der letzten zwei Minuten anfordern:
C_OBJECT($oParams)
C_OBJECT($measures)
OB SET($oParams;"path";"DB.cacheReadBytes")
OB SET($oParams;"withHistory";True)
OB SET($oParams;"historyLength";2*60)
$measures:=Get database measures($oParams)
- 78 -
}
} }
Get locked records info
Get locked records info ( Tabellenname ) -> Funktionsergebnis
Parameter
Tabellenname
Funktionsergebnis
Typ
Tabelle
Objekt
Beschreibung
Tabelle, deren gesperrte Datensätze angezeigt werden sollen
Beschreibung der gesperrten Datensätze (sofern vorhanden)
Beschreibung
Eingeführt mit 4D v14 R3
Kapitel: Datensatz sperren
Die Funktion Get locked records info gibt ein Objekt mit Informationen über die aktuell gesperrten Datensätze in Tabellenname
zurück.
Das Objekt enthält in der Eigenschaft "records" ein Array mit weiteren Objekten:
{
"records": [
description object,
(…)
]
}
Jedes Array Element "description object" beschreibt einen gesperrten Datensatz in der angegebenen Tabelle mit den Eigenschaften:
Eigenschaft
Typ
Beschreibung
KontextID
UUID
(String)
UUID des Datenbankkontextes für die Sperrung
KontextAttribut
Objekt
Objekt, Information wie Ergebnis des Befehls LOCKED BY, jedoch angewandt auf den
Datensatz. Außerdem gibt Get locked records info den Benutzernamen zurück, der im System
definiert wurde und nicht den Namen des 4D Benutzers.
DatensatzNummer
Lange
Datensatznummer des gesperrten Datensatzes
Ganzzahl
Hinweis: Der Befehl LOCKED ATTRIBUTES wurde für mehr Klarheit in 4D v14 R3 umbenannt in LOCKED BY.
Das Objekt KontextAttribut hat folgende Eigenschaften:
task_id: Refererenznummer des Prozesses
user_name: Benutzername, der im Betriebssystem definiert wurde
user4d_id: Nummer des 4D Benutzers
host_name: Name des Host Rechners
task_name: Prozessname
client_version: Version der Client Applikation
Hinweis: Den 4D Benutzernamen können Sie aus dem Wert von user4d_id über folgenden Code erhalten:
GET USER LIST($arrNames;$arrIDs)
$4DUserName:=Find in array($arrIDs;user4d_id)
Hinweis: Die Funktion ist nur in 4D und 4D Server anwendbar. Wird sie über remote 4D oder eine Komponente aufgerufen, gibt sie
immer ein ungültiges Objekt zurück, außer die Option "Auf Server ausführen" ist aktiviert. Dann enthält das zurückgegebene Objekt
jeweils Informationen über den Server bzw. die Host Datenbank.
Beispiel
Sie führen folgenden Code aus:
$vOlocked :=Get locked records info([Table])
Sind zwei Datensätze in der Tabelle [Table] gesperrt, wird in $vOlocked folgendes Objekt zurückgegeben:
{
"records": [
{
"contextID": "A9BB84C0E57349E089FA44E04C0F2F25",
- 79 -
"contextAttributes": {
"task_id": 8, (*)
"user_name": "roland", (*)
"user4d_id": 1,
"host_name": "iMac de roland",
"task_name": "P_RandomLock", (*)
"client_version": -1342106592
},
"recordNumber": 1
},
{
"contextID": "8916338D1B8A4D86B857D92F593CCAC3",
"contextAttributes": {
"task_id": 9,
"user_name": "roland",
"user4d_id": 1,
"host_name": "iMac de roland",
"task_name": "P_RandomLock",
"client_version": -1342106592
},
"recordNumber": 2
}
]
}
Wird der Code auf einem 4D Server ausgeführt und die Sperrung von einem remote Client Rechnern ausgelöst, wird in $vOlocked
folgendes Objekt zurückgegeben:
{
"records": [
{
"contextID": "B0EC087DC2FA704496C0EA15DC011D1C",
"contextAttributes": {
"task_id": 2,
"user_name": "achim",
"user4d_id": 1,
"host_name": "achim-pcwin",
"task_name": "P_RandomLock",
"is_remote_context": true,
"client_uid": "0696E66F6CD731468E6XXX581A87554A",
"client_version": -268364752
},
"recordNumber": 1
}
]
}
- 80 -
IMPORT STRUCTURE
IMPORT STRUCTURE ( xmlStruktur )
Parameter
xmlStruktur
Typ
Text
Beschreibung
4D Strukturdefinition in XML Format
Beschreibung
Eingeführt mit 4D v14 R4
Kapitel: Strukturzugriff
Der neue Befehl IMPORT STRUCTURE importiert die im Parameter xmlStruktur angegebene 4D XML Strukturdefinition in die
aktuelle Anwendung.
Der Parameter xmlStruktur muss eine gültige 4D Strukturdefinition im XML Format enthalten. Dafür gibt es folgende Möglichkeiten:
Sie führen den neuen Befehl EXPORT STRUCTURE aus,
Sie wählen im Designmodus den Menübefehl Exportieren > Strukturdefinition in XML Datei (siehe Strukturdefinitionen
exportieren und importieren),
Sie erstellen oder bearbeiten eine eigene XML Datei, die auf DTD Dateien im Ordner "DTD" der 4D Applikation basieren.
Die importierte Strukturdefinition wird zur aktuellen hinzugefügt und erscheint im standardmäßigen 4D Struktureditor zwischen den
Tabellen (falls vorhanden). Hat eine importierte Tabelle denselben Namen wie eine bereits vorhandene Tabelle, wird ein Fehler
generiert und die Importoperation abgebrochen.
Sie können die Struktur auch in eine leere Datenbank importieren und so eine neue Anwendung erstellen.
Ist die Struktur im kompilierten oder Nur-Lesen Modus, wird ein Fehler generiert. Sie lässt sich auch nicht über eine 4D remote
Anwendung aufrufen.
Beispiel
Eine gespeicherte Strukturdefinition in die aktuelle Anwendung importieren:
$struc:=Document to text("c:\\4DStructures\\Employee.xml")
IMPORT STRUCTURE($struc)
- 81 -
LISTBOX GET CELL COORDINATES
LISTBOX GET CELL COORDINATES ( {* ;} Objekt ; Spalte ; Zeile ; links ; oben ; rechts ; unten )
Parameter
*
Typ
Operator
Objekt
Spalte
Zeile
links
oben
rechts
unten
Formularobjekt
Lange Ganzzahl
Lange Ganzzahl
Lange Ganzzahl
Lange Ganzzahl
Lange Ganzzahl
Lange Ganzzahl
Beschreibung
Mit Stern: Objekt ist Objektname (String)
Ohne Stern: Objekt ist Variable
Objektname (mit *) oder Feld bzw. Variable (ohne *)
Spaltennummer
Zeilennummer
Linke Koordinate des Objekts
Obere Koordinate des Objekts
Rechte Koordinate des Objekts
Untere Koordinate des Objekts
Beschreibung
Eingeführt mit 4D v14 R5
Der Befehl LISTBOX GET CELL COORDINATES gibt die Koordinaten links, oben, rechts und unten (in Punkten) in Variablen oder
Feldern der Zelle, angegeben in den Parametern Spalte und Zeile, der Listbox zurück, definiert über die Parameter Objekt und *.
Mit dem optionalen Parameter * geben Sie an, dass der Parameter ein Objektname (String) ist. Ohne diesen Parameter ist Objekt ein
Feld oder eine Variable. In diesem Fall übergeben Sie eine Feld- oder Variablenreferenz anstelle eines String (nur Feld oder
Variablenobjekt).
Zur Wahrung der Konsistenz mit dem Befehl OBJECT GET COORDINATES ist der Ausgangspunkt die obere linke Ecke des
Formulars, welches die Zelle enthält. Außerdem sind die zurückgegebenen Koordinaten theoretisch, d.h. sie berücksichtigen den
Scrollen-Status der Listbox vor dem Zuschneiden. So kann es vorkommen, dass die Zelle nicht oder nur teilweise sichtbar ist, wenn
die angegebenen Koordinaten außerhalb der Formulargrenzen oder negativ sind. Um herauszufinden, ob die Zelle bzw. welcher Teil
davon sichtbar ist, müssen Sie die zurückgegebenen Koordinaten mit den Koordinaten der Listbox vergleichen. Dabei gelten
folgende Regeln:
Alle Zellen werden auf die Koordinaten der zugehörigen Listbox zugeschnitten, d.h. wie sie vom Befehl OBJECT GET
COORDINATES für die Listbox zurückgegeben werden.
Die Unterobjekte Kopfteil und Fußteil erscheinen vor dem Inhalt der Spalte: Überschneiden sich die Koordinaten einer Zelle mit
den Koordinaten der Zeilen für Kopf- bzw. Fußteil, wird die Zelle an dieser Schnittstelle nicht angezeigt.
Elemente gesperrter Spalten erscheinen vor den Elementen scrollbarer Spalten: Überschneiden sich die Koordinaten eines
Elements in einer scrollbaren Spalte mit den Koordinaten eines Elements in einer gesperrten Spalte, erscheint es nicht an
dieser Schnittstelle.
Weitere Informationen dazu finden Sie unter dem Befehl OBJECT GET COORDINATES .
Beispiel
Sie wollen in einer Listbox in der ausgewählten Zelle einen roten Rahmen setzen:
OBJECT SET VISIBLE(*;"RedRect";False) //rotes Rechteck setzen
//das Rechteck ist bereits irgendwo im Formular definiert
LISTBOX GET CELL POSITION(*;"LB1";$col;$raw)
LISTBOX GET CELL COORDINATES(*;"LB1";$col;$raw;$x1;$y1;$x2;$y2)
OBJECT SET VISIBLE(*;"RedRect";True)
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
- 82 -
METHOD GET ATTRIBUTES
METHOD GET ATTRIBUTES ( Pfad ; Attribute {; *} )
Parameter Typ
Pfad
Text, Array Text
Attribute
Objekt, Array
Objekt
*
Operator
Beschreibung
Methodenpfad(e)
Attribut(e) für ausgewählte Methode(n)
Mit Stern: Bei Ausführung über eine Komponente gilt der Befehl für die Host Datenbank (in anderem Kontext
wird er ignoriert)
Beschreibung
Der neue Befehl METHOD GET ATTRIBUTES gibt in Attribute den aktuellen Wert aller Attribute für die Methode(n), angegeben im
Parameter Pfad, zurück.
Dieser Befehl funktioniert nur mit Projektmethoden. Übergeben Sie einen ungültigen Pfad, wird ein Fehler generiert.
In Pfad übergeben Sie entweder einen Text mit einem Methodenpfad oder ein Array Text mit einem Array der Pfade. In Attribute
müssen Sie jeweils denselben Parameter (String oder Array) übergeben, um die dazugehörigen Attribute zu erhalten.
In Attribute übergeben Sie ein Objekt oder ein Array, je nach Art des Parameters in Pfad. Alle Attribute für die Methode(n) werden als
Objekteigenschaften zurückgegeben, die Werte "true"/"false" für Boolean Attribute, und bei Bedarf zusätzliche Werte, z.B. die 4D
Mobile Eigenschaft "scope":"table".
Bei Ausführung über eine Komponente gilt der Befehl standardmäßig für die Komponentenmethode. Mit dem Parameter * greift er auf
die Methoden der Host Datenbank zu.
Hinweis: Die Funktion METHOD Get attribute wird zur Wahrung der Kompatibilität weiterhin unterstützt. Da sie jedoch nur einfache
Werte zurückgeben kann, lässt sie sich nicht für erweiterte Attribute wie 4D Mobile Eigenschaften verwenden.
Beispiel
Sie wollen die Attribute der Projektmethode sendMail erhalten. Sie schreiben wie folgt:
C_OBJECT($att)
METHOD GET ATTRIBUTES("sendMail";$att)
Nach Ausführen erhält $att zum Beispiel:
{
"invisible":false,
"publishedWeb":false,
"publishedSoap":false,
"publishedWsdl":false,
"shared":false,
"publishedSql":false,
"executedOnServer":false,
"published4DMobile":{
"scope":"table",
"table":"Table_1"
} }
- 83 -
METHOD SET ATTRIBUTES
METHOD SET ATTRIBUTES ( Pfad ; Attribute {; *} )
Parameter Typ
Pfad
Text, Array Text
Attribute
Objekt, Array
Objekt
*
Operator
Beschreibung
Methodenpfad(e)
Attribute für die gewählte(n) Methode(n)
Mit Stern: Bei Ausführung über eine Komponente gilt der Befehl für die Host Datenbank (in anderem Kontext
wird er ignoriert).
Beschreibung
Mit dem neuen Befehl METHOD SET ATTRIBUTES können Sie die Attribute für die Methode(n), angegeben im Parameter Pfad,
setzen.
In Pfad übergeben Sie entweder einen Text mit einem Methodenpfad oder ein Array Text mit einem Array der Pfade. In Attribute
müssen Sie jeweils denselben Parameter (String oder Array) übergeben, um die dazugehörigen Attribute zu setzen. Dieser Befehl
funktioniert nur mit Projektmethoden. Übergeben Sie einen ungültigen Pfad, wird ein Fehler generiert.
In Attribute übergeben Sie ein Objekt oder ein Array, je nach Art des Parameters in Pfad, mit allen Attributen, die Sie für die
Methode(n) setzen wollen.
Attribute zu Methoden müssen über die Befehle OB SET oder OB SET ARRAY gesetzt werden, mit den Werten "true"/"false" für
Boolean Attribute oder spezifische Werte für erweiterte Attribute, z.B. die 4D Mobile Eigenschaft "scope":"table". In den
Methodenattributen werden nur die im Parameter Attribute angegebenen Attribute aktualisiert.
Bei Ausführung über eine Komponente gilt der Befehl standardmäßig für die Komponentenmethode. Mit dem Parameter * greift er auf
die Methoden der Host Datenbank zu.
Hinweis: Der Befehl METHOD SET ATTRIBUTE wird zur Wahrung der Kompatibilität weiterhin unterstützt. Da er jedoch nur
einfache Werte setzen kann, lässt er sich nicht für erweiterte Attribute wie 4D Mobile Eigenschaften verwenden.
Folgende Attribute werden unterstützt:
{
"invisible" : false, // true, wenn sichtbar
"publishedWeb" : false, // true, wenn durch 4D tags und URLs
verfügbar
"publishedSoap": false, // true, wenn als Web Service angeboten
"publishedWsdl": false, //
true, wenn in WSDL veröffentlicht
"shared" : false, // true, wenn gemeinsam mit Kompontenten und Host
Datenbank genutzt
"publishedSql" : false, // true, wenn über SQL verfügbar
"executedOnServer" : false, //
true, wenn auf dem Server ausgeführt
"published4DMobile" : {
"scope": "table", // "none" oder "table"
oder "currentRecord" oder "currentSelection"
"table": "aTableName" // erscheint, wenn die Reichweite
anders als "none" ist
} }
Hinweis: Das Attribut "published4DMobile" wird ignoriert, wenn der Wert "table" nicht existiert oder "scope" ungültig ist.
Beispiel 1
Ein einzelnes Attribut setzen:
C_OBJECT($attributes)
OB SET($attributes;"executedOnServer";True)
METHOD SET ATTRIBUTES("aMethod";$attributes) //Nur das Attribut "executedOnServer" wird geändert
Beispiel 2
Eine Methode soll über 4D Mobile nicht verfügbar sein (das Attribut "scope" muss den Wert "none" erhalten):
C_OBJECT($attributes)
C_OBJECT($fourDMobileAttribute)
OB SET($fourDMobileAttribute;"scope";"none")
OB SET($attributes;"published4DMobile";$fourDMobileAttribute)
METHOD SET ATTRIBUTES("aMethod";$attributes)
- 84 -
MOBILE Return selection
MOBILE Return selection ( Tabellenname ) -> Funktionsergebnis
Parameter
Tabellenname
Funktionsergebnis
Typ
Tabelle
Objekt
Beschreibung
Tabelle, deren Auswahl zurückgegeben werden soll
Für Wakanda kompatible Auswahl
Beschreibung
Eingeführt mit 4D v14 R3
Die Funktion MOBILE Return selection gibt ein JSON Objekt mit der aktuellen Auswahl von Tabellenname zurück, die in eine für
Wakanda geeignete Entity Collection umgewandelt wurde.
Diese Funktion wird im Rahmen einer 4D Mobile Verbindung aufgerufen, normalerweise zwischen Ihrer 4D Applikation und einer
Wakanda Applikation (via REST). Ist eine 4D Mobile Verbindung mit passenden Zugriffsrechten eingerichtet, kann eine Wakanda
Applikation eine 4D Projektmethode ausführen, die im Parameter $0 einen Wert zurückgibt.
Die Funktion MOBILE Return selection ermöglicht, in $0 die aktuelle Datensatzauswahl von Tabellenname in Form eines Objekts
Entity Collection im JSON Format zurückzugeben. Dieses Objekt ist kompatibel mit Entity Collections in Wakanda, die eine Auswahl
von Datensätzen enthalten (z.B. von entities).
Beachten Sie, dass für 4D Mobile Zugriffe in Ihrer 4D Anwendung spezifische Einstellungen erforderlich sind:
Der Web Server muss gestartet sein,
In den Datenbank-Eigenschaften muss die Option "Aktiviere 4D Mobile Service" markiert sein,
Sie müssen eine gültige Lizenz haben,
Für Tabellen und Felder muss die Option "Mit 4D Mobile Service veröffentlichen" markiert sein (ist standardmäßig markiert).
Für aufgerufene Methoden muss die Option "Verfügbar per 4D Mobile Aufruf" markiert sein (ist nicht standardmäßig markiert).
Beachten Sie, dass Sie in Tabellenname jede gültige Tabelle der Anwendung übergeben können. Das muss nicht zwingend die
Tabelle sein, der die Projektmethode in den Eigenschaften zugewiesen wurde. Dieser Parameter wird nur auf der Wakanda Seite zur
Definition der Objekte verwendet, für die sich die Methode aufrufen lässt.
Weitere Informationen dazu finden Sie in der Dokumentation zu 4D Mobile.
Beispiel
Die aktuelle Auswahl zu einer Suche in der Tabelle [Countries] in einem Grid in Wakanda anzeigen.
Sie schreiben folgende 4D Methode:
//Projektmethode FindCountries
//FindCountries( string ) -> object
C_TEXT($1)
C_OBJECT($0)
QUERY([Countries];[Countries]ShortName=$1+"@")
$0:=MOBILE Return selection([Countries])
Die zurückgegebene Auswahl lässt sich direkt in Wakanda als gültige Collection verwenden.
Im Wakanda Server Model, das via 4D Mobile mit 4D verbunden ist, haben Sie eine Seite mit einem Grid erstellt, das an die Tabelle
4D Countries gebunden ist. Standardmäßig werden alle Entities aus der 4D Tabelle angezeigt:
- 85 -
Der Code für die Schaltfläche lautet:
button1.click = function button1_click (event)
Methode aufrufen, "i" wird als $1 übergeben
(asynchron), empfängt $0 als Parameter
//die aktuelle Entity Collection
}
});
};
{
sources.countries.FindCountries("i", { //die 4D
onSuccess:function(coll){ //Callback Funktion
sources.countries.setEntityCollection(coll.result);
// mit der im Objekt coll.result ersetzen
Hier als Ergebnis das upgedatete Grid:
- 86 -
OBJECT Get corner radius
OBJECT Get corner radius ( {* ;} Objekt ) -> Funktionsergebnis
Parameter
*
Typ
Operator
Objekt
Funktionsergebnis
Formularobjekt
Lange Ganzzahl
Beschreibung
Mit Stern: Objekt ist Objektname (String)
Ohne Stern: Objekt ist Feld oder Variable
Objektname (mit *) oder Variable bzw. Feld (ohne *)
Aktueller Radius der abgerundeten Ecken (in Pixel)
Beschreibung
Eingeführt mit 4D v14 R4
Kapitel: Objekte (Formulare)
Die neue Funktion OBJECT Get corner radius gibt den aktuellen Radius der gerundeten Ecken im Objekt abgerundetes Viereck,
definiert in Objekt, zurück. Dieser Wert wurde zuvor über die Eigenschaftenliste auf Formularebene (siehe Neue Eigenschaft
Eckradius) oder über den neuen Befehl OBJECT SET CORNER RADIUS für den aktuellen Prozess gesetzt.
Mit dem optionalen Parameter * geben Sie an, dass der Parameter Objekt ein Objektname (String) ist. Ohne diesen Parameter ist
Objekt ein Feld oder eine Variable. In diesem Fall übergeben Sie eine Feld- oder Variablenreferenz anstelle eines String (nur Feld
oder Variablenobjekt).
Hinweis: Da diese Funktion in aktuellen 4D Releases nur auf abgerundete Vierecke, d.h. statische Objekte, angewandt wird, müssen
Sie immer den Parameter * übergeben und die Syntax Objektname verwenden.
Die Funktion gibt den Wert (in Pixel) des Radius der gerundeten Ecken des Objekts zurück. Der Wert ist standardmäßig 5 Pixel.
Beispiel
In der Methode einer Schaltfläche könnte folgender Code hinzugefügt werden:
C_LONGINT($radius)
$radius:=OBJECT Get corner radius(*;"GreenRect") //den aktuellen Wert erhalten
OBJECT SET CORNER RADIUS(*;"GreenRect";$radius+1) //den Radius erhöhen
// Der maximale Wert wird automatisch verwaltet: Ist er erreicht,
// führt die Schaltfläche nichts aus.
- 87 -
OBJECT SET CORNER RADIUS
OBJECT SET CORNER RADIUS ( {* ;} Objekt ; Radius )
Parameter
*
Typ
Operator
Objekt
Radius
Formularobjekt
Lange Ganzzahl
Beschreibung
Mit Stern: Objekt ist Objektname (String)
Ohne Stern: Objekt ist Variable oder Feld
Objektname (mit *) oder Feld oder Variable (ohne *)
Neuer Radius für die gerundeten Ecken (in Pixel)
Beschreibung
Eingeführt mit 4D v14 R4
Kapitel: Objekte (Formulare)
Der neue Befehl OBJECT SET CORNER RADIUS ermöglicht, den Radius der gerundeten Ecken im Objekt Rundes Viereck,
definiert in Objekt, zu ändern. Der neue Radius gilt nur für den Prozess; er wird nicht im Formular gesichert.
Mit dem optionalen Parameter * geben Sie an, dass der Parameter Objekt ein Objektname (String) ist. Ohne diesen Parameter ist
Objekt ein Feld oder eine Variable. In diesem Fall übergeben Sie eine Feld- oder Variablenreferenz anstelle eines String (nur Feld
oder Variablenobjekt).
Hinweis: Da dieser Befehl in aktuellen 4D Release nur auf abgerundete Vierecke, d.h. statische Objekte, angewandt wird, müssen
Sie immer den Parameter * übergeben und die Syntax Objektname verwenden.
In Radius übergeben Sie den Wert (in Pixel) des neuen Radius für die abgerundeten Ecken. Der Wert ist standardmäßig 5 Pixel.
Hinweis: Dieser Wert lässt sich auch über die Eigenschaftenliste auf Formularebene setzen. Weitere Informationen dazu finden Sie
im Abschnitt Neue Eigenschaft Eckradius des Handbuchs 4D Designmodus.
Beispiel
Ein Formular enthält zwei Vierecke mit Namen "Rect1" und "Rect2":
Sie können die Rundung der Ecken verändern und z.B. folgenden Code ausführen:
OBJECT SET CORNER RADIUS(*;"Rect@";20)
- 88 -
OPEN DATABASE
OPEN DATABASE ( DateiPfad )
Parameter
DateiPfad
Typ
String
Beschreibung
Name oder kompletter Zugriffspfad der zu öffnenden Datenbankdatei (.4db, 4dc, .4dbase oder .4dlink)
Beschreibung
Eingeführt in 4D v14 R3
Kapitel: 4D Umgebung
Der Befehl OPEN DATABASE schließt die aktuelle 4D Anwendung und öffnet direkt die im Parameter DateiPfad angegebene
Anwendung. Dieser Befehl ist hilfreich für automatische Testabläufe oder, um eine Anwendung nach dem Kompilieren automatisch
wieder zu öffnen.
Im Parameter DateiPfad übergeben Sie den Namen oder den kompletten Zugriffspfad der zu öffnenden Anwendung. Sie können
Dateien mit einer der folgenden Endungen verwenden:
.4db (interpretierte Strukturdatei)
.4dc (kompilierte Strukturdatei)
.4dbase (OS X Package)
.4dlink (Datei mit Tastenkürzeln)
Übergeben Sie nur den Dateinamen, muss er auf derselben Ebene wie die Strukturdatei der aktuellen Anwendung liegen.
Ist der Zugriffspfad gültig, beendet 4D die laufende Anwendung und öffnet die angegebene Anwendung. Im Einzelplatz werden die
Methoden Datenbankmethode On Exit der geschlossenen Anwendung und Datenbankmethode On Startup der geöffneten
Anwendungen nacheinander aufgerufen.
Warnung: Da dieser Befehl die Anwendung beendet, bevor sie mit der angegebenen Datei erneut geöffnet wird, raten wir davon ab,
ihn in der Methode Datenbankmethode On Startup zu verwenden oder in einer Methode, die diese Datenbankmethode aufruft.
Der Befehl wird asynchron ausgeführt, d.h. nach dem Aufrufen führt 4D erst die restliche Methode aus. Dann verhält sich die
Anwendung wie beim Schließen über den Befehl Schließen im Menü Datei: Geöffnete Dialogfenster werden geschlossen, geöffnete
Prozesse beenden innerhalb von 10 Sekunden, etc.
Wird die Zielanwendung nicht gefunden oder ist sie ungültig, wird ein standardmäßiger Systemfehler zurückgegeben und 4D führt
nichts aus.
Dieser Befehl lässt sich nur von einer nicht eingebundenen Anwendung ausführen. Beim Ausführen in einer Applikation mit
einkompilierter Engine (Einzelplatz oder Server) wird der Fehler -10509 "Die Anwendung "" lässt sich nicht öffnen" zurückgegeben.
Beispiel
OPEN DATABASE("C:\\databases\\Invoices\\Invoices.4db")
- 89 -
QUERY BY ATTRIBUTE
QUERY BY ATTRIBUTE ( Tabellennname {; KonjOp}; ObjektFeld ; AttributPfad ; SuchOp ; Wert {; *} )
Parameter
Tabellennname
Typ
Tabelle
KonjOp
ObjektFeld
AttributPfad
SuchOp
Wert
*
Operator
Feld
String
Operator, String
Text, Zahl, Datum, Zeit
Operator
Beschreibung
Tabelle, für die eine Auswahl Datensätze zurückgegeben werden soll
Ohne Angabe Haupttabelle
Verbindungsparameter bei mehrfacher Suche
Objektfeld zum Suchen von Attributen
Name oder Pfad des Attributs
Suchoperator (Vergleichsoperator)
Zu vergleichender Wert
Weiterer Suchbegriff folgt
Beschreibung
Kapitel: Suchen
QUERY BY ATTRIBUTE sucht nach Datensätzen, die zum Suchstring passen, definiert über die Parameter ObjektFeld, AttributPfad,
SuchOp und Wert, und gibt eine Datensatzauswahl für Tabellenname zurück.
Hinweis: Weitere Informationen zu Objektfeldern (neu in 4D v15) finden Sie im Abschnitt Datenfeldtyp Objekt.
QUERY BY ATTRIBUTE ändert die aktuelle Auswahl von Tabellenname für den aktuellen Prozess und macht den ersten Datensatz
der neuen Auswahl zum aktuellen Datensatz. Wird der Parameter Tabellenname weggelassen, gilt der Befehl für die Standardtabelle.
Ist keine Standardtabelle vorhanden, tritt ein Fehler auf.
Der optionale Parameter KonjOp verbindet QUERY BY ATTRIBUTE Aufrufe in mehrfachen Suchen. Die logischen Operatoren sind
dieselben wie im Befehl QUERY:
Konjunktion Symbol für QUERY BY ATTRIBUTE
UND
ODER
Außer
&
|
#
Der Parameter KonjOp wird nicht bei einer einfachen Suche bzw. für den ersten Aufruf von QUERY BY ATTRIBUTE in einer
mehrfachen Sucheverwendet. Lassen Sie ihn in einer mehrfachen Suche weg, wird standardmäßig der Operator UND (&) verwendet.
In ObjektFeld übergeben Sie das Objektfeld, nach dessen Attribut(en) Sie suchen wollen. Gehört es zu einer Eine-Tabelle, definiert in
Tabellenname mit einer automatischen oder manuellen Verknüpfung, kann ObjektFeld zu einer anderen Tabelle gehören.
In AttributPfad übergeben Sie den Namen oder Pfad des Attributs, dessen Werte Sie vergleichen wollen. Übergeben Sie ein
einzelnes Attribut, z.B. "Alter", werden alle Attribute mit diesem Namen im Datensatz verglichen. Übergeben Sie einen Pfad, z.B.
"Kinder.weiblich.Alter", werden nur dazu passende Attribute im Datensatz verglichen.
Ist ein Attribut "x" ein Array, sucht QUERY BY ATTRIBUTE nach Datensätzen mit einem Attribut "x", in dem mindestens ein Element
zum Suchkriterium passt. Zur Suche in Array Attributen muss im Befehl QUERY BY ATTRIBUTE angegeben werden, dass Attribut
"x" ein Array ist, d.h. an den Namen in AttributPfad wird ".[]" angefügt (siehe Beispiel 3).
Hinweise:
Beachten Sie, dass Attributnamen Groß- und Kleinschreibung berücksichtigen. Im gleichen Datensatz wird also zwischen dem
Attributnamen "MeinAtt" und "meinAtt" unterschieden.
Mehrere Attributnamen werden zusammengezogen. Beispiel: " mein erstes Attribut .mein zweites Attribut " wird interpretiert als
"mein erstes Attribut.mein zweites Attribut".
Der Parameter SuchOp ist der Vergleichsoperator zwischen ObjektFeld und Wert. Sie können folgende Symbole übergeben:
Vergleich
Symbol für QUERY BY ATTRIBUTE
Ist gleich
=
Ist ungleich
#
Kleiner als
<
Größer als
>
Kleiner als oder gleich <=
Größer als oder gleich >=
Hinweis: Sie können den Vergleichsoperator auch in Textform angeben. Weitere Informationen dazu finden Sie unter dem Befehl
QUERY.
Der Inhalt von Wert wird mit AttributPfad verglichen. Wert kann jeder Ausdruck sein, der denselben Datentyp wie AttributPfad
bewertet. Er wird einmal zu Beginn der Suche bewertet und nicht für jeden Datensatz. Für eine Suche nach einem String innerhalb
eines anderen (Suche mit "enthält") setzen Sie in Wert den Joker (@), um den gesuchten String zu isolieren, also z.B. "@Schmid@".
In diesem Fall profitiert die Suche jedoch nur teilweise von dem Index (Kompaktheit der Datenspeicherung).
Die Struktur einer Suche nach Attribut lautet wie folgt:
- 90 -
QUERY BY ATTRIBUTE([Tabellenname];[Tabellenname]ObjektFeld;"Attribut1.Attribut2";=;Wert)
Hinweis: Für die Operatoren (außer #) gilt implizit, dass das Objektfeld ein Attribut enthält. Beim Operator # kann es jedoch
undefiniert sein (siehe nächster Abschnitt).
Den Operator # verwenden
Bei Objektfeldern wählt der Operator "#" Datensätze aus, für die kein Attribut des Feldes auf den angegebenen Wert zutrifft. Das
bewertet 4D in diesem Kontext in ähnlicher Weise:
Felder, deren Wert des Attributs unterschiedlich ist vom angegebenen Wert
Felder, deren Wert des Attributs nicht vorhanden ist (oder einen Null Wert enthält)
Beispiel 1: Diese Suche gibt Datensätze mit den Personen zurück, die einen Hund haben, dessen Name nicht Rex ist und Datensätze
von Personen, die keinen Hund oder einen Hund ohne Namen haben:
QUERY BY ATTRIBUTE([People];[People]Animals;"dog.name";#;"Rex")
Beispiel 2: Diese Suche gibt Datensätze zurück, für die [Table]ObjectField ein Objekt mit einem Attribut Attribute1 enthält, das selbst
ein Objekt mit einem Attribut attribute2 ist, dessen Wert ungleich value ist und Datensätze, deren Objektfelder nicht attribute1 oder
attribute2 enthalten:
QUERY BY ATTRIBUTE([Table] ;[Table]ObjectField ;"attribute1.attribute2";#;value)
Dieses Prinzip gilt auch bei Array Attributen.
Beispiel 3: Diese Suche gibt Datensätze der Personen zurück, die keine Adresse in Paris haben.
QUERY BY ATTRIBUTE([People];[People]OB_Field;"locations[].city";#;"paris")
Mehrfache Suchen einrichten
Für mehrfache Suchen nach Attributen gelten folgende Regeln:
Das erste Suchkriterium darf keinen Verknüpfungsoperator enthalten.
Jedes nachfolgende Kriterium kann mit einem Verknüpfungsoperator beginnen. Lassen Sie ihn weg, wird standardmäßig der
Operator UND (&) verwendet.
Die einzelnen Suchaufrufe müssen den Parameter * verwenden. Der letzte Aufruf benötigt keinen *.
QUERY BY ATTRIBUTE kann mit QUERY Befehlen gemischt werden.
Um die Suche auszuführen, lassen Sie im letzten Aufruf von QUERY BY ATTRIBUTE den Parameter * weg. Als Alternative
können Sie auch den Befehl QUERY nur mit der Tabelle ausführen, d.h. ohne die anderen Parameter (der Sucheditor erscheint
nicht; an seiner Stelle wird die gerade definierte mehrfache Suche ausgeführt).
Hinweis: Jede Tabelle besitzt ihre eigenen aktuellen Suchläufe. Sie können also mehrere Suchläufe gleichzeitig anlegen, d.h. eine
pro Tabelle. Für die eindeutige Zuordnung müssen Sie den Parameter Tabellenname angeben oder die Standardtabelle setzen.
Egal, auf welche Weise eine Suche definiert wurde, gilt folgendes:
Dauert die Ausführung der aktuellen Suchoperation etwas länger, zeigt 4D automatisch eine Meldung mit einem Ablaufbalken.
Sie lässt sich über die Befehle MESSAGES ON und MESSAGES OFF ein- und ausschalten. Erscheint ein Ablaufbalken, kann
der Benutzer bei Bedarf auf die Schaltfläche Stopp klicken, um die Suche zu unterbrechen. Ist die Suche abgeschlossen, wird
OK auf 1 gesetzt; wird sie unterbrochen, wird OK auf 0 (Null) gesetzt.
Sind indizierte Objektfelder spezifiziert, wird die Suche, immer wenn möglich, optimiert (nach indizierten Feldern wird zuerst
gesucht) und reduziert so den Zeitaufwand.
Datumswerte in Objekt
Datumsangaben werden in Objekten gemäß den Einstellungen der Datenbank gespeichert; standardmäßig wird die Zeitzone
berücksichtigt (siehe Selector JSON use local time unter dem Befehl SET DATABASE PARAMETER).
!1973-05-22! -> "1973-05-21T23:00:00.000Z"
Diese Einstellung wird auch beim Suchen berücksichtigt. Sie müssen sich nicht darum kümmern, wenn Sie Ihre Anwendung immer am
gleichen Ort verwenden und die Einstellungen auf allen Rechnern, die auf die Daten zugreifen, gleich sind. Folgende Suche gibt dann
z.B. Datensätze mit dem Attribut Geburtsdatum ist gleich !1973-05-22! (gesichert als "1973-05-21T23:00:00.00Z") korrekt zurück.
Dieses Beispiel gilt für Deutschland GMT Winterzeit - 1 h: 22.Mai 1973 0:00 ist somit 21.Mai 1973 23:00:
QUERY BY ATTRIBUTE([Persons];[Persons]OB_Info;"Geburtsdatum";=;!1973-05-22!)
Wollen Sie nicht die GMT Einstellungen verwenden, schreiben Sie folgende Anweisung:
SET DATABASE PARAMETER(JSON use local time;0)
- 91 -
Beachten Sie, dass die Reichweite dieser Einstellung nur der Prozess ist. Führen Sie diese Anweisung aus, wird 1. Oktober 1965
auch als "1965-10-01T00:00:00.000Z" gespeichert. Sie müssen denselben Parameter jedoch vor dem Starten Ihrer Suchen setzen:
SET DATABASE PARAMETER(JSON use local time;0)
QUERY BY ATTRIBUTE([Persons];[Persons]OB_Info;"Geburtsdatum";=;!1976-11-27!)
Beispiel 1
In diesem Beispiel ist das Attribut "Alter" entweder ein String oder eine Ganzzahl. Wir wollen Personen im Alter 20 bis 29 finden. Die
beiden ersten Zeilen suchen das Attribut als Ganzzahl (>=20 und < 30), die letzte Zeile sucht das Feld als String (startet mit "2", ist
aber ungleich "2")
QUERY BY ATTRIBUTE([Persons];[Persons]OB_Info;"Alter";>=;20;*)
QUERY BY ATTRIBUTE([Persons]; & ;[Persons]OB_Info;"Alter";<;30;*)
QUERY BY ATTRIBUTE([Persons];|;[Persons]OB_Info;"Alter";=;"2@";*)
QUERY BY ATTRIBUTE([Persons]; & ;[Persons]OB_Info;"Alter";#;"2") // zuletzt kein * setzen, um die
Ausführung zu starten
Beispiel 2
Mit dem Befehl QUERY BY ATTRIBUTE können Sie auch nach Datensätzen suchen, die bestimmte Attribute haben bzw. nicht
haben. Dazu müssen Sie ein leeres Objekt verwenden:
//Finde Datensätze, für die im Objektfeld email definiert ist
C_OBJECT($undefined)
QUERY BY ATTRIBUTE([Persons];[Persons]Info;"email";#;$undefined)
//Finde Datensätze, für die im Objektfeld PLZ NICHT definiert ist
C_OBJECT($undefined)
QUERY BY ATTRIBUTE([Persons];[Persons]Info;"PLZ";=;$undefined)
Beispiel 3
Nach einem Feld mit Array Attributen suchen. Mit den beiden folgenden Datensätzen:
{
"name":"martin",
} ] } , {
"city":"lyon"
"locations" : [ {
"kind":"office",
"name":"smith",
"locations" : [ {
} , {
"kind":"office",
"city":"paris"
"kind":"home",
"city":"paris"
} ] }
... findet QUERY BY ATTRIBUTE Personen mit einer Adresse in "paris". Dazu schreiben Sie folgende Anweisung:
//setzen Sie das Array Attribut mit der Syntax ".[]"
QUERY BY ATTRIBUTE([People];[People]OB_Field;"locations.[].city";=;"paris")
//wählt "martin" und "smith"
Hinweis: Haben Sie im selben Array Attribut mehrere Kriterien definiert, wird das passende Kriterium nicht zwingend auf dasselbe
Array Element angewendet. Im folgenden Beispiel gibt die Suche "smith" zurück, weil es ein Element "locations" mit "kind" ist gleich
"home" hat und ein Element "locations" mit "city" ist gleich "paris", selbst wenn es nicht dasselbe Element ist:
QUERY BY ATTRIBUTE([People];[People]OB_Field;"locations.[].kind";=;"home";*)
QUERY BY ATTRIBUTE([People]; & ;[People]OB_Field;"locations.[].city";=;"paris")
//wählt "smith"
- 92 -
WEB Is server running
WEB Is server running -> Funktionsergebnis
Parameter
Funktionsergebnis
Typ
Boolean
Beschreibung
True, wenn der Web Server läuft, sonst False
Beschreibung
Eingeführt mit 4D v14 R2
Die neue Funktion WEB Is server running (Kapitel Web Server) gibt True zurück, wenn der in 4D integrierte Web Server läuft;
False, wenn er nicht läuft.
Diese Funktion gibt den Aktivitätsstatus des Web Servers zurück, wo er gerade ausgeführt wird:
Kontext der Ausführung
Zeigt den Status von
4D Anwendung im Einzelplatz
4D Server
4D remote Modus (lokaler Prozess)
4D remote Modus (4D Server Serverprozedur)
4D remote Modus (andere 4D remote Serverprozedur)
Lokaler 4D Web Server
4D Server Web Server
Lokaler 4D Web Server
4D Server Web Server
Remote 4D Web Server
Beispiel
Prüfen, ob der Web Server läuft:
If(WEB Is server running)
... //verschiedene Aktionen ausführen
End if
- 93 -
4D Server
4D Server, 64-bit Version für OS X (Preview)
Seite Real Time Monitoring
Neue Netzwerkschicht ServerNet
- 94 -
4D Server, 64-bit Version für OS X (Preview)
Mit v15 bietet 4D eine Vorschau der 64-bit Version von 4D Server für OS X. Das v14 R-Release Programm enthielt bereits
verschiedene Vorabversionen.
Damit können Ihre 4D Server Anwendungen die ganze Bandbreite von Apple Rechnern mit 64-bit nutzen.
Weitere Informationen zu Features und Voraussetzungen finden Sie im Abschnitt 4D Server 64-bit für OS X verwenden des 4D
Server Handbuchs.
Hinweis zur Implementierung: Das Programm 4D Server 64-bit Version für OS X selbst ist final. Jedoch benötigt die
Netzwerkschicht ServerNet noch ein paar Optimierungen und es wird nicht empfohlen, die 4D Server 64-bit Version für OS X in der
Produktion einzusetzen.
Die Vorabversionen wurden Schritt für Schritt weiterentwickelt. Diese Tabelle zeigt den Status der jeweils verfügbaren
Funktionalitäten:
Feature/Technologie
Aktueller Status
Auf dem Server generierte Diagramme
HTTP Client (Verwalten von Client Zertifikaten)
4D Internet Commands (Plug-In)
4D Pack (Plug-In)
4D ODBC Pro (Plug-In)
4D for OCI (Plug-In)
Kommunikation serieller Port
Dialogfenster für Import/Export
Etiketteneditor
Seit v14 R4 verfügbar
Seit v14 R4 verfügbar
Seit v14 R4 verfügbar
Seit v14 R5 verfügbar
In v15 verfügbar
In v15 verfügbar (siehe 4D for OCI)
Derzeit deaktiviert
Derzeit deaktiviert
Derzeit deaktiviert
- 95 -
Seite Real Time Monitoring
Eingeführt mit 4D v14 R3
Die Seite Real Time Monitor (RTM) des 4D Server Verwaltungsfensters wurde erweitert, um ausführlichere Information zur
Fehlersuche sowie Optimierungen zu zeigen:
Es gibt neue Features (Snapshot, Details...)
Für jede Operation erscheint zusätzliche Information
Hinweis: Der Befehl GET ACTIVITY SNAPSHOT wurde ebenfalls erweitert, d.h. er gibt auch zusätzliche Information zurück.
Erweiterter Modus
Die Seite RTM kann jetzt bei Bedarf für jede gelistete Operation zusätzliche Information anzeigen. Drücken Sie dazu die
Umschalttaste (Shift-Taste) und wählen die gewünschte Operation. Die verfügbare Information erscheint ungefiltert im Bereich
Details, d.h. so wie sie vom Befehl GET ACTIVITY SNAPSHOT zurückgegeben wird. Je nach der gewählten Operation sind
unterschiedliche Informationen verfügbar.
Hier ein Beispiel für angezeigte Information im Standardmodus:
- 96 -
Im erweiterten Modus (Operation mit gedrückter Umschalttaste markieren) erscheint zusätzliche Information:
Schaltfläche Snapshot
Über die Schaltfläche Snapshot können Sie alle Operationen, die im RTM Bereich angezeigt werden, sowie dazugehörige Details
(Prozess-Details und Unteroperationen) in die Zwischenablage kopieren:
Operationen für mindestens 5 Sekunden anzeigen
Markieren Sie die Option Operationen für mindestens 5 Sekunden anzeigen, werden alle auf der Seite gelisteten Operationen
mindestens fünf Sekunden lang angezeigt, selbst wenn die Ausführung der Operation bereits beendet ist:
Beibehaltene Operationen erscheinen in der Auflistung in Grauschrift.
Diese Option ist hilfreich, um Information über nur kurz ablaufende Operationen zu erhalten.
Zusätzliche Information
Beim Auswählen einer Operation auf der Seite erscheinen im Bereich Details folgende Informationen:
Erzeugt auf: Gibt an, ob die Operation von einer Operation auf dem Client stammt (Erzeugt auf Client) oder explizit auf dem
Server gestartet wurde, entweder über eine Serverprozedur oder über die Option "Auf dem Server ausführen" (Erzeugt auf
Server).
Operation Details: Art der Operation und bei Suchoperationen Suchplan.
Unteroperationen (wenn vorhanden): Unteroperationen zur gewählten Operation, z.B. verknüpfte Datensätze vor einem
Hauptdatensatz löschen
Prozess-Details: Je nach Operationsart zusätzliche Information zu Tabelle, Feld, Prozess oder Client.
Ablaufmeldungen aus
- 97 -
Da die Seite RTM jetzt alle Informationen zu laufenden Operationen anzeigt, erscheinen die standardmäßigen Fenster mit
Ablaufmeldungen nicht mehr auf dem Server Rechner.
Wenn Sie Ablaufmeldungen anzeigen wollen, müssen Sie explizit den Befehl MESSAGES ON auf dem Server aufrufen.
- 98 -
Neue Netzwerkschicht ServerNet
Eingeführt in 4D v14 R5
4D Applikationen in v15 enthalten die neue Netzwerk-Schicht (network layer) ServerNet für die Kommunikation zwischen 4D Server
und remote 4D Rechnern (Clients). ServerNet basiert auf einer modernen und robusten API, ist leicht zu warten und ermöglicht uns,
die neuesten Netzwerktechnologien zu implementieren, die auch für hohe Performance sorgen.
Hinweis zur Implementation: Die Netzwerk-Schicht ServerNet ist in der 4D Version v15 als "Vorschau" verfügbar.
Die bisherige Netzwerk-Schicht "legacy" wird zur Wahrung der Kompatibilität zu vorhandenen Anwendungen weiter unterstützt. Neu
angelegte Datenbanken verwenden automatisch ServerNet.
Es gibt neue Optionen, um ServerNet zu aktivieren/deaktivieren.
Die legacy Netzwerk-Schicht aktivieren oder deaktivieren
Es gibt zwei Möglichkeiten, um die legacy Netzwerk-Schicht in Ihrem 4D Server jederzeit zu aktivieren bzw. deaktivieren. Sie können
entweder:
die Option Verwende legacy Netzwerk-Schicht in den Datenbank-Eigenschaften (siehe unten)
oder die Konstante Use legacy Network Layer im Befehl SET DATABASE PARAMETER verwenden (mehr dazu siehe
Abschnitt Get database parameter und SET DATABASE PARAMETER)
Die neue Option liegt auf der Seite Kompatibilität:
Hinweis: Diese Option ist in 4D Server 64-bit für OS X nicht verfügbar, hier lässt sich nur ServerNet verwenden.
Standardmäßig gilt folgendes:
Für neue Datenbanken, die mit 4D v15 (oder 4D V14 R5) und neuer angelegt werden, ist sie nicht markiert (sie verwenden die
neue Schicht ServerNet)
Für vorhandene konvertierte Datenbanken ist sie markiert (sie verwenden die legacy Netzwerk-Schicht)
Sie können die Option je nach Ihren Bedürfnissen aktivieren oder deaktivieren, z.B. während der Migrationsphase aller ClientAnwendungen (siehe unten).
Beachten Sie, dass die Änderung erst nach dem Neustart der Anwendung berücksichtigt wird. Auch Client-Anwendungen, die sich mit
der neuen Netzwerk-Schicht anmelden können, müssen neu gestartet werden. Zum Verwenden von ServerNet ist mindestens die
Client-Version von 4D v14 R4 erforderlich (siehe unten).
Doppelklickbare 4D Clients migrieren
Aktivieren Sie die Schicht ServerNet in Ihrer 4D Server Applikation, können sich nur dazu passende 4D Client Anwendungen
anmelden:
Clients in Version 4D v15 (oder ab 4D v14 R4) und neuer können sich ohne Änderung anmelden
Clients älterer Versionen müssen erst aktualisiert werden, damit sie sich an den Server anmelden können.
Arbeitet Ihre Anwendung mit doppelklickbaren Clients älter als v14 R4, und wollen Sie den automatischen Mechanismus von 4D
Server verwenden, um Ihre aktualisierten Client Anwendungen über das Netzwerk zu verteilen, müssen Sie zum Migrieren folgende
Prinzipien beachten:
Nicht-kompatible Clients können sich nur an einen 4D Server anmelden, der die legacy Netzwerk-Schicht verwendet.
Aktualisierte Clients können ihre Protokolle dynamisch anpassen und sich so an einen 4D Server v15 und höher anmelden, egal,
welche Netzwerk-Schicht der Server verwendet.
Die Vorgehensweise sollte in folgenden Schritten erfolgen:
1. Erstellen Sie aktualisierte Client Anwendungen mit 4D v15 oder höher.
- 99 -
2. Starten Sie 4D Server v15 mit der markierten Einstellung "Verwende legacy Netzwerk-Schicht".
Mit dieser Konfiguration können sich alle Clients anmelden.
Achtung: Diese Option wird von 4D Server v15 64-bit für OS X nicht unterstützt.
3. Warten Sie einen gewissen Zeitraum ab, bis sich alle Clients angemeldet und die neue Version geladen haben.
Das kann einen Tag, eine Woche oder länger dauern. Während dieser Übergangsphase können sich sowohl bisherige als auch
aktualisierte Clients an den Server mit der legacy Netzwerk-Schicht anmelden.
4. Sind alle Clients aktualisiert, können Sie die legacy Netzwerk-Schicht deaktivieren und schließlich auf dem Server auf ServerNet
wechseln.
Nachfolgende Darstellung veranschaulicht die Vorgehensweise:
Client Anfragen protokollieren
Es empfiehlt sich, während dem Migrationsprozess das Logbuch "Diagnostic log recording" zu aktivieren. Hier protokolliert 4D Server
dann jede Update Anfrage des Client, so dass Sie den Prozess überwachen können. Dieses Logbuch wird nicht standardmäßig
aktiviert. Sie müssen dazu den Befehl SET DATABASE PARAMETER aufrufen und die Konstante Diagnostic log recording auf 1
setzen.
Für jede Update Anfrage wird folgende Information protokolliert:
IP Client
Client Version
Ereignis "Update Client"
Die Überprüfung dieses Logbuchs ist auch nach der Umstellung des Server auf die Netzwerkschicht ServerNet hilfreich, um
sicherzustellen, dass alle Clients korrekt aktualisiert wurden. Versucht ein nicht-kompatibler Client, sich anzumelden, protokolliert der
Server wie folgt:
IP Client
Client Version
Ereignis "Anmeldung fehlgeschlagen"
In diesem Fall können Sie beispielsweise entscheiden, den Client manuell zu aktualisieren.
- 100 -
4D SQL Server
Neues Feld KEYWORD in Systemtabelle _USER_INDEXES
ALTER DATABASE DISABLE TRIGGERS
ALTER TABLE DISABLE TRIGGERS
Port Nummer per Programmierung verwalten
- 101 -
Neues Feld KEYWORD in Systemtabelle _USER_INDEXES
Eingeführt mit 4D v14 R2
Die Systemtabelle _USER_INDEXES enthält jetzt das neue Boolean Feld KEYWORD. So können Sie Volltext Indizes erkennen.
_USER_INDEXES
Beschreibt die Benutzer Indizes der Datenbank
KEYWORD
BOOLEAN True wenn Index auf Schlüsselwort basiert; sonst False
Volltext Indizes können vom Typ Cluster oder BTree sein.
- 102 -
ALTER DATABASE DISABLE TRIGGERS
ALTER DATABASE {ENABLE | DISABLE} {INDEXES | CONSTRAINTS | TRIGGERS}
Beschreibung
Eingeführt mit 4D v14 R3
Mit dem Befehl ALTER DATABASE können Sie Trigger für alle Tabellen der aktuellen Datenbank für die aktuelle Sitzung aktivieren
oder deaktivieren, d.h. global für alle Benutzer und alle Prozesse bis zum nächsten Neustart.
Um Trigger auf Tabellenebene zu verwalten, gibt es den Befehl ALTER TABLE (siehe ALTER TABLE DISABLE TRIGGERS).
Beispiel
Beispiel für Import mit temporärer Deaktivierung aller SQL Optionen:
Begin SQL
ALTER DATABASE DISABLE INDEXES;
ALTER DATABASE DISABLE CONSTRAINTS;
ALTER DATABASE DISABLE TRIGGERS;
End SQL
SQL EXECUTE SCRIPT("C:\Exported_data\Export.sql";SQL On error continue)
Begin SQL
ALTER DATABASE ENABLE INDEXES;
ALTER DATABASE ENABLE CONSTRAINTS;
ALTER DATABASE ENABLE TRIGGERS;
End SQL
- 103 -
ALTER TABLE DISABLE TRIGGERS
ALTER TABLE sql_name
{ADD column_definition [PRIMARY KEY] [TRAILING] |
DROP sql_name |
ADD primary_key_definition |
DROP PRIMARY KEY |
ADD foreign_key_definition |
DROP CONSTRAINT sql_name |
[{ENABLE | DISABLE} REPLICATE] |
[{ENABLE | DISABLE} LOG] |
[{ENABLE | DISABLE} AUTO_INCREMENT] |
[{ENABLE | DISABLE} AUTO_GENERATE] |
[{ENABLE | DISABLE} TRIGGERS] |
SET SCHEMA sql_name}
Beschreibung
Eingeführt mit 4D v14 R3
Mit dem Befehl ALTER TABLE können Sie während der aktuellen Sitzung Trigger für die Tabelle sql_name aktivieren oder
deaktivieren, d.h. global für alle Benutzer und alle Prozesse bis zum nächsten Neustart.
Um Trigger global auf Datenbankebene zu verwalten, gibt es den Befehl ALTER DATABASE (siehe ALTER DATABASE DISABLE
TRIGGERS).
- 104 -
Port Nummer per Programmierung verwalten
Eingeführt mit 4D v14 R3
Sie können den Port des 4D SQL Server über einen neuen Datenbankparameter per Befehl erhalten, setzen oder ändern. Weitere
Informationen dazu finden Sie im Abschnitt Get database parameter und SET DATABASE PARAMETER.
- 105 -
Optimierungen
4D Web Cache standardmäßig aktiviert
Optimierungen bei SQL Select
Netzwerksicherheit
- 106 -
4D Web Cache standardmäßig aktiviert
Eingeführt mit 4D v14 R5
Der 4D Web Cache ist für statische Ressourcen in neu erstellten Anwendungen standardmäßig aktiviert, d.h. in den DatenbankEigenschaften ist die Option Benutze 4D Web Cache jetzt für neue Datenbanken markiert:
Für konvertierte Anwendungen aus einer früheren Version bleibt diese Option unverändert.
- 107 -
Optimierungen bei SQL Select
SQL Anweisungen mit SELECT DISTINCT
Eingeführt mit 4D v14 R4
Die Operationen mit SELECT DISTINCT wurden optimiert, die in SQL Anweisungen auf eine einzelne Tabelle bzw. eine einzelne
Spalte angewendet werden.
Hierzu ein gängiges Beispiel. Der folgende Code wird in 4D v15 und neuer schneller ausgeführt:
Begin SQL
SELECT DISTINCT Names FROM Employees INTO :$Emp;
End SQL
Anweisungen mit SQL Select Group by und Order by
Eingeführt mit 4D v14 R5
Die SQL SELECT Anweisungen mit GROUP BY und ORDER BY wurden in verschiedenen Konfigurationen optimiert:
SELECT FROM GROUP BY oder SELECT FROM ORDER BY für eine einzelne Tabelle,
SELECT FROM GROUP BY oder SELECT FROM ORDER BY für mehrere Tabellen und mit "inner joins".
Die Optimierung gilt nur für einfache Spaltenreferenzen, nicht für Ausdrücke.
So wird in 4D v15 und neuer der folgende Code rascher ausgeführt:
Nach Beispielen sortieren
Begin SQL
DROP TABLE IF EXISTS T1;
DROP TABLE IF EXISTS T2;
CREATE TABLE T1 (C1 INT);
CREATE TABLE T2 (C2 INT);
INSERT INTO T1(C1) VALUES
INSERT INTO T1(C1) VALUES
INSERT INTO T1(C1) VALUES
INSERT INTO T2(C2) VALUES
INSERT INTO T2(C2) VALUES
End SQL
(1);
(2);
(3);
(2);
(3);
ARRAY LONGINT($result;0)
ARRAY LONGINT($result1;0)
ARRAY LONGINT($result2;0)
// Ein einfaches Beispiel von ORDER BY mit hinzugefügtem T1 und T2.
// $result enthält [2, 3].
Begin SQL
SELECT C1
FROM T1, T2
WHERE C1=C2
ORDER BY C1
INTO :$result
End SQL
// ORDER BY funktioniert auch, wenn mehrere Spalten verwendet werden.
// Sowohl $result1 und $result2 enthalten [2, 3].
Begin SQL
SELECT C1, C2
FROM T1, T2
WHERE C1=C2
ORDER BY C1, C2
INTO :$result1, :$result2
End SQL
// Nur einfache Spaltenreferenzen werden optimiert. Wird ein Ausdruck
- 108 -
// wie unten gezeigt (C1 + 1), für die Auswahl verwendet, läuft die Ausführung
// nicht schneller. $result wird (weiterhin korrekt) [3, 4] enthalten.
Begin SQL
SELECT C1 + 1
FROM T1, T2
WHERE C1=C2
ORDER BY C1
INTO :$result
End SQL
// Für eine Referenz innerhalb der Auswahl können Sie auch einen Index verwenden.
// Wie bereits erwähnt, darf die Auswahl für schnelles Ausführen nur einfache Spaltenreferenzen
enthalten.
// $result wird [ 2, 3 ] enthalten.
Begin SQL
SELECT C1
FROM T1, T2
WHERE C1=C2
ORDER BY 1
INTO :$result
End SQL
Nach Beispiel gruppieren
Begin SQL
DROP TABLE IF EXISTS T1;
DROP TABLE IF EXISTS T2;
CREATE TABLE T1 (C1 INT, C3 INT);
CREATE TABLE T2 (C2 INT);
INSERT INTO T1(C1, C3) VALUES (3,
INSERT INTO T1(C1, C3) VALUES (1,
INSERT INTO T1(C1, C3) VALUES (2,
INSERT INTO T1(C1, C3) VALUES (3,
INSERT INTO T1(C1, C3) VALUES (2,
INSERT INTO T1(C1, C3) VALUES (3,
INSERT INTO T2(C2) VALUES (2);
INSERT INTO T2(C2) VALUES (3);
End SQL
1);
1);
1);
1);
1);
1);
ARRAY LONGINT($result;0)
ARRAY LONGINT($result1;0)
ARRAY LONGINT($result2;0)
//Ein einfaches Beispiel GROUP BY mit hinzugefügtem T1 und T2.
//$result wird [2, 3] enthalten. Bitte beachten: Es gibt keine Garantie, dass Gruppen
zurückgegeben werden.
//in aufsteigender Reihenfolge kann $result [3, 2] sein.
Begin SQL
SELECT C1
FROM T1, T2
WHERE C1=C2
GROUP BY C1
INTO :$result
End SQL
// Hier ein einfaches Beispiel einer Aggregatsanfrage.
// Da C3 immer 1 ist, für jede Gruppe (einmaliger Wert C1),
// SUM(C3) ist die Anzahl der Wiederholungen.
// $result1 wird [2, 3] enthalten.
// $result2 wird auch [2, 3] enthalten.
Begin SQL
SELECT C1, SUM(C3)
FROM T1, T2
WHERE C1=C2
GROUP BY C1
INTO :$result1, :$result2
End SQL
- 109 -
Netzwerksicherheit
SSL v2 und v3 deaktiviert
Eingeführt mit 4D v14 R4
Die Standardeinstellungen für sichere Netzwerkkommunikation wurden weiterentwickelt, um die Sicherheit zu erhöhen: Die
Protokolle SSL v2 und SSL v3 wurden dauerhaft deaktiviert (hardcodierte Deaktivierung), da sie potentiell angreifbar sind. Jetzt
wird standardmäßig nur noch TLS v1 akzeptiert.
Diese Änderung gilt für alle sicheren Verbindungen in 4D, d.h. für:
HTTP Server Verbindungen
SQL Server Verbindungen
Client/Server Verbindungen
HTTP Client Verbindungen
Als Folge davon müssen Sie u.U. die Anforderungen für Ihre Anwendungen entsprechend anpassen. Das betrifft folgende
Verbindungen:
Browser oder HTTP Clients, die TLS nicht unterstützen, wie IE6 oder älter, können sich nicht mehr über das sichere Protokoll
(Port 443) an einen 4D Web Server/Web Service anmelden.
Die Befehle HTTP Get und HTTP Request können sich nicht länger im gesicherten Modus an andere Server anmelden, die
TSL nicht unterstützen.
Strengere Zertifzierung
Eingeführt mit 4D v14 R5
Die Features zur Sicherheit des Netzwerks wurden optimiert, um den Schutz Ihrer 4D Applikationen zu verstärken:
Schwache Verschlüsselungssysteme wurden entfernt
Die standardmäßige Länge des 4D Zertifizierungsschlüssel wurde auf 2048 bits erhöht
Sie können jetzt Ihre eigenen Verschlüsselungscodes für gesicherte Kommunikation verwenden
Diese Änderungen betreffen folgende gesicherten Verbindungen:
Client/Server
SQL Server
HTTP Client
- 110 -
4D Write Pro
Eingeführt mit 4D v14 R5
4D Write Pro ist der Nachfolger des Plug-Ins 4D Write.
4D Write Pro ist eine maßgebliche Entwicklung für 4D. Deshalb nutzen wir die Vorteile des R-Release Programms, um es Stück für
Stück auszuliefern. Die aktuelle Version enthält den ersten Schritt von 4D Write Pro als technische Vorschau. Sie fokusiert auf
Kompatibilität der Dokumente und HTML-formatierten E-Mails. In den nachfolgenden Schritten werden die Features und
Möglichkeiten zum Programmieren weiter ausgebaut.
Bitte beachten Sie folgendes:
4D Write Pro verwendet dieselbe Lizenz wie 4D Write
4D Write Pro ist kein Plug-In mehr, sondern voll in 4D integriert. So lässt es sich leichter verwalten und einsetzen.
Dokumentation zu 4D Write Pro
Die ausführliche Beschreibung der Features von 4D Write Pro, inkl. neue Programmiersprache Befehle, finden Sie im neuen
Handbuch 4D Write Pro Handbuch.
Über diese technische Vorschau
Nachfolgende Übersicht zeigt den aktuellen Status der grundlegenden Features:
Feature
4D Write Pro Bereich in einem Formular zeichnen
Neues leeres 4D Write Pro Dokument erstellen
4D Write Dokument in ein 4D Write Pro Objekt
importieren
4D Write Pro Objekt in ein Dokument oder in eine
Variable exportieren
Dokument über das Kontextmenü bearbeiten
Ausdrücke (Felder der Anwendung, Ergebnisse von
4D Methoden) einfügen
Inhalt eines Dokuments per Programmierung
bearbeiten
4D Write Pro Dokument drucken
Paginierung der Seiten verwalten
Auf Dokumenteigenschaften per Programmierung
zugreifen
4D Write Pro Dokument in einem Feld der
Anwendung speichern
Aktueller Status (R5
technische Vorschau)
Kommentar
Verfügbar
Verfügbar
WP New
Verfügbar
WP Import document oder WP New
Verfügbar
WP EXPORT DOCUMENT und WP
EXPORT VARIABLE
Verfügbar
Verfügbar
Teilweise verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
4D Write Pro Oberfläche
Status der Befehle in 4D Write Pro
4D Write Dokumente importieren
- 111 -
Nur 4D Befehle mit vorangestelltem "ST"
und "OBJECT"
4D Write Pro Oberfläche
Ist im 4D Write Pro Bereich die Eigenschaft Kontextmenü markiert (siehe Einen 4D Write Pro Bereich erstellen), steht Benutzern
im Anwendungsmodus ein leicht verständliches Kontextmenü zur Verfügung:
Dieses Menü enthält alle Features, die derzeit für 4D Write Pro verfügbar sind. In der endgültigen Fassung sind dann alle
Funktionalitäten und Eigenschaften auch per Programmierung verfügbar.
Da zu diesem Zeitpunkt weder die Einteilung noch der Inhalt des Kontextmenüs definitiv sind, beschreiben wir die einzelnen Features
hier nicht näher. Klicken Sie einfach durch die verschiedenen Untermenüs, um ein Gefühl für die leistungsstarken Möglichkeiten von
4D Write Pro zu bekommen.
Hinweis: Diese technische Vorschau zeigt 4D Write Pro Dokumente standardmäßig im Seitenmodus Web. In diesem Modus erfolgt
der Zeilenumbruch im Text automatisch und die horizontale Scrollbar (falls gesetzt) ist deaktiviert. Wollen Sie eine horizontale
Scrollbar nutzen und haben Text mit fester Länge (definiert in der Eigenschaft "Seitengröße"), müssen Sie in den Seitenmodus
Normal wechseln.
- 112 -
Status der Befehle in 4D Write Pro
4D Write Pro bietet einige neue Befehle zum Verwalten von 4D Write Pro Bereichen. Die Beschreibung dieser Befehle finden Sie im
Kapitel 4D Write Pro Programmiersprache des 4D Write Pro Handbuchs.
Nachfolgende Übersicht zeigt die derzeit verfügbaren 4D Write Pro Befehle:
Befehlsname
WP EXPORT
VARIABLE
WP EXPORT
DOCUMENT
WP Import
document
WP New
Aktueller Status
Derzeit sind zwei Exportformate verfügbar
Ohne den Parameter Format müssen Sie die Dateiendung ".htm" oder ".html" verwenden; derzeit ist ein
Exportformat verfügbar.
Die ausführliche Liste der 4D Write Features, die derzeit in 4D Write Pro Objekten unterstützt werden, finden
Sie im Abschnitt 4D Write Dokumente importieren.
Die ausführliche Liste der 4D Write Features, die derzeit in 4D Write Pro Objekten unterstützt werden, finden
Sie im Abschnitt 4D Write Dokumente importieren.
Hinweis: Beachten Sie, dass in 4D Write Pro Bereichen nur Befehle aus den Kapiteln "Objekte (Formulare)" und "Mehrfachstil Text"
verwendet werden können (siehe Befehle aus dem Kapitel Objekte (Formulare) verwenden und Befehle aus dem Kapitel
Mehrfachstil Text verwenden).
- 113 -
4D Write Dokumente importieren
Ein grundlegendes Feature des neuen Objekts 4D Write Pro ist die Fähigkeit, vorhandene 4D Write Dokumente zu importieren und zu
konvertieren. So können Sie Applikationen migrieren, die derzeit das Plug-In 4D Write verwenden.
Hinweis zur Kompatibilität: Nur 4D Write Dokumente der neuesten Generation ("4D Write v7") werden unterstützt.
Ein 4D Write Dokument importieren
Es gibt zwei Wege, um 4D Write Dokumente in 4D Write Pro zu importieren:
Befehl WP Import document für 4D Write Dateien, die auf der Festplatte gespeichert sind
Befehl WP New für 4D Write Bereiche, die in BLOB Feldern gespeichert sind
Weitere Informationen dazu finden Sie in der Beschreibung zu diesen Befehlen.
Welche Eigenschaften von 4D Write werden übernommen?
Um die Migration zu vereinfachen, wollen wir möglichst viele 4D Write Features in 4D Write Pro Objekten unterstützen.
Dieser Abschnitt listet die Eigenschaften des Plug-In 4D Write auf, die nach einem Import über die Befehle WP Import document
oder WP New in einen 4D Write Pro Bereich übernommen werden.
Beachten Sie jedoch, dass es ein paar Unterschiede geben kann, die nicht als Fehler gewertet werden. Das gilt z.B. für die
Standardschrift von Aufzählungszeichen (Bullets) in 4D Write Pro oder minimale Konvertierung beim Typ Unterstrichen.
Dokument Info
Plug-In 4D Write
4D Write Pro
Erstelldatum & Zeit
Änderdatum & Zeit
Gesperrt
Titel
Betreff
Autor
Firma
Notizen
verfügbar
verfügbar
Nicht verfügbar (Objekteigenschaft Nur-Lesen verwenden)
verfügbar
verfügbar (nur Volltext)
verfügbar
verfügbar
verfügbar
Parameter für Anzeigen im Dokument
Plug-In 4D Write
4D Write Pro
Anzeigen Seite
Anzeigen Lineal
Anzeigen Rahmen
Anzeigen Kopfteil
Anzeigen Fußteil
Anzeigen erste Seite Kopfteil
Anzeigen erste Seite Fußteil
Anzeigen Bilder
Anzeigen Horizontale Bildlaufleiste
Anzeigen Vertikale Bildlaufleiste
Anzeigen Unsichtbare Zeichen
Anzeigen Referenzen
Anzeigen Spaltentrenner
Anzeigen H Splitter
Anzeigen V Splitter
Anzeigen Wysiwyg
Anzeigen Zoom
Nicht importiert (Im Kontextmenü Dokument->Seitenmodus verwenden)
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht importiert (Objekteigenschaft Horizontale Bildlaufleiste verwenden)
Nicht importiert (Objekteigenschaft Vertikale Bildlaufleiste verwenden)
Nicht verfügbar
Nicht importiert (ST SET OPTIONS verwenden)
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht importiert (Im Kontextmenü Dokument->Zoom verwenden)
Parameter für Dokument
- 114 -
Plug-In 4D Write
4D Write Pro
Einheit
Sprache
Spaltenanzahl
Spaltenabstand
Schusterj. und Hurenk.
Standardtabulatoren
Führende Tabulatoren
Farbe URL
Farbe angeklickte URL
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Parameter für Paginierung des Dokuments
Plug-In 4D Write
4D Write Pro
Breite der Seite
Höhe der Seite
Erste Seitennummer
Kopf- und Fußzeilen: Erste Seite anders
Kopf- und Fußzeilen: Linke/Rechte Seite anders
Seitenbindung
Linke/Rechte Seite
Seitenränder
Kopfteil Rand oben
Kopfteil Rand unten
Fußteil Rand oben
Fußteil Rand unten
Erste Seite Rand oben
Erste Seite Rand unten
Kopfteil erste Seite Rand oben
Kopfteil erste Seite Rand unten
Fußteil erste Seite Rand oben
Fußteil erste Seite Rand unten
Erste Seite ist Rechte Seite
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Verfügbar (temporär implementiert)
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Druckparameter für Dokument
Plug-In 4D Write
4D Write Pro
Papiertyp
Querformat
Breite
Höhe
Benutzerdefinierte Ränder
Skalierung
X Auflösung
Y Auflösung
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Nicht verfügbar
Bilder
Hinweis: 4D Write Pro unterstützt noch nicht eigenständige Bilder in Seiten. Nur im Text integrierte Bilder werden unterstützt. Sie
werden als URL Daten in das HTML Dokument importiert (eingebundene Bilder).
Plug-In 4D Write
4D Write Pro
X (links)
Y (oben)
Breite
Höhe
Seitennummer
Nach hinten
Nicht auf erster Seite
Bildformat (Größe angepasst, etc.)
Ist Ausdruck
Größe beibehalten
(& Position: absolut) (nur für Bilder in Seite)
(& Position: absolut) (nur für Bilder in Seite)
Verfügbar
Verfügbar
Nicht verfügbar
Nicht verfügbar]
Nicht verfügbar
Verfügbar
Nicht verfügbar
Nicht verfügbar
Eigenschaften für Zeichen
- 115 -
Plug-In 4D Write
4D Write Pro (span HTML Tags)
Kursiv
Fett
Durchgestrichen
Unterstrichen
Schatten
Exponent (hoch- oder tiefgestellt)
Großbuchstaben oder Kapitälchen
Schriftfamilie
Schriftgröße
Farbe Text
Farbe Texthintergrund
Farbe Unterstrichen
Farbe Durchgestrichen
Farbe Schatten
Benutzerdefiniert
Rechtschreibprüfung (Syntax & Grammatik an oder
aus)
Darstellung URL
Verfügbar
Verfügbar
Verfügbar
Verfügbar
Verfügbar
Verfügbar
Verfügbar
Verfügbar
Verfügbar
Verfügbar
Verfügbar
Verfügbar
Verfügbar
Verfügbar
Nicht verfügbar
Stilvorlage
Nicht verfügbar
Nicht verfügbar
Nicht importiert (Stilarten werden importiert, aber Stilvorlagen sind nicht
verfügbar)
Eigenschaften für Absatz
Plug-In 4D Write
4D Write Pro
Text ausrichten
Zeilenhöhe
Bullet/Punkte
Abstand links
Abstand rechts
Text einrücken
Rahmenlinie Stil
Rahmenlinie Farbe
Rahmen Hintergrundfarbe
Linker Rand
Rechter Rand
Oberer Rand & Oberer Rand innen
Unterer Rand & Unterer Rand innen
Abstand Rand
Stilvorlage
Tabulatoren
verfügbar
verfügbar
verfügbar
verfügbar
verfügbar
verfügbar
verfügbar
verfügbar
verfügbar
verfügbar
verfügbar
verfügbar
verfügbar
verfügbar
verfügbar
verfügbar
Hyperlink Aktion
Plug-In 4D Write
4D Write Pro
Öffne URL
Verfügbar
4D Methode ausführen Nicht verfügbar
Öffne Dokument
Nicht verfügbar
4D Ausdrücke
Plug-In 4D Write 4D Write Pro
4D Ausdruck
Datum & Zeit
HTML Ausdruck
RTF Ausdruck
Verfügbar
Verfügbar
NIcht verfügbar
NIcht verfügbar
Textdaten
Plug-In 4D Write
4D Write Pro
Hauptteil Textdaten Verfügbar
Kopfteil Textdaten Nicht verfügbar
Fußteil Textdaten
Nicht verfügbar
- 116 -
4D Internet Commands
4D Internet Commands, 64-bit version for OS X
SMTP_QuickSend
SMTP_Attachment
- 117 -
4D Internet Commands, 64-bit version for OS X
Eingeführt mit v14 R4
4D bietet eine 64-bit Version der 4D Internet Commands für OS X. So können Sie dieses Plug-In mit 4D Server, 64-bit für OS X
verwenden, der ab 4D v14 R3 verfügbar ist. Weitere Informationen dazu finden Sie im Abschnitt 4D Server, 64-bit Version für OS X
(Preview).
Die 64-bit Version dieses Plug-Ins wird wie bisherige Versionen installiert und eingesetzt, mit Ausnahme der unten gelisteten
Einschränkungen.
Mindestkonfiguration
Die 64-bit Version muss mit Version 14 R3 oder höher der 4D Server 64-bit Version für OS X verwendet werden.
Wie 4D Server benötigt die 64-bit Version ebenfalls OS X Version 10.9 (Mavericks) oder höher.
Unterstützung längerer Dateinamen
In der 64-bit Version von 4D Internet Commands für OS X sind Dateinamen nicht mehr auf 62 Zeichen begrenzt. Sie können jetzt auch
bis zu 1024 Zeichen lang sein, das ist die aktuelle standardmäßige Begrenzung für das Betriebssystem.
Diese Vorgabe gilt für alle Befehle, die Dateinamen verwalten, also für FTP, IMAP, MSG, POP, SMTP und IT Befehle.
Nicht unterstützte Features der Oberfläche
In Übereinstimmung mit der Benutzeroberfläche in OS X werden in der 64-bit Version folgende Features nicht unterstützt.
Ablaufbalken
Die 64-bit Version für OS X zeigt bei zeitaufwändigen Operationen keinen Ablaufbalken. Der Befehl FTP_Progress FTP_Progress
ist in der 64-bit Version überholt.
Bei Aufrufen in dieser Umgebung gibt er den Fehler -2201 zurück (nicht-implementiertes Feature).
Auswahldialog für Datei
In der 64-bit Version für OS X lassen sich keine Dialogfenster zum Auswählen einer Datei anzeigen. Die Parameter localPath bzw.
hostPath sind zwingend und müssen gültige Dateinpfade enthalten; andernfalls wird der Fehler -2201 (nicht-implementiertes Feature)
zurückgegeben. Das betrifft alle Befehle, die Dateinamen verwalten, also FTP, IMAP, MSG, POP, SMTP und IT Befehle.
Soll der Benutzer Dateien auf seinem Rechner auswählen können, empfehlen wir die in 4D integrierten Befehle zu verwenden, wie z.B.
Select document.
- 118 -
SMTP_QuickSend
SMTP_QuickSend ( hostName ; msgFrom ; msgTo ; subject ; message {; sessionParam}{; port}{; userName ; password} ) -> Function
result
Parameter
Type
hostName
msgFrom
msgTo
subject
message
String
Text
Text
Text
Text
Description
->
->
->
->
->
Host name or IP address
MailAddress or AddressList
MailAddress or AddressList
Subject of message (UTF-8 by default)
Message (UTF-8 by default)
0 or omitted = Do not use SSL but switchover allowed, 1 = Use SSL, 2 = Never use SSL (switchover
sessionParam Longint -> not allowed), 4 = Send HTML text without SSL, 5 = Send HTML text with SSL, 8 = Send Mime HTML
without SSL/TLS, 9 = Send Mime HTML with SSL/TLS
port
userName
password
Function result
Longint
Text
Text
Integer
->
->
->
<-
Number of port to use
User name for authentication
Password for authentication
Error Code
Beschreibung
Originally introduced in 4D v14 R5
The SMTP_QuickSend command now allows you to send messages with the Mime HTML format, with or without the SSL/TLS
protocol. Mime HTML (.mht or .mhtml file extension) is a Web page archive format that can merge the HTML code as well as external
resources such as images into a single document. It is supported by several browsers as well as MS Word, for example. Since this
format is supported by 4D Write Pro areas, you will easily be able to save and send 4D Write Pro areas including all their resources
by e-mail.
Pass 8 in sessionParam to format the message in Mime HTML and send it in standard mode.
Pass 9 in sessionParam to format the message in Mime HTML and send it in SSL/TLS mode.
These values correspond to usual combinations, however the sessionParam parameter is a actually a bit field and allows any custom
combination if you use bitwise operators:
Bit
number
0
1
2
Format used if bit is 1
Use SSL or use default behavior, connect in clear, then upgrade to SSL if possible.
Never upgrade, stay in non-encrypted mode even if upgrade is possible. Bit is ignored if SSL (bit-0) is selected.
Message body is HTML; set the header accordingly.
MHTML message, bit-2 (HTML) is ignored. User is responsible to set everything up, except "To", "From", "Date", and
"Subject"
3
Note: This command does not support converted databases running in "Non-Unicode" mode.
Beispiel
You saved a .mht document on your disk and want to send it by e-mail. To do this, you can write:
$Message:=Document to text("c:\\documents\\invitation.mht")
$Host:="smtp.gmail.com"
$ToAddress:="[email protected]"
$FromAddress:="[email protected]"
$Subject:="Let's party"
$Param:=9 //MHTML with SSL
$Port:=465 //SSL port of gmail
$User:="[email protected]"
$Password:="xyz&@!&@"
$Error:=SMTP_QuickSend($Host;$FromAddress;$ToAddress;$Subject;$Message;$Param;$Port;$User;$Password)
- 119 -
SMTP_Attachment
SMTP_Attachment ( smtp_ID ; fileName ; encodeType ; deleteOption {; attachmentID {; contentType}} ) -> Function result
Parameter
Type
Description
smtp_ID
fileName
Longint -> Message reference
Text
-> Name of file to attach
0 = No encoding (sends DataFork only) ±1 = BinHex ±2 = Base64; (sends DataFork only) ±3 =
encodeType Integer -> AppleSingle ±4 = AppleDouble ±5 = AppleSingle AND Base64 ±6 = AppleDouble AND Base64 ±7 =
UUEncode
deleteOption Integer -> 0 = Add to existing list, 1 = Replace all attachments with Filename, 2 = Remove only this attachment
attachmentID Text
-> ID of attachment (HTML messages only)
contentType Text
-> Content-type value to set
Function
result
<- Error Code
Integer
Beschreibung
Originally introduced in 4D v14 R4
Theme: IC Send Mail
The SMTP_Attachment command now accepts a new optional contentType parameter, allowing you to set the content type of the
attachment file.
By default, if the contentType parameter is omitted or contains an empty string, 4DIC automatically sets the content type of the
attachment file based on its extension. The following rules are applied:
Extension Content Type
jpg, jpeg
png
gif
pdf
doc
xls
ppt
zip
gz
json
js
ps
xml
htm, html
mp3
image/jpeg
image/png
image/gif
application/pdf
application/msword
application/vnd.ms-excel
application/vnd.ms-powerpoint
application/zip
application/gzip
application/json
application/javascript
application/postscript
application/xml
text/html
audio/mpeg
application/octet-stream
other
In contentType, you can now pass a string defining the content type (MIME type) for the file, for example "video/mpeg". This contenttype value will be set for the attachment, regardless of its extension.
Note: Pass an empty string ("") in attachmentID if you do not want to use this parameter.
Beispiel
We want to declare your settings files as XML files:
$path:=Get 4D folder(Database folder)+"Settings.mySettings"
$err:=SMTP_Attachment($smtp_id;$path;2;0;"myID123";"application/xml")
- 120 -
4D View
PV GET BORDER ROW RANGES
PV GET BORDER COLUMN RANGES
- 121 -
PV GET BORDER ROW RANGES
PV GET BORDER ROW RANGES ( Bereich ; Links ; Oben ; Rechts ; Unten ; Randtypen ; Randfarben )
Parameter
Bereich
Links
Oben
Rechts
Unten
Randtypen
Randfarben
Typ
Lange Ganzzahl
Array Lange Ganzzahl
Array Lange Ganzzahl
Array Lange Ganzzahl
Array Lange Ganzzahl
Array Lange Ganzzahl
Array Lange Ganzzahl
Beschreibung
4D View Bereich
Array der Spaltennummern für linke Zellen
Array der Zeilennummern für obere Zellen
Array der Spaltennummern für rechte Zellen
Array der Zeilennummern für untere Zellen
Array der Randtypen
Array der Randfarben
Beschreibung
Eingeführt mit 4D v14 R4
Kapitel: PV Ränder
Der neue Befehl PV GET BORDER ROW RANGES gibt eine Liste der Zellenbereiche zurück, die demselben Randstil Oben haben.
Ein Randstil besteht aus einem Typ und einer Farbe.
Jeder Zellenbereich wird über die aufeinander abgestimmten Arrays Links, Oben, Rechts und Unten zurückgegeben. Dabei zeigt
jedes Element jeweils die linke, obere, rechte und untere Zellennummer des Bereichs.
Dazugehörige Randstile werden in den Arrays Randtypen und Randfarben zurückgegeben:
Die Werte Randtypen sind vergleichbar mit den Konstanten unter dem Thema PV Randstil:
Konstante
Typ
Wert
pv border style 1
Lange Ganzzahl
1
pv border style 111
Lange Ganzzahl
7
pv border style 112
Lange Ganzzahl
9
pv border style 2
Lange Ganzzahl
2
pv border style 211
Lange Ganzzahl
8
pv border style 212
Lange Ganzzahl
10
pv border style 222
Lange Ganzzahl
11
pv border style 232
Lange Ganzzahl
12
pv border style 3
Lange Ganzzahl
3
pv border style 4
Lange Ganzzahl
4
pv border style 5
Lange Ganzzahl
5
pv border style 6
Lange Ganzzahl
6
pv border style half
Lange Ganzzahl
14
pv border style none
Lange Ganzzahl
0
pv border style quarter
Lange Ganzzahl
13
Die Werte Randfarben sind Lange Ganzzahlen vom Typ BGR. Weitere Informationen dazu finden Sie unter der Funktion PV
Color to index PV Color to index.
Zur vollständigen Definition der Ränder Ihres Bereichs sollte dieser Befehl zusammen mit dem neuen Befehl PV GET BORDER
COLUMN RANGES verwendet werden. Das ist zum Beispiel hilfreich, um einen 4D View Bereich in ein MS Excel Format zu
exportieren.
Hinweis: Die vom Befehl zurückgegebene Liste der Ausschnitte hängt davon ab, wie sie definiert wurden. Ziehen Sie z.B. eine
vertikale Linie, während der Ausschnitt (1B;5B) gewählt ist, gibt der Befehl nur einen einzelnen Wert zurück, der dem Ausschnitt
(1B;5B) entspricht. Ziehen Sie dagegen eine vertikale Linie in Spalte B und gehen dann über die Zeilen 1 bis 5, gibt der Befehl fünf
Werte zurück, die jeweils einem Schleifendurchgang entsprechen. Das Ergebnis ist visuell identisch, nur die im Bereich gespeicherte
Information ist unterschiedlich.
Beispiel
Ihr Bereich enthält folgende Ränder:
- 122 -
Führen Sie folgenden Code aus:
PV GET BORDER ROW
RANGES(myArea;LeftArray;TopArray;RightArray;BottomArray;BorderTypeArray;BorderColorArray)
werden vier Ausschnitte gefunden, demzufolge enthalten Ihre Arrays folgende Werte:
LeftArray TopArray RightArray BottomArray BorderTypeArray BorderColorArray
2
2
3
2
3
5
8
9
3
3
4
4
3
5
8
9
3
3
9
2
15597568
15597568
39168
255
- 123 -
PV GET BORDER COLUMN RANGES
PV GET BORDER COLUMN RANGES ( Bereich ; Links ; Oben ; Rechts ; Unten ; Randtypen ; Randfarben )
Parameter
Bereich
Links
Oben
Rechts
Unten
Randtypen
Randfarben
Typ
Lange Ganzzahl
Array Lange Ganzzahl
Array Lange Ganzzahl
Array Lange Ganzzahl
Array Lange Ganzzahl
Array Lange Ganzzahl
Array Lange Ganzzahl
Beschreibung
4D View Bereich
Array der Spaltennummern für linke Zellen
Array der Zeilennummern für obere Zellen
Array der Spaltennummern für rechte Zellen
Array der Zeilennummern für untere Zellen
Array der Randtypen
Array der Randfarben
Beschreibung
Eingeführt mit 4D v14 R4
Kapitel: PV Ränder
Der neue Befehl PV GET BORDER COLUMN RANGES gibt eine Liste der Zellenbereiche zurück, die denselben Randstil Links
haben. Ein Randstil besteht aus einem Typ und einer Farbe.
Jeder Zellenbereich wird über die aufeinander abgestimmten Arrays Links, Oben, Rechts und Unten zurückgegeben. Dabei zeigt
jedes Element jeweils die linke, obere, rechte und untere Zellennummer des Bereichs.
Dazugehörige Randstile werden in den Arrays Randtypen und Randfarben zurückgegeben:
Die Werte Randtypen sind vergleichbar mit den Konstanten unter dem Thema PV Randstil:
Konstante
Typ
Wert
pv border style 1
Lange Ganzzahl
1
pv border style 111
Lange Ganzzahl
7
pv border style 112
Lange Ganzzahl
9
pv border style 2
Lange Ganzzahl
2
pv border style 211
Lange Ganzzahl
8
pv border style 212
Lange Ganzzahl
10
pv border style 222
Lange Ganzzahl
11
pv border style 232
Lange Ganzzahl
12
pv border style 3
Lange Ganzzahl
3
pv border style 4
Lange Ganzzahl
4
pv border style 5
Lange Ganzzahl
5
pv border style 6
Lange Ganzzahl
6
pv border style half
Lange Ganzzahl
14
pv border style none
Lange Ganzzahl
0
pv border style quarter
Lange Ganzzahl
13
Die Werte Randfarben sind Lange Ganzzahlen vom Typ BGR. Weitere Informationen dazu finden Sie unter der Funktion PV
Color to index PV Color to index.
Zur vollständigen Definition der Ränder Ihres Bereichs sollte dieser Befehl zusammen mit dem neuen Befehl PV GET BORDER ROW
RANGES verwendet werden. Das ist zum Beispiel hilfreich, um einen 4D View Bereich in ein MS Excel Format zu exportieren.
Hinweis: Die vom Befehl zurückgegebene Liste der Ausschnitte hängt davon ab, wie sie definiert wurden. Ziehen Sie z.B. eine
vertikale Linie, während der Ausschnitt (1B;5B) gewählt ist, gibt der Befehl nur einen einzelnen Wert zurück, der dem Ausschnitt
(1B;5B) entspricht. Ziehen Sie dagegen eine vertikale Linie in Spalte B und gehen dann über die Zeilen 1 bis 5, gibt der Befehl fünf
Werte zurück, die jeweils einem Schleifendurchgang entsprechen. Das Ergebnis ist visuell identisch, nur die im Bereich gespeicherte
Information ist unterschiedlich.
Beispiel
Ihr Bereich enthält folgende Ränder:
- 124 -
Führen Sie folgenden Code aus:
PV GET BORDER COLUMN
RANGES(myArea;LeftArray;TopArray;RightArray;BottomArray;BorderTypeArray;BorderColorArray)
werden zwei Ausschnitte gefunden, demzufolge enthalten Ihre Arrays folgende Werte:
LeftArray TopArray RightArray BottomArray BorderTypeArray BorderColorArray
2
4
3
3
2
4
4
4
3
3
15597568
15597568
- 125 -
4D SVG
Filter mit Direct2D unter Windows aktiviert
- 126 -
Filter mit Direct2D unter Windows aktiviert
Eingeführt mit 4D v14 R5
Die Befehle SVG_Filter_Blend, SVG_Filter_Blur und SVG_Filter_Offset werden jetzt unter Windows für Direct2D im grafischen
Software-Kontext unterstützt (Standardkontext in 4D v14, siehe Option Direct2D Software unter dem Befehl SET DATABASE
PARAMETER).
In bisherigen 4D Releases musste Direct2D für diese Befehle unter Windows deaktiviert werden.
- 127 -
4D Pack
4D Pack, 64-bit Version für OS X
Überholte Befehle mit Vorsilbe gekennzeichnet
- 128 -
4D Pack, 64-bit Version für OS X
4D Pack, 64-bit Version für OS X
Eingeführt mit 4D v14 R5
4D bietet für 4D Pack eine 64-bit Version für OS X. Damit können Sie das Plug-In 4D Pack auf der 4D Server 64-bit Version für OS X
nutzen (siehe 4D Server, 64-bit Version für OS X (Preview)).
Installation und Einsatz der 64-bit Version des Plug-In 4D Pack für OS X ist ähnlich wie in den bisherigen Versionen, bis auf die
nachfolgende Einschränkung.
Nicht unterstützter Befehl
Alle auf Mac OS verfügbaren Befehle für 4D Pack laufen auch in der 64-bit Version für OS X. Davon ausgenommen ist:
_o_AP Save BMP 8 bits
Dieser Befehl basiert auf veralteter Technologie und war bereits in früheren 4D Pack Releases überholt. Deshalb wird er in 4D
Pack 64-bit für OS X nicht unterstützt.
- 129 -
Überholte Befehle mit Vorsilbe gekennzeichnet
Eingeführt mit 4D v14 R5
Einige Befehle in 4D Pack sind schon seit längerem überholt und wir empfehlen dringend, sie in neuen Projekten nicht mehr zu
verwenden. Zur leichteren Identifizierung erhalten diese Befehle in 4D Pack die Vorsilbe "_o_":
Kapitel
Bisheriger Name
Neuer Name
Status
4D_Pack: ANSI
streams
AP FCLOSE
_o_AP FCLOSE
Überholt
AP fopen
AP FPRINT
AP fread
AP Save BMP 8 bits
AP Add table and
fields
AP Create relation
AP Get file MD5
digest
_o_AP fopen
__o_AP FPRINT
__o_AP fread
_o_AP Save BMP 8 bits
Überholt
Überholt
Überholt
Überholt, wird in OS X 64-bit nicht unterstützt
_o_AP Add table and
fields
_o_AP Create relation
__o_AP Get file MD5
Überholt, nicht dokumentiert
AP ShellExecute
_o_AP ShellExecute
4D Pack: Picture files
4D Pack: Utilities
digest
- 130 -
Überholt, nicht dokumentiert
Überholt, ersetzt durch Generate digest
Überholt, ersetzt durch LAUNCH EXTERNAL
PROCESS
Neues Kapitel LDAP Befehle
4D v15 enthält neue LDAP Features. Damit kann sich Ihre 4D Anwendung über eine LDAP Protokoll an ein vorhandenes Verzeichnis
(directory) des Unternehmens anmelden. Die LDAP Befehle bieten Tools zum Einloggen in ein Unternehmensverzeichnis Server und
zum Suchen im Verzeichnis, wie z.B. Microsoft Active Directory.
Mit diesen neuen Befehlen können Sie folgendes durchführen:
Login und Kennwort der Windows Sitzung (für Microsoft Active Directory) verwenden, um Zugriff auf Ihre 4D Anwendung zu
geben, so das der Endanwender sich nur ein einziges Kennwort merken muss.
Im Unternehmensverzeichnis nach Benutzerinformationen, wie vollständiger Name, E-Mail, Telefonnummer,
Gruppenzugehörigkeit, etc. suchen.
Hinweis: LDAP (Lightweight Directory Access Protocol) ist ein offener Standard, um auf verteilte Informationsdienste zuzugreifen
oder solche zu unterhalten. Weitere Informationen dazu finden Sie auf der Wikipedia Seite zu LDAP oder auf der Hauptseite
OpenLDAP Software.
In 4D wird eine LDAP-Verbindung über LDAP LOGIN geöffnet, an den aktuellen 4D Prozess angebunden und muss über LDAP
LOGOUT geschlossen werden, bzw. wenn der Prozess die Ausführung beendet.
Glossar
Hier ist die Liste der wichtigsten Acronyme, die in der LDAP Umgebung verwendet werden:
Acronym
Definition
LDAP
Lightweight Directory Access Protocol
Active Directory. AD ist eine Datenbank von Microsoft mit Verzeichnisdiensten, LDAP ist eines der Protokolle,
um damit zu kommunizieren.
Common Name, zum Beispiel "John Doe"
Distinguished Name, zum Beispiel "cn=John Doe,ou=users,dc=example,dc=com"
AD
CN
DN
SAM-AccountName
OU
DC
uid
Security Account Manager, logon Name für AD, zum Beispiel "jdoe"
Organizational unit, Gruppen des Server Baums
Domain Components, Root und Hauptzweige des Server Baums
User identifier
LDAP LOGIN
LDAP LOGOUT
LDAP Search
LDAP SEARCH ALL
- 131 -
LDAP LOGIN
LDAP LOGIN ( Url ; Login ; Kennwort {; digest} )
Parameter
Url
Login
Kennwort
digest
Typ
String
String
String
Lange Ganzzahl
Beschreibung
URL des LDAP Servers für die Verbindung
Login Eingabe
Kennwort der Eingabe, definiert über vorgegebenen DN
0 = send password in digest MD5 (default), 1 = send password without encryption
Beschreibung
Der Befehl LDAP LOGIN öffnet eine Verbindung zum LDAP Server im Lesemodus, angegeben im Parameter url mit den Kennungen
Login und Kennwort. Akzeptiert der Server diese Verbindung, wird sie für alle nachfolgend ausgeführten LDAP Suchen im aktuellen
Prozess verwendet, bis der Befehl LDAP LOGOUT ausgeführt oder der Prozess geschlossen wird.
Im Parameter Url übergeben Sie die komplette Url des LDAP Server für die Verbindung, inkl. Protokoll und Port (standardmäßig 389).
Dieser Parameter sollte die Vorgaben von rfc2255 berücksichtigen.
Sie können sichere Verbindungen über TLS über eine URL öffnen, die mit "Idaps" startet und eine spezifische Port Nummer
verwendet, z.B. "ldaps://svr.ldap.acme.com:1389". Der LDAP Server muss ein SSL Zertifikat haben (zumindest für Microsoft Active
Directory). Eine TLS Verbindung wird dringend empfohlen, wenn das Kennwort in Volltext gesendet wird (siehe unten).
Hinweis: Übergeben Sie in Url einen leeren String, versucht der Befehl, sich an den standardmäßig verfügbaren LDAP Server der
Domain anzumelden. Dieses Feature dient nur für Testzwecke, aus Performance Gründen sollte es nicht im laufenden Betrieb
verwendet werden.
Im Parameter Login übergeben Sie das Benutzer Account auf dem LDAP Server, im Parameter Kennwort das Benutzerkennwort. Je
nach Konfiguration des LDAP Server kann Login standardmäßig einer der folgenden Login Strings sein:
Ein Distinguished Name (DN), zum Beispiel "CN=John Smith,OU=users,DC=example,DC=com"
Der Benutzername (CN), zum Beispiel "CN=John Smith"
Eine E-Mail Adresse, zum Beispiel "[email protected]"
Ein SAM-Account-Name, zum Beispiel "jsmith"
Beachten Sie, dass für Login angenommene Werte sich nach dem Übertragungsmodus für Kennwörter richten, definiert im Parameter
digest. Hier ein Beispiel für die standardmäßige Konfiguration von Microsoft Active Directory:
Mit dem Übertragungsmodus LDAP password MD5 wird für ein Login allein der SAM-Account-Name akzeptiert.
Mit dem Übertragungsmodus LDAP password plain text (Klartext) kann der Parameter Login entweder DN, CN oder eine EMail Adresse sein. Ein SAM-Account-Name wird auch akzeptiert, jedoch nur mit vorangestelltem Domain-Name (zum Beispiel
"dc-acme.com/jsmith").
Über den Parameter digest lässt sich die Art der Kennwortübertragung über das Netzwerk ändern. Sie können eine der folgenden
Konstanten unter dem Thema "LDAP" verwenden:
Konstante (Wert)
Typ
Beschreibung
LDAP password MD5 (0)
Lange Ganzzahl (Standard) In MD5 verschlüsseltes Kennwort senden
LDAP password plain text (1) Lange Ganzzahl Kennwort ohne Verschlüsselung senden (TLS Verbindung empfohlen)
Standardmäßig wird Kennwort in MD5 übertragen. Bei Bedarf übergeben Sie LDAP password plain text, zum Beispiel, wenn Sie mit
dem LDAP Server verschiedene Login Typen verwenden wollen. In einer Produktionsumgebung empfehlen wir, für die url eine TLS
Verbindung zu verwenden.
Hinweis: Bei Authentifizierung mit einem leeren Kennwort können Sie den anonymen Verbindungsmodus eingeben - sofern er vom
LDAP Server zugelassen wird. Hierbei können jedoch Fehler auftreten, wenn Sie versuchen, Operationen auszuführen, die in diesem
Modus nicht zugelassen sind.
Bei gültigen Login-Parametern wird im 4D Prozess eine Verbindung zum LDAP Server geöffnet. Sie können dann über LDAP
Suchbefehle Information erhalten oder suchen.
Vergessen Sie nicht, den Befehl LDAP LOGOUT aufzurufen, wenn die Verbindung zum LDAP Server nicht mehr benötigt wird.
Beispiel 1
In einen LDAP Server einloggen und eine Suche durchführen:
ARRAY TEXT($_tabAttributes;0)
APPEND TO ARRAY($_tabAttributes;"cn")
APPEND TO ARRAY($_tabAttributes;"phoneNumber")
LDAP LOGIN("ldap://srv.dc.acme.com:389";"John Smith";"qrnSurBret2elburg")
$vfound:=LDAP Search("OU=UO_Users,DC=ACME,DC=com";cn=John Doe";LDAP all levels;$_tabAttributes)
LDAP LOGOUT //Ausloggen nicht vergessen
- 132 -
Beispiel 2
Dieses Beispiel versucht, sich an eine Anwendung anzumelden:
ON ERR CALL("ErrHdlr") //Fehler verwalten
errOccured:=False
errMsg:=""
LDAP LOGIN(vUrlLdap;vUserCN;vPwd;LDAP password MD5)
Case of
:(Not(errOccured))
ALERT("Anmeldung erfolgreich.")
:(errOccured)
ALERT("Fehler in Ihren Parametern")
End case
LDAP LOGOUT
ON ERR CALL("")
- 133 -
LDAP LOGOUT
LDAP LOGOUT
Dieser Befehl benötigt keine Parameter
Beschreibung
Der Befehl LDAP LOGOUT schließt die Verbindung zum LDAP Server im aktuellen Prozess (falls vorhanden). Gibt es keine
Verbindung, wird der Fehler 1003 zurückgegeben. Er meldet, dass Sie nicht eingeloggt sind.
- 134 -
LDAP Search
LDAP Search ( dnRootEinstieg ; Filter {; Reichweite {; Attribute {; AttributealsArray}}} ) -> Funktionsergebnis
Parameter
dnRootEinstieg
Filter
Reichweite
Attribute
AttributealsArray
Typ
String
String
String
Array String
Array Boolean
Funktionsergebnis
Objekt
Beschreibung
Distinguished Name des Root Einstiegs zum Starten der Suche
LDAP Suchfilter
Reichweite der Suche: "base" (Standard), "one" oder "sub"
zu holendes Attribut bzw. Attribute
true = Attribute als Array zurückgeben
false = Attribute als einfache Variable zurückgeben
Schlüssel/Wert Attribute
Beschreibung
Der Befehl LDAP Search sucht nach dem ersten Vorkommen, das zum definierten Kriterium im Ziel LDAP Server passt. Dieser
Befehl muss innerhalb einer Verbindung zum LDAP Server ausgeführt werden, geöffnet mit LDAP LOGIN. Andernfalls wird der Fehler
1003 zurückgegeben.
In dnRootEinstieg übergeben Sie den Distinguished Name des Root Einstiegs für den LDAP Server; die Suche startet an dieser
Stelle.
In Filter übergeben Sie den auszuführenden LDAP Suchfilter. Der Filterstring muss die Vorgaben von rfc2225 berücksichtigen.
Standardmäßig, d.h. ohne diesen Parameter, wird ein leerer String "" benutzt (kein Filter wird angewendet.).
In Reichweite übergeben Sie eine der folgenden Konstanten unter dem Thema "LDAP":
Konstante
LDAP root
only
LDAP root and
next
LDAP all
levels
Typ Wert
Text "base"
Text "one"
Text "sub"
Kommentar
Suche nur in der Root Einstiegsebene, definiert durch dnRootEinstieg (Standard wenn
weggelassen)
Suche in der Root Einstiegsebene, definiert durch dnRootEinstieg und in den direkt
nachfolgenden Einstiegen auf einer Ebene
Suche in der Root Einstiegsebene, definiert durch dnRootEinstieg und in allen nachfolgenden
Einstiegen
In Attribute übergeben Sie ein Text Array mit der Liste aller LDAP Attribute, die von den passenden Einstiegspunkten zu holen sind.
Standardmäßig, d.h. ohne diesen Parameter, werden alle Attribute geholt.
Hinweis: Beachten Sie, dass LDAP Attributnamen zwischen Groß- und Kleinschreibung unterscheiden. Weitere Informationen finden
Sie auf der Seite Attributes. Sie zeigt alle verfügbaren Attribute für Microsoft Active Directory.
Bei mehreren Ergebnissen gibt der Befehl standardmäßig ein Array zurück, bei einem Ergebnis eine Variable. Mit dem optionalen
Parameter AttributealsArray können Sie festlegen, ob der Wert bzw. die zurückgegebenen Werte als Array oder als Variable
formatiert werden sollen:
Übergeben Sie true in einem Element, wird das entsprechende Element des Parameters Attribute in einem Array
zurückgegeben. Wird nur ein Wert gefunden, gibt der Befehl ein Array mit einem einzelnen Element zurück.
Übergeben Sie false in einem Element, wird das entsprechende Element des Parameters Attribute in einer einfachen Variablen
zurückgegeben. Werden mehrere Einstiege gefunden, gibt der Befehl nur das erste Element zurück.
Beispiel 1
Die Telefonnummer des Benutzers "smith" im Firmenverzeichnis erhalten:
ARRAY TEXT($_tabAttributes;0)
APPEND TO ARRAY($_tabAttributes;"cn")
APPEND TO ARRAY($_tabAttributes;"phoneNumber")
LDAP LOGIN($url;$dn;$pwd)
$filter:="cn=*smith*"
$vfound:=LDAP Search($dnSearchRootEntry;$filter;LDAP all levels;$_tabAttributes)
LDAP LOGOUT
Beispiel 2
Ein Array mit allen Werten für das Attribut "memberOf" erhalten, um die Gruppenzugehörigkeit für einen Benutzer abzufragen:
C_OBJECT($entry)
ARRAY TEXT($_tabAttributes;0)
ARRAY BOOLEAN($_tabAttributes_asArray;0)
- 135 -
APPEND
APPEND
APPEND
APPEND
TO
TO
TO
TO
ARRAY($_tabAttributes;"cn")
ARRAY($_tabAttributes_asArray;False)
ARRAY($_tabAttributes;"memberOf")
ARRAY($_tabAttributes_asArray;True)
LDAP LOGIN($url;$login;$pwd;LDAP password plain text)
$entry:=LDAP Search($dnSearchRootEntry;"cn=adrien*";LDAP all
levels;$_tabAttributes;$_tabAttributes_asArray)
LDAP LOGOUT
ARRAY TEXT($_arrMemberOf;0)
OB GET ARRAY($entry;"memberOf";$_arrMemberOf)
// in $_arrMemberOf haben wir ein Array mit allen Gruppen
- 136 -
LDAP SEARCH ALL
LDAP SEARCH ALL ( dnRootEinstieg ; arrErgebnis ; Filter {; Reichweite {; Attribute {; AttributealsArray}}} )
Parameter
dnRootEinstieg
arrErgebnis
Filter
Reichweite
Attribute
AttributealsArray
Typ
String
Array Objekt
String
String
Array String
Array Boolean
Beschreibung
Distinguished Name des Root Einstiegs zum Starten der Suche
Suchergebnis
LDAP Suchfilter
Reichweite der Suche: "base" (Standard), "one" oder "sub"
Zu holende Attribute
true = Attribute als Array zurückgeben
false = Attribute als einfache Variable zurückgeben
Beschreibung
Der Befehl LDAP SEARCH ALL sucht nach allen Vorkommen, die zum definierten Kriterium im Ziel LDAP Server passen. Dieser
Befehl muss innerhalb einer Verbindung zum LDAP Server ausgeführt werden, geöffnet mit LDAP LOGIN, andernfalls wird der Fehler
1003 zurückgegeben.
Beachten Sie, dass LDAP Server in der Regel ein Maximum an Werten vorschreiben, die von einer Suche empfangen werden
können. Microsoft Active Directory begrenzt diese z.B. standardmäßig auf 1000 Werte.
In dnRootEinstieg übergeben Sie den Distinguished Name des Root Einstiegs für den LDAP Server; die Suche startet an dieser
Stelle. Sie können eine leeren String "" übergeben, um die Suche nicht zu filtern; mit "*" können Sie nach Unterstrings suchen.
In arrErgebnis übergeben Sie ein Objekt Array, das mit allen passenden Werten gefüllt wird; in diesem Array ist jedes Element ein
Objekt mit Attribut/Wert Paaren, die pro passendem Wert zurückgegeben werden. Im Parameter Attribute können Sie definieren, wie
die Attribute zurückgegeben werden.
In Filter übergeben Sie den auszuführenden LDAP Suchfilter. Der Filterstring muss die Vorgaben von rfc2225 berücksichtigen.
In Reichweite übergeben Sie eine der folgenden Konstanten unter dem Thema "LDAP":
Konstante
LDAP root
only
LDAP root and
next
LDAP all
levels
Typ Wert
Text "base"
Text "one"
Text "sub"
Kommentar
Suche nur in der Root Einstiegsebene, definiert durch dnRootEinstieg (Standard, wenn
weggelassen)
Suche in der Root Einstiegsebene, definiert durch dnRootEinstieg und in den direkt
nachfolgenden Einstiegen auf einer Ebene
Suche in der Root Einstiegsebene, definiert durch dnRootEinstieg und in allen nachfolgenden
Einstiegen
In Attribute übergeben Sie ein Text Array mit der Liste aller LDAP Attribute, die von den passenden Einstiegspunkten zu holen sind.
Standardmäßig, d.h. ohne diesen Parameter, werden alle Attribute geholt.
Hinweis: Beachten Sie, dass LDAP Attributnamen zwischen Groß- und Kleinschreibung unterscheiden. Weitere Informationen zu
LDAP Attributen finden Sie auf der Seite Attributes. Sie zeigt alle verfügbaren Attribute für das Microsoft Active Directory.
Bei mehreren Ergebnissen gibt der Befehl Attribute standardmäßig als Array zurück, bei einem Ergebnis als Variable. Mit dem
optionalen Parameter AttributealsArray können Sie festlegen, ob der bzw. die zurückgegebenen Werte als Array oder als Variable
formatiert werden sollen:
Übergeben Sie true in einem Element, wird das entsprechende Element des Parameters Attribute in einem Array
zurückgegeben. Wird nur ein Wert gefunden, gibt der Befehl ein Array mit einem einzelnen Element zurück.
Übergeben Sie false in einem Element, wird das entsprechende Element des Parameters Attribute in einer einfachen Variable
zurückgegeben. Werden mehrere Werte gefunden, gibt der Befehl nur das erste Element zurück.
Beispiel 1
Die Telefonnummer aller Benutzer mit Namen "smith" im Firmenverzeichnis erhalten:
ARRAY TEXT($_tabAttributes;0)
ARRAY BOOLEAN($_tabAttributes_asArray;0)
APPEND TO ARRAY($_tabAttributes;"cn")
APPEND TO ARRAY($_tabAttributes_asArray;False)
APPEND TO ARRAY($_tabAttributes;"telephoneNumber")
APPEND TO ARRAY($_tabAttributes_asArray;False)
ARRAY OBJECT($_entry;0)
LDAP LOGIN($url;$myLogin;$pwd)
$filter:="cn=*smith*"
LDAP SEARCH ALL($dnSearchRootEntry;$_entry;$filter;LDAP all levels;$_tabAttributes)
LDAP LOGOUT
- 137 -
//$_entry kann z.B. enthalten
// $_entry{1} = {"cn":"John Smith","telephoneNumber":"01 40 87 00 00"}
// $_entry{2} = {"cn":"Adele Smith","telephoneNumber":"01 40 87 00 01"}
// $_entry{3} = {"cn":"Adrian Smith","telephoneNumber":"01 23 45 67 89"}
// ...
Beispiel 2
Beispiele für die Verwendung des Parameters attributesAsArray:
ARRAY OBJECT($_entry;0)
ARRAY TEXT($_tabAttributes;0)
ARRAY BOOLEAN($_tabAttributes_asArray;0)
APPEND TO ARRAY($_tabAttributes;"cn")
APPEND TO ARRAY($_tabAttributes_asArray;False)
APPEND TO ARRAY($_tabAttributes;"memberOf")
APPEND TO ARRAY($_tabAttributes_asArray;True)
LDAP LOGIN($url;$login;$pwd;LDAP password plain text)
LDAP SEARCH ALL($dnSearchRootEntry;$_entry;$filter;LDAP all
levels;$_tabAttributes;$_tabAttributes_asArray)
LDAP LOGOUT
ARRAY TEXT($_arrMemberOf;0)
OB GET ARRAY($_entry{1};"memberOf";$_arrMemberOf)
// $_arrMemberOf ist ein Array mit allen Gruppen der Eingabe
ARRAY TEXT($_tabAttributes;0)
ARRAY BOOLEAN($_tabAttributes_asArray;0)
APPEND TO ARRAY($_tabAttributes;"cn")
APPEND TO ARRAY($_tabAttributes_asArray;False)
APPEND TO ARRAY($_tabAttributes;"memberOf")
APPEND TO ARRAY($_tabAttributes_asArray;False)
LDAP LOGIN($url;$login;$pwd;LDAP password plain text)
LDAP SEARCH ALL($dnSearchRootEntry;$_entry;$filter;LDAP all
levels;$_tabAttributes;$_tabAttributes_asArray)
LDAP LOGOUT
$memberOf:=OB Get($_entry{1};"memberOf")
// $memberOf ist eine Variable mit der ersten Gruppe der Eingabe
- 138 -
Herunterladen