Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Kadlec am 14.03.05 - 15:04:57
-
In einem Dokument welches im Edit Modus ist starte ich einen Agenten der:
1. aus einer Excel Datei werte in ein Notes Feld schreibt.
2. Diese Excel Datei in ein RT Feld anhängt.
Zum Schluss wurde das Dok. geschlossen und gut war.
Dies funktioniert auch Prima.
Bei einem Test hatte ich nun eine Datei mit 300 Zeilen also 300 Zellen die in das Feld in Notes geschrieben werden.
Da man hier ja nun nur die Sanduhr sieht, dachte ich mir "ei wie wär das schön" wenn mann(Frau) wie beim Import, ein Fenster sieht mit dem Fortschrittsbalken etc.
Da ist mir eingefallen das ich das hier schon mal gesehen hatte.
Gesucht, gefunden (ExcelExport Script v2.00 von TMC, Danke dafür), eingebaut.
Nun bekam ich aber einen Fehler 91: Object Variable not set.
Dieser kam beim Befehl Call doc.save(True,True).
Gesetzt hatte ich doc mit uidoc.Document.
Nun hatte ich schon mal das Problem das ich das doc über die DocId setzen musste.
Das habe ich dann auch hier gemacht und alles ist wunderbar.
Ausser das ich das Dok. geschlossen bekomme, habe aber keinen Schimmer was ich da tun kann???
-
Hi,
was sagt den der Debugger? War doc auch wirklich initialisiert?
Kannst du auch mal ein bisschen Code posten? Vielleicht wird's dann ein bisschen klarer.
Axel
-
Ganz genau, kann mich Axel nur anschließen.
Vermutlich hast Du da Probleme, weil Du mit Backend & Frontend - Klassen arbeitest, und zum Schluß irgend ein Handle-Problem vorliegt.
Code wäre wichtig, gerade eben der letzte Bereich wo das auftritt.
Und arbeite auch immer mit Zwischenabfragen à la
If doc Is Nothing Then Error 1001, "Dokument ist nicht initialisiert !"
Dann ein entsprechendes ErrorHandling im Script.
-
Also das mit dem Debugger ist so ne Sache, der hängt sich immer auf.
Danach geht nur noch Taskmanager Notes beenden usw.
Also das das doc. initial. ist davon kann man denke ich ausgehen, denn:
1. ohne die Progressbar funkt. alles, Zellwerte aus Excel werden übernommen und der Anhang wird in das entsprechende Feld gehängt.
2. mit Progressbar gibts die Fehlermeldung und der Anhang wird an das ende des doks unter einer Linie angehängt.
Zum Code:
1. Der Teil in den ich die Progressbar eingefügt habe.
Dim pb As New LNProgressBar(True) 'Progress Bar
row = 1
Do While True
With xlSheet
If .Cells(row,ColPartNoNotDoc(0)).Value = "Freigabe" Then
Goto Done
End If
'---> ProgressBar
Call pb.SetText("Lade Teil Nummern von Excel","Teil Nummer " & row-1 & " von " & CounterPartNo & " geladen")
Call pb.SetProgressRange(CounterPartNo) ' max range of progress bar - must be long-datatype
Call pb.SetProgressPos(row-1) ' current integer
'<---- ProgressBar
PartNumbersExcel = xlCells(row,ColPartNoNotDoc(0)).Value
' Evt. werden im Excel Anhang die Teil Nummern formatiert (xx xxx xxx) deshalb werden nun die Leerzeichen entfernt
PartNumbers = Evaluate({@ReplaceSubstring("}+PartNumbersExcel+{";" ";"")})
If PlantTypeSelect = "Assembly" Then
Call uidoc.FieldAppendText("AssyPartNumber_T", Cstr(PartNumbers(0)) & ",")
Else
Call uidoc.FieldAppendText("CompPartNumber_T", Cstr(PartNumbers(0)) & ",")
End If
End With
row = row + 1
Loop
2. das ist der Teil für das Erstellen des Anhangs
Dim unid As String
Dim DocIDView As NotesView
Dim view As NotesView
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim object As NotesEmbeddedObject
Set doc = uidoc.Document
unid = doc.UniversalID
Delete doc
Set DocIDView = db.GetView( "LUAllWOAttachm_V" )
Set doc = DocIDView.GetDocumentByKey(unid)
' Datei Anhang erstellen
If PlantTypeSelect = "Assembly" Then
Set rtitem = New NotesRichTextItem( doc, "AssyMemo_R" )
Set object = rtitem.EmbedObject _
( EMBED_ATTACHMENT, "", FilePathName)
Else
Set rtitem = New NotesRichTextItem( doc, "CompMemo_R" )
Set object = rtitem.EmbedObject _
( EMBED_ATTACHMENT, "", FilePathName)
End If
Call uidoc.save
Call uidoc.close
Call doc.save(True,True)
Nochmal kurz zum Problem:
Ohne die 4 Zeilen für die Progressbar und den Weg über die DocId war alles Ok und das Dokument wurde geschlossen.
Mit den 4 Zeilen und dem Weg überdie DokID funktioniert auch alles ..aber ich muss das Dokument von Hand schliessen.
Boris
-
1.) Mach mal nach der Schleife, in der Du diese ProgressBar verwendest, ein Delete pb - nur für den Fall.
2.) Bau mal ein ErrorHandling ein. Also On Error goto ErrHandler, und dann am Ende des Codes einen entsprechenden Handler, siehe auch: http://www.atnotes.de/index.php?topic=11980.0
Denn es ist wichtig zu wissen, in welcher Zeile der Fehler auftritt.
-
Error Handler ist am Ende.
Der gab den Fehler in der Zeile mit Call doc.save(True,True).
Deshalb kam ich ja drauf das das setzen des doc über das uidoc
nicht funktioniert und habe deshalb den Weg über die Dok iD genommen.
Im Moment kommt kein Fehler nur das Dok muss von Hand geschlossen werden.
Boris
-
Im Moment kommt kein Fehler nur das Dok muss von Hand geschlossen werden.
Heisst das, Wenn Du die ProgressBar auskommentierst, dann schließt das UIDocument automatisch, wenn Du diese drinlässt dann bleibt das UIDocument geöffnet?
Dann liegt's wohl an dem NotesAPI-Code.
Delete pb schon probiert?
Ansonsten kannst Du noch ein "Call uidoc.close(True)" versuchen statt dem normalen "Call uidoc.close".
-
Also das mit dem Debugger ist so ne Sache, der hängt sich immer auf.
Danach geht nur noch Taskmanager Notes beenden usw.
Hi,
das Problem kenn' ich. Ich kommentiere die Anzeige des ProgressBars immer aus, wenn ich mit dem Debugger durch den Code gehe.
Dass die Progressbar den Ablauf aber so durcheinander bringt habe ich bisher noch nie gehört. Ich sehe aus deinem Code nicht wie deine Klasse(?) für den Progressbar aufgebaut ist. Ich benutze seit Jahren die hier: Bibliothek mit Progressbar (http://www.free.dominoserver.de/computer/noteslibrary.nsf/d2d59a3d7fc73a2bc1256a6900638352/7d61bc18dc73ccddc1256ca8005110b7!OpenDocument) und hatte bisher noch nie Schwierigkeiten, bis auf oben erwähnte Probleme bei Debuggen.
Was mir außerdem noch aufgefallen ist, ist das hier:
...
Set doc = uidoc.Document
unid = doc.UniversalID
Delete doc
....
...
Set doc = DocIDView.GetDocumentByKey(unid)
...
Call uidoc.save
Call uidoc.close
Call doc.save(True,True)
....
Bei diesem Kontrukt habe ich ein bisschen Bauchschmerzen. Ich kann nicht sagen warum, aber ich habe sie. Am Ende ziegt uidoc auf ein anderes Dokument als doc. Ich habe das Gefühl hier kommt irgendwas durcheinander. Nimm mal für GetDocumentBykey eine andere Variable.
Axel
-
Also das Problem ist gelöst.
Der Tip mit Delete pb war einfach aber Goldrichtig.
Danke!!
Boris