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
    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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.

    let 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.

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Wir sind wieder im Rennen !!!

    • biuro_technilakpl
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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

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

    Leo, das Rennen hätte dann ich gewonnen... ;-D

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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

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

    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

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

    Tja, und ich bin mal wieder Letzter ...

    • biuro_technilakpl
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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

    • Andreas_Polzer_Geschaft
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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 4 JahrenZuletzt aktiv
  • 36Antworten
  • 14715Ansichten
  • 1 Folge bereits