Autor Thema: Fehlermeldung 'Error accessing product object method'  (Gelesen 4848 mal)

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Moin zusammen,

ich habe ein weiteres kleines Problem mit meiner aktuellen Workflow-Anwendung:

Seit ich eine Mailbenachrichtigung für den nächsten Bearbeiter integriert habe, tritt der im Thema erwähnte Fehler auf.

    Ablauf
    • Dokument über den DocLink in der Mail öffnen
    • Schalter für die Kommentierung / Genehmigung betätigen
    • Die erforderlichen Eingaben in der per DialogBox aufgerufenen Maske tätigen
    • Dialog per OK schließen
    • Fehlermeldung 'Error accessing product object method' popt auf
    • Das Dokument kann nach der Bestätigung der Fehlermeldung problemlos an den nächsten Teilnehmer übergeben werden

    Der Fehler tritt nicht auf, wenn das Dokument direkt aus der Datenbank geöffnet und bearbeitet wird. Somit vermute ich meinen Fehler in dem Schalter für den Aufruf der Dialogbox.

    [/list]
    Code
    Sub Click(Source As Button)
    	
    	On Error Resume Next
    	
    	Dim wksp As New NotesUIWorkspace
    	Dim session As New NotesSession
    	Dim db As notesdatabase
    	Dim uidoc As notesuidocument
    	Dim doc As notesdocument
    	Dim docunid As String
    	
    	Call wksp.DialogBox ( "(Dialog: Eingabe Stellungnahme)", True, True, False, True, True, False, "Stellungnahme eingeben" )
    	
    	Set db = session.CurrentDatabase
    	Set uidoc = wksp.CurrentDocument
    	
    	docunid = uidoc.Document.UniversalID
    	
    	Call uidoc.Close(True)
    	Delete uidoc
    	
    	Set doc =	db.GetDocumentByUNID(docunid)
    	
    	Call wksp.EditDocument(False,doc,False)
    	
    End Sub

    Hinweis
    Das Schließen des zu bearbeitenden Dokuments ist notwendig, da über das QueryClose Event der Dialogmaske Werte in das Hauptdokument zurückgeschrieben werden müssen, die insbesondere bei Entscheidungen den Ablauf des Workflows ändern.

    Ich vermute, dass der Fehler entsteht, weil ich db als CurrentDatabase deklariere und das dürfte vermutlich im Fehlerfall die Maildatenbank des Users sein, aus der er per DocLink zum Workflowdokument in einer anderen DB gelangt ist.

    Jemand eine Idee, wie ich das Problem geschickt umgehen kann? Die Mailfunktionalität (inkl. DocLink) wird explizit gewünscht.


    Gruß
    Dirk
    « Letzte Änderung: 21.06.10 - 13:45:47 von Keydins »
    Gruß Dirk

    Aktuelle Notesumgebung
    ~800 BasicClients 9.0.1 FP9 SHF55
      10 FullClients 9.0.1 FP7 SHF143
        7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

    Offline Peter Klett

    • Gold Platin u.s.w. member:)
    • *****
    • Beiträge: 2.713
    • Geschlecht: Männlich
    Re: Fehlermeldung 'Error accessing product object method'
    « Antwort #1 am: 21.06.10 - 11:44:24 »
    Probier mal Set db = doc.ParentDatabase

    Offline ascabg

    • Gold Platin u.s.w. member:)
    • *****
    • Beiträge: 3.697
    • Geschlecht: Männlich
    Re: Fehlermeldung 'Error accessing product object method'
    « Antwort #2 am: 21.06.10 - 11:52:32 »
    Hallo,

    Zitat
    Probier mal Set db = doc.ParentDatabase
    Und wo ist doc gesetzt worden?

    Auch frage ich mich, was passiert, wenn der Anwender auf Abbrechen klickt.

    Hast Du es schon mal versucht, die beiden Zeilen
    Zitat
    Set db = ...
    Set uidoc = ...
    vor den Aufruf der Dialogbox zu setzen.


    Andreas

    Offline ascabg

    • Gold Platin u.s.w. member:)
    • *****
    • Beiträge: 3.697
    • Geschlecht: Männlich
    Re: Fehlermeldung 'Error accessing product object method'
    « Antwort #3 am: 21.06.10 - 11:56:57 »
    Noch zwei Fragen.

    Wie gelangen denn die Daten aus der Dialogbox in das betreffende Dokument?
    Die Maske Deiner Dialogbox heisst wirklich

    Zitat
    (Dialog: Eingabe Stellungnahme)
    ?

    Andreas

    Offline Keydins

    • Aktives Mitglied
    • ***
    • Beiträge: 163
    • Geschlecht: Männlich
    Re: Fehlermeldung 'Error accessing product object method'
    « Antwort #4 am: 21.06.10 - 12:31:48 »
    @Peter

    Dank für den Tip, hab ich gleich mal umgesetzt

    Code
    Sub Click(Source As Button)
    	
    	On Error Resume Next
    	
    	Dim wksp		As New NotesUIWorkspace
    	Dim db		As NotesDatabase
    	Dim uidoc		As Notesuidocument
    	Dim bdoc		As NotesDocument
    	Dim doc		As NotesDocument
    	Dim docunid	As String
    	
    	Call wksp.DialogBox ( "(Dialog: Eingabe Stellungnahme)", True, True, False, True, True, False, "Stellungnahme eingeben" )
    	
    	Set uidoc = wksp.CurrentDocument
    	Set bdoc	= uidoc.Document
    	
    	Set db = bdoc.ParentDatabase
    	
    	docunid = uidoc.Document.UniversalID
    	
    	Call uidoc.Close(True)
    	Delete uidoc
    	
    	Set doc =	db.GetDocumentByUNID(docunid)
    	
    	Call wksp.EditDocument(False,doc,False)
    	
    End Sub


    @Andreas

    Die Abbrechen-Option wird im QueryClose der Dialogmaske behandelt, es gibt dort auch noch einen zusätzlichen Schalter, mit dem der Benutzer seine Eingaben zur Übernahme bestätigt.

    Code
    	Dim tempKommentar As String
    	
    	tempKommentar = source.FieldGetText("temp_Eingabe")
    	
    	If Source.DialogBoxCanceled Then
    		If Messagebox ("Wollen Sie den Vorgang wirklich abbrechen?", _
    		MB_YESNO+MB_ICONQUESTION, "Cancel") = IDNO Then
    			Continue = False
    			Exit Sub
    		Else
    			Continue = True
    			Exit Sub
    		End If
    	End If   
    	
    	If tempKommentar = "0" Then
    		
    		If Messagebox ("Sie haben Ihre Eingaben nicht gespeichert, der Workflow kann nicht fortgesetzt werden. " &_
    		"Wollen Sie den Dialog wirklich schließen?", _
    		MB_YESNO+MB_ICONQUESTION, "Cancel") = IDNO Then
    			Continue = False
    			Exit Sub
    		Else
    			continue = True
    			Exit Sub
    		End If
    		
    	End If	

    Bezüglich der Übergabe von Daten von der Dialogmaske an das Haupdokument: http://atnotes.de/index.php/topic,48858.0.html

    Und die Maske heißt tatsächlich so :)



    Da ich das Problem ursprünglich in der Dialogmaske oder deren Aufruf vermutet hatte, habe ich den Debugger außen vor gelassen (geht ja innerhalb von Dialogmasken nicht). Nachdem der Fehler inzwischen auch beim Aufruf aus der Datenbak selber auftritt, habe ich mir das mal im Debugger angesehen und so wie es aussieht habe ich ein Problem im QueryClose Event des Hauptdokuments (bzw. in dem der dort verwendeten Steuerungsteilmaske).

    Gehe ich mit dem Debugger alle Schritte einzeln durch, tritt der Fehler nicht auf. Lasse ich das Script jedoch per 'Fortfahren' Schalter durchlaufen setzt er mir an flogender Stelle auf:

    Code
    Sub Queryclose(Source As Notesuidocument, Continue As Variant)
    	
    	Dim sOption	As String
            Dim quest		As Integer
    	Dim rc		As Variant
    	
    	--> sOption = source.FieldGetText("SaveOptions") 'Hier erfolgt der Abbruch mit der Fehlermeldung
    	
    	If sOption = "0" Then
    		
    		quest = Messagebox("Wenn Sie das Dokument schließen gehen alle Eingaben verlohren." & Chr(13) & Chr(13) &_
    		"Wollen Sie das Dokument jetzt schließen?", 36, "Sicherheitsabfrage")
    		
    		If quest = 7 Then			
    			rc = False
    		Else
    			rc = True			
    		End If
    		
    	Else
    		rc = True
    		
    	End If
    	
    	continue = rc
    	
    End Sub
    [Edit] Code aktualisiert, da standen noch ein paar Relikte drin


    Laut Ausgabe des Debuggers ist in diesem Fall das Objekt 'Source' leer.
    « Letzte Änderung: 21.06.10 - 12:51:45 von Keydins »
    Gruß Dirk

    Aktuelle Notesumgebung
    ~800 BasicClients 9.0.1 FP9 SHF55
      10 FullClients 9.0.1 FP7 SHF143
        7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

    Offline Keydins

    • Aktives Mitglied
    • ***
    • Beiträge: 163
    • Geschlecht: Männlich
    Re: Fehlermeldung 'Error accessing product object method'
    « Antwort #5 am: 21.06.10 - 13:44:15 »
    Ich glaub ich hab die Lösung (zumindest funktioniert es bei den am Test beteiligten Kollegen jetzt)

    Sobald ich im QueryClose des Hauptdokuments nicht mit Source arbeite, sondern das uidoc über CurrentDocument definiere klappt es sowohl direkt in der Datenbank als auch über den DocLink aus der Mail.

    Code
    	Dim wksp		As New NotesUIWorkspace
    	Dim db		As NotesDatabase
    	Dim uidoc		As Notesuidocument
    	
    	Dim sOption	As String
    	Dim quest		As Integer
    	Dim rc		As Variant
    	
    	Set uidoc = wksp.CurrentDocument
    	
    	sOption = uidoc.FieldGetText("SaveOptions")

    Danke für die Hinweise, manchmal ist man selber einfach 'Betriebsblind'  8) und findet die offensichlichen Dinge nicht.
    Gruß Dirk

    Aktuelle Notesumgebung
    ~800 BasicClients 9.0.1 FP9 SHF55
      10 FullClients 9.0.1 FP7 SHF143
        7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

     

    Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz