Version 6.0
Dieser Abschnitt beschreibt die Konventionen, die Sie beim Benennen von Objekten in der 4th Dimension Programmiersprache beachten müssen. Folgende Regeln gelten für alle Objekte:
Ein Name muss mit einem Buchstaben beginnen.
Der Name kann Buchstaben, Zahlen, Leerzeichen und den Unterstrich enthalten.
Punkte, Schrägstriche und Kommas sind nicht erlaubt.
Zeichen für Operatoren, wie z.B. * und + sind nicht erlaubt.
4th Dimension ignoriert alle führenden Leerzeichen.
Groß- und Kleinbuchstaben werden nicht unterschieden, hallo = HALLO
Der Name kann Umlaute wie ä, ö, ü enthalten, sie werden jedoch nicht unterschieden, mühle = muhle
Befehle werden in einer speziellen Schrift und in Grossbuchstaben geschrieben, zum Beispiel: ADD RECORD. 4D Funktionen werden mit großem Anfangsbuchstaben geschrieben, zum Beispiel: Records in selection.
Befehle, Funktionen und Anweisungen in Methoden oder Objektmethoden werden fett geschrieben. Befehle oder Funktionen von Plug-Ins haben eine spezifische Vorsilbe und werden zusätzlich kursiv geschrieben, um sie von den 4th Dimension Befehlen und Funktionen zu unterscheiden:
QUERY([Vorlagen];[Vorlagen]ID=vNummer) ` 4th Dimension Befehl If (Records in selection ([Vorlagen])=1) WR PICTURE TO AREA (Bereich;[Vorlagen]Dok) ` 4D Write Befehl End if
In einigen Beispielen dieses Handbuchs passen Code-Zeilen nicht in eine Zeile, sie müssen in einer zweiten, manchmal einer dritten Zeile fortgesetzt werden. Wenn Sie diese Beispiele übernehmen, nehmen Sie diese Zeilen als eine Einheit. Verwenden Sie hier keine Zeilenschaltung, denn das unterbricht den Programmierfluss.
Tabellen
Eine Tabelle kennzeichnen Sie durch eckige Klammern: [...]. Der Tabellenname kann max. 31 Zeichen lang sein.
Beispiele:
DEFAULT TABLE ([Orders]) INPUT FORM ([Clients]; "Entry") ADD RECORD ([Letters])
Felder
Ein Datenfeld kennzeichnen Sie durch die vorangestellte Tabelle, zu der dieses Datenfeld gehört. Der Datenfeldname folgt unmittelbar auf die Tabelle. Der Datenfeldname kann max. 31 Zeichen lang sein.
Ein Datenfeld darf nicht mit einem Unterstrich beginnen (_). Der Unterstrich ist für Plug-Ins reserviert. Findet 4th Dimension im Methodeneditor einen Unterstrich zu Beginn eines Datenfeldes, wird dieser gelöscht.
Beispiele:
[Orders]Total:=Sum([Line]Amount) QUERY([Clients];[Clients]Name="Meier") [Letters]Text:=Capitalize text ([Letters]Text)
Die Anordnung Tabellenname vor Datenfeldname in einer Tabelle, Objektmethode oder einem Formular ist zwar nicht unbedingt erforderlich, sie macht jedoch Ihre Programmierung übersichtlicher.
Untertabellen
Eine Untertabelle kennzeichnen Sie durch die vorangestellte Tabelle, zu der diese Untertabelle gehört. Der Untertabellenname folgt unmittelbar auf die Tabelle. Der Untertabellenname kann max. 31 Zeichen lang sein.
Beispiele:
ALL SUBRECORDS ([People]Children) ADD SUBRECORD ([Clients]Phones;"Add One") NEXT SUBRECORD ([Letters]Keywords)
Eine Untertabelle wird wie ein Datenfeldtyp behandelt; demnach gelten dieselben Regeln wie für Datenfelder in einem Formular. Die Anordnung Tabelle vor Untertabelle in einer Tabelle, Objektmethode oder einem Formular ist zwar nicht unbedingt erforderlich, sie macht jedoch Ihre Programmierung übersichtlicher.
Unterdatenfelder
Ein Unterdatenfeld kennzeichnen Sie genauso wie ein Datenfeld. Nennen Sie zuerst die Untertabelle, zu der das Unterdatenfeld gehört. Dann folgt - getrennt durch einen Apostroph (') - der Unterdatenfeldname. Der Unterdatenfeldname kann max. 31 Zeichen lang sein.
Beispiele:
[People]Children'First name:=Uppercase([People]Children'First Name) [Clients]Phones'Number:="408 5551212" [Letters]Keywords'Word:=Capitalize text ([Letters]Keywords'Word)
Die Anordnung Untertabelle vor Unterdatenfeld in einer Tabelle, Objektmethode oder einem Formular ist zwar nicht unbedingt erforderlich, sie macht jedoch Ihre Programmierung übersichtlicher.
Interprozessvariablen
Eine Interprozessvariable kennzeichnen Sie mit dem vorangestellten Symbol (<>) die Zeichen "kleiner als" und "größer als".
Hinweis: Dieses Symbol gilt für Windows und Macintosh. Auf Macintosh können Sie auch das Zeichen <> verwenden (Die Kombination Wahl-/Umschalttaste + Buchstabe v).
Eine Interprozessvariable kann mit den Symbolen <> max. 30 Zeichen lang sein.
Beispiele:
<>vlProcessID:=Current process <>vsKey:=Char(KeyCode) If (<>vtName#"")
Prozessvariablen
Eine Prozessvariable kennzeichnen Sie durch ihren Namen. (Er kann nicht mit den Symbolen <> oder $ beginnen). Ein Prozessvariablenname kann mit den Symbolen max. 30 Zeichen lang sein.
Beispiele:
<>vrGrandTotal:=Sum([Accounts]Amount) If (bValidate=1) vsCurrentName:=""
Lokale Variablen
Eine lokale Variable kennzeichnen Sie durch das vorangestellte Dollarzeichen ($). Der Name einer lokalen Variable kann mit dem Dollarzeichen max. 30 Zeichen lang sein.
Beispiele
For ($vlRecord; 1; 100) If ($vsTempVar="No") $vsMyString:="Hello there"
Arrays
Ein Array kennzeichnen Sie durch seinen Namen. Das ist der Name, den Sie beim Erstellen des Array übergeben haben (z.B. ARRAY LONGINT). Arrays sind Variablen, von daher gibt es auch drei Arten:
Interprozess-Arrays,
Prozess-Arrays,
Lokale Arrays.
Interprozess-Arrays
Dem Namen des Interprozess-Arrays ist das Symbol <> vorangestellt die Zeichen "kleiner als" und "größer als".
Hinweis: Dieses Symbol gilt für Windows und Macintosh. Auf Macintosh können Sie auch das Zeichen <> verwenden (Die Kombination /Umschalttaste + Buchstabe v).
Der Name einer Interprozessvariablen kann mit den Symbolen <> max. 30 Zeichen lang sein.
Beispiele:
ARRAY TEXT(<>atSubjects;Records in table([Topics])) SORT ARRAY(<>asKeywords; >) ARRAY INTEGER(<>aiBigArray;10000)
Prozess-Arrays
Ein Prozess-Array kennzeichnen Sie durch seinen Namen. (Er kann nicht mit den Symbolen <> oder $ beginnen). Der Name des Prozess-Array kann max. 30 Zeichen lang sein.
Beispiele:
ARRAY TEXT(atSubjects;Records in table([Topics])) SORT ARRAY(asKeywords; >) ARRAY INTEGER(aiBigArray;10000)
Lokale Arrays
Dem Namen des lokalen Array ist das Dollarzeichen ($) vorangestellt. Ein lokales Array kann mit dem Dollarzeichen max. 30 Zeichen lang sein.
Beispiele:
ARRAY TEXT($atSubjects;Records in table([Topics])) SORT ARRAY($asKeywords; >) ARRAY INTEGER($aiBigArray;10000)
Elemente von Arrays
Sie verweisen auf ein Element eines Interprozess-, Prozess- oder lokalen Array mit geschweiften Klammern ({ }). Das angesprochene Element ist ein numerischer Ausdruck.
Beispiele:
` Element eines Interprozess-Array ansprechen If (<>asKeywords{1}="Stop") <>atSubjects{$vlElem}:=[Topics]Subject $viNextValue:=<>aiBigArray{Size of array(<>aiBigArray)} ` Element eines Prozess-Array ansprechen If (asKeywords{1}="Stop") atSubjects{$vlElem}:=[Topics]Subject $viNextValue:=aiBigArray{Size of array(aiBigArray)} ` Element eines lokalen Array ansprechen If ($asKeywords{1}="Stop") $atSubjects{$vlElem}:=[Topics]Subject $viNextValue:=$aiBigArray{Size of array($aiBigArray)}
Elemente von zweidimensionalen Arrays
Sie verweisen auf ein Element eines Interprozess-, Prozess- oder lokalen Array mit doppelten geschweiften Klammern ({ }). Das angesprochene Element besteht aus zwei numerischen Ausdrücken in geschweiften Klammern.
Beispiele:
` Element eines zweidimensionalen Interprozess-Array ansprechen If (<>asKeywords{$vlNextRow}{1}="Stop") <>atSubjects{10}{$vlElem}:=[Topics]Subject $viNextValue:=<>aiBigArray{$vlSet}{Size of array(<>aiBigArray{$vlSet})} ` Element eines zweidimensionalen Prozess-Array ansprechen If (asKeywords{$vlNextRow}{1}="Stop") atSubjects{10}{$vlElem}:=[Topics]Subject $viNextValue:=aiBigArray{$vlSet}{Size of array(aiBigArray{$vlSet})} ` Element eines zweidimensionalen lokalen Array ansprechen If ($asKeywords{$vlNextRow}{1}="Stop") $atSubjects{10}{$vlElem}:=[Topics]Subject $viNextValue:=$aiBigArray{$vlSet}{Size of array($aiBigArray{$vlSet})}
Formulare
Ein Formular kennzeichnen Sie durch einen alphanumerischen Ausdruck, der dessen Namen darstellt. Ein Formularname kann max. 31 Zeichen lang sein.
Beispiele:
INPUT FORM([People];"Input") OUTPUT FORM([People]; "Output") DIALOG([Storage];"Note box"+String($vlStage))
Methoden
Eine Methode (Prozedur und Funktion) kennzeichnen Sie durch ihren Namen. Ein Methodenname kann max. 31 Zeichen lang sein.
Hinweis: Eine Methode, die kein Ergebnis zurückgibt, heißt auch Prozedur. Eine Methode, die ein Ergebnis zurückgibt, heißt auch Funktion.
Beispiele:
If (New client) DELETE DUPLICATED VALUES APPLY TO SELECTION ([Employees];INCREASE SALARIES)
Tip: Verwenden Sie zur besseren Übersicht dieselbe Namenskonvention wie bei den 4D Befehlen: Großschreibung für Methoden; Kleinschreibung mit großem Anfangsbuchstaben für Funktionen. Wenn Sie nun eine Datenbank nach einigen Monaten für eine Wartung öffnen, erkennen Sie im Explorer Fenster bereits an der Schreibweise des Namens, ob die Methode ein Ergebnis zurückgibt.
Hinweis: Wollen Sie eine Methode aufrufen, tippen Sie lediglich ihren Namen ein. Einige in 4D integrierten Befehle wie z.B. ON EVENT CALL, sowie alle Plug-In Befehle erwarten dagegen den Namen der Methode als Zeichenkette, wenn ein Parameter für die Methode übergeben wurde.
Beispiele:
` Dieser Befehl erwartet eine Methode (Funktion) oder Formel QUERY BY FORMULA ([aTable];Special query) ` Dieser Befehl erwartet eine Methode (Prozedur) oder Statement APPLY TO SELECTION ([Employees];INCREASE SALARIES) ` Dieser Befehl erwartet einen Methodennamen ON EVENT CALL ("HANDLE EVENTS") ` Dieser Plug-In Befehl erwartet einen Methodennamen WR ON ERROR ("WR HANDLE ERRORS")
Methoden akzeptieren Parameter (Argumente). Parameter stehen in Klammern hinter dem Methodennamen. Sie sind durch Semikolon (;) voneinander getrennt. Die Parameter sind innerhalb der aufgerufenen Methode als durchnumerierte lokale Variablen verfügbar: $1, $2, , $n. Mehrere aufeinanderfolgende (und letzte) Parameter können Sie mit der Syntax ${n} ansprechen, wobei n, der numerische Audruck, die Zahl des Parameters ist.
In einer Funktion enthält die lokale Variable $0 den zurückzugebenden Wert.
Beispiele:
` In DROP SPACES ist $1 ein Zeiger auf das Datenfeld [Employees]Name DROP SPACES (->[Employees]Name) ` In Calc Creator: ` - $1 ist numerisch und gleich 1 ` - $2 ist numerisch und gleich 5 ` - $3 ist Text oder Zeichenkette und gleich "Nice" ` - Der resultierende Wert wird $0 zugewiesen $vsResult:=Calc creator (1; 5; "Nice") ` In Text Creator: ` - Die drei Parameter sind Text oder Zeichenkette ` - Sie können als $1, $2 oder $3 angesprochen werden ` - Sie können aber z.B. auch als ${$vlParam} angesprochen werden, wobei $vlParam 1, 2 oder 3 ist ` - Der resultierende Wert wird $0 zugewiesen vtClone:=Text Creator ("ist"; "der"; "es")
Plug-In Befehle (Externe Prozeduren, Funktionen und Bereiche)
Einen Plug-In Befehl kennzeichnen Sie durch den Namen, den das Plug-In definiert. Ein Plug-In kann max. 31 Zeichen lang sein.
Beispiele:
WR BACKSPACE (wrArea; 0) $spNewArea:=SP New offscreen area
Mengen
Es gibt zwei Arten:
Interprozessmengen
Prozessmengen
4D Server enthält auch:
Client-Mengen
Interprozessmengen
Dem Namen einer Interprozessmenge wird das Symbol <> vorangestellt die Zeichen "kleiner als" und "größer als".
Hinweis: Dieses Symbol gilt für Windows und Macintosh. Auf Macintosh können Sie auch das Zeichen <> verwenden (Die Kombination Wahl-/Umschalttaste + Buchstabe v).
Der Name einer Interprozessmenge kann ohne das Symbol <> bis zu 80 Zeichen lang sein.
Prozessmengen
Eine Prozessmenge kennzeichnen Sie durch einen alphanumerischen Wert, der ihren Namen darstellt. (Er kann nicht mit den Symbolen <> oder $ beginnen). Der Name der Prozessmenge kann bis zu 80 Zeichen lang sein.
Client -Mengen
Dem Namen einer Client-Menge ist das Dollarzeichen ($) vorangestellt. Der Name der Client-Menge kann ohne das Dollarzeichen bis zu 80 Zeichen lang sein.
Hinweis: Vor 4D Version 6 wurde eine Menge im Client/Server-Betrieb auf dem Client-Rechner gehalten, der diese erzeugt hat. Ab Version 6 werden Mengen auf dem Server-Rechner gehalten. Benötigen Sie in bestimmten Fällen Mengen lokal auf dem Client-Rechner, arbeiten Sie mit Client-Mengen.
Beispiele
` Interprozessmengen USE SET("<>Deleted Records") CREATE SET([Customers];"<>Customer Orders") If (Records in set("<>Selection"+String($i))>0) ` Prozeßmengen USE SET("Deleted Records") CREATE SET([Customers];"Customer Orders") If (Records in set("<>Selection"+String($i))>0) ` Client-Mengen USE SET("$Deleted Records") CREATE SET([Customers];"$Customer Orders") If (Records in set("$Selection"+String($i))>0)
Temporäre Auswahlen
Es gibt zwei Arten:
Temporäre Interprozessauswahlen
Temporäre Prozessauswahlen
Temporäre Interprozessauswahlen
Dem Namen von temporären Interprozessauswahlen ist das Symbol <> vorangestellt die Zeichen "kleiner als" und "größer als".
Hinweis: Dieses Symbol gilt für Windows und Macintosh. Auf Macintosh können Sie auch das Zeichen <> verwenden (Die Kombination Wahl-/Umschalttaste + Buchstabe v).
Der Name einer temporären Interprozessauswahl kann ohne das Symbol <> bis zu 80 Zeichen lang sein.
Temporäre Prozessauswahlen
Eine temporäre Prozessauswahl kennzeichnen Sie durch einen alphanumerischen Wert, der ihren Namen darstellt. (Er kann nicht mit den Symbolen <> oder $ beginnen). Der Name der temporären Prozessauswahl kann bis zu 80 Zeichen lang sein.
Beispiele:
` Temporäre Interprozessauswahl USE NAMED SELECTION([Customers];"<>ByZipcode") ` Temporäre Prozessauswahl USE NAMED SELECTION([Customers];"<>ByZipcode")
Prozesse
In der Einzelplatzversion bzw. auf der Client-Seite im Client/Server-Betrieb gibt es zwei Arten:
Globale Prozesse
Lokale Prozesse
Globale Prozesse
Sie kennzeichnen einen globalen Prozess durch einen alphanumerischen Wert, der seinen Namen darstellt. (Er kann nicht mit dem Dollarzeichen beginnen). Der Name des globalen Prozesses kann max. 31 Zeichen lang sein.
Lokale Prozesse
Dem Namen eines lokalen Prozesses ist das Dollarzeichen ($) vorangestellt. Der Name des lokalen Prozesses kann ohne das Dollarzeichen max. 31 Zeichen lang sein.
Beispiele
` Globalen Prozess "Add Customers" starten $vlProcessID:=New process("P_ADD_CUSTOMERS";48*1024;"Add Customers") ` Lokalen Prozess "$Follow Mouse Moves" starten $vlProcessID:=New process("P_MOUSE_SNIFFER";16*1024;"$Follow Mouse Moves")
Zusammenfassung der Namenskonventionen
Typ | Max. Länge | Beispiel |
Tabelle | 31 | [Invoices] |
Datenfeld | 31 | [Employees]Last Name |
Untertabelle | 31 | [Employees]Kids |
Unterdatenfeld | 31 | [Documents]Keyword'Keyword |
Interprozessvariable | <> + 29 | <>vlNextProcessID |
Prozessvariable | 30 | vsCurrentName |
Lokale Variable | $ + 29 | $vlLocalCounter |
Formular | 31 | "My Custom Web Input" |
Interprozess-Array | <> + 29 | <>apTables |
Prozess-Array | 30 | asGender |
Lokales Array | $ + 29 | $atValues |
Methode | 31 | M_ADD_CUSTOMERS |
Plug-in Routine | 31 | WR INSERT TEXT |
Interprozessmenge | <> + 80 | "<>Records to be Archived" |
Prozessmenge | 80 | "Current selected records" |
Client-Menge | $ + 80 | "$Previous Subjects" |
Temporäre Auswahl | 80 | "Employees A to Z" |
Temporäre Interprozessauswahl | <> + 80 | "<>Employees Z to A" |
Lokaler Prozess | $ + 31 | "$Follow Events" |
Globaler Prozess | 31 | "P_INVOICES_MODULE" |
Namenskonflikte beheben
Hat ein spezifisches Objekt denselben Namen wie ein bereits benannter anderer Objekttyp (zum Beispiel, ein Datenfeld mit Namen Person und eine Variable mit demselben Namen Person) identifiziert 4th Dimension das Objekt nach einem Prioritätensystem. Sie müssen selbst darauf achten, daß die Namen für Objekte in Ihrer Datenbank einmalig sind.
4th Dimension identifiziert Namen in Methoden in folgender Reihenfolge:
1. Datenfelder
2. Befehle
3. Methoden
4. Plug-In Routinen
5. Vordefinierte Konstanten
6. Variablen
Beispiel: In 4th Dimension gibt es den Befehl mit Namen Date. Hat eine Methode denselben Namen Date, sieht 4th Dimension diese als den integrierten Befehl Date, und nicht als Methode. Die Methode wird nicht aufgerufen. Haben Sie dagegen ein Datenfeld mit dem Namen "Date", angelegt, versucht 4th Dimension dieses Datenfeld anstatt dem Befehl Date zu benutzen.
Referenz
Datentypen, Einführung in Arrays, Konstanten, Methoden, Operatoren, Variablen, Zeiger.