Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Bruce Willis am 19.11.12 - 14:48:43

Titel: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Bruce Willis am 19.11.12 - 14:48:43
Hallo,

ein Dokument bringt beim Speichern (d.h. QuerySave) die o.g. Fehlermeldung.
Gleich nach dem "Call source.Refresh "

Wie kann man geschickt ermitteln, welches Feld/Item das Problem hat?

Ich hab schon in mehere Felder (auch in das letzte ganz unten in der Maske) Folgendes eingetragen, aber die Fehlermeldung kommt erst danach.  :-: :-: :-:

@Prompt ([Ok];"Titel"; @ThisName + ": " + @Text(@ThisValue));

Gruß
Leo
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: ascabg am 19.11.12 - 15:06:01
Hallo,

Und was steht alles in den Events der Maske?
(QuerySave, ...)


Andreas
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Bruce Willis am 19.11.12 - 15:28:07
Eine Menge (Screenshot anbei).

Aber die QuerySave geht genau nach dieser Zeile nicht weiter.

Gruß
Leo
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Bruce Willis am 19.11.12 - 15:32:40
Was ich noch gerade bemerkt habe:
wenn ich im Edit-Modus F9 drücke, kommt die Fehlermelduzng auch...  :-:
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: koehlerbv am 19.11.12 - 15:41:29
Was Dir da reinspuckt, ist die Eingabevalidierung eines Feldes. Es ist nicht die beste Idee, (Formel-)Eingabevalidierungen und LS-Events zu kombinieren.

Wenn Du erfahren willst, welches Item hinter der Meldung eines Feldes steckt, dann kannst Du im QuerySave über alle Items loopen und diese auf Isarray = False prüfen. Wenn das dann kein RT item ist, hast Du den (ersten) Übeltäter gefunden.

Bernhard
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Bruce Willis am 19.11.12 - 16:06:28
Wenn Du erfahren willst, welches Item hinter der Meldung eines Feldes steckt, dann kannst Du im QuerySave über alle Items loopen und diese auf Isarray = False prüfen.
Muss ich jedes Item namentlich nennen?
Falls nicht, wie geht das?

Danke und Gruß
Leo
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: koehlerbv am 19.11.12 - 16:10:23
NotesDocument.Items ist Dein Freund, Leo.

Bernhard
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Bruce Willis am 19.11.12 - 17:11:00
Danke, Bernhard.
Kurz und bündig wie immer.  :)

Das Problem lag übrigens nicht an dem berechneten sondern anderen Item (siehe Screenshot).
Könnte man sowas auch abfangen bzw. den korrupten gleich finden?

Gruß
Leo
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: koehlerbv am 19.11.12 - 18:51:15
Dass das "irgendein Item" sein wird, wahr schon klar, Leo  ;)

Das Verfahren, um fehlerhafte Felder (in diesem Fall sind es wirklich Felder, da das nur im Frontend und mit Bezug zur Maske / Feld stattfindet), hatte ich doch beschrieben.
Wie verhindern: Eine saubere Validierung. Entweder nur mit Formelsprache oder nur mit LS an zentraler Stelle (ich bevorzuge letzteres). Oder man ist Masochist und beherrscht zudem noch die Kombination von beiden (für mich gilt letzteres, ersteres schliesst mich aus von solchem Stunt).

Häff fann,
Bernhard
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Bruce Willis am 06.06.13 - 16:57:01

Das Verfahren, um fehlerhafte Felder (in diesem Fall sind es wirklich Felder, da das nur im Frontend und mit Bezug zur Maske / Feld stattfindet), hatte ich doch beschrieben.


Hallo Bernhard,

nochmals Danke.
Meinst Du etwa so?

Code
	Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument	'Aktuelles Dokument im Frontend	
	Dim doc As NotesDocument	'Aktuelles Dokument im Backend
	
	Set uidoc = ws.CurrentDocument
	Set doc = uidoc.Document 		'Überführung des aktuellen UI Dokuments ins Backend
	
	'Dim item As NotesItem
	ForAll item In doc.Items
		If Not IsArray(item) = False Then
			MessageBox( item.Name )
		End If
	End ForAll

Gruß
Leo
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: koehlerbv am 06.06.13 - 17:07:13
Bei Deinem Code darf kein RT Item im Dokument sein, denn diese sind niemals Arrays, Leo. Das müsstest Du also noch abfragen.

Bernhard
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Peter Klett am 06.06.13 - 17:14:40
Kleine Pingelei von mir: Warum schreibst Du das so umständlich? Das versteht beim späteren Lesen "keine Sau"

If Not IsArray(item) = False Then

Das ist im Ergebnis das Gleiche wie

If IsArray(item) Then

nur, dass im zweiten Fall die Chance besteht, ohne Knoten im Hirn weiterleben zu können ;)
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Bruce Willis am 06.06.13 - 17:23:54
Vielen Dank für die Antworten.

Wenn ich so eintrage, werden ALLE Felder angezeigt:
If  IsArray(item) = False Then


Wenn ich so eintrage, werden KEINE Felder angezeigt
(auch keine RT-Felder):
If Not  IsArray(item) = False Then
vermutlich wie auch bei dieser Variante:
If  IsArray(item) Then

Was soll ich denn eintragen?
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Peter Klett am 06.06.13 - 17:40:47
Das kommt natürlich darauf an, was Du haben willst. Mein Beitrag bezog sich ausschließlich auf die Formulierung.

Willst Du alle Items haben, die KEIN Array sind, fragst Du (von Mensch zu Mensch)

Bist Du kein Array?

Willst Du alle Items haben, die ein Array sind, solltest Du fragen

Bist Du ein Array?

Natürlich kannst Du auch fragen

Bist Du nicht kein Array?

Notes versteht das, aber vielleicht nicht der einfache Mensch, der sich später damit herumschlagen muss ...


Zu Deinem eigentlichen Problem kann ich im Moment nicht wirklich viel beitragen, denn das habe ich leider nicht verstanden. Nur soviel, dass Du irgendwie validieren willst. Und wenn Du das mit Script machen willst (was ich immer so mache), wirst Du wohl jedes einzelne Feld abfragen müssen, denn Du weißt, in welchem Feld/Item was stehen muss. Es ist höchst unwahrscheinlich, dass Du eine Maske hast, in der immer alle Items gefüllt sein müssen, so dass man die so pauschal mit Forall items ... abfackeln kann.

Ich mache das ungefähr so (im Querysave):


Dim nl As String
nl = Chr (13) & Chr (10)
Dim Fehler As String

If doc.Feld1 (0) = "" Then
   Fehler = Fehler & nl & "Feld1 ist leer"
End If

If Ubound (doc.Feld2) < 2 Then
   Fehler = Fehler & nl & "Feld2 enthält zu wenige Werte"
End If

If Len (doc.Feld3 (0)) < 5 Then
   Fehler = Fehler & nl & "Feld3 ist zu kurz"
End If

If Fehler <> "" Then
   Msgbox "Das Dokument konnte nicht gespeichert werden" & nl & Fehler, 16, "Fehler"
   Continue = False
End If

Natürlich sammele ich die Fehler in einer globalen Variablen einer Bibliothek und nutze eigene Routinen, um die Fehlertexte zu sammeln, aber sinngemäß so sieht das aus.
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: koehlerbv am 06.06.13 - 17:53:53
Peter, es geht Leo um Items, in denen ein @Error steht (wenn jemand in ein Datumsfeld "Tante Hulda" geschrieben hat und man vom Frontend auf das Backenend referenziert, wie im QuerySave beispielsweise).

Bernhard
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Bruce Willis am 06.06.13 - 17:57:05
Hallo Peter,

vielen Dank für Deinen Vorschlag.
Ich werde meine Validierungen nach und nach in so einen Script verschieben.

Das eigentliche Problem ist die Fehlermeldung "Text kann nicht in eine Zahl umgesetzt werden", die einige User ab und zu bekommen.
Ich vermute, dass dies an deren Regionalsettings liegen könnte.

Bernhard meinte, dass ich das Problemfeld mit so einem Script wie oben finden könnte, was bei mir leider nicht klappt.

Hättest Du eine Idee?
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Peter Klett am 06.06.13 - 18:15:15
Peter, es geht Leo um Items, in denen ein @Error steht (wenn jemand in ein Datumsfeld "Tante Hulda" geschrieben hat und man vom Frontend auf das Backenend referenziert, wie im QuerySave beispielsweise).

Bernhard
Bist Du sicher, dass das immer so funktioniert? Wenn das Dokument schon älter ist und einen korrekten Eintrag hatte, dann aber in einen falschen Wert geändert wird, ist dann das Item auch kein Array? Wäre es vielleicht einfacher mit uidoc.FieldGetText zu arbeiten und dort nach Fehlermeldungen zu suchen? Ich habe das noch nie probiert, deshalb bin ich an der Ecke ziemlich "unbeleckt" ...
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: koehlerbv am 06.06.13 - 18:44:06
Jedes Item ausser RT ist immer ein Array - ausser, es hat als Inhalt @Error, Peter.
Und Frontend hilft Dir da nicht weiter.

Was Leos Problem angeht: Lass Dir von den Usern einen Schirmschuss schicken, wenn es wieder passiert. Oder zumindest sagen, was sie korrigiert haben, als es dann wieder tat.

Bernhard
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Bruce Willis am 06.06.13 - 18:47:47
Bernhard,

das passiert beim Erstellen d.h. Speichern eines neuen Dokuments... :(

Gruß
Leo
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: koehlerbv am 06.06.13 - 19:03:34
Schon klar, Leo - wie auch sonst. Und daher ist es interessant zu wissen, was die lieben User da reingepinselt haben in Zahlenfelder.

Bernhard
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Bruce Willis am 06.06.13 - 19:29:49
Sie haben wie üblich "nix gemacht". ;)
Ich vermute, dass ein Datum-Feld (oder ein Textfeld mit Datum-Umwandlung) deren lokalen Regionalsettings nicht versteht.
Wie kann man so ein Feld per Script finden?
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Peter Klett am 07.06.13 - 07:21:30
Jetzt habe ich es ausprobiert, das ließ mir denn nun doch keine Ruhe.

Eine Maske mit einem Zahlenfeld und einem Datumsfeld, dort wirres Zeug eingetippt und gespeichert, es kommt genau die von Dir genannte Fehlermeldung.

Das Item auf Isarray abzufragen, hilft nichts, denn auch im Fehlerfall ist das Item ein Array, aber so geht es

Code
Sub Querysave(Source As Notesuidocument, Continue As Variant)
	Dim doc As NotesDocument
	Set doc = Source.Document
	Forall item In doc.Items
		If Not Isarray (doc.GetItemValue (item.Name)) Then
			Msgbox item.Name
		End If
	End Forall
End Sub

oder so

Code
Sub Querysave(Source As Notesuidocument, Continue As Variant)
	Dim doc As NotesDocument
	Set doc = Source.Document
	Forall item In doc.Items
		If item.Text = "ERROR: " Then
			Msgbox item.Name
		End If
	End Forall
End Sub

Und das funktioniert auch, wenn Richtextfelder in der Maske sind.

EDIT:

Wenn Du es so machst, werden Richtextfelder auch als Fehler ausgewiesen. Damit hätten wir den Einwand auch noch geklärt ...

Code
Sub Querysave(Source As Notesuidocument, Continue As Variant)
	Dim doc As NotesDocument
	Set doc = Source.Document
	Forall item In doc.Items
		If Not Isarray (item.Values) Then
			Msgbox item.Name
		End If
	End Forall
End Sub
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Bruce Willis am 07.06.13 - 13:18:19
...so geht es

Code
Sub Querysave(Source As Notesuidocument, Continue As Variant)
	Dim doc As NotesDocument
	Set doc = Source.Document
	Forall item In doc.Items
		If Not Isarray (doc.GetItemValue (item.Name)) Then
			Msgbox item.Name
		End If
	End Forall
End Sub

oder so

Code
Sub Querysave(Source As Notesuidocument, Continue As Variant)
	Dim doc As NotesDocument
	Set doc = Source.Document
	Forall item In doc.Items
		If item.Text = "ERROR: " Then
			Msgbox item.Name
		End If
	End Forall
End Sub

Und das funktioniert auch, wenn Richtextfelder in der Maske sind.


Hallo Peter,

VIELEN DANK !!!

Die erste Variante bringt das Popup bei einem Feld (siehe Screenshot), obwohl alles in Ordnung ist.
Weißt Du, woran es liegen könnte?

Gruß
Leo
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Peter Klett am 07.06.13 - 14:02:33
Systemseitige Items können schon einmal andere Strukturen haben. Wenn Du selbst keine Items mit $ als ersten Buchstaben hast, würde ich die einfach von der Überprüfung ausschließen ...

Forall item In doc.Items
   If Left (item.Name, 1) <> "$" Then
      If Not Isarray (doc.GetItemValue (item.Name)) Then
Titel: Re: Text kann nicht in eine Zahl umgesetzt werden
Beitrag von: Bruce Willis am 07.06.13 - 18:42:32
Hallo Peter,

vielen Dank !!!

Gruß
Leo