Felder (inkl. Datums & Zeitfelder) - minova-afis/aero.minova.rcp GitHub Wiki
Die verschiedenen Feldinhalte werden entsprechend interpretiert.
Heute können wir Datumsangaben nach bestimmten Regeln angeben. Diese werden dann vom UI in entsprechende Werte übersetzt. Dabei wird ein Datum immer als Instant mit der Uhrzeit mit 0:00 Uhr UTC gespeichert. Auf dem Server werden alle Datums und Zeitpunktangaben in der Zeitzone UTC gespeichert.
Da an den Server immer nur Instant - Werte geschickt werden, muss die Zeitzone des Anwenders berücksichtigt werden.
Wir haben für das Datum bestimmte Shortcuts definiert.
Eingabe |
Wert |
|
heute |
|
der 1. des Monats im Dezember 2020 → 01.12.2020 |
|
der 1. Januar des Jahres im Dezember 2020 → 01.01.2020 |
|
der 1. des Monats November im aktuellen Jahr → 01.11.2020 |
|
der 1. Februar des aktuellen Jahres → 01.02.2020 |
|
der 12. Mai des aktuellen Jahres → 12.05.2020 |
|
der 8. September 2021 → 08.09.2021 |
|
der 18. September 2021 → 18.09.2021 |
|
der 8. September 1967 → 08.09.1967 |
|
der 18. September 1967 → 18.09.1967 |
|
morgen |
|
übermorgen |
|
… |
|
gestern |
|
vorgestern |
|
… |
|
heute + 14 Tage (2 Wochen) |
|
der letzte des aktuellen Monats (m = Monat, t = Tag) |
|
wenn man - und + ohne Ziffer am Ende hat, kann man es als Tage interpretieren. Also auch der letzte des Monats. |
|
Der letzte Tag des Jahres |
|
der letzte Tag im Februar im aktuellen Jahr |
Es gibt 4 Kürzel, die sowohl klein- als auch großgeschrieben werden können. Die Kürzel können global für die Benutzersprache gesetzt werden.
Kürzel (deutsch) |
Bedeutung |
|
Tage (in deutsch, muss internationalisiert werden) |
|
Monate (in deutsch, muss internationalisiert werden) |
|
Jahre (in deutsch, muss internationalisiert werden) |
|
Wochen (7 Tage) |
Wenn man Selektionskriterien speichert, müssen die Formeln gespeichert werden. Wenn man Datumsinformationen an den CAS übergibt, muss der Zeitpunkt ausgerechnet sein.
Bei der Anzeige könnte man sich überlegen, den Wert bei Verlassen auszurechnen. Sobald der Anwender das Feld wieder anspringt (OnFocus), wird die Formel eingeblendet.
Das Pattern zur Formatierung des Datums kann in den Preferences eingestellt werden. Dabei bestimmt dieses nur die Darstellung des Datums, aber nicht die Reihenfolge von Tag, Monat und Jahr.
Beispiel:
Pattern |
Eingabe |
Ausgabe |
dd.MM.y |
120220 |
12.02.2020 |
dd/MMM/yy |
120220 |
12/Feb./20 |
MM.dd.yyyy |
120220 |
12.02.2020 |
Alle Zeitangabe werden auf dem Server in UTC gespeichert. Bei Feldern, die Datum und Zeit enthalten, wird der Zeitpunkt an den Server als Instant gesendet. Hierbei muss die lokale Zeitzone, die in den Einstellungen konfiguriert werden kann, berücksichtigt werden.
Bei Feldern, die nur die Zeit enthalten, wird als Datum immer der 01.01.1900 verwendet. Die Uhrzeit ist immer im UTC-Format zu setzen. Somit wird keine Zeitzone berücksichtigt.
Wir haben für die Zeit bestimmte Shortcuts definiert.
Eingabe |
Wert |
|
jetzt → 12:34 Uhr bei Eingabe um 12:34 Uhr lokale Zeit |
|
00:00 Uhr |
|
die Stunde am Tag und 0 Minuten → 01:00 Uhr |
|
dies liefert die Stunde am Tag. Werte > 23 liefern ein ungültiges Datum. → 12:00 Uhr |
|
Die 1. Stelle liefert die Stunde; die Stellen 2 und 3 die Minuten. → 01:23 Uhr |
|
Die 1. und 2. Stelle liefern die Stunde; die Stellen 3 und 4 die Minuten. → 12:34 Uhr |
|
jetzt plus eine Stunde |
|
jetzt plus 2 Stunden |
|
… |
|
jetzt minus eine Stunde (vor einer Stunde) |
|
jetzt minus 2 Stunden |
|
… |
|
jetzt + 3 Stunden |
|
01:00 Uhr + 2 Stunden - 3 Minuten → 02:57 Uhr |
Es gibt 2 Kürzel, die sowohl klein- als auch großgeschrieben werden können. Die Kürzel können global für die Benutzersprache gesetzt werden.
Kürzel (deutsch) |
Bedeutung |
|
Stunde |
|
Minute |
Das Pattern zur Formatierung der Zeit kann in den Preferences eingestellt werden. Dabei bestimmt die Eingabe nicht nur die Darstellung, sondern auch, ob das 12-Stunden oder das 24-Stunden Format verwendet wird. Bei dem Pattern mit kleinem h wird das 12-Stunden Format verwendet und bei großen H wird das 24-Stunden Format verwendet. Beachten: Wenn im Pattern kein a hinzugefügt wird, wird AM/PM nicht mit dargestellt.
Eingabe im 12-Stunden-Format:
Für die Eingabe im 12-Stunden-Format muss folgendes beachtet werden:
-
Das Pattern in den Einstellungen muss ein "a" enthalten, für das Meridiem
-
Wenn kein Pattern mit "a" angegeben ist, muss ein Locale gesetzt sein, dass das "a" im seinem Standard Pattern enthält (Im PreferenceWindow wird das Standard Pattern als Message im Zeit Pattern Feld angezeigt)
Wichtig:
Java-Version unter 15 ⇒ Das Meridiem wird durch das Locale übersetzt und muss auch bei der Eingabe so eingegeben werden.
Java-Version ab 15 ⇒ Das Meridiem wird nicht übersetzt. Bei der Eingabe wird nur AM/PM verwendet.
Beispiel:
Pattern |
Eingabe |
Ausgabe |
hh:mm |
2345 |
11:45 |
hh:mm a |
2345 |
11:45 PM |
HH:mm |
2345 |
23:45 |
H:mm |
726 |
7:26 |
HH:mm |
726 |
07:26 |
In einem "Datum / Zeit" Feld werden das Datum und die Zeit gleichzeitig eingegeben. Diese werden entweder durch ein Leerzeichen oder einen Stern getrennt. Im Gesamten gelten für "Datum / Zeit" Felder die selben Kriterien und Abkürzungen, wie für die Datums- und Zeitfelder im einzelnen.
Für die Trennung durch das Leerzeichen oder einen Stern haben wir uns entschieden, da es eine einfachere Bedienung durch die Zehnertastatur ermöglicht.
Sonderregelungen für die "Datum / Zeit" Felder sind:
-
Wenn für das Datum kein Wert eingegeben wird, dann rechnet man mit dem Wert 0.
-
Für die Zeit muss immer ein Wert angegeben werden, sonst wird ein Fehler geworfen.
Eingabe |
Wert |
|
heute und jetzt |
|
!ErrorConverting |
Wir haben für die Formatierung von Zahlen folgende Regeln definiert:
-
Die Zahlen werden nach dem in den Preferences festgelegten Locale formatiert. Regeln für Dezimal-Trennzeichen und -Gruppierung.
-
Die Eingabe im dezimalen Bereich wird auf die vorher festgelegte Länge begrenzt und jede Eingabe, die die Länge überschreitet, wird ignoriert.
-
Wenn man versucht, ein dezimales Trennzeichen oder ein Gruppen-Trennzeichen zu Löschen(Backspace) oder zu entfernen(DEL/ ENTF), springt die Caret Position auf die gegenüberliegende Seite des Trennzeichens.
-
Wenn eine Ziffer im dezimalen Bereich gelöscht wird, und sie nicht an der letzten Stelle stand, rückt die nachfolgende Ziffer auf.
-
Alles außer Ziffern wird bei der Eingabe ignoriert und rausgefiltert.
-
Wenn man ein dezimales Trennzeichen eingibt, wird man sofort an die Caret Position hinter dem dezimalen Trennzeichen gesetzt.
-
Die Eingabe eines Gruppen-Trennzeichens wird ignoriert.
-
Wenn die Ausgangszahl 0 ist, wird die 0 durch die erste eingegebene Ziffer ersetzt.
-
Wenn die letzte Ziffer vor dem dezimalen Trennzeichen gelöscht/entfernt wird, springt die Caret Position auf die 1.
Die Lookup Felder werden mithilfe der TextAssist - Klasse dargestellt. Diese Klasse bietet sowohl die Möglichkeit einer anzeige von möglichgen Treffern (Liste) als auch die Eigenschaften eines Textfeldes. Bei der Eingabe eines Zeichens werden die Ergibnisse gefiltert, so dass eine Liste mit möglichen Treffern aufpopped. In die Liste kann mittels der Pfeiltasten (⬇︎ & ⬆︎) navigiert werden. Enter oder Tab kann das ausgewähltge Element bestätigen und schließt automatisch die Liste der vorgeschlagenen Werte. Zusätzlich springt man in das nächste Feld / Pflichtfeld.
-
Die Anzahl der maximal angezeigten Werte sollte Einstellbar sein, allerdings wird ein Wert von 10 Elementen im Standard-Fall eingetragen
-
Ein LookUp wird anhand eines Text-Zeichen am Ende des Labels erkannt. Zum Beispiel: "Mandant ▼" [__] Description.
-
Das Textzeichen hinter dem Label des Lookups sollte ebenfalls in den Einstellungen geändert werden können.
Das neue Feld kann dazu verwendet werden, beschreibende Texte auf die Maske zu Schreiben.
Damit dieses Feld nicht als SQL-Parameter an die Prozedur übergeben wird, ist es sinnvoll folgende Eigenschaften zu Setzen:
-
sql-index, value = -1
-
offline, value= true
Wie auch bei anderen Feldern, kann dieses Feld die Eigenschaften
-
number-columns-spanned
-
number-rows-spanned
bekommen und somit entweder über die halbe oder den ganzen Bereich der Maske/OptionPage angezeigt werden. Der angezeigte Text ist dabei immer linksbündig! Er stammt aus der Eigenschaft Text und ist ebenfalls übersetzbar.
Im Field Element können über das Attribut default="" Standardwerte festgelegt werden. Das Eintragen eines Standardwertes bewirkt folgendes:
-
Beim Öffnen der Maske wird der Wert direkt in das Feld eingetragen
-
Das Dirty-Flag reagiert nicht auf Standardwerte
-
An Prozeduren wird der Standardwert übergeben, falls dieser nicht in der Maske überschrieben wird
Wofür ist es gut?
Diese Funktion ermöglicht es feste Werte ohne Option-Page in der Maske zu setzen. Dies wird vor allem für die Portierung von den alten Modulen benötigt. Zum Beispiel kann an den JobExecutor statt dem KeyText ein Klassenname mit Attributen übergeben werden. Dies würde über unsichtbare Felder mit Standardwerten funktionieren.
Beispielcode
<field name="ByClass" visible="false" sql-index="-1" default="true" read-only="true" offline="true">
<boolean />
</field>
<field name="Target" visible="false" sql-index="-1" default="ch.minova.job.closing.ClosingJob" read-only="true" offline="true">
<text length="150" />
</field>
<field name="epClosingUntil" number-columns-spanned="4" sql-index="-1" default="0" offline="true" read-only="true" visible="false">
<short-date />
</field>
<field name="AfisDailyClosing" visible="false" sql-index="-1" default="AfisDailyClosing" read-only="true" offline="true">
<text length="150" />
</field>
<field name="Daily" visible="false" sql-index="-1" default="Daily" read-only="true" offline="true">
<text length="150" />
</field>