Autor Thema: [VB.NET] Fehler - Dokument über NotesUIWorkspace drucken  (Gelesen 6935 mal)

Offline tdottore

  • Frischling
  • *
  • Beiträge: 8
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

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

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: [VB.NET] Fehler - Dokument über NotesUIWorkspace drucken
« Antwort #1 am: 26.08.11 - 08:47:33 »
Hallo Toni, (kommt selten vor jemanden anzuschreiben, der auch so heißt ;) )

gibt es Leser/Autorenfelder in den Dokumenten?

Toni
Grüßle Toni :)

Offline tdottore

  • Frischling
  • *
  • Beiträge: 8
Re: [VB.NET] Fehler - Dokument über NotesUIWorkspace drucken
« Antwort #2 am: 26.08.11 - 08:53:45 »
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

Offline Fedaykin

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
  • Ya Hya Chouhada!
Re: [VB.NET] Fehler - Dokument über NotesUIWorkspace drucken
« Antwort #3 am: 26.08.11 - 11:05:24 »
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

Finde ich irgendwie lesbarer.

Gruss
Remo
« Letzte Änderung: 26.08.11 - 11:08:07 von Fedaykin »
Ich sage Euch: "Man muss noch Chaos in sich haben, um einen tanzenden Stern gebären zu können."

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: [VB.NET] Fehler - Dokument über NotesUIWorkspace drucken
« Antwort #4 am: 26.08.11 - 12:09:46 »
... 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
Grüßle Toni :)

Offline tdottore

  • Frischling
  • *
  • Beiträge: 8
Re: [VB.NET] Fehler - Dokument über NotesUIWorkspace drucken
« Antwort #5 am: 26.08.11 - 15:34:01 »
Hallo Miteinander
Den Code werde ich Dienstag extra für euch anschaulich umschreiben und jede Zeile mit Messageboxen debuggen.
Ich hoffe bis Dienstag ist die SP1-Installtion von Visual Studio 2010 fertig(Läuft seit 2h -.-).
Der PDFCreator ist auf allen Computer installiert. Default-Drucker muss er nicht sein, da ich den Druckername in der Funktion angeben.

Ich melde mich Montag wieder.

Danke u. Gruss

Offline tdottore

  • Frischling
  • *
  • Beiträge: 8
Re: [VB.NET] Fehler - Dokument über NotesUIWorkspace drucken
« Antwort #6 am: 01.09.11 - 10:45:05 »
Hallo Miteinander
Ich bin jetzt schon ein grosses Stück weiter, was diese Funktion anbelangt.
Die Funktion sieht aktuell so aus:
Code
    ''' <summary>
    ''' Druckt das Notesdokument über die NotesOberfläche auf dem PDFCreator Drucker aus.
    ''' </summary>
    ''' <remarks></remarks>
    Private Function _DruckeNotesDokument() As Boolean
        Try
            'Prüfe ob Drucker überhaupt vorhanden ist
            Dim Printer As New Printing.PrinterSettings()
            Dim PrinterName As String
            Dim PDFCreatorVorhanden As Boolean = False
            For Each PrinterName In Printing.PrinterSettings.InstalledPrinters
                Printer.PrinterName = PrinterName
                If Printer.IsValid = True Then
                    If PrinterName.ToLower = "pdfcreator" Then
                        PDFCreatorVorhanden = True
                        Exit For
                    End If
                End If
            Next
            If PDFCreatorVorhanden = False Then
                Throw New Exception("Der Drucker PDFCreator existiert nicht!")
            End If
            '****************************************************
            'Drucke Dokument von Notes aus
            '****************************************************
            Dim NotesUIWorkspaceType As Type = Type.GetTypeFromProgID("Notes.NotesUIWorkspace")

            Dim workspace As Object
            'Erstelle NotesObjekt
            workspace = Activator.CreateInstance(NotesUIWorkspaceType)

            'Öffne MailDatenbank
            Dim db As Object = workspace.CurrentDatabase.Database

            'Hole Dokument mit der UNID
            Dim doc As Object = db.GetDocumentByUNID(_UNID)

            ' 'Prüfe ob Dokument schon offen ist
            Dim dokIstSchonOffen As Boolean = doc.ISUIDOCOPEN

            ' 'Öffne Dokument zum Editieren
            Dim Resul As Object = workspace.Editdocument(False, doc, True, "", True, False)
            System.Threading.Thread.Sleep(1000)

            'Drucke Dokument auf dem NotesToDMS Drucker
            Resul.print(0, Nothing, Nothing, Nothing, "PDFCreator")

            'Wenn Dok am Anfang nicht offen war, dann jetzt schliessen.
            If dokIstSchonOffen = False Then
                System.Threading.Thread.Sleep(1000)
                Resul.close(True)
            End If
            Return True
        Catch ex As Exception
            MsgBox(ex.Message)
            Return False
        End Try
    End Function

Die wichtigste Änderung betrifft die Wartezeiten nach dem EditDocument() und dem Print().
Diese verhindern den obigen Fehler.
Leider kam schon das nächste Problem auf mit der Print-Funktion:
Bei einigen Dokumenten erscheint der Printdialog, obwohl der Drucker angegeben wurde.
Dieser Fehler ist soweit ungelöst(LN 8.5.2, FP3) und nach diesem Forum bereits gemolden:
http://www-10.lotus.com/ldd/nd85forum.nsf/5f27803bba85d8e285256bf10054620d/02281d362c9a89bf852575ef00056353?OpenDocument

Hoffe er wird bald gelöst.
Gruss Toni
« Letzte Änderung: 01.09.11 - 10:46:38 von tdottore »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz