Autor Thema: CopmoseDocument - Fehler beim Erzeugen eines Tochterdokuments  (Gelesen 1852 mal)

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
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
« Letzte Änderung: 12.12.11 - 14:48:11 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
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 ...


Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
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.
« Letzte Änderung: 12.12.11 - 14:47:50 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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz