Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: BMT216A am 05.08.10 - 11:11:10

Titel: Haupt- und Antwortdokumente
Beitrag von: BMT216A am 05.08.10 - 11:11:10
Hallo Notesler,

ich habe eine Frage zur Erstellung von Antwortdokumenten.
Mit Haupt- und Antwortdokumenten arbeite ich eigentlich schon länger, hatte aber noch nie folgende Anforderung:

Ich soll:

1. Das Haupdokument erstellen, und aus diesem gleich eine Antwortdokument erstellen. Dies klappt auch und ich mache das wei im HowTo aus dem Forum beschrieben. (Script)
 
2. Das jetzt geöffnete Antwortdokument soll gleich wieder so einen Button haben, um eine Antwort auf das in 1 erstellte Haupdokument zu erstellen.

Und hier liegt mein Problem. Ich komme zwar so weit, dass ich wieder eine Antwort auf 2 erstellen kann, aber das will/soll ich nicht.

Ich wäre über einen kleinen Gedankenanstoss sehr sehr dankbar :-)
Wahrscheinlich ist es nur eine Kleinigkeit, aber manchmal sieht man den Wald vor lauter Bäumen nicht.

Viele Grüße Christian
Titel: Re: Haupt- und Antwortdokumente
Beitrag von: Lloyd am 05.08.10 - 11:20:40
Du könntest z.B. die UniversalID des Hauptdokuments in dem Antwortdokument speichern. Wenn du jetzt in dem ersten Antwortdokument auf den von dir beschriebenen Button klickst, dann könntest du dir an Hand der UniversalID das Hauptdokument holen und das Zweite Antwortdokument mit der MakeResponse Methode dem Hauptdokument zuweisen.

Ich hoffe ich habe deine Anforderung richtig verstanden.
Titel: Re: Haupt- und Antwortdokumente
Beitrag von: BMT216A am 05.08.10 - 11:27:59
Hi Lloyd,

die UniversalID des Hauptdokuments hab ich im Hauptdokument in ein Feld <HauptUNID> geschrieben. In meinem Antwortdokument hab ich ein Feld <$REF> mit dem Wert <HauptUNID> so funktioniert ja dann auch mein Doklink aus der Antwort auf das Hauptdokument.

Wenn ich dich richtig versatnden habe, muss ich meinem Script nur mitteilen, dass aus dem gerade geöffnetet Antwortdokument auf das Dokument mit der UNID <HauptUNID> eine Antwort zu erstellen ist.

Wenn das geht, sollte es ja möglich sein, x Antworten nach ein ander über einen Button auf das Hauptdok zu erstellen.

Ich hoffe ich schreibe hier nicht zu unverständlich.

Ciao
Titel: Re: Haupt- und Antwortdokumente
Beitrag von: Lloyd am 05.08.10 - 11:46:23
Ja das geht so.

Folgende Funktionen könnten hilfriech sein. Hier im Forum und in der Designerhilfe sind jede Menge Beispiele dazu.

Mit der Funktion kannst du dir das Hauptdokument wiede als doc holen
GetDocumentByUniqueID(uid As String)

Hier teilst du dem Antwortdokument mit, welches sein zugehöriges Hauptdokument ist.
Set doc2 = uidoc.Document
Call doc2.MakeResponse( doc )
Call doc2.Save(True,False)
Titel: Re: Haupt- und Antwortdokumente
Beitrag von: Axel am 05.08.10 - 12:54:57
Du bekommst die UNID des Hauptdokumentes auch mit

        notesDocument.ParentDocumentUNID


Axel
Titel: Re: Haupt- und Antwortdokumente
Beitrag von: BMT216A am 06.08.10 - 15:32:33
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
Titel: Re: Haupt- und Antwortdokumente
Beitrag von: Axel am 06.08.10 - 19:14:04
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


Titel: Re: Haupt- und Antwortdokumente
Beitrag von: DAU-in am 06.08.10 - 19:21:21
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.
Titel: Re: Haupt- und Antwortdokumente
Beitrag von: BMT216A am 09.08.10 - 15:14:37
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


Titel: Re: Haupt- und Antwortdokumente
Beitrag von: DerAndre am 10.08.10 - 07:31:43
Und man kann sich im Best Practices (http://atnotes.de/index.php/topic,13984.0.html) nochmal sehr eingehend mit dem Thema beschäftigen.