Domino 9 und frühere Versionen > ND7: Entwicklung

Fehlermeldung 'Error accessing product object method'

(1/2) > >>

Keydins:
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
--- Ende Code ---

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 Klett:
Probier mal Set db = doc.ParentDatabase

ascabg:
Hallo,


--- Zitat ---Probier mal Set db = doc.ParentDatabase
--- Ende Zitat ---
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 = ...

--- Ende Zitat ---
vor den Aufruf der Dialogbox zu setzen.


Andreas

ascabg:
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)
--- Ende Zitat ---
?

Andreas

Keydins:
@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
--- Ende Code ---


@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
--- Ende Code ---

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
--- Ende Code ---
[Edit] Code aktualisiert, da standen noch ein paar Relikte drin


Laut Ausgabe des Debuggers ist in diesem Fall das Objekt 'Source' leer.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln