Domino 9 und frühere Versionen > ND8: Entwicklung
Verkettung von Dialogboxen
Driri:
Hallo,
ich versuche mich gerade an einer Anwendung, mit der Checklisten verwaltet und ausgefüllt werden können. Meine Idee war, die einzelnen Fragen einer Checkliste in Form von einzelnen Dokumenten anzulegen und diese dann via Dialogbox durch die Anwender ausfüllen zu lassen. D.h. beim Start der Funktion wird für den Anwender ein Set Dokumente angelegt und das erste aus der Reihe öffnet sich in einer Dialogbox.
Und jetzt fangen die Probleme an. ;)
Ich habe keine Möglichkeit gefunden, in der Dialogbox ein neues Dokument zu öffnen. Daher wird man vermutlich das Dokument schließen müssen und anschließend das nächste Dokument in der Reihe in einer neuen Dialogbox öffnen.
Aufruf erste Dialogbox:
--- Zitat ---Call ws.DialogBox("CLDialog",True,True,True,False,False,False,"Checkliste",firstdoc,False,True,False)
--- Ende Zitat ---
In der Dialogmaske habe ich eine eigene Schaltfläche hinzugefügt, die einfach nur ein Close absetzt :
--- Zitat ---Dim ws As New NotesUIWorkspace
ws.CurrentDocument.Close
--- Ende Zitat ---
Im QueryClose der Maske für die Dialogbox habe ich ein NotesUIWorkspace.RefreshParentNote() eingebaut, um die Eingabewerte in das Backend zu schreiben. Das funktioniert aber nicht, die Werte im Dokument bleiben unverändert.
Im Aufruf der Dialogbox habe ich die Änderung aber zugelassen (siehe oben) und die Feldnamen in der Dialogmaske sind identisch zu denen in der Dokumentmaske.
In den Dokumenten gibt es eine Indexnummer für die Reihenfolge der Fragen. Ich wollte jetzt im QueryClose der Dialogbox die aktuelle Indexnummer abgreifen, die nächste ermitteln (soweit vorhanden), darüber das entsprechende Dokument holen und in einer neuen Dialogbox öffnen.
Funktioniert natürlich nicht. Das fliegt mir mit der Meldung "NotesUIDocument object is no longer valid." um die Ohren. Ich vermute, es passiert an dieser Stelle :
--- Zitat ---Set doc = Source.Document
docindex = doc.GetItemValue("CL_E_SortOrder")(0)
--- Ende Zitat ---
Ansonsten wird das UIDocument im QueryClose gar nicht angefaßt.
Zwei Fragen :
1) Hat jemand eine Idee, warum die Werte nicht ins Backend zurückgeschrieben werden ? Wenn ich die Designer-Hilfe richtig verstehe, ist RefreshParentNote ja genau dafür gedacht.
2) Ist das mit der Verkettung der Dialogboxen so überhaupt möglich ? Oder bin ich mit der Idee völlig auf dem Holzweg ?
Tode:
Prinzipiell ist das alles möglich, aber trotzdem kommt mir das alles sehr "wirr" vor... also erstmal:
Refreshparentnote ist nur dann notwendig, wenn du das aktuell geöffnete Dokument als Dialogbox öffnest (also den Document- Parameter leer lässt).
Ich verstehe nicht, weshalb Du den Stunt brauchst, aus dem Dokument auszulesen, welche Indexnummer es hat...
Im prinzip durchläufst Du im aufrufenden Script die einzelnen Dokumente und zeigst die einzeln nacheinander im Dialog an... dazu brauchst Du kein Queryclose etc.... Du musst halt nur prüfen, ob die Dialogbox gecancelt wurde, und wenn nicht -> firstdoc speichern...
Dann nächstes Dok aus Deiner collection holen und als DIalog anzeigen...
Fineas:
Hallo,
2.) ja, zumindest grundsätzlich. Ich habe verkettete Dialogboxen alsWizzard im Einsatz und abgesehen von dem nervigen öffnen/schließen klappt das super. Vor, zurück, fertig. Eine andere Lösung als ein reOpen der Dialogbox habe ich aber auch nicht.
1.) keine Idee, aber einen Gegenvorschlag: wenn Du für alle Dialogboxen immer das gleiche NotesDocument benutzt und lediglich die Form wechselst, kannst Du nach Abschluß der Dialogfolge das Ganze korrekte und sauber auswerten und im normalen Programmablauf die Werte übernehmen, die Du benötigst. Auf RefreshParentNote würde ich in dieser Konstellation einfach verzichten.
Gruß, Heiko
Driri:
Vielen Dank für die Rückmeldungen.
Vielleicht habe ich es schlecht erklärt, ich versuche es mal so.
Struktur :
- 1 Hauptdokument zur Verwaltung einer Checkliste
- n Antwortdokumente mit den einzelnen Fragen der Checkliste
Aufruf :
- Auswahl der Checkliste
- Erstellen von Kopien der Antwortdokumente als neue Hauptdokumente
- Kopieren der Dokumente in einern SPOFU-Ordner (wird vorher ggf. noch geleert)
- Ermittlung des ersten Dokumentes (also der ersten Frage der Checkliste)
- Öffnen des Dokumentes in einer Dialogbox
Ich öffne also nicht das aktuell geöffnete Dokument in einer Dialogbox, sondern ziehe mir ein Backend-Dokument und bringe das via Dialogbox zur Bearbeitung.
Die Struktur mit den Dokumenten und dem Ordner hatte ich mir überlegt, weil ich dann nicht im Speicher mit einer DocumentCollection arbeiten muß. Daher auch die Indexnummer, um das jeweils vorherige oder nächste Dokumente identifizieren zu können.
Ich bin da aber auch für Alternativen offen. Manchmal sieht man ja auch den Wald vor lauter Bäumen nicht mehr ;)
Ziel ist es jetzt, die Eingaben in der Dialogbox in dem Dokument im Backend zu speichern und dann das nächste Dokument aus der Kette via Dialogbox zu öffnen.
Wenn ich das richtig verstanden habe, komme ich also mit RefreshParentNote nicht weiter. Dann müßte ich also stattdessen die Werte aus dem Frontend auslesen und in das Backend-Dokument schreiben. Anschließend schließe ich die Dialogbox und öffne das nächste Dokument der Kette. Korrekt ?
@Heiko :
Deinen Gegenvorschlag habe ich nicht verstanden. Wie meinst Du das mit "Form wechseln" ?
Mitch:
Der Code aus deinem Anfangsposting ist eigentlich korrekt, die Items sollten gemäß der Dialogmaske gefüllt oder geändert werden. Das Ergebnis müsstest du aber natürlich noch abspeichern, hast du das vielleicht vergessen?
Und/Aber: Das "RefreshParentNote" vor Schließen der Dialogbox (über eigene Buttons) ist meiner Erinnerung nach sehr wohl erforderlich, da damit ein "OK-Button" simuliert wird. Lässt man das weg gilt die Dialogbox als "Abgebrochen", liefert False zurück und ändert entsprechend auch keine Items.
Ich würde also einfach in deinen Schließen-Button ein "RefreshParentNote" vor die Zeile mit dem "Close" setzen. Aus dem QC kann das dann verschwinden.
Gruß,
Mitch
Edit: Ggf. reicht es ja auch, deinen Schließen-Button als OK-Button zu definieren. Das geht über dessen Eigenschaften.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln