Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Detlef am 21.03.04 - 18:15:32

Titel: Datum ohne Punkte eingeben
Beitrag von: Detlef am 21.03.04 - 18:15:32
Hallo und einen schönen Sonntag,

sag mal, kennt einer von euch eine Eingabeüberstzung in der ich in einem Datumsfeld ein Datum ohne Punkte (z.B. 210304 o. 21032004) eingeben kann und die Punkte automtisch gesetzt werden?

Danke für Tips

Gruß
Detlef
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: TMC am 21.03.04 - 18:23:09
Hi Detlef,

noch nicht gemacht, aber sollte bestimmt möglich sein.

Schau Dir mal u.a. folgende Formelsprache-Befehle an:
@Contains, @Left, @Middle, @Replace, @ReplaceSubstring, etc.

Matthias
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: eknori am 21.03.04 - 18:55:51
probiere mal mein

tmp:=@Text(210304);
day:=@Left(tmp;2);
month:=@Middle(tmp;2;2);
year:=@If(@Length(tmp) =6; @Right(tmp;2);@Right(tmp;4));

myDate:=day+"."+month+"."+year;
@Prompt([Ok];"Hallo Welt";myDate)

Titel: Re:Datum ohne Punkte eingeben
Beitrag von: TMC am 21.03.04 - 19:14:33
Die Formel von Eknori sieht gut aus.

Generell noch:
Afaik gibts Probleme, wenn Du ein Datumsfeld verwendest, da hier die Notes-interne Prüfung zuschlägt bevor es deine Input Translation auswertet.
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: koehlerbv am 21.03.04 - 19:17:11
Ich befürchte, so einfach geht das nicht.
@Ulrich:
Code
tmp:=@Text(210304);
Du verwendest da eine Zahl. Für den 21.03.2004 sieht das ja gut aus, aber Deine Auswerte-Formel funktioniert nicht mehr am
01042004,
denn daraus wird
1042004.
Der Datumswert muss schon Text sein und auf eine gültige Länge geprüft werden, weiterhin auf gültige Tage und Monate.

Das ist ganze wird sicherlich ein netter, kleiner Parser ;-)

Ciao,
Bernhard
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: TMC am 21.03.04 - 20:03:10
Wenn wer gerade daran arbeitet (ist ja eine nette Sonntag-Abend-Aufgabe  ;D ):

Man sollte auch noch berücksichtigen, dass User auch das Datum wie folgt eingeben könnten:
1304 (01. März 2004)
91204 (09. Dez. 2004)
9124 (9. Dez. 2004)
1314 (13. Jan. 2004)
134 (01. März 2004)

 :)
Matthias
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: koehlerbv am 21.03.04 - 20:29:03
Hier hilft sowieso nur eine Regel für die Eingabe oder die Aufteilung in die Felder DD, MM und YYYY.
01112004 ist in Ordnung.
1 - 11 - 04 ist in Ordnung (wenn dies jetzt in drei Feldern steht !)

Sonst wird es lustig:
Was bedeutet
111 ?
11. Januar (des aktuellen Jahres) oder
11. November (des aktuellen Jahres) ?

Bernhard
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: TMC am 21.03.04 - 20:45:44
Hast Recht, Bernhard, mein Vorschlag ist wirklich nicht sinnvoll gewesen (ohne Vornullen wenn Tag/Monat einstellig). 3 Felder ist ja gegen jede Usabilty, da kann der User genausoschnell auch ein "-" eingeben auf dem Zahlenblock als wie zum nächsten Feld wechseln.

Also was wirklich schick - und umsetzbar - wäre imho:
010103 -> 01. Jan. 2003
12032003 -> 12.März 2003
0101 -> 01. Januar vom aktuellen Jahr
h -> @today
g -> @yesterday

Was mich noch stört, ist der Umstand, dass Eingabeübersetzung so im Datumsfeld nicht funktioniert, da (wie oben schon erwähnt) die notesinterne Prüfung zuvorkommt.
Und Exiting-Event lässt nur Script zu (klar, wäre deswegen kein Hindernis).

Matthias
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: eknori am 21.03.04 - 22:00:14
ok, ok, war quick'ndirty Sonntags Fingerabeit ...

wie sieht denn eure Formel aus ??

Ulrich
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: koehlerbv am 21.03.04 - 22:15:22
Wenn mir mal das Datums-/Zeitdeld nicht ausreicht, mache ich mir darüber tiefgründigere Gedanken (ich mag ja eh Parser bauen  ;D)
Wenn es jemand anderes vorher eher ernsthaft (begründet) braucht, denke ich natürlich auch asap nach !

Bernhard
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: TMC am 21.03.04 - 22:25:08
wie sieht denn eure Formel aus ??

Das wollte ich hören, Ulrich  ;D

Hier mein quick'n'dirty Exiting-Event, leider keine Formel sondern Script, weil Exiting Formeln nicht mag:

Code
Sub Exiting(Source As Field)
   Dim session As New NotesSession
   Dim uiws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   
   Set db = session.CurrentDatabase
   Set uidoc = uiws.CurrentDocument
   Set doc = uidoc.Document
   
   Dim strDatum As String
   Dim iDatumlaenge As Integer
   strDatum = uidoc.fieldgettext ("Datum")
   iDatumlaenge = Len(strDatum)
   
   Dim strDay As String
   strDay = Left$(strDatum,2)

   Dim strMonth As String
   strMonth = Mid$(strDatum,3,2)

   Dim strYear As String
   If iDatumlaenge = 6 Then
      strYear = Right$(strDatum,2)
   Else
      strYear = Right$(strDatum,4)
   End If
   
   Dim strDatumNeu As String
   If iDatumlaenge = 6 Or iDatumlaenge = 8 Then
      strDatumNeu = strDay & "." & strMonth & "." & strYear
      Call uidoc.fieldsettext("Datum", strDatumNeu)      
   End If
   
   If strDatum = "t" Then
      strDatumNeu = Str$(Today())
      Call uidoc.fieldsettext("Datum", strDatumNeu)      
   End If   
   
   
End Sub

Wer bietet mehr ?

 ;D

Matthias
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: eknori am 21.03.04 - 22:29:55
ich mag ya blind sein, aber was macht dein script großartig anders als meine Formel ??
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: TMC am 21.03.04 - 22:34:46
Das Script funktioniert - das ist der Unterschied :-)

Deine Formel klappt mit einem Datumsfeld nicht, sondern stößt auf Fehler (weil Notes meckert wenn "030303" oder "t" im Datumsfeld steht - und man die Formel (leicht angepasst) in der Input Translation ausführt.

Außerdem keine Probleme mit Vornullen, da hier der Eintrag direkt als String gezogen wird.
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: eknori am 21.03.04 - 22:36:50
deshalb hatte ich eingangs gefragt, ob die Ausgangdaten genau in den zwei Formen vorliegen; und da funktioniert mein Script...
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: animate am 21.03.04 - 22:41:09
das ungute an der Exiting-Event-Lösung ist, dass das Event nicht zwangsläufig abgefeuert wird, nämlich dann nicht, wenn der Benutzer das Feld nicht verlässt
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: TMC am 21.03.04 - 22:41:58
deshalb hatte ich eingangs gefragt, ob die Ausgangdaten genau in den zwei Formen vorliegen; und da funktioniert mein Script...

Please explain. Habe den Satz jetzt 3 mal gelesen und oben Deine Postings gecheckt,  verstehe ich aber trotzdem noch nicht, den Satz.

Danke, Matthias
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: TMC am 21.03.04 - 22:46:12
das ungute an der Exiting-Event-Lösung ist, dass das Event nicht zwangsläufig abgefeuert wird, nämlich dann nicht, wenn der Benutzer das Feld nicht verlässt
Ja leider. Ich hab mir das mal angesehen, aber eine andere Möglichkeit hat man wohl nicht - weil eben Notes in einem Datumsfeld nach F9 / Aktualisierung 030303 (oder sonstige Strings) ablehnt.

Ich sehe nur 2 Möglichkeiten:
 a) Exiting-Event
 b) Textfeld

Matthias
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: eknori am 21.03.04 - 22:46:15
Sorry, hatte ein posting abgesetzt, was ich aber zwischenzeitlich gelöscht habe. Da hatte ich gefragt, ob das Datum als Text genau in den eingangs erwähnten Formaten vorliegt...
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: animate am 21.03.04 - 22:50:27

Ich sehe nur 2 Möglichkeiten:
 a) Exiting-Event
 b) Textfeld


eine andere: zwei Felder (1 Datum, 1 berechnetes Textfeld ). Dann z.B. im Editmodus nen Datepicker anzeigen und im Readmodus/in Ansichten das Textfeld mit übersetztem Datum
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: TMC am 21.03.04 - 22:53:29

Ich sehe nur 2 Möglichkeiten:
 a) Exiting-Event
 b) Textfeld


eine andere: zwei Felder (1 Datum, 1 berechnetes Textfeld ). Dann z.B. im Editmodus nen Datepicker anzeigen und im Readmodus/in Ansichten das Textfeld mit übersetztem Datum

Hab ich auch schon dran gedacht. Problem aber dabei genauso: Das Datumsfeld wird ja im Editmodus benutzt, und da hat man dann eben wieder das Problem: User gibt 030303 oder "t" (für Today)  ein.
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: eknori am 21.03.04 - 22:59:25
ich hätte lesen sollen

>> in einem Datumsfeld ein Datum ohne Punkte (z.B. 210304 o. 21032004) eingeben kann

Titel: Re:Datum ohne Punkte eingeben
Beitrag von: animate am 21.03.04 - 23:00:10
sorry, hab die Frage jetzt erst richtig gelesen. 2 Felder sind natürlich nix.

evtl. kann man sowas wie ne eigene Eingabemaske/Dialogbox fürs Datum benutzen.
 Der Grund und der Zweck für die ganze Aktion wär vielleicht noch hilfreich für ne gescheite Lösung
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: animate am 21.03.04 - 23:02:21
ich hätte lesen sollen
>> in einem Datumsfeld ein Datum ohne Punkte (z.B. 210304 o. 21032004) eingeben kann

 :D Tu quoque fili? (Kenn ich aus Asterix)
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: koehlerbv am 21.03.04 - 23:04:25
Zitat
Der Grund und der Zweck für die ganze Aktion wär vielleicht noch hilfreich für ne gescheite Lösung

Genau. Erst dann kommen wir weiter. Der Lösungen gäbe es ja viele ...

Bernhard
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: TMC am 21.03.04 - 23:18:42
Zitat
Der Grund und der Zweck für die ganze Aktion wär vielleicht noch hilfreich für ne gescheite Lösung

Hmm, ja und nein:

Ich sehe das global: warum nicht in 90% aller Datumsfelder eine vernünftige Lösung.
Da wäre das Input Translation schick gewesen - klappt aber nicht. Daher eben Exiting.

Hintergrund: User klopft schnell mal Daten in eine Maske, und das soll so schnell wie nur möglich erfolgen.

Aber der eigentliche Fragesteller wird eh staunen wenn er sieht, wie sich sein Thread entwickelt hat  ;D

Matthias
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: Semeaphoros am 21.03.04 - 23:51:35

 :D Tu quoque fili? (Kenn ich aus Asterix)

Mensch, Ihr haltet mich heute aber auf Trab ...... ;)

Im Asterix darf das so stehen, mir tuts weh, wenn da nicht "mi fili" oder "fili mi", also "mein Sohn" steht.

Shaksepear bringt es mit "Et tu, Brute", und so wird es am häufigsten zitiert: Auch Du. Brutus. Was Cäsar an jenen Iden des März 44. v. Chr. (15. März) genau gesagt hat, darüber kann man sich streiten: "Tu quoque, Brute, fili" mit oder ohne ergänzendes "mi" (kann hier wegen der Namensnennung weggelassen werden): "Auch Du (mein) Sohn Brutus" oder ob er es - als perfekter Bilingue, eher auf griechisch gesagt hat ("kai sy teknon") ist heute nicht mehr feststellbar, war wohl auch schon in der Antike nicht mehr sicher feststellbar. Die Bedeutung bleibt aber eh immer etwa die gleiche.

Ach so, das war, als Brutus mit zwei weiteren Verschwörern im Senat auf Cäsar eindrang, den Dolch zückte und Cäsar kurz vor der Tat seinen Lieblingsschützling Brutus unter den Mördern erkannte.
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: Detlef am 23.03.04 - 12:21:34
Zitat
Der Grund und der Zweck für die ganze Aktion wär vielleicht noch hilfreich für ne gescheite Lösung

Hmm, ja und nein:

Ich sehe das global: warum nicht in 90% aller Datumsfelder eine vernünftige Lösung.
Da wäre das Input Translation schick gewesen - klappt aber nicht. Daher eben Exiting.

Hintergrund: User klopft schnell mal Daten in eine Maske, und das soll so schnell wie nur möglich erfolgen.

Aber der eigentliche Fragesteller wird eh staunen wenn er sieht, wie sich sein Thread entwickelt hat  ;D

Matthias

Hallo und sorry, dass ich erst so spät mich wieder in meinen Thread einklinke. Aber was Matthias sagt, passt genau: User soll schnell Datum eingeben.
Ich denke es gibt nur eine Lösung:
1. Ein Textfeld zur eingabe mit einem Script im Exiting (oder Formel)
        Wobei hier auch nur eine 6 oder 8-Stellige eingabe erlaubt ist.
2. Ein Textfeld, was dann die Daten enthält (berechnet)

denn im Datumsfeld alleine kommt das Exiting leider zu spät.

Gruß und Danke für die Anregungen!

Detlef
Titel: Re:Datum ohne Punkte eingeben
Beitrag von: koehlerbv am 23.03.04 - 18:41:23
Du kannst das Datumsfeld auch berechnen beim Recalc (also Eingabeumsetzung bzw. PostRecalc-Event per Script) oder ein @SetField im Eingabefeld / Eingabevalidierung. Eine Verrenkung über ein weiteres Textfeld wäre also gar nicht nötig ;-)

HTH,
Bernhard