Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet 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
-
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.
-
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
-
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)
-
Du bekommst die UNID des Hauptdokumentes auch mit
notesDocument.ParentDocumentUNID
Axel
-
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
-
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
-
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.
-
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
-
Und man kann sich im Best Practices (http://atnotes.de/index.php/topic,13984.0.html) nochmal sehr eingehend mit dem Thema beschäftigen.