AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
25.05.12 - 16:27:34
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino 6
| |-+  ND6: Entwicklung (Moderatoren: _Arne_, Axel, eknori, ata, koehlerbv)
| | |-+  Pseudotag vs. serverseitige Pflichtfeldprüfung setfield Problem
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Pseudotag vs. serverseitige Pflichtfeldprüfung setfield Problem  (Gelesen 687 mal)
Lotusnap
Gast
« am: 09.07.10 - 11:12:45 »

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. Sad

« Letzte Änderung: 09.07.10 - 11:32:42 von Lotusnap » Gespeichert
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1356



« Antworten #1 am: 09.07.10 - 11:34:02 »

Hört sich an, als ob das im Browser laufen soll. Hast Du das Feld Temp auch in der Maske angelegt?
Gespeichert
Lotusnap
Gast
« Antworten #2 am: 09.07.10 - 11:36:26 »

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 » Gespeichert
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1356



« Antworten #3 am: 09.07.10 - 11:47:09 »

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.
Gespeichert
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1356



« Antworten #4 am: 09.07.10 - 12:04:44 »

Hab noch mal nachgeschaut, das Feld muss nicht bearbeitbar sein, berechnet beim Anlegen funktioniert auch.
Gespeichert
Lotusnap
Gast
« Antworten #5 am: 12.07.10 - 08:06:27 »

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 Smiley.
« Letzte Änderung: 12.07.10 - 08:24:25 von Lotusnap » Gespeichert
atbits
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 637


Bugfree-Development ;-)


WWW
« Antworten #6 am: 12.07.10 - 09:37:41 »

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
Gespeichert

David Schiffer
================================

atBits GmbH & Co. KG - http://www.atbits.de
Softwareentwicklung und Beratung

im Einsatz:
Lotus Domino 6.5.x, 7.x, 8.x, 8.5.x
CooperTeam DesktopManager
Lotusnap
Gast
« Antworten #7 am: 12.07.10 - 09:49:17 »

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.
Gespeichert
atbits
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 637


Bugfree-Development ;-)


WWW
« Antworten #8 am: 12.07.10 - 10:00:51 »

Schau mal hier http://ichwill.net/
Nur weil Du barrierefrei sein willst mußt du nicht auf JS verzichten ;-)

\lg david
Gespeichert

David Schiffer
================================

atBits GmbH & Co. KG - http://www.atbits.de
Softwareentwicklung und Beratung

im Einsatz:
Lotus Domino 6.5.x, 7.x, 8.x, 8.5.x
CooperTeam DesktopManager
m3
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 7279


Non ex transverso sed deorsum!


WWW
« Antworten #9 am: 12.07.10 - 10:30:13 »

Ich würde aber nicht nur wegen der Barrierefreiheit sondern auch aus Sicherheitsgründen auf eine Validierung auf Serverseite nicht verzichten.
Gespeichert

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

Weeks of programming can save you hours of planning!
Lotusnap
Gast
« Antworten #10 am: 12.07.10 - 10:49:28 »

Also ich würde gerne den Weg über den Agenten gehen Smiley ...

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 Wink
Gespeichert
atbits
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 637


Bugfree-Development ;-)


WWW
« Antworten #11 am: 12.07.10 - 10:59:12 »

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
Gespeichert

David Schiffer
================================

atBits GmbH & Co. KG - http://www.atbits.de
Softwareentwicklung und Beratung

im Einsatz:
Lotus Domino 6.5.x, 7.x, 8.x, 8.5.x
CooperTeam DesktopManager
Lotusnap
Gast
« Antworten #12 am: 12.07.10 - 11:18:11 »

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 Sad...

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. Sad
« Letzte Änderung: 12.07.10 - 12:27:05 von Lotusnap » Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: Tinte / Toner günstig