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))
36 Antworten
-
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.
-
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.")
endMan 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.
-
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. :)
-
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.
-
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
-
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.
-
Danke an euch!!! In diesem Forum werden Fragen beantwortet, bevor man sie stellen kann :)
-
viel besser: ich weiß noch gar nicht, dass ich die Frage haben werde... ;-D
-
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 -
hat opytexter gleich im ersten Beitrag mit Beispielen gezeigt
-
^^ Texteingabe vom Nutzer als Antwort aber nicht - durchaus berechtigt, weil das (noch?) nicht geht...
-
Danke Torsten. Dann versuche ich mir anders zu helfen.
-
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...
-
... 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...
-
Genau, ich möchte ein Popup zeigen und dem Anwender die Möglichkeit geben einen Wert einzugeben. Analog der
prompt()
Funktion in JavaScript. -
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.
-
die Texteingabe im Dialog hab ich auch schon vermisst... :-/
-
Kommt sicher auch noch - irgendwann ... ;)
Aber wir reden ja über ein Eingabefeld. Und das lässt sich ja auch irgendwo im Formular unterbringen.
-
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
voidHat jemand eine Idee warum so ist?
Gruss Richard
-
warum eine Schleife mit for?
let p := select Poz...
-
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
-
Tipp: Beim Duplizieren von Datensätzen mit duplicate() wird auch die Untertabelle mit kopiert.
-
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
-
Hast Du mal versucht, den Dialog zu "entkoppeln"? Also
let MyChoice := dialog("Duplizzieren WZ", "Wirklich duplizzieren?", ["Ja", "Nein"]);
if MyChoice = "Ja" then
.
.
.
lg, Torsten
-
Ja so habe ich auch schon versucht. Ohne Erfolg
Content aside
-
2
„Gefällt mir“ Klicks
- vor 5 JahrenZuletzt aktiv
- 36Antworten
- 14897Ansichten
-
1
Folge bereits