Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino
[VB.NET] Fehler - Dokument über NotesUIWorkspace drucken
tdottore:
Guten Morgen Miteinander!
Ich schreibe gerade ein Email/Anhang-Importapplikation von Lotus Notes in unser Dokumentmanagementsystem(Hummingbird eDocs). Dabei benutzte ich die COM-Schnittstelle von Lotus Notes, um das Dokument auf den PDFCreator zu drucken und somit ein PDF zu erzeugen.
Funktion:
--- Code: --- ''' <summary>
''' Druckt das Notesdokument über die NotesOberfläche auf dem PDFCreator Drucker aus.
''' </summary>
''' <remarks></remarks>
Private Function _DruckeNotesDokument(ByVal _UNID as String) As Boolean
Try
'****************************************************
'Drucke Dokument
'****************************************************
Dim NotesUIWorkspaceType As Type = Type.GetTypeFromProgID("Notes.NotesUIWorkspace")
Dim workspace As Object
'Erstelle NotesObjekt
workspace = Activator.CreateInstance(NotesUIWorkspaceType)
'Öffne MailDatenbank
Dim arg() As String = {_UNID}
Dim uidb As Object = NotesUIWorkspaceType.InvokeMember("CurrentDatabase", System.Reflection.BindingFlags.GetProperty, Nothing, workspace, Nothing)
Dim db As Object = NotesUIWorkspaceType.InvokeMember("Database", System.Reflection.BindingFlags.GetProperty, Nothing, uidb, Nothing)
'Hole Dokument mit der UNID
Dim doc As Object = NotesUIWorkspaceType.InvokeMember("GetDocumentByUNID", System.Reflection.BindingFlags.InvokeMethod, Nothing, db, arg)
Dim dokIstSchonOffen As Boolean = NotesUIWorkspaceType.InvokeMember("ISUIDOCOPEN", System.Reflection.BindingFlags.GetProperty, Nothing, doc, Nothing)
'Öffne Dokument zum Editieren
Dim Arguments2() As Object = {False, doc, True, "", True, False}
Dim Resul As Object = NotesUIWorkspaceType.InvokeMember("Editdocument", System.Reflection.BindingFlags.InvokeMethod, Nothing, workspace, Arguments2)
System.Threading.Thread.Sleep(100)
'Drucke Dokument auf dem NotesToDMS Drucker
Dim arg3() As Object = {1, Nothing, Nothing, Nothing, "PDFCreator"}
NotesUIWorkspaceType.InvokeMember("PRINT", System.Reflection.BindingFlags.InvokeMethod, Nothing, Resul, arg3)
If dokIstSchonOffen = False Then
System.Threading.Thread.Sleep(100)
Dim arg4() As Object = {True}
NotesUIWorkspaceType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, Nothing, Resul, arg4)
End If
Return True
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
End Function
--- Ende Code ---
Das funktioniert auf meine Computer soweit sogut, sobald ich aber zu den Computern einiger Mitarbeiter wechsle, kommt folgende Fehlermeldung im Lotus Notes:
Unter Details steht einfach "Fehler"
Auf allen Computern ist WinXP oder Win7 installiert, wobei der Fehler unabhängig des Betriebssystems auftritt.
Lotus Notes Version ist auf allen Computern 8.5.2 FP2
Es ist ziemlich verwirrend, denn der Fehler tritt bei einigen Leuten auf, bei anderen nicht.
Das Verhältnis zwischen funktioniert und Fehler liegt bei ca. 3:5.
Ich konnte keine Regelmässigkeit feststellen.
Ich hoffe ihr könnt mir helfen.
Gruss Toni
ata:
Hallo Toni, (kommt selten vor jemanden anzuschreiben, der auch so heißt ;) )
gibt es Leser/Autorenfelder in den Dokumenten?
Toni
tdottore:
Hoi Toni :)
Die Dokumente, die gedruckt werden müssen, sind ganz normale Emails.
Wenn der Fehler auf dem Computer auftritt, tritt er bei jedem Email auf, unabhängig vom Inhalt.
Entweder der Fehler tritt auf dem Computer auf, dann bei jedem Dokument oder der Fehler tritt überhaupt nicht auf.
Gruss
Fedaykin:
Hallo Toni
Ohne die Fehlerzeile zu kennen fällt mir zu Deinem Fehler erst mal nichts ein.
Falls Du den Code nicht direkt debuggen kannst, würde ich mir eine Variable hochzählen um Fehlerzeile zu finden.
Und zum Code. Warum nicht was in diese Richtung:
--- Code: --- Function _DruckeNotesDokument(ByVal _UNID As String) As Boolean
Dim workspace As Object
Dim db As Object
Dim doc As Object
Dim uidoc As Object
Dim ResultBoolean As Boolean
Try
workspace = CreateObject("Notes.NotesUIWorkspace")
db = workspace.currentdatabase.database
doc = db.getdocumentbyunid(_UNID)
If Not doc Is Nothing Then
uidoc = workspace.editdocument(False, doc, True, "", True, False)
If Not uidoc Is Nothing Then
For CounterLong As Long = 0 To 9
If uidoc.document.universalid = _UNID Then Exit For
System.Threading.Thread.Sleep(100)
Next
If uidoc.document.universalid = _UNID Then
uidoc.print(True, Nothing, Nothing, Nothing, "PDFCreator")
uidoc.close()
ResultBoolean = True
Else
MessageBox.Show("Konnte Dokument nicht öffnen!")
End If
End If
End If
Return ResultBoolean
Catch ex As Exception
MessageBox.Show(ex.Message)
Return False
End Try
End Function
--- Ende Code ---
Finde ich irgendwie lesbarer.
Gruss
Remo
ata:
... es könnte sicher helfen dein Fehlerhandling zu erweitern, damit du erkennen kannst in welcher Erl der Fehler passiert...
Ist der PDF-Drucker denn überall auch installiert und der Default-Drucker?
Toni
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln