Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Keydins am 12.12.11 - 12:56:17
-
Hallo zusammen,
ich seh mal wieder den Baum vor lauter Wäldern nicht...
Ich habe in einer Datenbank zur Verwaltung von Verträgen ein Hauptdokument in dem alle relevanten Informationen zu dem jeweilgen Vertrag stehen. Ab dem nächsten Jahr sollen die jeweils verantwortlichen Abteilungsleiter 1-2x pro Jahr eine Leistungsbeurteilung für die Verträge vornehmen. Die Beurteilungen werden als Tochterdokumente erzeugt (per Schaltfläche im Hauptdokument), so dass man in einer entsprechenden Ansicht eine Historie der bereits erfolgten Beurteilungen abrufen kann.
Da die Tochterdokumente beim Speichern Werte in das Hauptdokument zurückschreiben möchte ich sicherstellen, dass das Hauptokument - sofern es vor der Leistungsbeurteilung noch bearbeitet wurde - aktualisiert, gespeichert und in den Lesemodus versetzt wird. Das klappt auch soweit. Nur bekomme ich dann eine Fehlermeldung beim Erzeugen des Tochterdokuments (bei der Verarbeitung der rot markierten Zeile im Code):
Notes-Fehler - Der angegebene Befehl ist vom Arbeitsbereich aus nicht verfügbar.
Wird das Hauptdokument im Lesemodus geöffnet und dann der Schalter betätigt, wird der Code ohne Fehler verarbeitet.
Folgenden Code habe ich in der Schaltfläche verwendet:
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim uirespdoc As NotesUIDocument
Dim checkleiter As Variant
Const checkMacro$ = "@IsMember(vertrag_verantwortlich_leiter;@UserNamesList)"
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
If uidoc.EditMode = True Then
Call uidoc.Refresh
Call uidoc.Save
uidoc.EditMode = 0
End If
checkleiter = Evaluate(checkMacro$, doc)
If checkleiter(0) = 1 Then
Set uirespdoc = workspace.ComposeDocument( "", "", "frm_leistung" )
Call uidoc.Close
Else
Msgbox "Die Leistungsbeurteilung muss vom verantwortlichen Leiter durchgeführt werden.", 32, "Hinweis"
Exit Sub
End If
Gruß
Dirk
-
Nur eine Vermutung: Wenn das zu erstellende Dokument in der Maske die Eigenschaft hat, Anwortdokument zu sein, könnte ich mir vorstellen, dass beim Compose das Elterndokument markiert sein muss.
Alternativ könntest Du das Dokument im Backend erstellen und dann öffnen. @IsNewDoc ist dann aber False, falls Du das benötigst.
Also statt
Set uirespdoc = workspace.ComposeDocument( "", "", "frm_leistung" )
schreibe
Set respdoc = New NotesDocument (db)
respdoc.Form = "frm_leistung"
Call respdoc.MakeRespons (doc)
Set respuidoc = workspace.EditDocument (True, respdoc)
Keine Garantie für die Richtigkeit der Befehle, ist nur so aus dem Bauch ...
-
Hallo Peter,
die Alternative würde funktionieren, allerdings verliere ich dabei den angenehmen Effekt, dass sich das Tochterdokument bei 'Set uirespdoc = ...' automatisch alle notwendigen Werte aus dem Hauptdokument abruft. Dies betrifft hauptsächlich Felder für die Zugriffssteuerung und einige Basisdaten des Hauptdokument zu dem das Tochterdokument gehört. Die Felder würde ich halt ungern 'händisch' über das Script füllen müssen. ;)
Ist es möglich, das Notes durch den folgenden Code
If uidoc.EditMode = True Then
Call uidoc.Refresh
Call uidoc.Save
uidoc.EditMode = 0
End If
irgendwie den Focus auf das Hauptdokument verliert, deshalb die Fehlermeldung ausgibt und die Anlage des Tochterdokuments verweigert? Wenn die If-Bedingung False ist, funktioniert der Code ja ohne Probleme.
[Edit]
Ok, ich habe eine Lösung gefunden:
If uidoc.EditMode = True Then
Call uidoc.Refresh
Call uidoc.Save
Call uidoc.Close(True)
Call workspace.EditDocument(False, doc,,,, False)
Set uidoc = workspace.CurrentDocument
End If
Wenn ich das uidoc nach dem Speichern schließe und neu öffne, dann klappt die Anlage des Tochterdokuments incl. Übernahme aller auf dem Haupdokument basierenden Felder.