Domino 9 und frühere Versionen > ND8: Entwicklung

Haupt- und Antwortdokumente

<< < (2/2)

BMT216A:
Hi,

irgendwie sitz ich wohl grad auf der Leitung.
Hier ist mein Code, mit dem ich die Antwort auf die Antwort erstelle, also nicht das was ich will.
Habe jetzt schon geraume Zeit damit verbracht es zu ändern, aber es klappt nicht.
Wäre einer von Euch so freundlich mir die Zeilen so anzupassen, dass es klappt.

Vielen Dank

Sub ErstelleAntwort
   Const FORMNAME_RESPONSE$ = "TOP"
   Const ERR_NODOCSEL_TITLE$ = "Fehler: Es ist kein Hauptdokument gewählt!"
   Const ERR_NODOCSEL_MSG$ = "Es muss ein Dokument gewählt sein um eine Antwort erstellen zu können."
   
   Dim uiws As New NotesUIWorkspace
   Dim uidocNew As NotesUIDocument
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim docSel As NotesDocument
   Dim docNew As NotesDocument
   
   'Aktuelle Datenbank
   Set db = session.CurrentDatabase
   
   'Aktuelles Dokument als NotesDocument
   If Not uiws.CurrentDocument Is Nothing Then
      'Dokument mit Maske geöffnet
      Set docSel = uiws.CurrentDocument.Document   
      'Dokument in Ansicht selektiert
   Elseif Not session.DocumentContext Is Nothing Then
      Set docSel = session.DocumentContext                  
   End If
   'User hat kein Dokument ausgewählt um eine Antwort ersetllen zu können
   If docSel Is Nothing Then                                    
      Msgbox ERR_NODOCSEL_MSG, 48, ERR_NODOCSEL_TITLE
      Exit Sub
   End If
   
   'Neues Backend Antwortdokument erstellen
   Set docNew = db.CreateDocument
   Call docNew.ReplaceItemValue("Form", FORMNAME_RESPONSE)
   Call docNew.MakeResponse(docSel)
   
   'Neues Dokument im Frontend öffnen
   Call uiws.EditDocument(True, docNew)
   
   
End Sub

Axel:
Der Code sieht auf den ersten Blick eigentllich ganz ok aus. Das einzigste was mich auf Anhieb etwas stört ist das hier:

Call docNew.ReplaceItemValue("Form", FORMNAME_RESPONSE)

Versuch's mal so:

...
   'Neues Backend Antwortdokument erstellen
   Set docNew = db.CreateDocument
   Call docNew.Form = FORMNAME_RESPONSE$
   Call docNew.ComputeWithForm(True, False)
   Call docNew.MakeResponse(docSel)
   
   'Neues Dokument im Frontend öffnen
   Call uiws.EditDocument(True, docNew)
...

Beschreib' mal genauer was nicht funktioniert. Was sagt der Debugger zu dem Thema?

Axel


DAU-in:
Wenn ich das als Dau-in richtig sehe, machst du das von einem Antwortdokument aus, richtig?

Dann ist docSel bereits ein Antwortdokument, und wenn du an dieses ein neues Antwortdokument hängst, ist das dann richtigerweise ein Antwort-zu-Antwortdokument.
Du musst von docSel im Backend auf das Hauptdokument zugreifen (siehe 1. Beitrag Axel, danach 2. Beitrag Lloyd).
Dann trägst du im Abschnitt Antwortdokument erstellen dort, wo bisher docSel eingetragen ist, das Hauptdokument ein.
Dann sollte das funktionieren.

BMT216A:
Hallo Notesler(innen),

wie in meinem ersten Post geschrieben, manchmal sieht man den Wald vor lauter Bäumen nicht. Die Lösung war so einfach, wie von Axel und Lloyd geschrieben.

Ich hab es jetzt so gelöst.
Hier noch der Code.

Sub Erstelle_x_Antwort
   
   '******************************************************************************
   'Erstelle_x_Antwort
   'hiemit sollen n Antworten aus einem Antwortdokument auf ein
   'Haupdokument erstellt werden.
   'Versionskontrolle:
   'V1.00 Erstellt 09.08.2010 xxx
   '******************************************************************************    
   
   'Deklaration der Variablen, die nur hier genutzt werden,
   'alle anderen sind in der Scriptbibliothek unter (Declarations) zu finden
   Dim Hauptdokument As NotesDocument
   Dim Antwortdokument As NotesDocument
   
   
   Set ws  = New NotesUIWorkspace
   Set session =  New NotesSession
   Set uidoc = ws.CurrentDocument
   Set doc = uidoc.Document
   Set db = session.CurrentDatabase
   
   'allseits bekannt
   cr = Chr(10) & Chr(13)   
   
   'Dem Hauptdokument eintrichtern, dass es genau das Hauptdokument über doc.ParentDocumentUNID ist
   Set Hauptdokument = db.GetDocumentByUNID(doc.ParentDocumentUNID)   
   
   'Neues Backend Antwortdokument zum aktuellen Dokument erstellen
   Set Antwortdokument = db.CreateDocument
   Call Antwortdokument.ReplaceItemValue("Form", "TOP")
   Call Antwortdokument.MakeResponse(Hauptdokument)
   
   'Neues Dokument (hier Antwort auf Haupdokument) im Frontend öffnen
   Call ws.EditDocument(True, Antwortdokument)
   
   'Alles in der Welt endet durch Zufall und Ermüdung.
   'Heinrich Heine
   
End Sub

DerAndre:
Und man kann sich im Best Practices nochmal sehr eingehend mit dem Thema beschäftigen.

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln