0

Mit "Case" ein einfaches Auswahlfeld ändern

Liebe Community, 

ich befinde mich in einer Tabelle "X", hier existiert eine dynamische Auswahl. Die dynamische Auswahl zieht sozusagen die Texte in Tabelle X. (Transfer 1)

    switch number('Mobilität') do
            case text(myID.'Transfer 1') = "Selbstständig":
                1
            case text(myID.'Transfer 1') = "Unter Anleitung":
                2
            case text(myID.'Transfer 1') = "Überwiegend selbstständig":
                3
            case text(myID.'Transfer 1') = "Überwiegend unselbstständig":
                4
            case text(myID.'Transfer 1') = "Unselbstständig":
                5
            default:
                null
            end

Es soll in Tabelle Y ein Datensatz erstellt werden, dort existiert unter anderem das einfache Auswahlfeld "Mobilität". Einfach formuliert, wenn ich in Tabelle X "Selbstständig" auswähle und der Text somit in "Transfer 1" übertragen wird, soll er in der anderen Tabelle Auswahl 1 wählen, was dort ebenfalls für "Selbstständig" steht. Was habe ich bei meinem Code falsch gemacht, es funktioniert nämlich leider nicht. 

(Es war leider nicht gewünscht, dass man sich auch in Tabelle Y auf die gleichen Werte wie in X bezieht. Man muss demnach sozusagen aus dem Text der dyn. Auswahl das Auswahlfeld bestimmen) 

Ich freue mich auf Eure Hinweise. :) 

9 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Felix, die eigentliche Aufgabenstellung habe ich so auf die Schnelle nicht verstanden, aber deine switch-Konstruktion ergibt für mich so keinen Sinn. In der ersten Zeile gibst du beim "switch" number('Mobilität') als auszuwertendes Feld an, fragst im "case" dann aber einen ganz anderen Wert ab (text(myID.'Transfer 1')). Das heißt, der Wert von number('Mobilität') wird gar nicht ausgewertet.

    Die "case"-Abfragen beziehen sich immer auf den Wert des Feldes (oder der Variable), das im "switch" adressiert wurde. Wenn das Auswahlfeld 'Mobilität' bspw. die Optionen A (1), B (2) und C (3) hat, dann kann man im "case" auch nur auf "A", "B" oder "C" bzw. 1, 2 oder 3 abfragen.

    Will man hingegen den Wert aus text(myID.'Transfer 1') abfragen, sähe das für sich genommen so aus:

    switch text(myID.'Transfer 1') do
       case "Selbstständig": 1
       case "Unter Anleitung": 2
       case "Überwiegend selbstständig": 3
       case "Überwiegend unselbstständig": 4
       case "Unselbstständig": 5
       default: null
    end

    "switch ... case" ist also ein Hilfskonstrukt, mit dem sich ein Feld/eine Variable effizient auf unterschiedliche vorgegebene Werte abfragen lässt, ohne komplizierte "if ... then ... else"-Verschachtelungen aufbauen zu müssen. Wobei sich die verschiedenen Abfrage- bzw. Verzweigungs-Möglichkeiten bei Bedarf auch kombinieren lassen, um komplexere Abfragen zu formulieren.

    Siehe auch Doku:
    https://docs.ninox.com/de/skripten/einfuehrung-in-ninox-skript/verzweigung-festlegen/mehrfachverzweigung-festlegen

    • Felix.5
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Axel, vielen lieben Dank für Deine Antwort. Ich kopiere einfach mal den vollständigen Part und gehe etwas mehr ins Detail, eine Sache ist mir nämlich noch nicht ganz klar. 

        if number(myID.Personenanzahl) = 1 then
            let crePatient := (create Patienten);
            crePatient.(
                Anrede := myID.'Anrede 1';
                Titel := myID.'Titel 1';
                Vorname := myID.'Vorname 1';
                Nachname := myID.'Nachname 1';
                Patientenakte := creAkte;
                switch number('Mobilität') do
                case text(myID.'Transfer 1') = "Selbstständig":
                    1
                case text(myID.'Transfer 1') = "Unter Anleitung":
                    2
                case text(myID.'Transfer 1') = "Überwiegend selbstständig":
                    3
                case text(myID.'Transfer 1') = "Überwiegend unselbstständig":
                    4
                case text(myID.'Transfer 1') = "Unselbstständig":
                    5
                default:
                    null
                end
            )
    

    Es gibt die Tabelle "Vertrieb", hier greift man auf die dyn. Auswahlfelder zu, wodurch sich ein Textfeld generiert z.B. 'Transfer 1' = "Selbstständig".

    Der Code oben befindet sich in einem Button. Klicke ich den Button wird ein "Patient" erstellt. In diesem Patienten liegt ein einfaches Auswahlfeld namens 'Mobilität'. Kurz gesagt geht es um eine Art autofill einiger Felder, welche man bereits kennt. 

    Um bei dem Beispiel zu bleiben, "Selbstständig" in Vertrieb soll im Patienten für 'Mobilität' = 1 sorgen. 

    (1 = "Selbstständig) 

    Irgendwo müsste man die Auswahl 'Mobilität' einbauen oder? 

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

       

      Ich bin mir immer noch nicht ganz sicher, ob ich's richtig verstanden habe, aber wenn 'Mobilität' ein Auswahlfeld im neu angelegten Patienten-Datensatz ist, dann würde ich es mal so versuchen:

      if number(myID.Personenanzahl) = 1 then
         let crePatient := (create Patienten);
         crePatient.(
            Anrede := myID.'Anrede 1';
            [...]
            'Mobilität' := switch myID.'Transfer 1' do
               case "Selbstständig": 1
               case "Unter Anleitung": 2
               case "Überwiegend selbstständig": 3
               case "Überwiegend unselbstständig": 4
               case "Unselbstständig": 5
               default: null
            end
         )
      
    • Felix.5
    • vor 1 Jahr
    • Gemeldet - anzeigen

     hat leider nicht funktioniert, ich habe auch mal parallel getestet, ob es am Auslesen des dyn. Feldes liegt. Ich habe hier nämlich eine falsche Info gegeben, die dyn. Auswahl erzeugt nämlich kein Text im separaten Textfeld, sondern man liest das dyn. Auswahlfeld selbst aus, der Hinweis nur vorab, sorry! Mit einem normalen Textfeld ("Unselbstständig") hat es jedoch ebenfalls nicht funktioniert. 

    Ich füge mal ein Bild an, um den Prozess zu verdeutlichen. 

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Felix 

      Okay, neuer Versuch:

      if number(myID.Personenanzahl) = 1 then
         let crePatient := (create Patienten);
         crePatient.(
            Anrede := myID.'Anrede 1';
            [...]
            let myMob := record('Preise Pflege', number(myID.'Transfer 1')).trim(text(Auswahl));
            'Mobilität' := switch myMob do
               case "Selbstständig": 1
               case "Unter Anleitung": 2
               case "Überwiegend selbstständig": 3
               case "Überwiegend unselbstständig": 4
               case "Unselbstständig": 5
               default: null
            end
         )
         [...]
      end

      Aber was spricht denn eigentlich dagegen, in der Tabelle Patienten für 'Mobilität' auch ein dynamisches Auswahlfeld zu nehmen, das dann dieselben Einträge hätte wie 'Transfer 1'? Die Zuweisung wäre dann auch einfacher:

      'Mobilität' := myID.number('Transfer 1')

      PS: Die Strings müssen übrigens exakt übereinstimmen. Auch deshalb ist die Vorgehensweise nicht unproblematisch. Wenn ein Eintrag in 'Transfer 1' in der Quelltabelle mal geändert wird, funktioniert die Abfrage nicht mehr. Mit upper() bzw. lower() könnte man zumindest die Groß-/Kleinschreibung vereinheitlichen, aber es bleibt eine unsichere Angelegenheit.

    • Felix.5
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Es kam leider die folgende Meldung, ich habe ein bisschen herumgespielt, konnte es jedoch nicht beheben. 

    Bezüglich Deines Vorschlags bin ich absolut bei Dir, ich wollte diese Änderung an jeder notwendigen Stelle vornehmen, um die Grundstruktur sauberer zu gestalten. War leider nicht erwünscht. 

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Vielleicht liegt es an der fehlenden Klammer vor dem Punkt:

      let myMob := record('Preise Pflege', number(myID.'Transfer 1')).trim(text(Auswahl));
    • Ninox-Professional
    • planoxpro
    • vor 1 Jahr
    • Gemeldet - anzeigen
     said:
    War leider nicht erwünscht. 

    Die Einträge aus einem dynamischen Auswahlfeld abfragen und in ein statisches Auswahlfeld übertragen zu wollen, ist m. E kontraproduktiv. Dynamische Auswahlfelder nimmt man ja gerade, wenn man die Auswahl mehrfach benötigt und/oder wenn man flexibel bleiben und sich die Möglichkeit offen halten will, die Auswahl-Einträge mal ändern bzw. erweitern zu können. In einem solchen Fall müsste man aber immer auch die Abfragen und die Einträge des statischen Auswahlfeldes ändern, was einen enormen Aufwand bedeuten und eine unnötige Fehlerquelle darstellen würde. Und das ist doch mit Sicherheit noch weniger erwünscht.

      • Felix.5
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Ich stimme Dir zu 100% zu, es war nur leider nicht meine Entscheidung. Es lag wirklich an der Klammer, nun funktioniert es. Herzlichen Dank!!! :)