Felder (inkl. Datums & Zeitfelder) - minova-afis/aero.minova.rcp GitHub Wiki

Felder

Die verschiedenen Feldinhalte werden entsprechend interpretiert.

Datumsfelder

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.

Zeitzone

Da an den Server immer nur Instant - Werte geschickt werden, muss die Zeitzone des Anwenders berücksichtigt werden.

Shortcuts

Wir haben für das Datum bestimmte Shortcuts definiert.

Eingabe

Wert

0

heute

1

der 1. des Monats im Dezember 2020 → 01.12.2020

11

der 1. Januar des Jahres im Dezember 2020 → 01.01.2020

111

der 1. des Monats November im aktuellen Jahr → 01.11.2020

102

der 1. Februar des aktuellen Jahres → 01.02.2020

1205

der 12. Mai des aktuellen Jahres → 12.05.2020

80921

der 8. September 2021 → 08.09.2021

180921

der 18. September 2021 → 18.09.2021

8091967

der 8. September 1967 → 08.09.1967

18091967

der 18. September 1967 → 18.09.1967

+

morgen

++

übermorgen

+

…​

-

gestern

--

vorgestern

---

…​

0+2w

heute + 14 Tage (2 Wochen)

1+1m-1t

der letzte des aktuellen Monats (m = Monat, t = Tag)

1+1m-

wenn man - und + ohne Ziffer am Ende hat, kann man es als Tage interpretieren. Also auch der letzte des Monats.

11+1j-

Der letzte Tag des Jahres

11+2m-

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

T t

Tage (in deutsch, muss internationalisiert werden)

M m

Monate (in deutsch, muss internationalisiert werden)

J j

Jahre (in deutsch, muss internationalisiert werden)

W w

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

Zeitfelder

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.

Shortcuts

Wir haben für die Zeit bestimmte Shortcuts definiert.

Eingabe

Wert

0

jetzt → 12:34 Uhr bei Eingabe um 12:34 Uhr lokale Zeit

00

00:00 Uhr

1

die Stunde am Tag und 0 Minuten → 01:00 Uhr

12

dies liefert die Stunde am Tag. Werte > 23 liefern ein ungültiges Datum. → 12:00 Uhr

123

Die 1. Stelle liefert die Stunde; die Stellen 2 und 3 die Minuten. → 01:23 Uhr

1234

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

---

…​

0+3h

jetzt + 3 Stunden

1+2h-3m

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

H h

Stunde

M m

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

"Datum / Zeit" Felder

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

*0

heute und jetzt

0*

!ErrorConverting

Zahlenformatierung

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.

Lookups

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.

Label-Text

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.

Standardwerte

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> 
⚠️ **GitHub.com Fallback** ⚠️