Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Hedwig14 am 08.06.11 - 12:58:12
-
Hallo !
Ich rufe eine Dialogbox mit
Call workspace.DialogBox ("TEL_ADR_ändern", True, True, True, False, False, False, "Kommunikationsadresse ändern", doc, False, True, True)
auf.
In der Dialogbox habe ich u.a. einen EIGENEN Schalter "abbrechen" hinterlegt mit folgender Funktion:
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim oWS As New NotesUIWorkspace 'Dialogmaske
oWS.CurrentDocument.Close 'Dialogmaske schließen
End Sub
Nun möchte ich über diesen Schalter einen Wert an das Hauptdokument übergeben.
Wie kann ich das Hauptdokument deklarieren ?
-
Wenn das Hauptdokument während der Dialogbox geschlossen ist, würde ich dem doc für die Dialogbox die UniversalID des Hauptdokuments mitgeben, dann kannst Du mit NotesDatabase.GetDocumentByUnid darauf zugreifen.
Ist es geöffnet, greifst Du damit über das Backend zu und produzierst einen Speicherkonflikt. Dann gehe ich so vor:
Das doc für die Dialogbox wird im Script temporär erstellt, da hinein kommen alle relevanten Felder aus dem Hauptdokument. Im Button, der die Dialogbox schließt, schreibe ich in Felder, die ich später auslese, die entsprechenden Informationen hinein (z.B. dass der Button gedrückt wurde). Dann folgt noch ein
Call workspace.RefreshParentNote
damit die Werte aus der Dialogbox trotz Abbruch in das Dokument übernommen werden. Im nachfolgenden Script (also dem Dialogbox-aufrufenden Script nach der Dialogbox) werte ich das temporäre Dokument aus und verändere die Felder / Items des Hauptdokuments, dass ich schon zu Beginn des Scripts mit workspace.CurrentDocument geholt habe.
-
Vielen Dank ! Das hört sich aber ziemlich kompliziert an !
Wie übergebe ich denn die Dok-ID vom Hauptdok. an die Dialogbox ?
Gruss
-
Als Feld im doc
-
Ich habe das Verfahren noch nicht ganz verstanden.
Also mein Hauptdok ist im Hintergrund geöffnet. Und es geht tatsächslich um die Information welche der beiden Schalter (eigene) in der DB gedrückt wurden.
Informationen aus dem Hauptdok. werden automatisch in die DB geschreiben. Aber Änderungen werden nicht an das Hauptdokument zurückgeschriebn. Das liegt an den eigenen Schaltern.
Jetzt habe ich noch nicht ganz verstanden wie ich die DB in ein temp. Dok umwandle und im Hauptdok darauf zugreifen kann !
-
Also sinngemäß so:
...
Set doc = uidoc.Document
Dim tmpdoc As New NotesDocument (db) 'temporäres Dokument erstellen
Call doc.CopyAllItems (tmpdoc) 'Alle Items aus doc in das temporäre kopieren
Call workspace.DialogBox ("TEL_ADR_ändern", True, True, True, False, False, False, "Kommunikationsadresse ändern", tmpdoc, False, True, True)
If tmpdoc.FlagButton1 (0) = "1" Then
'Button 1 wurde gedrückt
doc.ZuAenderndesFeldBeiButton1 = tmpdoc.InDialogboxEingegebenerWert
End If
usw.
-
Toll, ich glaube wir sind auf dem richtigen Weg ! Vielen Dank.
Ich habe den Aufrufe der DB mit dem TMP-Dok hinbekommen.
Jetzt muss ich meinem Schalter in der DB nur noch verraten wie er an das TMP-Dok kommt in dem ich das Flag "Button gedrückt" hinterlegen muss..
Quasi hier:
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim oWS As New NotesUIWorkspace 'Dialogmaske
oWS.CurrentDocument.Close 'Dialogmaske schließen
End Sub
-
workspace.CurrentDocument.Document im Button ist das tmpdoc, also das mit der Dialogbox geöffnete Dokument
-
OH TOLL !!
Es hat geklappt ! Vielen Vielen Dank für die tolle Hilfe !
SUPER !
-
Nur noch einmal zur Erklärung:
Der Umweg über das tmpdoc ist deshalb wichtig, weil Du mit Deiner Schaltfläche die Dialogbox abbrichst. Durch den Abbruch werden normalerweise die Informationen aus der Dialogbox nicht in das aufrufende Dokument geschrieben. Der Eingriff mittels RefreshParentNote führt aber dazu, dass das trotzdem erfolgt.
Durch das tmpdoc kannst Du nun im Nachgang genau die Felder übernehmen, die Du haben willst, und nicht automatisch alle (User ändert alle möglichen Daten in der Box und bricht dann ab).
Ich baue Dialogboxen nur über temporäre Dokumente, das ist manchmal etwas aufwendiger, aber ich kann ganz genau steuern, was ich von der Rückgabe nutze und was nicht. Genauso kann ich steuernde Felder in das tmpdoc schreiben, ohne dass die gleich beim nächsten Speichern im aufrufenden Dokument hinterlegt sind. Also insgesamt eine saubere Trennung zwischen dem produktiven Dokument und der Dialogbox.