Autor Thema: Bekomme Fehler: "Error creating product object"  (Gelesen 6298 mal)

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Bekomme Fehler: "Error creating product object"
« am: 15.08.05 - 09:57:17 »
Hallo auch,
hier erstmal der Code:
Code
Sub Click(Source As Button)
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim view As NotesView
	Dim uidoc As NotesUIDocument
	Dim ws As New NotesUIWorkspace
	Dim doc As NotesDocument
	Dim ldoc As NotesDocument
	Dim rtitem As NotesRichTextItem
	Dim key As Variant
	Dim counter As Integer
	Dim fieldcounter(1 To 4) As String
	
	Set db = session.CurrentDatabase
	Set uidoc = ws.CurrentDocument
	
	Call uidoc.Save
	Set doc = uidoc.Document
	
	fieldcounter(1) = "EB_counter"
	fieldcounter(2) = "UB_counter" 
	fieldcounter(3) = "TB_counter"
	fieldcounter(4) = "Coach_counter"
	
	For i = 1 To 4
		counter = uidoc.FieldGetText((fieldcounter(i)))
		For j = 1 To counter
			key = uidoc.FieldGetText(("SO_Name_" + Cstr(i) + "_" + Cstr(j)))
			Messagebox("i: " & i & " j: " & j)
			Messagebox(key)
			Set rtitem = New NotesRichTextItem(doc,("SO_Link_" + Cstr(i) + "_" + Cstr(j)))
			Set view = db.GetView("Person" )
			Set ldoc = view.GetDocumentByKey(key)
			If (key <> "") Then
				If ldoc Is Nothing Then
					Messagebox("Could not find document for " & key & ".")
					Exit Sub
				Else
					Call uidoc.FieldClear(("SO_Link_" + Cstr(i) + "_" + Cstr(j)))
					Call rtitem.AppendDocLink(ldoc, "Link")
					Call ReOpen(doc)
				End If
			Else
				Call uidoc.FieldClear(("SO_Link_" + Cstr(i) + "_" + Cstr(j)))
				Call ReOpen(doc)
			End If
		Next j
	Next i
End Sub

Wenn ich den Code ausführe, erhalte ich in der Zeile Set rtitem = New NotesRichTextItem(doc,("SO_Link_" + Cstr(i) + "_" + Cstr(j))) den Fehler "Error creating product object". Was bedeutet das? Wie kann ich Abhilfe schaffen? Hintergrundinfos zu obigem Skript gibts unter: http://www.atnotes.de/index.php?topic=24367.0

Danke und Gruß
Björn

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Bekomme Fehler: "Error creating product object"
« Antwort #1 am: 15.08.05 - 10:14:15 »
Hi
Für was sind den die Klammern um den String?

Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Bekomme Fehler: "Error creating product object"
« Antwort #2 am: 15.08.05 - 10:17:37 »
Ich will die bspw. die Felder SO_Link_1_1, SO_Link_2_1, SO_Link_3_1 etc. ansprechen. Ich habe die Klammern gesetzt, da es ohne Klammern nicht richtig funktioniert hat. Können die Klammern eine Fehlerquelle sein? Ich werde sie mal testweise entfernen.
Gruß
Björn

Edit: Ich habe die Klammern entfernt (komischerweise geht es jetzt auch ohne), jedoch selbe Fehler ("Error creating ...").
« Letzte Änderung: 15.08.05 - 10:21:17 von dabjoern »

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Bekomme Fehler: "Error creating product object"
« Antwort #3 am: 15.08.05 - 11:06:34 »
Ergänzung: Der Link wird im ersten Feld (SO_Link_1_1) angelegt, in jedem weiteren Feld nicht. Dann kommt obige Fehlermeldung.

Kann es sein, dass ich immer ein neues rtitem anlegen muss?

Gruß
dabjoern

Glombi

  • Gast
Re: Bekomme Fehler: "Error creating product object"
« Antwort #4 am: 15.08.05 - 11:09:29 »
Werden denn i und j hochgezählt?

Anstelle von New NotesRichTextItem kannst Du auch

Set notesRichTextItem = notesDocument.CreateRichTextItem(
name$ )

verwenden.

Andreas

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Bekomme Fehler: "Error creating product object"
« Antwort #5 am: 15.08.05 - 11:20:22 »
Hi Andreas,
ja, i und j werden hochgezählt. Das klappt ordnungsgemäß. Deinen Vorschlag hab ich probiert. Da sagt er, dass das Feld (bpsw. SO_Link_1_1) schon existiert (Feldtyp ist Text).

Gruß
Björn
« Letzte Änderung: 15.08.05 - 11:25:25 von dabjoern »

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Bekomme Fehler: "Error creating product object"
« Antwort #6 am: 15.08.05 - 11:31:48 »
Hi
Schon mal kontrolliert mit NotesDoc.getfirstitem() ob das Item schon mal exisitiert?
oder halt bevor Du es erstellst ein NotesDoc.removeitem() aufrufen, damit bist Du einigermassen sicher, dass kein Item mit gleichem Namen exisitiert.

Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Bekomme Fehler: "Error creating product object"
« Antwort #7 am: 15.08.05 - 11:35:38 »
Mir ist noch etwas aufgefallen. Bei einem Test war i=2 und j=1. Demnach müsste ein rtitem mit dem Namen SO_Link_2_1 gesetzt werden. Im Debugger sehe ich aber unter Variables das rtitem noch auf SO_Link_1_1 steht. Ich werde mal die Remove Methode probieren.

Gruß
Björn

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Bekomme Fehler: "Error creating product object"
« Antwort #8 am: 15.08.05 - 11:42:57 »
evtl. hilft auch vor dem 1. next eine
set rtitem = nothing
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Bekomme Fehler: "Error creating product object"
« Antwort #9 am: 15.08.05 - 11:48:52 »
nur mal so nen Tipp für "saubereres" Programmieren:

in Deinem Code kommt 4 mal folgender Code- Schnipsel vor:

("SO_Link_" + Cstr(i) + "_" + Cstr(j)))

Wenn Du eine Variable deklarierst und dieser den Wert zuweist,
dann siehst Du wenigstens direkt, ob Deine Anweisungen immer aufs richtige Dokument gehen. Ausserdem sparst Du Dir Tipp- und möglicherweise eben auch "vertipp"- Arbeit.

also so:

Dim linkNam as String, feldNam as String
und dann im For...
linkNam = "SO_Link_" + Cstr(i) + "_" + Cstr(j)
feldNam = "SO_Name_" + Cstr(i) + "_" + Cstr(j)

Ich denke aber, dass die Lösung mit dem set auf nothing helfen sollte.

Tode

Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Bekomme Fehler: "Error creating product object"
« Antwort #10 am: 15.08.05 - 11:52:03 »
evtl. hilft auch vor dem 1. next eine
set rtitem = nothing

Danach habe ich auch schon gesucht. Gute Idee. For "Next j" setze ich rtitem als Nothing. Wenn die Schleife wieder durchlaufen wird, müsste eigentlich das rtitem neu gesetzt werden. Tut es aber nicht. rtitem bleibt beim 2.Durchlauf leer. Und es kommt immer noch die selbe Error Message.
Gruß
Björn

Glombi

  • Gast
Re: Bekomme Fehler: "Error creating product object"
« Antwort #11 am: 15.08.05 - 12:02:59 »
Ich glaube, die Schleife wird gar nicht richtig durchlaufen.
Was macht denn das Call ReOpen(doc) ?´

Wo ist das Script denn - in einem Button?

Andreas

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Bekomme Fehler: "Error creating product object"
« Antwort #12 am: 15.08.05 - 12:08:01 »
Ich glaube, die Schleife wird gar nicht richtig durchlaufen.
Was macht denn das Call ReOpen(doc)?

Hier die Funktion ReOpen:
Code
Function ReOpen(docThis As NotesDocument) As Integer
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim dbThis As NotesDatabase
Dim unid As String

ReOpen = 0
Set dbThis = docThis.ParentDatabase
Call docThis.Save(True , True)
unid = docThis.UniversalID
docThis.SaveOptions = "0"
Set uidoc = ws.CurrentDocument
Call uidoc.Close
Set docThis = dbThis.GetDocumentByUNID(unid)
Set uidoc = ws.EditDocument(True , docThis)
Set docThis = uidoc.Document
If docThis.HasItem("SaveOptions") Then
docThis.RemoveItem("SaveOptions")
Call docThis.Save( True , True )
End If
ReOpen = 1
End Function

Wo ist das Script denn - in einem Button?
Ich habe das Skript in der Action Bar als Button hinterlegt.

Gruß
dabjoern

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Bekomme Fehler: "Error creating product object"
« Antwort #13 am: 16.08.05 - 12:09:52 »
Hier habe ich nochmal den überarbeiteten Code (leider erscheint immer noch o.g. Fehler):

Code
Sub Click(Source As Button)
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim view As NotesView
	Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim doc As NotesDocument
	Dim ldoc As NotesDocument
	Dim rtitem As NotesRichTextItem
	Dim key As Variant
	Dim counter As Integer
	Dim linkName As String
	Dim feldName As String
	Dim fieldcounter(1 To 4) As String
	
	Set db = session.CurrentDatabase
	Set uidoc = ws.CurrentDocument
	
	Call uidoc.Save
	Set doc = uidoc.Document
	
	fieldcounter(1) = "EB_counter"
	fieldcounter(2) = "UB_counter" 
	fieldcounter(3) = "TB_counter"
	fieldcounter(4) = "Coach_counter"
	
	For i = 1 To 4
		counter = uidoc.FieldGetText(fieldcounter(i))
		For j = 1 To counter
			linkName = "SO_Link_" + Cstr(i) + "_" + Cstr(j)
			feldName = "SO_Name_" + Cstr(i) + "_" + Cstr(j)
			
			key = uidoc.FieldGetText(feldName)
			
			Set rtitem = New NotesRichTextItem(doc,linkName)
			
			Set view = db.GetView("Person" )
			Set ldoc = view.GetDocumentByKey(key)
			If (key <> "") Then
				If ldoc Is Nothing Then
					Messagebox("Could not find document for " & key & ".")
					Exit Sub
				Else
					Call uidoc.FieldClear(linkName)
					Call rtitem.AppendDocLink(ldoc, "Link")
					Call ReOpen(doc)
				End If
			Else
				Call uidoc.FieldClear(linkName)
				Call ReOpen(doc)
			End If
			Set rtitem = Nothing
		Next j
	Next i
End Sub

Weiß nicht mehr weiter... Danke für jede Hilfe.
Gruß
Björn

Edit: Ich glaube, es liegt an der Funktion ReOpen. Denn wenn ich die rausnehme, wird das rtitem problemlos neu gesetzt. Es wird nicht gemeckert. Jedoch wird auch kein Link erzeugt...
« Letzte Änderung: 16.08.05 - 12:15:17 von dabjoern »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Bekomme Fehler: "Error creating product object"
« Antwort #14 am: 16.08.05 - 12:38:55 »
Du übergibst doc by reference an ReOpen - und in ReOpen wird die Instanz zerstört und neu aufgebaut. Innerhalb der äusseren Schleife beziehst Du Dich aber weiter auf doc - dass es dann beim zweiten Mal gar nicht mehr gibt - es wurde ja neu instantiiert.

Warum machst Du überhaupt jedes Mal und nicht erst nach dem Durchlaufen der Schleife ein ReOpen ?

Bernhard

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Bekomme Fehler: "Error creating product object"
« Antwort #15 am: 16.08.05 - 12:49:43 »
Danke Bernhard,
du hast völlig recht. Ich rufe nun ReOpen(doc) nach der Schleife auf und siehe da: ES GEHT!!! Nun klappt alles so, wie es sein soll.
Beste Grüße
Björn

Hier nochmals der FUNKTIONSFÄHIGE Code:
Code
Sub Click(Source As Button)
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim view As NotesView
	Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim doc As NotesDocument, ldoc As NotesDocument
	Dim rtitem As NotesRichTextItem
	Dim key As Variant
	Dim counter As Integer
	Dim linkName As String, feldName As String, fieldcounter(1 To 4) As String
	
	Set db = session.CurrentDatabase
	Set uidoc = ws.CurrentDocument
	
	Call uidoc.Save
	Set doc = uidoc.Document
	
	fieldcounter(1) = "EB_counter"
	fieldcounter(2) = "UB_counter" 
	fieldcounter(3) = "TB_counter"
	fieldcounter(4) = "Coach_counter"
	
	For i = 1 To 4
		counter = uidoc.FieldGetText(fieldcounter(i))
		For j = 1 To counter
			linkName = "SO_Link_" + Cstr(i) + "_" + Cstr(j)
			feldName = "SO_Name_" + Cstr(i) + "_" + Cstr(j)
			
			key = uidoc.FieldGetText(feldName)
			
			Set rtitem = New NotesRichTextItem(doc,linkName)
			
			Set view = db.GetView("Person" )
			Set ldoc = view.GetDocumentByKey(key)
			If (key <> "") Then
				If ldoc Is Nothing Then
					Messagebox("Could not find document for " & key & ".")
					Exit Sub
				Else
					Call uidoc.FieldClear(linkName)
					Call rtitem.AppendDocLink(ldoc, "Link")
				End If
			Else
				Call uidoc.FieldClear(linkName)
			End If
			Set rtitem = Nothing
			
		Next j
	Next i
	Call ReOpen(doc)
End Sub

An der Funktion ReOpen habe ich nichts geändert.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz