Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: TMC am 12.08.04 - 18:48:39

Titel: Javascript im Client: OnChange-Event und Feldanpassung
Beitrag von: TMC am 12.08.04 - 18:48:39
Ich habe hier eine ND6 - Datenbank, die R5 - kompatibel werden muss. (nicht Web)

Es gibt da 2 Datumsfelder:
 * DateFrom
 * DateTo

Beispiel für den Onchange-Event des "DateFrom" - Feldes:
Code
Sub Onchange(Source As Field)
   
   Dim uiws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = uiws.CurrentDocument
   Set doc = uidoc.Document   
   
   If doc.DateFrom(0) > doc.DateTo(0) Then
      doc.DateTo = doc.DateFrom(0) + 1
   End If
   
End Sub

Wenn also das eingegebene Startdatum größer als das Enddatum ist, wird das Enddatum angepasst (Startdatum + 1 Tag).

Jetzt muss das auch in R5 gehen.
Da steht mir aber nur JavaScript im OnChange-Event zur Verfügung.

Im R5-Mailfile in der Kalendermaske passiert eigentlich ähnliches, da hab ich mal den Code rauskopiert:
Code
if (window.location.protocol.indexOf('Notes:')==-1)
   {

thisform = document.forms[0];
newstart = new Date(translateDate(thisform.StartDate.value));
newend = new Date(translateDate(thisform.EndDate.value));
   
//verify parsing
xxBadDateString = "This date (" + thisform.StartDate.value + ") is an invalid date.  Please re-enter Start Date."


if (newstart.toString() == "Invalid Date" || newstart.toString() == "NaN")
   {
   alert( xxBadDateString )
   thisform.StartDate.value = thisform.EndDate.value
   thisform.StartDate.focus()
   }
   
else if (newend.getTime() < newstart.getTime()) 
   {
   thisform.EndDate.value = thisform.StartDate.value
   } 
   }

Ich habe leider keine Ahnung was das Script alles macht. Da ist wohl auch eine Validierung drin.

Was mir aber Hoffnung macht ist der letzte Part, dort wird ja wohl sowas ähnliches gemacht wie ich in meinem LS habe.

Wie muss ich denn das JS anpassen für meine Situation?

Jeder Tipp ist willkommen  :)
Titel: Re:Javascript im Client: OnChange-Event und Feldanpassung
Beitrag von: animate am 12.08.04 - 20:23:27
die erste Zeile bedeutet schonmal, dass das ganze nur ausgeführt wird, wenn nicht gerade das notes-Protokoll verwendet wird.

was das jetzt genau bedeutet weiß ich nicht genau, hab bis jetzt sehr selten JS im Client verwendet.
Also auf jeden Fall heißt das, dass es im Web ausgeführt wird. Meine Befürchtung ist, dass es bedeutet, dass es nicht im Client ausgeführt wird. Kann aber auch ganz anders sein.
Titel: Re:Javascript im Client: OnChange-Event und Feldanpassung
Beitrag von: animate am 12.08.04 - 20:26:20
und dann wird überprüft, ob die beiden Datümer (ich weiß, ist falscher Plural) gültig sind.
Wenn nicht, gibts ne Warnung und StartDate wird auf EndDate gesetzt, wenn ja, dann genau andersrum, dann wird das EndDate aufs StartDate gesetzt, falls Ende < Start
Titel: Re:Javascript im Client: OnChange-Event und Feldanpassung
Beitrag von: animate am 12.08.04 - 20:31:13
und hier kannst du sehen, wie du mit Datümern in JS umgehen kannst:
http://de.selfhtml.org/javascript/objekte/date.htm
Titel: Re:Javascript im Client: OnChange-Event und Feldanpassung
Beitrag von: TMC am 12.08.04 - 20:34:15
Danke Thomas für die Tipps.
Schau ich mir an.

Matthias.

P.S. cooles Avatar
Titel: Re:Javascript im Client: OnChange-Event und Feldanpassung
Beitrag von: animate am 12.08.04 - 20:40:08
im Prinzip würde ich es so machen:

ein Date Objekt erstellen mit dem Wert deines Felds(String)
das für alle Felder, mit denen du rechnen willst.
die Berechnungen und Änderungen durchführen.

Stringwerte zurückschreiben
den Stringwert eines jeden Objekts bekommst du mit der toString()-Methode
newstart.toString()

in ein Feld schreibst du so, wie im Beispiel gezeigt:

thisform = document.forms[0];
thisform.EndDate.value = "12.12.1912";
Titel: Re:Javascript im Client: OnChange-Event und Feldanpassung
Beitrag von: TMC am 12.08.04 - 21:11:24
Ich wollte es jetzt eigentlich ziemlich simpel halten am Anfang.

Code
thisform = document.forms[0];
mystartdate = new Date(translateDate(thisform.rDateFrom.value));
myenddate = new Date(translateDate(thisform.rDateTo.value));

if (mystartdate.getTime() > myenddate.getTime())
 {
thisform.rDateTo.value = thisform.rDateFrom.value
 }

(die Felder heißen rDateFrom/rDateTo).

Hier kommt auch schon die Fehlermeldung:
Zitat
A JavaScript Error was encountered.
Error: ReferenceError: translateDate is not defined

Zeile wird leider nicht angegeben.

Muss ich da noch irgendwas deklarieren?
Titel: Re:Javascript im Client: OnChange-Event und Feldanpassung
Beitrag von: animate am 13.08.04 - 09:19:22
translateDate ist keine JS-Funktion. Das ist eine Funktion, die irgendwo in der DB steht (JS-Header?)
Titel: Re:Javascript im Client: OnChange-Event und Feldanpassung
Beitrag von: TMC am 13.08.04 - 11:31:08
Danke Thomas, steht im JS-Header.

Lt. R5 Designerhelp ist der R5-OnChange-Event von Feldern "Browser only" - im R5.0.11 - Client kann ich aber auch Client einstellen.
Ich lass das glaub ich wieder, da die DB auch auf etwas älteren Clients funktionieren muss.
Im LDD-Forum wird auch immer wieder betont, dass OnChange-Event nur im Browser geht.
Schade eigentlich...