Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino

[VB.NET] Fehler - Dokument über NotesUIWorkspace drucken

(1/2) > >>

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