0

Komplexere Abfrage mit Dialog und Result umsetzten?

Liebe Ninox Gemeinde!

Ich hätte 3 zu prüfende Sachverhalte in einem Formular (z.B. Ja/Nein Felder) -> mySACHVERHALT

Möchte eine Bedienschaltfläche so einrichten, dass sie alle Sachverhalte abfragt und gegebenenfalls dialoge ausgibt mit den Möglichkeiten WEITER und ZURÜCK.

Wenn nun mySACHVERHALT 1 true ist, soll Ninox mySACHVERHALT2 prüfen ohne einen Dialog auszugeben, wenn true dann mySACHVERHALT3.

Falls mySACHVERHALT(1,2,3) false ist, soll sich ein DIALOG öffenen mit einer Auswahl von WEITER oder ZURÜCK... 

wenn also mySACHVERHALT1 false ist und ich mit ZURÜCK antworte, soll Ninox die weiteren Sachverhalte NICHT prüfen und zurück ins Formular wechseln.

Wenn aber mySACHVERHALT1 true ist, dann soll Ninox mySACHVERHALT2 prüfen und bei false ebenfalls die Auswahl WEITER oder ZURÜCK abfragen. Das gleiche gilt dann für mySACHVERHALT3

Meine Schwierigkeit ist hier, dass ich mit den if und then immer sehr durcheinander komme und leider bei komplexeren Skripten sehr schnell nicht mehr durchblicke.

Wäre jemand so nett und würde mir bitte etwas helfen. Danke R

20 Antworten

null
    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    etwa so:

    ---

    function getS3(myS3 : number) do
    if myS3 != 1 then
    if dialog("Text", "Sachverhalt 3 ist negativ", ["ZURÜCK", "WEITER"]) = "WEITER" then
    alert("Prüfung Abgeschlossen!
    Prüfergebnisse:
    Sachverhalt 1 - " + if mySACHVERHALT1 then "Positiv" else "Negativ" end + "
    Sachverhalt 2 - " + if mySACHVERHALT2 then "Positiv" else "Negativ" end + "
    Sachverhalt 3 - " + if mySACHVERHALT3 then "Positiv" else "Negativ" end)
    end
    else
    alert("Prüfung Abgeschlossen!
    Prüfergebnisse:
    Sachverhalt 1 - " + if mySACHVERHALT1 then "Positiv" else "Negativ" end + "
    Sachverhalt 2 - " + if mySACHVERHALT2 then "Positiv" else "Negativ" end + "
    Sachverhalt 3 - " + if mySACHVERHALT3 then "Positiv" else "Negativ" end)
    end
    end;
    function getS2(myS2 : number) do
    if myS2 != 1 then
    if dialog("Prüfung Sachverhalt 2", "Sachverhalt 2 ist negativ", ["ZURÜCK", "WEITER"]) = "WEITER" then
    getS3(number(mySACHVERHALT3))
    end
    else
    getS3(number(mySACHVERHALT3))
    end
    end;
    function getS1(myS3 : number) do
    if myS3 != 1 then
    if dialog("Prüfung Sachverhalt 1", "Sachverhalt 1 ist negativ", ["ZURÜCK", "WEITER"]) = "WEITER" then
    getS2(number(mySACHVERHALT2))
    end
    else
    getS2(number(mySACHVERHALT2))
    end
    end;
    getS1(number(mySACHVERHALT1))

    ---

    Leo

    • Morris_Hanson
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Leo! Whow. Wiedermal perfekte Formel. Sie funktioniert genau so wie ich es brauche!!! DDDAAANNNKKKEEE!!!! Kannst du so lieb sein und diese Formel vielleicht in 2 Sätzen erörtern, damit ich nachvollziehen kann, was da genau passiert? DANKE

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ok ich versuch's...

    da die Prüfungen sich mehrmals wiederholen müssen, ist es sinnvoll, einzelne Prüfungen in funktionen aufzuteilen.

    1. die erste Funktion getS3 prüft den letzten Sachverhalt. Wenn Sachverhalt 3 false ist, dann ersheint der Dialog und wenn auf WEITER geklick wird, erscheint eine Meldung mit Prüfergebnissen. Wenn Sachverhalt true ist, erscheint diese Meldung  direkt ohe dialog. In der Funktion habe ich Parameter myS3 als nummer angegeben. Eigentlich kann man direkt boolean statt number angeben, dann braucht man die Werte nicht mit number(Sachverhalt) umzuwandeln.

    2. Die zwete Funktion getS2 prüft den zweiten Sachverhalt und übergibt die Ergebnisse an Funktion getS3.

    3. Und die dritte Funktion getS1 prüft den ersten Sachverhalt und übergibt die Ergebnisse an Funktion getS2.

    Jetzt starte ich die erste Funktion getS1(number(mySACHVERHALT1)) und die Prüfung beginnt....3.2.1.

    Leo

    • Morris_Hanson
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Aha. Sehr interessant. Danke! Kannst du bitte noch einen Step zurück gehen und mit nur die Funktion "function" und "getSx" erklären mit den parametern. ich finde dazu im Ninox Manual leider unzureichende Infos. Wie würde das mit BOOLEAN ausschaun? DANKE LEO!

    • Morris_Hanson
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ich habe mir deine Formel nochmal angesehen... es steht dort "function getS1(myS3 : number ) do....müsste bei deiner Formel (die funktioniert.. ) nicht bei function getS1 stehen 

    function getS1(myS1 : number) do

    if myS1 != 1 then

    if dialog("Prüfung Sachverhalt 1", "Sachverhalt 1 ist negativ", ["ZURÜCK", "WEITER"]) = "WEITER" then

    getS2(number(mySACHVERHALT2))

    end

    else

    getS2(number(mySACHVERHALT2))

    end

    end;

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Mit boolean wird sich der Code nicht viel ändern:

    ---

    function getS3(myS3 : boolean) do
    if not myS3 then
    if dialog("Text", "Sachverhalt 3 ist negativ", ["ZURÜCK", "WEITER"]) = "WEITER" then
    alert("Prüfung Abgeschlossen!
    Prüfergebnisse:
    Sachverhalt 1 - " + if mySACHVERHALT1 then "Positiv" else "Negativ" end + "
    Sachverhalt 2 - " + if mySACHVERHALT2 then "Positiv" else "Negativ" end + "
    Sachverhalt 3 - " + if mySACHVERHALT3 then "Positiv" else "Negativ" end)
    end
    else
    alert("Prüfung Abgeschlossen!
    Prüfergebnisse:
    Sachverhalt 1 - " + if mySACHVERHALT1 then "Positiv" else "Negativ" end + "
    Sachverhalt 2 - " + if mySACHVERHALT2 then "Positiv" else "Negativ" end + "
    Sachverhalt 3 - " + if mySACHVERHALT3 then "Positiv" else "Negativ" end)
    end
    end;
    function getS2(myS2 : boolean) do
    if not myS2 then
    if dialog("Prüfung Sachverhalt 2", "Sachverhalt 2 ist negativ", ["ZURÜCK", "WEITER"]) = "WEITER" then
    getS3(mySACHVERHALT3)
    end
    else
    getS3(mySACHVERHALT3)
    end
    end;
    function getS1(myS1 : boolean) do
    if not myS1 then
    if dialog("Prüfung Sachverhalt 1", "Sachverhalt 1 ist negativ", ["ZURÜCK", "WEITER"]) = "WEITER" then
    getS2(mySACHVERHALT2)
    end
    else
    getS2(mySACHVERHALT2)
    end
    end;
    getS1(mySACHVERHALT1)

    ---

    Die Funktionen sind Progammabschnitte, welche sich im Programmcode mehrmals wiederholen lassen. 

    Hier ist eine wunderschöne Beschreibung von Günther (ich hoffe, es ist ok, dass ich diese hier veröffentliche)

    https://www.dropbox.com/s/63x15nfoux8i5ay/Funktionen%20in%20Rel.%202.5.pdf?dl=0

     

    Leo

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ja stimmt, mit myS1 sieht es besser aus, wobei es hier keine Rolle spielt. Der Code wird nur innerhalb der Funktion geprüft.

    Leo

    • Morris_Hanson
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Habe leider noch ein kleines Problem mit einem "Sachverhalt, der innerhalb von Sachverhalt 2 abgefragt wird, sozusagen Sachverhalt 2_1 und 2_2...

    eine Verschachtelung sozusagen. wenn der Betrag erhalten wurde, soll er Sachverhalt 2_1 und 2_2 prüfen, wenn der Betrag noch nicht erhalten wurde, soll er diese Prüfungen auslassen, da es gar keinen Sinn ergibt, den Zustand der Bonnummer der Bezahlung zu prüfen, da der Betrag ja nicht als erhalten markiert wurde.

    meine Formel schaut folgend aus, verschachtelt sich aber nicht so wie ich es brauche, sondern greift immer auch Sachverhalt 2_1 und 2_2 ab, auch wenn 2 false ist.

     

    let myBON := 'Bon Nummer';
    let myBONCHECK := cnt((select Dokumentation)['Bon Nummer' = myBON]);
    let mySACHVERHALT1 := 'ins Protokoll übertragen?';
    let mySACHVERHALT2 := if 'Betrag erhalten?' = 2 then false else true end;
    let mySACHVERHALT2_BON_LEER := if myBON = null then false end;
    let mySACHVERHALT2_BON_MULTI := if myBONCHECK > 1 and Datum = today() and myBON != null then false end;
    let mySACHVERHALT3 := if 'nächster Termin ➟' = null then false else true end;

    function getS3(myS3 : number) do
    if myS3 != 1 then
    if dialog("FOLGETERMIN", "Es wurde noch kein Folgetermin mit dem Patienten vereinbart. Wollen sie trotzdem schließen?", ["UPS, VERGESSEN!", "OHNE FOLGETERMIN SCHLIEßEN!"]) = "OHNE FOLGETERMIN SCHLIEßEN!" then
    closeAllRecords()
    end
    else
    closeAllRecords()
    end
    end;

    function getS2(myS2 : number) do
    if myS2 != 1 then
    if dialog("ABRECHNUNG", "Die Behandlung wurde noch nicht bezahlt. Trotzdem schließen?", ["UPS, VERGESSEN!", "OK, TROTZDEM SCHLIEßEN!"]) = "OK, TROTZDEM SCHLIEßEN!" then
    getS3(number(mySACHVERHALT3))
    end
    else

    function getS2_LEER(myS2_2 : number) do
    if myS2_2 != 1 then
    if dialog("BON NUMMER", "Es wurde noch keine Bonnummer eingetragen. Wollen sie trotzdem schließen?", ["UPS, VERGESSEN!", "OHNE BONNUMMER SCHLIEßEN!"]) = "OHNE BONNUMMER SCHLIEßEN!" then
    getS3(number(mySACHVERHALT3))
    end
    else
    getS3(number(mySACHVERHALT3))
    end
    end;

    function getS2_BON(myS2_1 : number) do
    if myS2_1 != 1 then
    if dialog("BON NUMMER", "Anscheinend wurde eine Bonnummer doppelt vergeben?. Trotzdem schließen?", ["UPS, ZURÜCK!", "EGAL, TROTZDEM SCHLIEßEN!"]) = "EGAL, TROTZDEM SCHLIEßEN!" then
    getS2_LEER(number(mySACHVERHALT2_BON_LEER))
    end
    else
    getS2_LEER(number(mySACHVERHALT2_BON_LEER))
    end
    end;
    getS2_BON(number(mySACHVERHALT2_BON_MULTI))
    end
    end;

    function getS1(myS1 : number) do
    if myS1 != 1 then
    if dialog("BEHANDLUNGSDOKUMENTATION", "Die Dokumentation wurde noch nicht in das Protokoll übertragen. Haben Sie diese Behandlung bereits fertig dokumentiert?", ["JA, DOKUMENTATION ERLEDIGT!", "ICH MACHE DAS SPÄTER!"]) = "JA, DOKUMENTATION ERLEDIGT!" then
    let XXX := Dokumappe.Patient;
    let NRR := raw(text('Therapie aktuell'));
    let myNotes := XXX.raw(Protokoll);
    let TTT := time(round(number(now()) / (60000 * 15)) * (60000 * 15));
    let ZST := format(Termin, "ddd, DD. MMMM YYYY") + " - " + TTT;
    let WWB := Dokumentation;
    let OFF := 'Befund -> Wiederbefund';
    let VVV := text('Veränderung');
    let SSS := Dokumentation;
    let VERB := if 'Veränderung' != null then
    "<i><p><b>(Veränderung): " + text('Veränderung') + "</i></b></p>"
    else
    ""
    end;
    let NPP := if 'neues Problem deponieren' != null then
    "<i><p><b>(weiteres Patientenproblem): </i></b>" + 'neues Problem deponieren' + "</p>"
    else
    ""
    end;
    let MII := if 'Mechanism of Injury (MI)' != null then
    if 'Mechanism of Injury (MI)' != Dokumappe.'Mechanism of Injury (MI)' then
    "<i><p><b>(Mechanism of Injury (MI)): </i></b>" + 'Mechanism of Injury (MI)' + "</p>"
    else
    ""
    end
    else
    ""
    end;
    let ANN := if Krankengeschichte = null then
    ""
    else
    if Krankengeschichte != Dokumappe.Krankengeschichte then
    "<i><p><b>(Anamnese): </i></b>" + Krankengeschichte + "</p>"
    else
    ""
    end
    end;
    let OFF := if 'Befund -> Wiederbefund' = null then
    ""
    else
    if 'Befund -> Wiederbefund' != Dokumappe.'Objective Findings (OF)' then
    "<i><p><b>(Befund): </i></b>" + 'Befund -> Wiederbefund' + "</p>"
    else
    ""
    end
    end;
    let BEH := if Dokumentation != null then
    "<i><b>(Dokumentation): </i>" + Dokumentation + "</b>"
    else
    ""
    end;
    let PRO := if 'Procedere/Empfehlung' != null then
    "<i><p><b>(Procedere/Empfehlung): </i></b>" + 'Procedere/Empfehlung' + "</p>"
    else
    ""
    end;
    XXX.(Protokoll := raw(html("<H3><em>" + ZST + " (" + NRR + "):
    " + "</H3></em>" + VERB + NPP + ANN + MII + OFF + BEH + PRO + "<br>")) + myNotes);
    'ins Protokoll übertragen?' := true;
    getS2(number(mySACHVERHALT2))
    else
    getS2(number(mySACHVERHALT2))
    end
    else
    getS2(number(mySACHVERHALT2))
    end
    end;

    getS1(number(mySACHVERHALT1))

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Das ist ohne Datenmodel echt viel. Als erste die Zeilen 5 und 6

    let mySACHVERHALT2_BON_LEER := if myBON = null then false end;
    let mySACHVERHALT2_BON_MULTI := if myBONCHECK > 1 and Datum = today() and myBON != null then false end;

    ---

    Die Variablen können entweder false oder leer (null) sein. Es fehlt hier else true:

    let mySACHVERHALT2_BON_LEER := if myBON = null then false else true end;
    let mySACHVERHALT2_BON_MULTI := if myBONCHECK > 1 and Datum = today() and myBON != null then false else true end;

    Dann würde ich alle Funktionen am Anfang schreiben und nicht mitten in Code.

     

    Leo

    • Morris_Hanson
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Die Variablen können entweder false oder leer (null) sein. Es fehlt hier else true

    Ja das wars.. DANKE!

    • Morris_Hanson
    • vor 5 Jahren
    • Gemeldet - anzeigen

    HIER DIE FERTIGE FORMEL.. FANKE

     

    "-----------------------------------------------------------------------------------------------";
    "--------------------------------HIER WERDEN DIE KONSTANTEN BEFÜLLT-----------------------------";
    "-----------------------------------------------------------------------------------------------";
    let myBEZ := 'Betrag erhalten?';
    let myTERM := 'nächster Termin ➟';
    let myBON := 'Bon Nummer';
    let myBONCHECK := cnt((select Dokumentation)['Bon Nummer' = myBON and 'Bon Nummer' != null]);
    let my1_PROTOKOLL := 'ins Protokoll übertragen?';
    let my2_BEZAHLT := if myBEZ = 2 then false else true end;
    let my2_1_BON_LEER := if myBON = null then false else true end;
    let my2_2_BON_MULTI := if myBONCHECK > 1 then false else true end;
    let my3_TERMIN := if myTERM = null then false else true end;
    "-----------------------------------------------------------------------------------------------";
    "--------------------------AB HIER WERDEN DIE EINZELNEN FUNKTIONEN DEFINIERT--------------------";
    "-----------------------------------------------------------------------------------------------";
    "-----------------------------------------------------------------------------------------------";
    "----------------DIE FUNKTION GETS3 ÜBERPFÜFT OB EIN FOLGETERMIN EINGETRAGEN WURDE--------------";
    "-----------------------------------------------------------------------------------------------";
    function getS3(myS3 : number) do
    if myS3 != 1 then
    if dialog("FOLGETERMIN", "Es wurde noch kein FOLGETERMIN mit dem Patienten vereinbart. Wollen sie trotzdem schließen?", ["UPS, VERGESSEN!", "KEIN FOLGETERMIN!"]) = "KEIN FOLGETERMIN!" then
    closeAllRecords()
    end
    else
    closeAllRecords()
    end
    end;
    "-----------------------------------------------------------------------------------------------";
    "-------DIE FUNKTION GETS2_MULTI ÜBERPRÜFT OB DIE BONNUMMER DOPPELT VERGEBEN WURDE--------------";
    "-----------------------------------------------------------------------------------------------";
    function getS2_MULTI(myS2_2 : number) do
    if myS2_2 != 1 then
    if dialog("BONNUMMER", "Anscheinend wurde eine BONNUMMER doppelt vergeben?. Trotzdem schließen?", ["NOCHMALS EINTRAGEN!", "OK, TROTZDEM SCHLIEßEN!"]) = "OK, TROTZDEM SCHLIEßEN!" then
    getS3(number(my3_TERMIN))
    else
    'Bon Nummer' := null
    end
    else
    getS3(number(my3_TERMIN))
    end
    end;
    "-----------------------------------------------------------------------------------------------";
    "-----DIE FUNKTION GETS2_LEER ÜBERPRÜFT OB DIE EINTRAGUNG DER BONNUMMER VORGENOMMEN WURDE ------";
    "-----------------------------------------------------------------------------------------------";
    function getS2_LEER(myS2_1 : number) do
    if myS2_1 != 1 then
    if dialog("BONNUMMER", "Es wurde noch keine BONNUMMER eingetragen. Wollen sie trotzdem schließen?", ["EINTRAGEN!", "OK, TROTZDEM SCHLIEßEN!"]) = "OK, TROTZDEM SCHLIEßEN!" then
    getS2_MULTI(number(my2_2_BON_MULTI))
    end
    else
    getS2_MULTI(number(my2_2_BON_MULTI))
    end
    end;

    "-----------------------------------------------------------------------------------------------";
    "-----DIE FUNKTION GETS2 ÜBERPRÜFT OB DIE BEHANDLUNG ALS BEZAHLT MARKIERT WURDE-----------------";
    "-----------------------------------------------------------------------------------------------";

     

    function getS2(myS2 : number) do
    if myS2 != 1 then
    if dialog("ABRECHNUNG", "Die Behandlung wurde noch nicht bezahlt. Trotzdem schließen?", ["UPS, VERGESSEN!", "OK, TROTZDEM SCHLIEßEN!"]) = "OK, TROTZDEM SCHLIEßEN!" then
    getS3(number(my3_TERMIN))
    end
    else
    getS2_LEER(number(my2_1_BON_LEER))
    end
    end;
    "-----------------------------------------------------------------------------------------------";
    "----DIE FUNKTION GETS1 ÜBERPRÜFT OB DIE DOKUMENTATION IN DAS PROTOKOLL ÜBERTRAGEN WURDE--------";
    "-----------------------------------------------------------------------------------------------";
    function getS1(myS1 : number) do
    if myS1 != 1 then
    if dialog("BEHANDLUNGSDOKUMENTATION", "Die Dokumentation wurde noch nicht in das Protokoll übertragen. Haben Sie diese Behandlung bereits fertig dokumentiert?", ["JA, DOKUMENTATION ERLEDIGT!", "ICH MACHE DAS SPÄTER!"]) = "JA, DOKUMENTATION ERLEDIGT!" then
    let XXX := Dokumappe.Patient;
    let NRR := raw(text('Therapie aktuell'));
    let myNotes := XXX.raw(Protokoll);
    let TTT := time(round(number(now()) / (60000 * 15)) * (60000 * 15));
    let ZST := format(Termin, "ddd, DD. MMMM YYYY") + " - " + TTT;
    let WWB := Dokumentation;
    let OFF := 'Befund -> Wiederbefund';
    let VVV := text('Veränderung');
    let SSS := Dokumentation;
    let VERB := if 'Veränderung' != null then
    "<i><p><b>(Veränderung): " + text('Veränderung') + "</i></b></p>"
    else
    ""
    end;
    let NPP := if 'neues Problem deponieren' != null then
    "<i><p><b>(weiteres Patientenproblem): </i></b>" + 'neues Problem deponieren' + "</p>"
    else
    ""
    end;
    let MII := if 'Mechanism of Injury (MI)' != null then
    if 'Mechanism of Injury (MI)' != Dokumappe.'Mechanism of Injury (MI)' then
    "<i><p><b>(Mechanism of Injury (MI)): </i></b>" + 'Mechanism of Injury (MI)' + "</p>"
    else
    ""
    end
    else
    ""
    end;
    let ANN := if Krankengeschichte = null then
    ""
    else
    if Krankengeschichte != Dokumappe.Krankengeschichte then
    "<i><p><b>(Anamnese): </i></b>" + Krankengeschichte + "</p>"
    else
    ""
    end
    end;
    let OFF := if 'Befund -> Wiederbefund' = null then
    ""
    else
    if 'Befund -> Wiederbefund' != Dokumappe.'Objective Findings (OF)' then
    "<i><p><b>(Befund): </i></b>" + 'Befund -> Wiederbefund' + "</p>"
    else
    ""
    end
    end;
    let BEH := if Dokumentation != null then
    "<i><b>(Dokumentation): </i>" + Dokumentation + "</b>"
    else
    ""
    end;
    let PRO := if 'Procedere/Empfehlung' != null then
    "<i><p><b>(Procedere/Empfehlung): </i></b>" + 'Procedere/Empfehlung' + "</p>"
    else
    ""
    end;
    XXX.(Protokoll := raw(html("<H3><em>" + ZST + " (" + NRR + "):
    " + "</H3></em>" + VERB + NPP + ANN + MII + OFF + BEH + PRO + "<br>")) + myNotes);
    'ins Protokoll übertragen?' := true;
    getS2(number(my2_BEZAHLT))
    else
    getS2(number(my2_BEZAHLT))
    end
    else
    getS2(number(my2_BEZAHLT))
    end
    end;
    "-----------------------------------------------------------------------------------------------";
    "-------HIER STARTET DIE FUNKTIONSKETTE MIT GETS1----------------";
    "-----------------------------------------------------------------------------------------------";
    getS1(number(my1_PROTOKOLL))

    • Morris_Hanson
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ups sollte danke heißen, kann man hier keine Posts bearbeiten?

    • Morris_Hanson
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Jetzt hätte ich hier noch eine Frage: Wenn ich während die Sachverhaltsprüfung durchläuft z.B. den Sachverhalt 2 nach einer bestimmten Auswahl nochmals starten möchte.. ginge das?

    Beispiel: 

    ich prüfe ob ein Feld leer ist, falls ja habe ich die Auswahl "FUNKTION DEAKTIVIEREN", "ABBRECHEN", "WEITER". 

    Wenn ich Abbrechen wähle, öffnet sich ein dialog "Sind sie sicher, dass sie diese Funktion deaktivieren wollen?", "JA", "NEIN"..

    bei NEIN möchte ich gerne nochmals von der Stelle prüfen, wo das leere Feld überprüft wird..

    Mir raucht das HIRN:. DANKE

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Und was sollte passieren, wenn du "FUNKTION DEAKTIVIEREN" wählst ?

    • Morris_Hanson
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hi Leo!

    Ich deaktiviere in einer anderen Tabelle eine Funktion.. (Bonnummern automatisch überprüfen)

    Wenn eine Bonnummer z.B. nicht eingetragen wurde, dann wird in der Abfrage voram überprüft, ob in meinem Profil (Dort sind alle Optionen definiert) diese Funktion aktiviert ist... Fall ja wird also der (z.B.) Sachverhalt 2 überprüft und als negativ ausgegeben. hier brauche ich 3 Möglichkeiten: "FUNKTION DEAKTIVIEREN", "ZURÜCK", "WEITER". 

    Falls "FUNKTION DEAKTIVIEREN" ausgewählt wird, käme die Abfrage "Sind sie sicher, dass sie diese Option deaktivieren wollen?" "JA", "NEIN". Falls Ja gewählt wird, wird in meinem Profil (in einer anderen Tabelle) diese Option auf "NEIN" gesetzt. Somit wird der Sachverhalt 2 in Zukunft nicht mehr geprüft. Außer man aktiviert diese Option wieder in dem Profil.

    Falls ich mich bei der Abfrage "Sind sie Sicher" aber mit NEIN antworte, würde ich gerne den Sachverhalt 2 nochmals prüfen lassen (damit ich nochmals entscheiden kann...)

     

    Danke

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Rene,

    um mehr als zwei zustände abzufragen würde ich switch() Funktion vorschlagen. 

    ---

    switch dialog("Bla","Bla Bla",["FUNKTION DEAKTIVIEREN", "ZURÜCK", "WEITER"] ) do

    case "FUNKTION DEAKTIVIEREN":

    tue das

    case "ZURÜCK":

    tue dies

    case : "WEITER"

    tue jenes

    end

    ---

    Um jetzt noch eine Unterabfrage unterzujubeln kann man eine while() Schleife einbauen.

    let myD:="JA"

    while myD ="JA" do

    switch dialog("Bla","Bla Bla",["FUNKTION DEAKTIVIEREN", "ZURÜCK", "WEITER"] ) do

    case "FUNKTION DEAKTIVIEREN":

    myD:=dialog("Bla","Bla Bla",["JA", "NEIN"] ) ;

    if myD="NEIN" then tue das end

    case "ZURÜCK":

    tue dies;

    myD="NEIN"

    case : "WEITER"

    tue jenes;

    myD="NEIN"

    end

     

    end

    ---

     

    Leo

    • Morris_Hanson
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Lieber Leo! SWITCH ist super! Kannte ich noch gar nicht.. Es  hat super geklappt. DANKE! Bei der Unterschleife steh ich allerdings an. Wäre es möglich mir mal eine kleine Beispiel Datenbank zu erstellen? 

    Danke!

    • Morris_Hanson
    • vor 5 Jahren
    • Gemeldet - anzeigen

    So, hab noch herumprobiert.. schön langsam verstehe ich es.. habe nur ein kleines Problem mit dieser Formel:

     

    let myD := "NO";
    while myD = "NO" do 
    switch dialog("HAUPTFRAGE", "", ["DEAKTIVIEREN", "NEIN"]) do
    case "DEAKTIVIEREN":
    (
    myD := dialog("UNTERFRAGE", "Sind Sie sicher?", ["YES", "NO"]);
    if myD = "YES" then void end
    )
    case "NEIN":
    myD = "YES"
    end
    end

     

    wenn ich auf NEIN klicke, dann komme ich nicht raus?? Alles andere scheint zu funktionieren..

    LG Rene

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Rene,

    kleiner Tippfehler 3. Zeile von Unten (myD := "YES"). Und if myD = "YES" then void end brauchst du eigentlich nicht weil du myD shon im dialog deklarierst.

    ----

    let myD := "NO";
    while myD = "NO" do 
    switch dialog("HAUPTFRAGE", "", ["DEAKTIVIEREN", "NEIN"]) do
    case "DEAKTIVIEREN":
    (myD := dialog("UNTERFRAGE", "Sind Sie sicher?", ["YES", "NO"]))
    case "NEIN":
    (myD := "YES")
    end
    end

     

    ----

    Bin stolz auf dich.

     

    Leo

    • Morris_Hanson
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Juhu. Habe jetzt dieses Konstrukt in meine Funktionen eingebettet und alles läuft wie am Schnürchen! DANKE!

Content aside

  • vor 5 JahrenZuletzt aktiv
  • 20Antworten
  • 5235Ansichten