2

Die neue Funktion dialog()

Keine Frage, eher als zusätzlicher Input gedacht.

 

Bei den großen Ninox-Neuerungen zu Dateihandling, Mailversand und API ist die neue Dialog-Funktion ein bisschen untergegangen. Zu Unrecht, wie ich finde, denn sie kann mehr als nur einfache OK-/Abbrechen-Dialoge erzeugen. Ich habe mal ein wenig damit herumprobiert und das Ergebnis für mich zusammengeschrieben. Vielleicht kann der eine oder andere was damit anfangen.

 

dialog()

 

Die Funktion dialog() erzeugt ein Meldungsfenster mit mehreren, frei wählbaren Antwortmöglichkeiten zur Interaktion mit dem Benutzer. Die Ausführung des betreffenden Scriptes wird solange unterbrochen, bis der Benutzer eine der vorgebenen Optionen angeklickt hat. Das Ergebnis kann in ein Datenfeld übernommen oder in einer Variablen gespeichert und im weiteren Verlauf des Scriptes ausgewertet werden.

 

Nur in Schaltflächen-Scripts verfügbar.

 

Syntax:

dialog(TITELTEXT, FRAGETEXT, [ARRAY])

Parameter:

TITELTEXT = Text, der als Überschrift des Dialogs angezeigt werden soll.
FRAGETEXT = Text (auch mehrzeilig), der dem Benutzer angezeigt werden soll.
[ARRAY] = Array mit mehreren Antwortoptionen im Textformat.

 

Beispiel:

dialog("Bitte bestätigen!", "Sind Sie sicher?", ["Ja", "Nein"])

Anwendungsbeispiele:

if dialog("ACHTUNG!", "Sind Sie sicher?", ["Ja", "Nein"]) = "Ja" MACHDIES else TUJENES end

let Antwort := dialog("Bitte auswählen", "Welches ist deine Lieblingsfarbe?", ["Rot", "Gelb", "Grün","Blau"]);
switch Antwort do
    case "Rot": MACHDIES
    case "Gelb": TUJENES
    ...
end

 

Alle Parameter lassen sich auch aus Variablen/Datenfeldern auslesen. So könnte bspw. das Antwort-Array aus den gewählten Optionen eines vorhandenen Mehrfachauswahlfeldes bestehen, was weitere Möglichkeiten eröffnet.

Ergebnis := dialog(DialogTitel, DialogText, chosen(AntwortOptionen))

Ninox-DialogBsp_Lang

36 Antworten

null
    • GrischaMedia.ch
    • grischabock
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Würde sich ja sicherlich auch vor dem Absenden oder speichern einer PDF einbinden lassen oder? Da würde es Sinn machen wenn man mal ausversehen auf den Button versenden kommt. 

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ganz genau. Man könnte obigen Code bspw. wie folgt ergänzen:

     

    let result := dialog("DOKUMENTVERSAND", "Dokument generieren, an diesen Datensatz anhängen und direkt per E-Mail an den Kunden versenden?", ["Ja, bitte", "Nein, lieber nicht"]);

    if result = "Ja, bitte" then
        let DateiName := Rechnungsnummer + ".pdf";
        let DateiAnhang := importFile(this, printAndSaveRecord(this, "Rechnung"), DateiName);
        sendEmail({
            from: "MeineMail@Meinserver.tld",
            to: "DeineMail@deinserver.tld",
            cc: "AndereMail@andererserver.tld",
            subject: "Rechnung " + DateiName,
            text: "Moin, anbei meine Rechnung " + DateiName + ". Grüße, Ihr Lieferant",
            attachments: DateiAnhang
        });

    else
        alert("Rechnung wurde nicht generiert.")
    end

     

    Man sollte übrigens generell noch beachten, dass Ninox keinerlei Rückmeldung über den Versand der E-Mail gibt. Also auf jeden Fall erst mal nur mit eigenen "to:"-Adressen testen.

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Oh, da bin ich mit den Threads durcheinander gekommen. Natürlich wird nicht "obiger Coder" ergänzt, sondern der zu sendEmail() aus dem anderen Thread. :)

    • GrischaMedia.ch
    • grischabock
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Da fehlt die bearbeiten Funktion hier im Forum ;-)

    Vielen Dank für dein Beispiel, das kann man sehr gut nutzen. Werde ich in meiner einen oder anderen DB auch einsetzen. Gerade da wo mehrere Leute dran arbeiten.

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Super Erklärung!!!

    Was ich noch rausgekriegt habe: man kann auch mehrere Optionen in den Array packen: ["JA","Nein","Vielleicht","Weiß noch nicht"] und die Interaktionen dementsprechend gestalten.

    Leo

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Danke, Leo, freut mich, wenn's verständlich ist und dem einen oder anderen vielleicht ein bisschen hilft.

    Das mit den mehreren Optionen steht zwar oben auch schon (Beispiel mit Lieblingsfarbe), aber es geht offenbar etwas unter, weshalb es gut ist, dass du es noch mal erwähnst. Und um das ebenfalls noch mal zu wiederholen: Die Optionen können auch aus Datenfeldern und externen Tabellen gelesen werden. Womit die dialog()-Funktion m. E. viel Pozenzial bietet.

    Eine DB mit ein paar Beispielen habe ich mal ins Webinar-Team geladen (97_DIALOG-Funktion). Bestimmt fällt anderen noch mehr und Besseres dazu ein.

    • OLIVER
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Danke an euch!!! In diesem Forum werden Fragen beantwortet, bevor man sie stellen kann :)

    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    viel besser: ich weiß noch gar nicht, dass ich die Frage haben werde... ;-D

    • indigo_boat
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hi! Irgendwie werde ich im Forum und im Handbuch nicht fündig. Vielleicht könnt ihr mir helfen? Der dialog() Funktion kann ich Auswahlwerte übergeben. Aber wie lese ich einen Wert vom Benutzer in einem Dialog ein? Bei einem Button-Klick soll ein Dialog aufgehen und in einem Textfeld einen Wert abfragen. z.B. eine Zahl. Wie geht das? Gruß Sergej

    • bernd
    • vor 5 Jahren
    • Gemeldet - anzeigen

    hat  opytexter gleich im ersten Beitrag mit Beispielen gezeigt

    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    ^^ Texteingabe vom Nutzer als Antwort aber nicht - durchaus berechtigt, weil das (noch?) nicht geht...

    • indigo_boat
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Danke Torsten. Dann versuche ich mir anders zu helfen.

    • bernd
    • vor 5 Jahren
    • Gemeldet - anzeigen

    ich habe Dein Problem verkehrt verstanden...

    Es wird ja in der Funktion ein Array übergeben. Eine select Anweisung liefert auch ein Array zurück. 

    Beschreibe mal das Problem genauer...

    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    ... ich habe den OP so verstanden, dass er mittels Dialog den User zu einer Eingabe auffordern will d.h. das Dialog-Ergebnis soll einen User-Eingabe sein...

    • indigo_boat
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Genau, ich möchte ein Popup zeigen und dem Anwender die Möglichkeit geben einen Wert einzugeben. Analog der prompt() Funktion in JavaScript.

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Freie Texteingaben sind mir der dialog()-Funktion leider nicht möglich. Man könnte alternativ aber nach dem Betätigen des Buttons daneben ein ansonsten ausgeblendetes Textfeld anzeigen lassen. Und bei Bedarf auch noch ein Freitext-Feld mit einer Erläuterung. Und nach Eingabe wieder ausblenden. Oder, wenn es bestimmte Werte sind, die sich vordefinieren lassen, eben über ein Array als Antwort-Optionen im Dialog.

     

    Nur so als Idee.

    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    die Texteingabe im Dialog hab ich auch schon vermisst... :-/

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Kommt sicher auch noch - irgendwann ... ;)

     

    Aber wir reden ja über ein Eingabefeld. Und das lässt sich ja auch irgendwo im Formular unterbringen.

    • biuro_technilakpl
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Habe ein Problem mit folgenden Dialog. Ich möchte das Duplizzieren von einen Datensatz über einen Dialogfenster bestätigen lassen, und es klapt aber mit problemen. Das Datensatz wird duplizziert, aber es dauert lange und Ninox hängt sich dabei auf. Dieses skript ist auf eine Taste (Duplizzieren) untergebracht:

    if dialog("Duplizzieren WZ", "Wirklich duplizzieren?", ["Ja", "Nein"])="Ja" then
    let n := Nr;
    let jez := 'Język';
    let r := (create WZ);
    r.('Data edycji' := today());
    r.('Język' := jez);
    let rn := r.Nr;
    for p in select Poz_wz where 'Wydanie zewnętrzne'.Nr = n do
    let PR := p.Kod;
    let art := p.Artikel;
    let naz := p.Nazwa;
    let anz := p.'Ilość';
    let y := (create Poz_wz);
    y.('Wydanie zewnętrzne' := rn);
    y.(Kod := PR);
    y.(Artikel := art);
    y.(Nazwa := naz);
    y.('Ilość' := anz)
    end
    else
    void

    Hat jemand eine Idee warum so ist?

    Gruss Richard

    • bernd
    • vor 5 Jahren
    • Gemeldet - anzeigen

    warum eine Schleife mit for?

    let p := select Poz...

    • biuro_technilakpl
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Beim duplizieren wird ein Datensatz dupliziert der eine Untertabelle enthält mit Positionen Poz_poz von daher die Schleife. Ohne das Dialogfenster läuft das Skript einwandfrei durch. Das Problem scheint das Dialog zu sein

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Tipp: Beim Duplizieren von Datensätzen mit duplicate() wird auch die Untertabelle mit kopiert.

    • biuro_technilakpl
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Werde ausprobieren, aber es geht dabei nicht um reines duplizieren, sonder darum ein ähnlicher Datensatz zu erstellen mit ausgesuchten Felder die übernommen werden. Warum das mit Dialog nicht geht ist mir ein Rätsel 

    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hast Du mal versucht, den Dialog zu "entkoppeln"? Also

     

    let MyChoice := dialog("Duplizzieren WZ", "Wirklich duplizzieren?", ["Ja", "Nein"]);
    if MyChoice = "Ja" then
    .
    .
    .

     

    lg, Torsten

    • biuro_technilakpl
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ja so habe ich auch schon versucht. Ohne Erfolg

Content aside

  • 2 „Gefällt mir“ Klicks
  • vor 4 JahrenZuletzt aktiv
  • 36Antworten
  • 14691Ansichten
  • 1 Folge bereits