Autor Thema: Fehler im Agenten (Unknown gefunden, Unknown erwartet)  (Gelesen 5746 mal)

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Hallo,

ich habe einen kleinen Agenten geschrieben, der Text in Feldern (z.B. Telefonnummer) suchen und ersetzen soll.
Ich bin mir sicher, dass das Script auch grundsätzlich noch stark optimierungsbedürftig ist.
(aber bitte nicht zu sehr hauen ;) )

Allerdings habe ich auch noch ein Fehler, der mir nicht klar ist:
Falscher Datentyp in Methode Assignment: Unknown wurde gefunden, Unknown wurde erwartet.

Ich vermute, dass dieser Fehler beim Ändern des Feldinhaltes auftritt, weiß aber nicht wieso.

Vielleicht könnt ihr mal einen Blick drauf werfen? (Das Speichern habe ich bewusst noch ausgeklammert. )

Zwischenfrage, hätte ich die Print-Anweisungen nicht in irgendeinem Log finden müssen?

Code
Option Public
Option Declare

Sub Initialize
	Dim CurrUIWs As New NotesUIWorkspace
	Dim CurrSession As New NotesSession
	Dim CurrDB As NotesDatabase
	Dim MenuSelectionArray ( 2 )	As String
	Dim MenuSelected As String
	Dim Continue As Integer
	Dim TmpNewLine As String
	Dim dbname As Variant
	Dim returnvalue As Boolean
	Dim SearchFor As String		
	Dim ReplaceWith As String
	Dim FindText As String		
	Dim ReplaceText As String
	Dim mailpath As String
	Dim mailowner As String
	Dim doccol As NotesDocumentCollection
	Dim doc As NotesDocument
	
	TmpNewLine = Chr$(10) + Chr$(13) + Chr$(10) + Chr$(13)
	
	SearchFor = "(0)"							' What are we looking for
	ReplaceWith = ""							' Replaced by
	
	mailpath = "test\" 							' Indicates the mail subdirectory name
	
	MenuSelectionArray ( 0 ) = "Only for one mail database"
	MenuSelectionArray ( 1 ) = "Only the global address book"
	MenuSelectionArray ( 2 ) = "All users mail databases ($contacts)"
	
	MenuSelected = CurrUIWs.Prompt ( 4 , "Please make your selection" , "Please select from the list below the task to be done by the agent." , "Only for one mail database" , MenuSelectionArray )
	
	Select Case MenuSelected
		Case "Only for one mail database"
			MessageBox "Please select a mail database."
			dbname=CurrUIWs.Prompt(13, "", "")
			If Not IsArray(dbname) Then Exit Sub
			MsgBox "selected database: " & dbname(1)
			Call AskWhatToReplace (FindText,ReplaceText)
			returnvalue = ChangeTheNumbers(dbname,"($Contacts)",FindText,ReplaceText)
			Exit Sub
		Case "Only the global address book"
			MessageBox "Please select the names.nsf of your server."
			dbname=CurrUIWs.Prompt(13, "", "")
			If Not IsArray(dbname) Then Exit Sub
			If Not dbname(1) = "names.nsf" Then
				MsgBox "Sorry, but this is not the names.nsf of your server!"
			Else
				MsgBox "Current server: " & dbname(0)
				Call AskWhatToReplace (FindText,ReplaceText)
				returnvalue = ChangeTheNumbers(dbname,"People",FindText,ReplaceText)
			End If
			Exit Sub
		Case "All users mail databases ($contacts)"
			MessageBox "All users mail databases"
			Call AskWhatToReplace (FindText,ReplaceText)
			Set CurrDB = CurrSession.CurrentDatabase
			Dim pos As Integer
			Dim dbdir As New NotesDbDirectory(CurrDB.Server)
			Dim db As NotesDatabase
			Set db = dbdir.GetFirstDatabase(DATABASE)
			While Not db Is Nothing
				On Error 4060 GoTo Error4060
				pos = InStr(db.FilePath, mailpath)
				If pos = 1 Then
					dbname(0) = db.Server
					dbname(1) = db.Filename
					dbname(2) = db.Title
					returnvalue = ChangeTheNumbers(dbname,"($Contacts)",FindText,ReplaceText)
				End If  
GetNextDb: 		Set db = dbdir.GetNextDatabase()
			Wend
Error4060:	Resume GetNextDb
			Exit Sub
		Case Else
			MessageBox "You did not select any menu item. Please try again." , 48 , "No value selected"
			Print "ChangePhoneNumbers - Part 1 - Finished with Error ..."
			Exit Sub
	End Select 
End Sub


Function FindAndReplace(SourceText As String,FindText As String,ReplaceText As String) As String
	FindAndReplace = Replace(SourceText, FindText, ReplaceText)
End Function

Function ChangeTheNumbers(db As Variant, dbView As String, SearchFor As String, ReplaceWith As String) As Boolean
	Dim strMyString As String
	Dim mydb As NotesDatabase
	Dim ses As New NotesSession
	Dim view As NotesView
	Dim doc As NotesDocument
	Dim orig As String
	Dim newvalue As String
	
	Set mydb = ses.GetDatabase(db(0), db(1), False)
	If Not mydb.IsOpen Then Call mydb.Open("", "")
	If Not mydb.IsOpen Then
		MsgBox "Error. Could not open database.", 16, "Error"
		Print "ChangePhoneNumbers - Could not open database " + db(1)
		Err = 0
		ChangeTheNumbers = False
	Else
		Print "ChangePhoneNumbers - Replacing ... " + db(2)
		Set view = mydb.getView(dbView)
		Set doc = view.getFirstDocument
		While Not (doc Is Nothing)
			' CellPhoneNumber
			orig = doc.CellPhoneNumber
			newvalue = FindAndReplace (orig,SearchFor,ReplaceWith)
			Call doc.replaceitemvalue ("CellPhoneNumber",newvalue)
'			Call doc.save (True,True)
			' HomeFaxPhoneNumber
			orig = doc.HomeFaxPhoneNumber
			newvalue = FindAndReplace (orig,SearchFor,ReplaceWith)
			Call doc.replaceitemvalue ("HomeFaxPhoneNumber",newvalue)
'			Call doc.save (True,True)
			' OfficeFAXPhoneNumber
			orig = doc.OfficeFAXPhoneNumber
			newvalue = FindAndReplace (orig,SearchFor,ReplaceWith)
			Call doc.replaceitemvalue ("OfficeFAXPhoneNumber",newvalue)
'			Call doc.save (True,True)
			' OfficeNumber
			orig = doc.OfficeNumber
			newvalue = FindAndReplace (orig,SearchFor,ReplaceWith)
			Call doc.replaceitemvalue ("OfficeNumber",newvalue)
'			Call doc.save (True,True)
			' OfficePhoneNumber
			orig = doc.OfficePhoneNumber
			newvalue = FindAndReplace (orig,SearchFor,ReplaceWith)
			Call doc.replaceitemvalue ("OfficePhoneNumber",newvalue)
'			Call doc.save (True,True)
			' PhoneNumber
			orig = doc.PhoneNumber
			newvalue = FindAndReplace (orig,SearchFor,ReplaceWith)
			Call doc.replaceitemvalue ("PhoneNumber",newvalue)
'			Call doc.save (True,True)
			Print "ChangePhoneNumbers - Replaced!  ... "
			Set doc = view.Getnextdocument(doc)
		Wend
		ChangeTheNumbers = True
	End If	
End Function

Function AskWhatToReplace(FindText As String,ReplaceText As String)
	Dim CurrUIWs As New NotesUIWorkspace
	Dim askme As Variant
	askme = CurrUIWs.Prompt (PROMPT_OKCANCELEDIT, _
	"What to find", _
	"Please enter the text to be replaced.","(0)")
	If Not IsEmpty (askme) Then
		FindText = askme
	End If
	askme = CurrUIWs.Prompt (PROMPT_OKCANCELEDIT, _
	"Replace with", _
	"Please enter the new text.")
	ReplaceText = askme
End Function
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #1 am: 30.11.10 - 16:03:07 »
Bei dieser Art Agents landen die Print-Statements in der Statuszeile des Clients. In Standard-Logs zu printen, wäre sowieso wenig zielführend und eigentlich eine Ferkelei.

Den eigentlichen Fehler zu finden, wäre eine üble Plackerei für uns. Bau doch bitte (und das sowieso und generell) wenigstens eine Mini-ErrorHandler ein, der Dir Fehlerzeile und -nummer ausgibt. Sowas erleichtert die Fehlersuche extrem.

Bernhard

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #2 am: 30.11.10 - 16:06:16 »
Ein Fehler ist

orig = doc.CellPhoneNumber

orig ist ein String, und ein Feld im Notesdokument immer (ich rede nicht von Richtextfeldern) ein Array.

orig = doc.CellPhoneNumber (0)

wäre korrekt. Das hast Du an mehreren Stellen
« Letzte Änderung: 30.11.10 - 16:09:18 von Peter Klett »

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #3 am: 30.11.10 - 16:11:29 »
Und noch was für die Schönheit: Du musst nicht nach jeder Feldänderung das Dokument speichern, einmal am Ende ist völlig ausreichend. Das hat aber nichts mit Deinem Fehler zu tun.

EDIT: Ganz korrekt wäre, wenn Du auch prüfst, ob sich durch das Suchen/Ersetzen überhaupt eine Änderung ergeben hat, denn Du brauchst das Dokument nicht zu speichern, wenn es nicht geändert wurde. Unnötiges Speichern ist ein Performancekiller und kann weitere Probleme (z.B. Replizier- und Speicherungskonflikte) nach sich ziehen.
« Letzte Änderung: 30.11.10 - 16:15:32 von Peter Klett »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #4 am: 30.11.10 - 16:33:55 »
Peter, bei
orig = doc.CellPhoneNumber
müsste aber ein type mismatch kommen. Ich befürchte also, dass das nicht der einzige Fehler ist.

Bernhard

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #5 am: 30.11.10 - 16:42:02 »
orig = doc.CellPhoneNumber (0)
wäre korrekt. Das hast Du an mehreren Stellen

Danke, dass war der Fehler. Jedenfalls wird jetzt nichts mehr gemeckert.
Ich dachte mir, dass es da war, aber nicht warum, da mir als Feldinformation ja Text und nicht Array angezeigt wird.

@alle:
ich hatte auch erwartet, dass die Print-Anweisung in der Statuszeile zu finden ist, aber war zu blind um sie zu finden ;)

Das mit dem Error-Handling muss ich mir nochmal anschauen, da hab ich bisher leider noch keine Erfahrungen.

Die Dimensionierung der Variablen kann man sicher auch etwas sinnvoller gestalten, erstmal gehts aber ums Proof-of-Concept.

Die Überprüfung, ob sich was geändert hat und nur dann speichern, werde ich auch noch einbauen. Sind ja nur ein paar Zeilen mehr.
In der Testumgebung hab ich da ehrlich gesagt auch noch nicht dran gedacht.

In der Tat bin ich recht erleichtert, da ich mit deutlich mehr Kritik gerechnet hatte, was den Programmierstil betrifft etc.
Auch hier ein Dank an Euch.

Es würde mich auch noch wundern, wenn es der einzige Fehler bliebe. Aber ein Schritt nach dem anderen ;)
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #6 am: 30.11.10 - 16:47:43 »
In der Tat bin ich recht erleichtert, da ich mit deutlich mehr Kritik gerechnet hatte, was den Programmierstil betrifft etc.
Du wolltest doch, dass wir nicht hauen  ;)

Aber so schlecht ist es nicht, habe da von "Profis" schon viel Schlimmeres gesehen ... Also, weiter so !

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #7 am: 30.11.10 - 16:49:27 »
Das mit dem Error-Handling muss ich mir nochmal anschauen, da hab ich bisher leider noch keine Erfahrungen.

Schau mal hier: Best Practices: Error Handling in Lotus Script

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #8 am: 30.11.10 - 17:02:22 »
Aber so schlecht ist es nicht, habe da von "Profis" schon viel Schlimmeres gesehen ... Also, weiter so !

Vielleicht kompilieren die Profis deshalb den Code in die DB, damit sie nicht mehr sichtbar ist  ;D

Best Practices werde ich mir morgen anschauen, und dann gehts weiter mit den Testen.

Nochmals Danke!
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #9 am: 30.11.10 - 17:10:20 »
Knud, was für eine Notes-Version setzt Du denn ein? Die Meldung "Falscher Datentyp in Methode Assignment: Unknown wurde gefunden, Unknown wurde erwartet." ist ja eine unverzeihliche Verschlechterung in der LS-Fehlerreaktion! Ich kenne da aber von 8er Versionen noch weitere üble Fallen.

Bernhard


Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #10 am: 01.12.10 - 06:47:36 »
Client und Designer sind 8.5.2. Server ist (noch) 8.5.1 FP4
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Glombi

  • Gast
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #11 am: 01.12.10 - 08:13:49 »
Peter, bei
orig = doc.CellPhoneNumber
müsste aber ein type mismatch kommen. Ich befürchte also, dass das nicht der einzige Fehler ist.

Bernhard
Hi Bernhard,

einige der guten alten Fehlermeldungen hat IBM nun "optimiert", so dass es nun solche wie oben gibt. Teilweise sehr lustig, teilweise aber auch irritierend und wenig zielführend.

Type mismatch ist so ein Kandidat.

Andreas

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #12 am: 01.12.10 - 08:19:02 »
Ich habe noch eine kleine Frage bezüglich des Error-Handlings.
Wenn ich direkt zu Anfang ein
Code
On Error Goto ErrHandler
einschiebe, gilt dann das gesamte Errorhandling Script-weit inklusive der Unter-Funktionen?

Ich war übrigens auch zum Teil amüsiert über die Fehlermeldung. Falscher Datentyp obwohl er doch genau das bekommen hat, was er erwartet wurde.  ;)
Nur Teils, weil diese Meldung ja nun nicht wirklich zur Lösungsfindung beigetragen hat.
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #13 am: 01.12.10 - 09:26:28 »
Ich habe noch eine kleine Frage bezüglich des Error-Handlings.
Wenn ich direkt zu Anfang ein
Code
On Error Goto ErrHandler
einschiebe, gilt dann das gesamte Errorhandling Script-weit inklusive der Unter-Funktionen?

Nein. Die Fehlerbehandlung muss in jeder Funktion und Routine separat gemacht werden.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #14 am: 01.12.10 - 09:53:59 »
Noch eine Frage ;)
Wenn ich ein allgemeines Fehler-Handling einbaue und dann innerhalb dessen ein spezielles:

Code
On Error GoTo ErrHandler
...
On Error 4060 GoTo Error4060

Muss ich dann das spezielle Errorhandling wieder ausschalten, damit es funktioniert?
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #15 am: 01.12.10 - 10:17:18 »
Du kannst doch in Deinem Errorhandler die einzelnen Fehlernummern abfragen, dann brauchst Du keine mehrfachen On Error's

Glombi

  • Gast
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #16 am: 01.12.10 - 11:08:55 »
Wie das Error handling funktioniert, kannst Du am besten in der Designer Hilfe für In Error Statement nachlesen. Da steht dann bspw.

How does On Error work?
An On Error statement is in effect from the time the statement runs until superseded by another On Error statement or until control returns to the calling procedure:

An On Error statement that specifies an error number affects only that error. An On Error statement that specifies no error number affects all errors. For a given error, the effective On Error statement is the most recently executed that either specifies the error number or specifies no error number.

An On Error statement is not in effect for an error in the following cases:
No On Error statement that affects the error has run.

The most recently executed On Error statement that affects the error is On Error GoTo 0.

If the current procedure does not handle an error, the On Error statements in the calling procedure process the error. If no procedure handles the error, processing terminates with output of the error message.

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #17 am: 01.12.10 - 15:17:27 »
Ich hab noch eine Frage, bezüglich meines Scripts. Wollte dafür nicht extra einen neuen Thread aufmachen:

Überfolgenden Code kann der Benutzer eine DB auswählen. Die Auswahl wird in dbname gespeichert.
Code
Dim dbname As Variant
dbname=CurrUIWs.Prompt(13, "", "")

In dbname(0)  steht der Server, in dbname(1) der Name und Pfad und in dbname(3) der Titel der DB.

Wie kann ich diese Struktur manuell nachbauen?

Wenn ich das über
Code
Dim CurrSession As New NotesSession
Dim CurrDB As NotesDatabase

Set CurrDB = CurrSession.CurrentDatabase

Dim dbname As Variant
Dim dbdir As New NotesDbDirectory(CurrDB.Server)
Dim db As NotesDatabase

Set db = dbdir.GetFirstDatabase(DATABASE)

MsgBox "-> " & db.Server & " " & db.Filename & " " & db.Title

dbname(0) = db.Server
dbname(1) = db.Filename
dbname(2) = db.Title
nachbauen möchte, quittiert mir Notes das mit "Variant enthält keinen Container"

Die MsgBox zeigt alle Werte korrekt an.



Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #18 am: 01.12.10 - 15:34:26 »
Dim dbname As Variant
Redim dbname (2)
dbname(0) = db.Server
dbname(1) = db.Filename
dbname(2) = db.Title


Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Fehler im Agenten (Unknown gefunden, Unknown erwartet)
« Antwort #19 am: 01.12.10 - 15:42:49 »
Vielen Dank, das hat mir sehr geholfen.
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz