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
-
Vielleicht ist es nur beim Copy and Paste verloren gegangen, aber m. E. fehlt da ein "end". Ich würde das einfach mal ein wenig entzerren und Schritt für Schritt testen.
l
et Antwort := dialog("Duplizieren WZ", "Wirklich duplizieren?", ["Ja", "Nein"]);
if Antwort = "Ja" then
alert("Datensatz wurde dupliziert.");
else
alert("Datensatz wurde NICHT dupliziert.");
end
Wenn das funktioniert, dann kannst du im if-Bereich wieder deinen Code einsetzen.
-
Hallo Richard,
Und wenn du wie in Handbuch machst:
let myDialog:=("Text","Text",["Ja","Nein"]);
if myDialog:="Ja" then
...
end
---
Eigentlich sollte auch deine Formel gehen, aber manchmal muss man erst als Variable declarieren.
Leo
-
Wir sind wieder im Rennen !!!
-
Hallo Leo. Mit Deinen Vorschlag geht nicht. Hier Fehlt noch Dialog vor der Klammer?
Hallo Copytexter: Dein Vorschlag mit Allert geht, aber so bald ich in if Bereich mein skript reinpacke wirde der Datensatz dupliziert (dauert sehr lange) und Ninox hängt sich auf und mus ausgeschaltet werden.
Hier das Skript:
let Antwort := dialog("Duplizieren WZ", "Wirklich duplizieren?", ["Ja", "Nein"]);
if Antwort = "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
end -
Leo, das Rennen hätte dann ich gewonnen... ;-D
-
Hallo Richard,
stimmt, das habe ich übersehen.
Versuch mal so:
---
let Antwort := dialog("Duplizieren WZ", "Wirklich duplizieren?", ["Ja", "Nein"]);
if Antwort = "Ja" then
do as server
let my:=this;
duplicate (my);
let new:=last (select 'Wydanie zewnętrzne');
new.'Data edycji' := today();
for i in Poz_wz do
duplicate i;
last (select Poz_wz).'Wydanie zewnętrzne':=new;
end
end
end
---
Hoffentlich habe ich nichts übersehen
Leo
-
Okay, dann wissen wir jetzt immerhin schon mal, dass es nicht an der dialog-Funktion lag. Man könnte es vielleicht mal so in dieser Art(!) probieren:
let Antwort := dialog("Duplizieren WZ", "Wirklich duplizieren?", ["Ja", "Nein"]);
if Antwort = "Ja" then
let jez := 'Język';
duplicate(this);
let NeuNr := max((select TABELLE).number(Nr));
NeuNr.('Data edycji' := today());
NeuNr.('Język' := jez);
openRecord(record(TABELLE,number(NeuNr)));
else
alert("Datensatz wurde NICHT dupliziert.");
end
-
Tja, und ich bin mal wieder Letzter ...
-
Hallo Leo
Deine Version funktioniert, aber in der 5 zeile von unten muss duplicate (i); stehen. Ohne klammer geht nicht.
Hallo Copytexter
In Deine Version mekert Ninox in Bezug auf NeuNr. das: Expression does return a record
Ich habe hier ganze Zeit von Duplizieren gesprochen, aber in wirklichkeit habe ich in meinem Skript einen neuen (ähnlichen) Datensatz erzeugt und nur ausgesuchte informationen von den Unsprunglichen Datensatz übernommen. So mit hate auch das automatische hochgezählte Nummervergabe funktioniert. Beim reinen duplizieren funktioniert es nicht mehr.
Vielen Dank für die Unterstützung
Gruß Richard
-
Hallo zusammen, meine Frage zum Dialogfenster wäre, ist es möglich dieses nur anzeigen zu lassen wenn in einer bestimmten Mehrfachauswahl noch nichts ausgewählt wurde.
Möchte im Prinzip, dass ein Button nur funktioniert wenn in besagtem Mehrfach-Auswahlfeld eine Angabe gemacht wurde.
Vielen Dank schon einmal
Grüße
Andi
-
Hallo Andi,
im Grunde solltest du am Anfang fastlegen, wann der Skript ausgeführt wird:
---
if Mehrfachauswahl then
let myD:=dialog(.........end
---
if Mehrfachauswahl bedeuted: Mehrfachauswahl ist nicht leer (mindestens eine Variante ausgewählt)
Leo
Content aside
-
2
„Gefällt mir“ Klicks
- vor 5 JahrenZuletzt aktiv
- 36Antworten
- 14919Ansichten
-
1
Folge bereits