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]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
@Peter
Dank für den Tip, hab ich gleich mal umgesetzt
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.
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:
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.
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.
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.