Autor Thema: Dialogbox öffnen auch wenn kein Dok markiert ist  (Gelesen 2609 mal)

Offline bob

  • Aktives Mitglied
  • ***
  • Beiträge: 166
  • Geschlecht: Männlich
  • R5
Hi,

Problem:
Eine Dialogbox per Button läßt sich nur öffnen, wenn ein Dok selektiert ist.

Lösung:
Ein temporäres File erzeugen, welches als Argument übergeben wird.


Beispiel für das Makro:


Sub Initialize
     '**********************************************************************************************************************
     'create a new temporary document only to display the Form
     'this doc. is not saved; In this way, there is no need to have a document selected in the current view
     '**********************************************************************************************************************
   Dim workspace  As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim dbCurrent As NotesDatabase
   Dim docTemp As NotesDocument
   Dim szFormName As String
   Dim szTitle As String
   Dim vOk As Variant
   
   Set dbCurrent = session.CurrentDatabase
   Set docTemp = dbCurrent.CreateDocument
   
   szFormName = "frm_Feedback"
   szTitle = "Feedback-Formular"          
   
   vOk = workspace.DialogBox ( szFormName, True, True, True, True, False, False, szTitle, docTemp, False,True  )
End Sub




HTH,
Bob
« Letzte Änderung: 27.06.03 - 22:54:53 von bob »

Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Dialogbox öffnen auch wenn kein Dok markiert ist
« Antwort #1 am: 11.07.03 - 20:49:15 »
Hi,

der Tip ist gut und funktioniert einwandfrei. Ich nutze sowas schon seit Jahren.

Ein bisschen was fehlt aber in deiner Beschreibung.

1. Wie greife ich auf den Inhalt der Dialogbox zu?

2. Wie unterscheide ich ob OK oder Abbrechen angeklickt wurde?

Für die "alten Noteshasen" ist das sicherlich keine Frage, aber es gibt ja genug Anfänger (ist nicht abwertend gemeint), die das nicht wissen.


Hier die Lösung:

Zitat
Sub Initialize
    '**********************************************************************************************************************
    'create a new temporary document only to display the Form
    'this doc. is not saved; In this way, there is no need to have a document selected in the current view
    '**********************************************************************************************************************
   Dim workspace  As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim dbCurrent As NotesDatabase
   Dim docTemp As NotesDocument
   Dim szFormName As String
   Dim szTitle As String
   Dim vOk As Variant
   
   Set dbCurrent = session.CurrentDatabase
   Set docTemp = dbCurrent.CreateDocument
   
   szFormName = "frm_Feedback"
   szTitle = "Feedback-Formular"          
   
   If workspace.DialogBox ( szFormName, True, True, False, True, False, False, szTitle, docTemp, True, False ) Then
      Messagebox "Es wurde auf OK geklickt"
     
      'Zugriff auf Felder innerhalb der Dialogbox

      Messagebox docTemp.Feldname(0)
  Else
      Messagebox "Es wurde auf Abbrechen geklickt"
  End If
End Sub

Die Dialogbox ist eine ganz normale Maske. Am besten fügt man zuerst eine Tabelle 1 Zeile/1 Spalte ein. Diese Tabelle legt dann die Größe der Dialogbox fest. In dieser Tabelle gestaltet man dann den Dialog mit Feldern etc.
Damit der dialog dann in der entsprechenden Größe angezeigt wird, muß der vorletzte Parameter auf True gesetzt werden.

Beisp.:

If workspace.DialogBox ( szFormName, True, True, False, True, False, False, szTitle, docTemp, True, False) Then
...

Axel

@bob
Deine Parameter sind etwas ungeschickt gesetzt.  Es werden z.B. kein OK und Abbrechen angezeigt.

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline bob

  • Aktives Mitglied
  • ***
  • Beiträge: 166
  • Geschlecht: Männlich
  • R5
Re:Dialogbox öffnen auch wenn kein Dok markiert ist
« Antwort #2 am: 11.07.03 - 21:38:36 »
Hi Axel,

Zitat
Deine Parameter sind etwas ungeschickt gesetzt.  Es werden z.B. kein OK und Abbrechen angezeigt.

Na ja, kommt halt drauf an wie man die Box einsetzt  :)
Aber Du hast schon Recht, es fehlt etwas Background:

Der Code den ich gepostet habe rufe ich als Agenten auf bei Klick auf einen Feedback-Action.
Da hab ich dann bewusst OK und Abbrechen rausgelassen, um 2 eigene Buttons "Senden" und "Abbrechen" zu hinterlegen.

Unter dem Button "Senden" steht dann folgender Code:
Zitat

_ABC_Empfaenger := @GetProfileField("Profile_ABC"; "setup_ABC_MA");
_Feedback_Absender := "Absender:  " + @Name([CN]; @UserName);
_Feedback_Subject := "Feedback - bitte asap bearbeiten! [Automatische Mail]";
_Feedback_Text := "Dies ist eine automatische Mail." + @NewLine + @NewLine + "Ein Mitarbeiter hat das Feedback-Formular in der ABC-Dokumentation ausgefüllt." + @NewLine +  @NewLine + _Feedback_Absender + @NewLine + @NewLine + "Inhalt: " + @NewLine + "----------------------------------------------------------------------" + @NewLine + Feedback_Nachricht + @NewLine + "----------------------------------------------------------------------"  + @NewLine + @NewLine + "ABC-Dokumentation     © 2003 ABC GmbH";

@If(
   @IsError(
         @MailSend(_ABC_Empfaenger;"";"";_Feedback_Subject;  _Feedback_Text ));
         @Prompt([OK];"Fehler";"Es ist ein Fehler aufgetreten. Der Formularinhalt wurde nicht übertragen!");
@Success
+@Prompt([OK];"Übertragung erfolgreich angestoßen";"Die Nachricht wird an das ABC-Team übermittelt!" +@Char(13)+@Char(13)+ "Bitte replizieren Sie noch Ihr Mail-File, falls Sie lokal arbeiten.")
);


@PostedCommand([FileCloseWindow])


Bob

P.S. Das Ergebnis sieht dann so aus: Screenshot
« Letzte Änderung: 11.07.03 - 21:44:33 von bob »

Glombi

  • Gast
Re:Dialogbox öffnen auch wenn kein Dok markiert ist
« Antwort #3 am: 12.07.03 - 19:17:25 »
Falls in der Dialogbox Eingaben gemacht werden, die validiert werden sollen, mache ich das immer so:
Für den Anwender ist es schöner, wenn
1.) die Validierung noch in der Dialogbox gemacht wird und nicht erst nachdem diese mit OK geschlossen wurde und dann im nachfolgenden Script
2.) die Validierung nicht gemacht wird, wenn der User CANCEL klickt.

Also das geht so:
Im QueryClose der Dialogmaske folgendes:

Sub Queryclose(Source As NotesUIDocument, Continue As Variant)

If Source.DialogBoxCanceled Then
'REM VALIDIERUNG NUR BEI OK
  if Source.FieldGetText("Name") = "" then
     Msgbox "Bitte geben Sie den Namen ein!",0+16,"Validierung"
     Continue = false
     exit sub
   End If  
End If  

End Sub

Andreas

Glombi

  • Gast
Re:Dialogbox öffnen auch wenn kein Dok markiert ist
« Antwort #4 am: 12.07.03 - 19:21:41 »
Uuuups, sorry kleiner Fehler :o
Es muss so heissen:

If Not Source.DialogBoxCanceled Then


Andreas

Offline Performance

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.096
  • Geschlecht: Männlich
  • I love YaBB 1G - SP1!
Re:Dialogbox öffnen auch wenn kein Dok markiert ist
« Antwort #5 am: 17.07.03 - 13:05:18 »
@bob

das kann so nicht ganz stimmen ... klar geht das auch ohne ein Dokument zu erzeugen.
Wichtig bei einer Dialogbox ist einzig das Vorhandensein einer gültigen Form.... der Rest der Argumente ist ja optional.

z.B.
If  (ws.DialogBox( "DialogHist", True, True, False, True, False, False, "New History Entry", , False , False ))  = False  Then
' irgendwas
Else
' irgendwas
End If


@Axel
Bei deiner ersten Frage muss einfach der Parameter noFieldUpdate  auf false stehen .... weil der Kindprozess der Dialogbox ans geöffnete dok gebunden ist sind die Informationen in der Dialogbox im Speicherbereich des Doks vorhanden. Also mache ich mir immer bei solchen Aktionen ein Feld mit dem Gleichen Namen im dokument + DialogboxForm - und das dok übernimmt den FeldWert des gleichen Dialogboxfeldes das aber mit dem Häckchen "inherit...." angeklickt ist.


'edit'
Die Überschrift stimmt auch nicht... da die Dialogbox an der Workspace hängt
'edit'



cu

« Letzte Änderung: 17.07.03 - 13:09:47 von Performance »
Wir können alles außer hochdeutsch !

Alles ist möglich, es ist nur eine Frage der Zeit oder des Geldes!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz