Autor Thema: Pseudotag vs. serverseitige Pflichtfeldprüfung setfield Problem  (Gelesen 3702 mal)

Lotusnap

  • Gast
Ich habe einen süßen "kleinen" Pseudotag geschrieben. Er gibt eine Nachricht aus, wenn in einem Eingabefeld etwas anderes als eine Zahl eingebeben worden ist. Schön und gut, aber ich muss jetzt noch die Pflichtfeldprüfung des Serves hinbekommen.

Ich habe versucht per @setfield ein zusätzliches Feld ins Dokument zu peitschen, in dem steht, ob ein Fehler (also eine falsche Angabe getätigt wurde oder nicht). Dieses Feld wollte ich dann in der Pflichtfeldprüfung auslesen. Das will aber nicht so recht klappen

Am Ende des Pseudotag haue ich html code raus, wenn ein Fehler gefunden wurde. Das funktioniert.
Jetzt wollte ich zusätzlich noch:



@if(@length(text)>38;@setfield("Temp";"Fehler");"");

setzen und dann in der Pflichtfeldprüfung:
check:= @true;
check:=@if(Temp="Fehler";@false;check);
check
Aber das funktioniert nicht. :(

« Letzte Änderung: 09.07.10 - 11:32:42 von Lotusnap »

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Hört sich an, als ob das im Browser laufen soll. Hast Du das Feld Temp auch in der Maske angelegt?

Lotusnap

  • Gast
In der Maske heißt also in der Website an sich als html code?

Ich habe es als zusätzliches Eingabefeld erstellt. Aber nicht als HTML Feld eingebunden.

Das Feld ist auch vorhanden und gefüllt. Solange ich im gleichen Pseudotag @getfield("Temp) eingebe, kommt der Inhalt des Feldes raus. Mache ich es irgendwo anderes im Eingabe-Layout gibt es den Inhalt des Feldes nicht wieder.
« Letzte Änderung: 09.07.10 - 11:44:26 von Lotusnap »

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Ich bin nicht wirklich fit in Web-Entwicklung unter Notes, deshalb verstehe ich Deine Frage nicht ganz.

Eine Webanwendung habe ich aber schon bauen müssen, und da wollte ich auch ein Feld setzen. Das musste in der Maske angelegt und bearbeitbar sein. Es wurde per Verbergeformel nicht angezeigt, dazu musste noch die Option "HTML für alle Felder generieren" in der Maske (2. Lasche) angeklickt sein, erst dann hat es funktioniert.

Hoffentlich hilft Dir das, denn viel mehr weiß ich in dem Bereich leider nicht.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Hab noch mal nachgeschaut, das Feld muss nicht bearbeitbar sein, berechnet beim Anlegen funktioniert auch.

Lotusnap

  • Gast
Danke für deine Mühe.

Leider ist es das nicht. Ich habe ja zum Zeitpunkt der Eingabe der Daten keine Maske, sondern ein HTML Formular.  Ich mache es mal ein bisschen konkreter:

Mein Pseudotag:
Code
text:={<strong>}+"Fehlerhafte Eingabe in Feld:" + {</strong><ul >};

eintraege:="ffmbadditionsrollen"... und 99 weitere Einträge


@for(n:=1; n <= @elements(eintraege); n:=n+1;

Fehler:=1;

@for(m:=1;m <= @length(@getfield(eintraege[n]));m:=m+1;

zeichen:=@text(@rightback(@leftback(@getfield(eintraege[n]);@length(@getfield(eintraege[n]))-m);m-1));

@for(k:=49;k <= 57;k:=k+1;

Fehler := @if(zeichen=@char(k);1;0);
k:=@if(zeichen=@char(k);58;k);
m :=@if(k=57&@char(k)!=zeichen;@length(@getfield(eintraege[n]))+1;m)

);
zeichen := ""
);


teilstring:="";
teilstring:= @if(Fehler=0;@text(@rightback(eintraege[n];4));"");
anfangsbuchstabe:=@Uppercase(@left(teilstring;1));
teilstring:=@if(teilstring="";"";{<li class="Fehler">} + anfangsbuchstabe + @rightback(teilstring;1) +{</li>});
teilstring:= @replacesubstring(teilstring;"_":"umschlaege":"pzu";" ":"Umschläge":"PZU");
teilstring := @replacesubstring(teilstring;"1 12":"a z":"1 31":"21  5":"8  5":"1  5v":"4  2":"9v";"1-12":"A-Z":"1-31":"21,5":"8,5":"1,5 V":"4,2":" 9 V");
text := text + teilstring

);
@if(@length(text)>38;@setfield("Temp";"Fehler");""); <-- das funktioniert nicht
@if(@length(text)>38;text+{</ul>};"");


Jetzt muss ich die Masse an Pseudotag noch in die serverseitige Pflichtfeldprüfung überführen. Hat jmd nen Tipp wie ich das mache? Ich bin mir nicht sicher was ich alles verwenden darf (@for?; variablen definieren?). Bin wie mein Nick schon sagt, ein Neuling :).
« Letzte Änderung: 12.07.10 - 08:24:25 von Lotusnap »

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Hallo,
wenn die Validierung wirklich serverseitig passieren muß (?) dann würde ich das im WebQuerySave Agenten machen.

Ich würde es aber vorzugsweise per JavaScript machen.

Du kannst auch eine Kombination aus beidem machen und vor dem eigentlichen Submit die zu prüfenden Felder per Ajax an einen Agenten schicken der validiert und danach erst das eigentliche Submit.

Grüße David
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Lotusnap

  • Gast
Hallo,
wenn die Validierung wirklich serverseitig passieren muß (?) dann würde ich das im WebQuerySave Agenten machen.


Hi,
ich würde so gerne JavaScrict verwenden, darf ich allerdings wegen Barrierefreiheit nicht.
Wo erstelle ich den WebQuerySave Agenten ? In der Scriptbibliothek ? Das "umwandeln" des Pseudotag in einen Agenten sehe ich nicht als schwierig an, wie stelle ich es denn in den Agenten an, dass das Dokument nicht abgeschickt wird, sondern wie bei der normalen Pflichtfeldprüfung "neu geladen wird".

Danke schonmal im Voraus.

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Schau mal hier http://ichwill.net/
Nur weil Du barrierefrei sein willst mußt du nicht auf JS verzichten ;-)

\lg david
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Ich würde aber nicht nur wegen der Barrierefreiheit sondern auch aus Sicherheitsgründen auf eine Validierung auf Serverseite nicht verzichten.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Lotusnap

  • Gast
Also ich würde gerne den Weg über den Agenten gehen :) ...

Code
Dim ses As New Notessession
	Dim doc As NotesDocument 	
	Dim db As NotesDatabase
	Dim item As NotesItem 
	Set db = ses.CurrentDatabase
	Set doc = ses.DocumentContext
Damit bekomme ich das Dokument?! Wenn ich es richtig verstanden habe. Kann ich jetzt einfach
Code
Set item =doc.ReplaceItemValue( "Fehler", "0")
angeben? Und dann in der Pflichtfeldprüfung fragen, ob das Feld Fehler = 0 ist. Oder wird die Pflichtfeldprüfung vorher ausgeführt? Muss ich das Dokument noch speichern mit Call doc.save ? Welche Attribute müsste ich da setzen? Oder kann ich das Weiterleiten des Dokumentes anders verhindern, so dass das HTML Formular nochmal geladen wird und der Benutzer seine Eingaben korrigieren kann ?

Ich bin wie gesagt ein Neuling und mein Lehrgang ist erst im Oktober ... von daher ;)

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Im Prinzip soweit richtig,

den feldwert holst Du Dir einfach so:
Code
doc.fehler(0)

weil replaceItemValue setzt den Wert ;-)

Dann machst Du also Deine Fehlerperüfungen und schreibst ggf. eine Fehlermeldung in ein Feld hinein.

Es hängt jetzt davon ab, was Du so machen willst bei der Validierung und wie dein Prozess ausschaut.
Aber um den Fehler anzuzeigen mußt Du das Dokument natürlich speichern (im Normalfall hast du dann noch ein Statusfeld, das Du auf einen Fehlerstatus setzt oder sowas), dann öffnest Du das Dokument erneut und der User kann seine Fehleingabe korrigieren.

Grüße David
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Lotusnap

  • Gast
im Prinzip will ich, dass das HTML-Formualar im Browser neugeladen wird mit der FORMID, die das Formular hat. Damit der Benutzer seine Eingaben korrigieren kann.

Ich habe jetzt einfach mal
Code
Set item =doc.ReplaceItemValue( "Telefon", "0")
Call doc.save (True, True)
ausprobiert und dann in die Formular-TransferDatenbank geguckt. Das Feld bleibt aber leer :(...

Was mache ich falsch ?
--- Nachtrag

Okay: Call doc.save brauche ich nicht, steht so in der Hilfe. Aber rufe ich den Agenten richtig auf:
Ich habe ihn im Eingabe Formular unter WebQuery-Ereignis  (als Formel) mit
Code
@Command([ToolsRunMacro]; "WebPruefung");
aufgerufen. Es passiert nichts. :(
« Letzte Änderung: 12.07.10 - 12:27:05 von Lotusnap »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz