Autor Thema: Dialogbox  (Gelesen 4779 mal)

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Dialogbox
« 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 ?

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Dialogbox
« Antwort #1 am: 08.06.11 - 13:24:22 »
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.

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: Dialogbox
« Antwort #2 am: 08.06.11 - 13:44:39 »
Vielen Dank ! Das hört sich aber ziemlich kompliziert an !

Wie übergebe ich denn die Dok-ID vom Hauptdok. an die Dialogbox ?

Gruss

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Dialogbox
« Antwort #3 am: 08.06.11 - 13:49:49 »
Als Feld im doc

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: Dialogbox
« Antwort #4 am: 08.06.11 - 14:23:22 »
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 !


Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Dialogbox
« Antwort #5 am: 08.06.11 - 14:32:29 »
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.

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: Dialogbox
« Antwort #6 am: 08.06.11 - 14:53:20 »
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

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Dialogbox
« Antwort #7 am: 08.06.11 - 14:56:33 »
workspace.CurrentDocument.Document im Button ist das tmpdoc, also das mit der Dialogbox geöffnete Dokument

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: Dialogbox
« Antwort #8 am: 08.06.11 - 15:52:04 »
OH TOLL !!

Es hat geklappt ! Vielen Vielen Dank für die tolle Hilfe !

SUPER !

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Dialogbox
« Antwort #9 am: 08.06.11 - 16:04:31 »
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.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz