Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Silver am 04.04.02 - 10:37:00
-
Hi Ihr!
Könnt Ihr mir noch bei zwei Problemchen helfen?
1. Wie kann ich bei einer Schaltfläche, die eine Aktion zum Versenden des aktuellen Dokuments enthält, noch eine Anweisung einbinden, die nach Klick eine Antwortseite im selben Frame öffnet. :-/
2. Weiss vielleicht doch noch jemand, wie ich meine Formularfelder auf eine bestimmte Anzahl von einzugebenden Zeichen beschränken kann, bzw. nur Zahlen oder nur Text eingabefähig. Die Prüfung soll gleich nach Eingabe bzw. Sprung ins nächste Feld erfolgen, nicht erst beim Speichern oder Verlassen. ::)
Wäre echt toll, wenn mir jemand weiterhelfen könnte. Da ich ein totaler Anfänger bin, bitte leicht verständlich antworten. ;) Vielen Dank!
-
Zu 2. hätte einen Vorschlag. Im Exiting-Event könntest du folgenden Code platzieren:
Sub Exiting(Source As Field)
Dim ws As New NotesUIWorkspace
Dim this As NotesUIDocument
Set this = ws.CurrentDocument
If Not Isnumeric(this.FieldGetText("newfield")) Then 'Überprüfung auf Zahl
Msgbox "Bitte nur Zahlen ins Feld schreiben"
End If
If Len(this.FieldGetText("newfield")) > 10 Then 'Überprüfung der Länge
Msgbox "Bitte max. 10 Zeichen"
Call this.FieldSetText("newfield", Left$(this.FieldGetText("newfield"), 10)) 'Feldlänge wird gekürzt
End If
End Sub
Grüsse
Mani
-
Vielen Dank!
Hat mir sehr weitergeholfen.;D
Bleibt nur noch das Problem mit der Rückmeldung für die Absendung des Formulars, bzw. Einblendung einer Antwortseite im selben Frame!
-
Was stellst du dir unter einer Rückmeldung bzw einer Antwortseite vor? Beschreib es ein wenig, ich kann mir nämlich nicht's konkretes darunter vorstellen.
-
Ich suche den Befehl, um nach einem Klick auf die Schaltfläche in eine andere Seite mit z. B. Inhalt "Die Daten des Formulars wurden an die zuständige Stelle weitergeleitet" zu wechseln. Es kann auch eine Dialogbox mit entsprechendem Hinweis geöffnet werden. Besser wäre natürlich ein (Link) auf die Antwortseite!
Hoffe Du kannst mir weiterhelfen...
Muss mich nochmal entschuldigen, bin totaler Anfänger! :-[
-
Die Dialogbox:
Syntax: @Prompt( [ Stil] : [ NoSort ] ; Titel ; Eingabeaufforderung ; Vorgabe ; Auswahlliste ; Dateityp )
Beispiel:
@Prompt([OK]; "Dokument gesendet"; "Die Daten des Formulars wurden an die zuständige Stelle weitergeleitet")
Oder die Seite wird geöffnet mit
@Command( [OpenPage] ; Seite )
Jetzt passt es glaube ich oder, ich habe mich nämlich zuerst nicht ausgekannt was du mit Antwortseite meinst.
Grüsse
Manuel
-
Vielen, vielen Dank!
Hat alles bestens geklappt.
Gruß
Silver
;D ;D ;D ;D ;D ;D ;D
-
Uuuupsss... leider doch noch eine Verbesserung notwendig!
Hoffentlich kann mir noch einer von Euch den @-Befehl zum schliessen der Maske, die das ausgefüllte und versendete Formular beinhaltet, nennen. ??? Wäre sehr nett.
Vielen Dank!
-
Das geht mit @Command([FileCloseWindow])
-
Hi Manuel!
Wenn ich diesen Befehl in meine Schaltfläche einbinde, öffnet er mir zuerst die Rückmeldungsseite, schliesst die aber gleichzeitig wieder, sodass ich das selbe ausefüllte Formular wieder vorliegen habe. Ich habe aber den Namen des ausgefüllten Formulars in der Formel angegeben, dass nach Klick geschlossen wird. Was mache ich falsch?
Kannst Du mir nochmals helfen?
Silver
-
Ui, das Problem ist glaube ich, dass
Dieser Befehl wird nur nach der Auswertung der gesamten Formel ausgeführt, unabhängig davon, ob @Command oder @PostedCommand verwendet wird.
Versuche die Seite mit @PostedCommand( [OpenPage] ; Seite ) zu öffnen. Sonst wüsste ich eigentlich auch nicht wie das funktionieren könnte.
-
Wenn das vom manuell nicht klappen sollte ...
Keine schöne Lösung , hat mir aber mal bei einer alter 4er DB geholfen.
Den Befehl "@Command([FileCloseWindow])" zweimal ausführen , also
@Command([FileCloseWindow]);@Command([FileCloseWindow]) und eventuelle das ganze in @do() einbinden.
Wie gesagt , halt ne Krücke
cu
-
Vielen Dank ! Alles bestens... hoffe, dass ich Euch nicht mehr belästigen muss.
;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D
Silver
-
Kaum habe ich meine Formulardatenbank auf den Notes-Server gestellt, findet der Rechner nach drücken des Absenden-Buttons
(Hier die verwendeten Befehle:
@Do(@Command([FileCloseWindow]);@Command([FileCloseWindow]))
sowie
@PostedCommand( [OpenPage] ; "Rückmeldung" )
und eine Empfängerfunktion das Antwort-Formular nicht. Wie kann ich das lösen??? Hat jemand eine Idee??? :-[
Wenn ich die Datenbank von meinem PC aus aufmache und das Formular absende klappt es aber, woran liegt das? Ich bin am verzweifeln!
-
Noch zur Info - den Befehl:
@Do(@Command([FileCloseWindow]);@Command([FileCloseWindow]))
habe ich benutzt, da ich will, dass das Antwort-Formular nicht in einem extra-Fenster erscheint, sondern sich praktisch auf das abgesendete Formular im selben Fenster legt.
-
Du meinst als Antwortformular die Seite "Rückmeldung", oder?
Ist die Datenbank nach dem Schließen der Maske noch offen - ich hatte das Problem als die Maske alleine geöffnet war und diese dann geschlossen wurde. Also hat er auch die Seite nicht mehr finden können, weil nichts mehr von der Datenbank offen war.
-
Genau das Problem habe ich auch. Die Datenbank ist dann geschlossen, deshalb kann er die Antwortseite "Rückmeldung" nicht finden. Nehme ich den Close-Befehl raus, wird die Rückmeldung aber in einem eigenen Fenster geöffnet. Das ausgefüllte Formular liegt noch im Hintergrund und muss selbst auch noch geschlossen werden. Wie hast Du das gelöst?
-
Ich habe nun folgenden Code verwendet:
@PostedCommand([FileCloseWindow]);
@PostedCommand([OpenPage]; "seite1")
-
hmmmmm.... hab trotzdem noch das Problem! Denn mit dem Befehl zum schliessen des Fensters ist die komplette Datenbank zu und somit die Antwortseite nicht zu finden!
-
Gibt es nicht einen Befehl zum Öffnen einer Datenbank in einem bestimmten Rahmen und eine bestimmte Seite!
-
Soo, dann gebe ich jetzt auch noch meinen Senf dazu.
Ich gehe mal davon aus, daß du den Button zum Senden_und_Schliessen_und_pop_ein_Fenster_auf in deiner MASKE hast. ?!?
Diese Button ist aber nur solange existent, wie das Dokument in UIWorkspace sichtbar ist. Danach werden alle Handles auf diesen Button "zerstört".
Notes arbeitet alle Befehle in dem Button ab BEVOR das Dokument geschlossen wird. Daher wird auch deine Seite oder auch @Prompt vor dem Schließen des Dokuments angezeigt.
Also mit einem Button in der Maske wird das nie funktionieren.
Auch mit Script und den Form Events kommst du nicht weiter, da es NACH Schließen des Dokuments keine Möglichkeit mehr gibt, Code auszuführen. Das erklärt auch, warum es keinen POSTCLOSE Event in einer Maske gibt.
Daher ist euer Vorhaben auf diesem Wege nicht von Erfolg gekrönt, sorry ;D
Leider kann ich euch aber auch keine brauchbare Lösung anbieten.
Ulrich
-
Vielen Dank an alle Helfer!
Hab´s jetzt mit nem Dialogfenster gelöst.
-
:o :o :o :o
Sorry, habe doch noch ein Problem. Chef verland die Umsetzung der Felder mit Datum auch bei Eingabe ohne Punkt in tt.mm.jjjj!
Wie kann ich das realisieren? Hab das Feld als Datum/Uhrzeit als bearbeitbar deklariert. Nun brauche ich höchstwahrscheinlich noch die Eingabeumsetzungsformel. Also bei Eingabe von z. b. 01.01.02 soll umgesetzt werden in 01.01.2002 - bei Eingabe von 01.01.2002 - bleibt dies so und bei Eingabe von 010102 oder 01012002 soll in 01.01.2002 umgewandelt werden. Wie stelle ich das an?
Wäre toll, wenn Ihr mir nochmals weiterhelfen könntet!
-
Für die Umsetzung von zB 01.01.02 in 01.01.2002 musst du dein Datumsfeld richtig konfigurieren, dann geht's automatisch beim Refreshen.
Eigenschaften: Feld -> Register Steuerung -> Anzeigeoptionen Datum/Spezial: "Jahr immer 4stellig anzeigen"
Das zweitere ist eher schwieriger, vielleicht hat jemand anderes eine Idee ...
Manuel
-
Hallo, ich schon wieder
habe da etwas, was ich in meinen Datenbanken verwende um die Eingabevalidierung flexibel zu gestalten. Hier kannst du über ein Konfigurationsdokument für jedes Feld eine Validierungsregel hinterlegen
Du hast folgende Möglichkeiten
NOBLANK - test to see if the field has a value
ISNUMBER - test to see if the field has a numeric value(s)
ISDATE - test to see if the field has date or time values
ISLIKE - Tests field against pattern string (see the Like operator in the LotusScript documentation)
LENGTHBETWEEN - Test the length of the field's value to be between a specified range.
NOBLANKNUM - tests to see if the value in the field is not blank and that it is a number (combines NOBLANK and ISNUMBER)
NUMRANGE - test to see if the value in the field is between a specified range
Du kannst also prüfen, ob ein Feld numerish ist (ISNUMBER) und of der Inhalt eine bestimmte Lönge hat / nicht überschreitet (LENGTHBETWEEN)
Ich stell eine Demo mal auf meinen Server; allerdings weiß ich nicht, ob ich das heute noch schaffe ;D
-
Hallo Silver,
hab dir hier mal eine ganz simple Lösung erstellt
Sub Exiting(Source As Field)
On Error Goto notNumeric
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim account As String
Set uidoc = workspace.CurrentDocument
account = uidoc.FieldGetText( "Account" )
If Len(account) = 0 Then
Else
tmp% = Cint(account)
End If
' Feldlänge abfragen
If Len(account) > 3 Then
Msgbox "falsche feldlänge"
End If
' ende feldlänge prüfen
Exit Sub
notNumeric:
Msgbox "nicht numerisch"
Resume Next
End Sub
Im Code überprüfe ich beide Sachen NUMERISCH und die FELDLÄNGE. Musst nur eins von beiden weglassen.
zur Erläuterung:
Prüfung auf nicht numerisch; beim verlassen lese ich den Wert des Feldes "Account" ein und speichere den Wert in einer Textvariable. Dann wandle ich den String mittels CInt in einen numerischen Wert um. Enthält der Wert einen Buchstaben, erzeugt der Code einen fehler und verzweigt in die Fehlerbehandlung.
Feldlänge; hier prüfe ich mit len() die Länge. liegt diese über einen bestimmten Wert, gebe ich eine Fehlermeldung aus.
-
Habe ich wirklich nur die Möglichkeit, den Feldwert auf Länge und numerische Zahl zu prüfen. Kann ich nicht angeben, dass nach den ersten zwei ziffern - die eingegeben wurden, ein Punkt gesetzt wird. Ebenso nach dem Monat (zwei Stellig)???
-
Hallo Silver,
doch du kannst natürlich auch solche Sachen prüfen.
Mit dem Validierungstool geht das sogar vorzüglich ( und einfach, wenn man die Designelemente einmal eingebunden hat ) Auch im Exiting Event kannst du das realisieren. Du kanns sogar dem User die Eingabe in einer beliebeim Format gestatten und dann in der "Eingabeübersetzung" dei gewünschtes Format generieren.
Also zunächst prüfst du vielleicht, ob der User 6 Zeichen eingegeben hat, die auch alle numerisch sind und dann formatierst du die Eingabe so, wie du willst ( z.B. 12.34.56)
Alles kein Problem.
Aber dann solltest du mal genau posten, WAS du in WELCHER Form in deinem Feld stehen haben willst.
Ohne diese Angaben philosophieren wir hier noch bis zum St. Nimmerleins Tag.
eknori
-
Da ich (noch) nicht so viel Plan von der ganzen Materie habe wäre ich Dir dankbar, wenn Du mir den jeweiligen Code aufzeigen könntest.
Wenn beispielsweise jemand 311202 eingibt, soll ausegeben werden: 31.12.2002
Wenn beispielsweise jemand 100599 eingibt, soll aber 10.05.1999 erscheinen. Muss ich hier ne Grenze setzten, wo 19.. und 20.. auftauchen muss? Wenn ja dann ab ..50 auf 20..!
Wir eingegeben 15042002 sollen eben nur noch die Punkte dazwischen gestellt weren (15.04.2002).
Mehr nicht! Ich bringe es aber einfach nicht hin.
-
Nun denn, damit kann man doch was anfangen:
Kopiere diese Formel in die Eingabeumsetzung des Feldes, das du prüfen willst
fldValue:=@Trim(@ReplaceSubstring(Test;".";""));
tmp99:=@if(@Right(fldValue;2)="99";"1999";@Right(fldValue;4));
First2:=@Left(fldValue;2);
Next2:=@Middle(fldValue;2;2);
Period:=".";
First2+Period+Next2+Period+tmp99
damit sollte dein Problem zu lösen sein.
erstetze "Test" in der ersten Zeile durch den Namen deines Feldes.
Du kannst dann eingeben 010199 und es erscheint 01.01.1999
oder
01.01.2002 und es bleibt bei der Eingabe
auch 01.0199 ist möglich
eknori
-
;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D
VIELEN DANK! Hat mir sehr weitergeholfen.
;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D
-
:-/ So... hoffe das ist jetzt wirklich das letzte Mal, dass ich Euch nerven muss.
Habe jetzt den Befehl von eknori mit mehreren Wenn - Dann - Sonst - Anweisungen im Einsatz zur Datumsformatierung. Funktioniert auch wunderbar. Brauche jetzt nur noch ne Formel, die mir - falls nichts eingegeben wird - auch ein leeres Feld hinterlässt. D. h. die zwei Punkte aus der Formel sollen nur erscheinen, wenn auch wirklich eine Eingabe vorgenommen wurde. Wie bringe ich das hin.... bitte nochmals um eine allerletzte Hilfe - SORRY
-
Du könntest vor den anderen Anweisungen abbrechen, wenn nichts im Feld steht. Das geht mit Return.
@If (FELDNAME = ""; @Return(""); @Success);
-
hi manuel!
Bekomme aber immer noch die zwei Punkte. Hier die Formel, die ich in der Eingabeumsetzung stehen habe:fldValue:=@Trim(@ReplaceSubstring(Duplikat1von;".";""));
tmp:=@If(@Right(fldValue;2)="14";"2014";
@If(@Right(fldValue;2)="13";"2013";
@If(@Right(fldValue;2)="12";"2012";
@If(@Right(fldValue;2)="11";"2011";
@If(@Right(fldValue;2)="10";"2010";
@If(@Right(fldValue;2)="09";"2009";
@If(@Right(fldValue;2)="08";"2008";
@If(@Right(fldValue;2)="07";"2007";
@If(@Right(fldValue;2)="06";"2006";
@If(@Right(fldValue;2)="05";"2005";
@If(@Right(fldValue;2)="04";"2004";
@If(@Right(fldValue;2)="03";"2003";
@If(@Right(fldValue;2)="02";"2002";
@If(@Right(fldValue;2)="01";"2001";
@If(@Right(fldValue;2)="00";"2000";
@If(@Right(fldValue;2)="99";"1999";
@If(@Right(fldValue;2)="98";"1998";
@If(@Right(fldValue;2)="97";"1997";
@If(@Right(fldValue;2)="96";"1996";
@If(@Right(fldValue;2)="95";"1995";
@If(@Right(fldValue;2)="94";"1994";
@If(@Right(fldValue;2)="93";"1993";
@If(@Right(fldValue;2)="92";"1992";
@If(@Right(fldValue;2)="91";"1991";
@If(@Right(fldValue;2)="90";"1990";
@If(@Right(fldValue;2)="89";"1989";
@If(@Right(fldValue;2)="88";"1988";
@If(@Right(fldValue;2)="87";"1987";
@If(@Right(fldValue;2)="86";"1986";
@If(@Right(fldValue;2)="85";"1985";
@If(@Right(fldValue;2)="84";"1984";
@If(@Right(fldValue;2)="83";"1983";
@If(@Right(fldValue;2)="82";"1982";
@If(@Right(fldValue;2)="81";"1981";
@If(@Right(fldValue;2)="80";"1980";
@If(@Right(fldValue;2)="79";"1979";
@If(@Right(fldValue;2)="78";"1978";
@If(@Right(fldValue;2)="77";"1977";
@If(@Right(fldValue;2)="76";"1976";
@If(@Right(fldValue;2)="75";"1975";
@If(@Right(fldValue;2)="74";"1974";
@If(@Right(fldValue;2)="73";"1973";
@If(@Right(fldValue;2)="72";"1972";
@If(@Right(fldValue;2)="71";"1971";
@If(@Right(fldValue;2)="70";"1970";
@If(@Right(fldValue;2)="69";"1969";
@Right(fldValue;4)))))))))))))))))))))))))))))))))))))))))))))));
First2:=@Left(fldValue;2);
Next2:=@Middle(fldValue;2;2);
Period:=".";
First2+Period+Next2+Period+tmp
Muss ich Deinen Vorschlag in Exciting setzten???
MfG
-
Du setzt es einfach in die erste Zeile der Eingabeumsetzung, vor deinem Code:
@If (FELDNAME = ""; @Return(""); @Success);
fldValue:=@Trim(@ReplaceSubstring(Duplikat1von;".";""));
...
d.h. wenn das Feld leer ist, wird der restliche Code nicht mehr durchgeführt.
-
Na, auch schon wieder am werkeln Manuel?
Hat funktionert! Habe mich wirklich wieder blöd angestellt. Naja... war auch wieder ne lange Nacht. ;)
Kennst Du ne Möglichkeit, meine ausgefüllten Formulare, die wie Du bereits weisst, mit einem "Absenden" Button an die zuständige Stelle geleitet werden in den jeweiligen Ordner "Gesendete Objekte" des Mitarbeiters zu verschieben? Im Moment wird nach Absenden das Formular zwar verschickt, die Kollegen haben aber keinerlei "Beweise", dass Sie dieses ausgefüllt und abgesendet haben.
Den Versand nehme ich über eine einfache Funktion "Mail senden" mit vorgegebenen Verw.-Zweck und "Kopie dieser Mail mitversenden" vor!
-
und damit du dich in deinem eigen Code nicht verirrst ;D, hier noch eine kleine Verbesserung
fldValue:=test;
Year:=@Right(fldValue;2);
tmp:=@If(@TextToNumber(Year) >15;"19" + Year ;"20" + Year) ;
tmp
Alle Jahre ab 15 bekommen eine 19 vorangestellt; alle Jahre ab 00 eine 20.
Damit hast du erts einmal bis 2015 Ruhe, danach können wir uns ja was anderes überlegen ;D ;D
-
Das Verschieben in einen Ordner würde so funktionieren:
@AddToFolder(Zielordner ; Quellordner)
Entfernt das aktuelle Dokument aus einem Ordner und fügt es einem anderen hinzu. Für jeden der Parameter kann auch eine leere Zeichenfolge angegeben werden, um die Aktion zu überspringen.
Ich habe mich mit Ordnern noch nicht so auseinandergesetzt. Vielleicht kennt sich jemand anderes besser aus.
lg, Manuel
-
Sorry Manuel!
Mir ist jetzt erst aufgefallen, dass ich nach Einfügen Deiner Formel in meinen scheiss :o :o Datumsfeldern auch bei Eingabe eines Datums ein leeres Feld angezeigt bekomme. Woran kann das liegen? Also auch bei Eingabe wird der Inhalt wieder gelöscht!
-
Hast du eh in dieser Formel ...
@If (FELDNAME = ""; @Return(""); @Success);
... FELDNAME mit deinem richtigen Feldnamen ausgetauscht (ich glaube fldValue) ?
-
Servus!
Meine DB steht jetzt kurz vor der Vollendung...
Könnt Ihr mir noch mitteilen, ob es eine Möglichkeit gibt, die Meldung zur Wahl der Quelle als Vertrauenswürdig beim Öffnen durch einen anderen Benutzer zu unterdrücken?
-
du kannst in der Notes.ini den Parameter ECLSetup von DEFAULT 3 auf 0 setzen.
Einzelheiten hier
http://domino-8.prominic.com/A55711/ref/notesini.nsf/all/FFB9575228D8F88E862569A5006148BC
eknori
-
Habe in einem Feld für die Kontonummer folgendes im Exiting stehen:
Sub Exiting(Source As Field)
Dim ws As New NotesUIWorkspace
Dim this As NotesUIDocument
Set this = ws.CurrentDocument
If Not Isnumeric(this.FieldGetText("Kontonummer")) And Len(this.FieldGetText("Kontonummer")) >0 Then 'Überprüfung auf Zahl
Msgbox "Bittte nur Zahlen ins Feld schreiben"
End If
If Len(this.FieldGetText("Kontonummer")) > 10 Then 'Überprüfung der Länge
Msgbox "Bitte max. 10 Zeichen"
Call this.FieldSetText("Kontonummer", Left$(this.FieldGetText("Kontonummer"), 10)) 'Feldlänge wird gekürzt
End If
If Len(this.FieldGetText("Kontonummer")) < 8 Then 'Überprüfung der Länge
Msgbox "Bitte geben Sie eine gültige Kontonummer an"
Call this.FieldSetText("Kontonummer", Left$(this.FieldGetText("Kontonummer"), 10)) 'Feldlänge wird gekürzt
End If
End Sub
Die Überprüfung funktioniert auch soweit: Werden mehr als 10 Zeichen eingegeben wird auf 10 Stellen abgeschnitten. Werden 7 Stellen eingegeben bekommt der Benutzter die Meldung eine gültige Kto.-Nr. einzugeben. Die Kto.-Nr. dar 8-10 Stellen betragen. Möchte aber, dass der Cursor nach eingabe einer siebenstelligen (oder weniger) Kontonummer nicht ins nächste Feld springt, sondern noch im selben verweilt.
Kennt jemand eine Lösung?
-
Na klar ;D
Call notesUIDocument.GotoField( fieldName$ )
eknori
-
Sorry... wo muss ich das eintragen??? ???
-
überall da, wo du eine msgbox anzeigen läßt
-
Bekomme Meldung:
"not a sub or function name: NOTESUIDOCUMENT
??? :-[
-
LOGISCH, dein NotesUIDocument heißt ja auch "this" und nicht NOTESUIDOCOMENT, also
call this.GotoField ...
;D
-
Sorry... Bin Dir wirklich dankbar. Hat jetzt alles bestens geklappt!