Autor Thema: Problem mit IsNumeric  (Gelesen 10887 mal)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Problem mit IsNumeric
« Antwort #20 am: 01.04.07 - 23:13:58 »
Jo, das scheint genau so eine Sache gewesen zu sein, die irgendwann zu frühen R3-Zeiten auf der Lotusphere gewesen sein muss (anders ist es irgendwie nicht zu erklären!):
Da hocken zu später Stunde die Jungs und Mädels von Iris (für die Neieinsteiger: Das war das ursprüngliche Entwicklungsteam von Notes) auf einer After-Show-Party mit Entwicklern von Third-Party-Produkten zusammen, die Notes das Drucken beigebracht haben (wir wollen hier jetzt keine vermutete Firmennamen nennen ..). Irgendwas läuft auf der Party aus dem Ruder (auch hier ist pure Phantasie angesagt), und kurz darauf werden Forderungen angemeldet: "Ihr lasst das jetzt so mit den "Druckmöglichkeiten von Notes, und wir haben unser Geschäft ... und halten den Mund!"  ;D

Wie gesagt: Anders ist es kaum zu erklären, dass Notes bei simplen Druckaufträgen schon scheitert. Ausser, meine These ist korrekt: Sie meinen es wirklich ernst mit der Richtlinie "Notes macht Drucken überflüssig!". Dafür spricht ja auch einiges. Wenn sich die Organisationen umstellen würden ...

In diesem Sinne: Rettet den Wald!

Bernhard

Offline Mark³

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
  • Nordisch by Nature
    • Das Leben aus der Sicht eines Menschen
Re: Problem mit IsNumeric
« Antwort #21 am: 02.04.07 - 07:49:38 »
Javascript im Client ist deutlich schneller als andere Sprachen zur Validierung, weil die Loopbacks zum Server entfallen. Das habe ich bereits in einer Notes 5-Schulung mal gelernt. In unserem Unternehmen (30k Anwender) hat niemand Javascript abgeschaltet (wenn doch muss er es einschalten, kann man auch programmatisch triggern:
Code
If session.GetEnvironmentValue("EnableJavaScript", True) = 0 Then
		Call session.SetEnvironmentVar("EnableJavaScript", 1, True)
		Msgbox "Diese Datenbank benötigt JavaScript-Unterstützung. " & Chr(10) _
		& "Bitte starten Sie nun den Notes-Client neu, um die JavaScript-Unterstützung automatisch zu aktivieren.", _
		48, "Neustart erforderlich"
		Call SendCTRLF4	
		Exit Sub
	End If

Einen Beispielcode für die Nummerneingabe findet ihr in eurer Lieblingssuchmaschine über den Suchsatz "You can force numbers-only entries" auf searchdomino.techtarget.com. Javascript hat ein paar Fußangeln im Client aber viele Dinge gehen NUR mit Javascript oder eben gar nicht. Und wer im Web 2.0-Zeitalter Javascript abschaltet der kann eh nichts mehr machen  ;)
Die Idee des Tipps ist, eine Javascript-Funktion in einem kurzen Intervall (jede 10ms oder so) sich selbst aufrufen zu lassen solange man in dem zu prüfenden Feld steht. Sobald ein Zeichen ungleich numeric erscheint wird es wieder entfernt. Ist nicht perfekt, aber funktioniert.
sagt Mark.



slowfood.de

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
Re: Problem mit IsNumeric
« Antwort #22 am: 02.04.07 - 09:26:11 »
Javascript im Client ist deutlich schneller als andere Sprachen zur Validierung, weil die Loopbacks zum Server entfallen.
If Client == Webbrowser.

Wenn Du im Notes-Client bist, entfällt der Roundtrip zum Server bei LotusScript ebenfalls.
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

Offline Mark³

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
  • Nordisch by Nature
    • Das Leben aus der Sicht eines Menschen
Re: Problem mit IsNumeric
« Antwort #23 am: 02.04.07 - 10:00:20 »
ja das hört sich logisch an.
JavaScript (JS) hat gegenüber LotusScript (LS) aber den Vorteil, mehr Events bereitzustellen. Und benötigt man bei LS nicht oft auch uidoc.refresh? Hab lange nicht mehr für den Client programmiert, daher habe ich keine konkreten Beispiele dafür...

Und bei LS hat man im uidoc doch keinen Zugriff auf den Alias von Werten, oder? Mit JS kann man dagegen mit .text den Wert und mit .value den Alias ansprechen.

Kann das jemand bestätigen? Hab das alles in Notes 5 zum letzten Mal intensiv genutzt, weiß daher nicht mehr alle Details...
sagt Mark.



slowfood.de

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit IsNumeric
« Antwort #24 am: 02.04.07 - 15:20:48 »
@Bernhard,

boah, jetzt wird' aber heftig... ;-)
Es geht wirklich nur um Notes. Kein HTML, kein JS und nur Notes Client.

Ich will einfach nur auf Knopfdruck (hinter dem Button steht eine Script-Funktion) prüfen, ob in einem bestimmten Feld der gerade geöffneten Maske (Feld heisst mIOT_Spend) auch wirklich Ziffern drinstehen. Das Feld ist als Zahlenfeld definiert.

So sieht mein code zum checken des Feldeintrages aus:

   If Not Isnumeric(mIOT_Spend) Then      
      Messagebox "keine zahl",MB_OK+MB_ICONSTOP, BoxTitle$      
      uidoc.gotofield("mIOT_Spend")
      Continue = False
      Exit Function
   End If

Und es sind 2 Fehlermeldungen die kommen:

1.
Cannot convert text to a number

2.
Notes Error - field didn't pass validation formula


Ich checke in diesem Script auch andere Felder, ob sie z.B. leer sind:

If doc.mIOT_Client(0) = "" Then
   Messagebox "Client(s)" + MsgMandatory$,MB_OK+MB_ICONSTOP, BoxTitle$
   uidoc.gotofield("mIOT_Client")
   Continue = False
   Exit Function
End If

Das funktioniert einwandfrei.

Grüsse Ewald





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
Re: Problem mit IsNumeric
« Antwort #25 am: 02.04.07 - 15:23:06 »
1) Wo steht der von Dir gepostete Code.
2) Bitte poste den Code, der in den Vorgabewert, Translation und Validation Events ausgeführt wird.
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

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Problem mit IsNumeric
« Antwort #26 am: 02.04.07 - 16:05:26 »
Kann es zufällig sein, daß der Hund bereits in der Zeile begraben ist

If Not Isnumeric(mIOT_Spend) Then ...

die da heißen müßte

If Not Isnumeric(doc.mIOT_Spend(0)) Then ...

Aber grundsätzlich gilt schon: du schreibst nicht im Mindesten, wo es wirklich klemmt; nach deinem Fünfzeiler Code wußte man schon einmal, daß es sich vermutlich um eine Maske (und nicht einen Agenten z.B.) handelt, in der der Fehler bei der Bearbeitung (und nicht beim Öffnen eines Dokuments im Lesemodus) auftritt (da kommt deine Prüfung mit IsNumeric normalerweise ohnehin zu spät, weil das Frontend mit seinen Fehlermeldungen zuerst zuschlägt), wie die jetzt beigegebenen Fehlerkommentare auch deutlich zeigen.

Vermutlich bildest du eine Summe aus Zahlen (denn dort taucht typischerweise Fehler 1 auf).

Letztes Jahr hatte ich auch einmal ein Riesenproblem mit einem Feld. Es wollte und wollte einfach nicht klappen. Ich hab viel reingesteckt, aber es kam nix dabei heraus. Dabei wußte ich genau: das Problem lag an der Wurzel. Kein Tip konnte helfen.

Es war ein Kartoffelfeld, und ich hatte Wühlmäuse.

Gruß

Norbert
Situs vilate in isse tabernit.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Problem mit IsNumeric
« Antwort #27 am: 03.04.07 - 16:30:48 »
Und es sind 2 Fehlermeldungen die kommen:

1.
Cannot convert text to a number

2.
Notes Error - field didn't pass validation formula

Dann hatte ich ja zu 100% Recht  :)

Du musst jetzt tatsächlich "nur" noch Deinen Konflikt Backend versus Frontend auflösen. Ansätze habe ich ja schon beschrieben - lass uns einfach wissen, wo Du noch Unterstützung benötigst.

Bernhard

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit IsNumeric
« Antwort #28 am: 04.04.07 - 14:56:07 »
Hab jetzt mein Problem so halbwegs im Griff:
Das Nummernfeld in der Form (um das es ja geht) hab ich per default mit 0 vorbelegt.
In der Input validation des Feldes frag ich dann schon mal per Formel ab, ob der Wert numerisch ist oder nicht:
@If(@IsNumber(mIOT_Spend); @Success;
    @Failure("Only numeric values are allowed."))

Das funktioniert!
Denke mal, damit ist mein Frontendproblem gelöst, denn das Document lässt sich nicht speichern,solange der Wert nicht nummerisch ist.

Das Problem ist jetzt nur noch: Es gibt einen Button, der eine Mail notification
versendet mit einem DocLink drin (geht über LotusScript).
Wenn ich das Document einmal korrekt mit einer Zahl in dem Feld gespeichert habe, dann aber aus der Zahl wieder Characters mache und die Mail notification verschicken will, dann muss ich ja auch in dem Script prüfen, ob in dem Nummernfeld auch noch ne Nummer drinsteht. Das mach ich damit:

If Not Isnumeric(doc.mIOT_Spend(0)) Then      
   Messagebox "Nur Zahlen erlaubt.",MB_OK+MB_ICONSTOP, BoxTitle$      
   uidoc.gotofield("mIOT_Spend")
   Continue = False
   Exit Function
End If

Das funktioniert auch soweit, d.h., wenn ich die Characters wieder reinschreibe, wird die Notification nicht verschickt, die Exit Function schlägt zu. Nur kommt anstatt meiner Fehlermeldung der Notes Error
Variant does not contain a container.
Wie krieg ich denn das noch weg?

Grüsse Ewald

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Problem mit IsNumeric
« Antwort #29 am: 04.04.07 - 19:20:23 »
Dafür brauchst Du doch nur einen ErrorHandler (der Dir scheinbar sowieso fehlt), der auf diesen Fall (dann ist Err = 184) (auch) reagiert.

Ein simples Beispiel (aus einem Code von mir vom letzten Wochenende):
Code
	Exit Function
	
ErrorRoutine:
	Select Case Err
	Case ErrNotAContainer: Resume Next
		
	Case Else	
		Call ErrorHandler ("ValidateConfiguredFields")
		
	End Select
	Exit Function

Das mit Resume Next muss natürlich auch zur Situation passen - bei Dir wäre das offensichtlich eher ein Exit Function (oder was immer Du da treiben willst).

Bernhard

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit IsNumeric
« Antwort #30 am: 06.04.07 - 19:07:57 »
Hab jetzt mal das mit dem ErrorHandler eingebaut. Funktioniert zwar, aber noch nicht ganz so, wie ich das wollte.
Und zwar ist das Problem folgendes:
Ich hab ja 5 Nummernfelder. und wenn ich jetzt nur in einem Chars drin habe, dann kommt zwar die korrekte Fehlermeldung aus dem ErrorHandler, allerdings kann ich nicht expliziet den Cursor in das Feld setzen, weil der ErrorHandler ja ganz allgemein auf den Fehler hinweist.
Kann ich die Abfrage auf diesen speziellen Error 184 nicht direkt mit dem Feld verknüpfen, sodass ich mit einem goto.field auch in das Feld gehen kann, in dem der Fehler ist?

Ewald

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Problem mit IsNumeric
« Antwort #31 am: 06.04.07 - 20:02:15 »
Wo ist das Problem? Gib Deiner Routine mit, wo sie sich gerade befindet, diesen Wert kannst Du dann im ErrorHandler auswerten, wenn es dazu kommt.

Bernhard

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit IsNumeric
« Antwort #32 am: 06.04.07 - 22:40:54 »
Das ist genau das Problem. Ich weiss nicht, wie ich das in die Routine einbauen soll.

Select Case Err
   Case ErrNotAContainer:
      Msgbox "Non numeric valueas are not allowed."
      Exit Function
      
   Case Else
      'Nothing
      
   End Select

Muss das hier irgendwo rein?

Ewald







Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Problem mit IsNumeric
« Antwort #33 am: 06.04.07 - 23:30:46 »
Nun liegt es aber eigentlich an Dir (wo Du die Theorie übermittelt bekommen hast), etwas Phantasie zu entwickeln.
Das "Case Else" Deines ErrorHandlers lässt schlimmes ahnen. Du solltest nur bei spezifischer Überprüfung der genannten Items in die Routine zur Abhandlung  von Err = ErrNotAContainer verzweigen und sonst immer eine Standard-Fehlerbehandlung durchführen. Somit kannst Du ganz leicht ein Flag setzen (Variable), die das gerade behandelte Item bezeichnet. So kannst Du ganz einfach reagieren.
Das male ich jetzt aber nicht auch noch auf ...

Bernhard

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit IsNumeric
« Antwort #34 am: 07.04.07 - 10:47:13 »
Aha...:-(
Das hab ich zwar jetzt nicht so ganz verstanden, da ich in der Script-Programmerung nicht so bewandert bin aber ich versuch halt mal das irgendwie hinzubekommen.
Danke.
Ewald

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz