0

Wie Bundesland automatisch aus PLZ generieren

Moin,

wir legen für unsere Kund*innen Profilseiten bei Ninox an die unter anderem so aussehen:

 Wir haben in unserem Kontaktformular jedoch nur die Frage nach der PLZ und nicht nach dem Bundesland, weshalb dieses Feld in 99% der Fällen nicht ausgefüllt ist.
PLZ ist in ca 50% der Profile befüllt.

 

Wie kann ich jetzt für alle Kund*innen die eine PLZ eingetragen haben automatisch das Bundesland ergänzen lassen?
Mir wurde bereits vom Ninox Team zugesichert, dass das geht, und dass ich am besten hier im Forum nachfrage wie am besten.

 

Vielen Dank im Vorraus

Beste Grüße
Lucas

6 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 3 Tagen
    • Gemeldet - anzeigen

    Hallo Lucas, ich habe dir mal eine CSV-Tabelle mit PLZ-Bereichen und zugeordneten Bundesländern angehängt,  die du komplett in deine Datenbank importieren und dort umbenennen kannst (zumindest das ".csv" entfernen). Mit einem Änderungstrigger im Feld PLZ lässt sich dann automatisch das Bundesland (BL) zuweisen:

    BL := if PLZ then
       let myPLZ := PLZ;
       first(select 'PLZ-Bereiche' where VonPLZ <= myPLZ and BisPLZ >= myPLZ).Bundesland
    else
       null
    end
    
    
    • Ninox-Professional
    • planoxpro
    • vor 3 Tagen
    • Gemeldet - anzeigen

    Ach so, um die bereits vorhandenen Datensätze zuzuordnen, die eine PLZ, aber noch kein Bundesland enthalten, kannst du einfach irgendwo einen Button mit bspw. folgendem Code erstellen:

    for i in select Kunden where not Bundesland do
        i.(Bundesland := if i.PLZ then
                first(select 'PLZ-Bereiche' where VonPLZ <= i.PLZ and BisPLZ >= i.PLZ).Bundesland
            else
                null
            end)
    end
    • john_eans
    • vor 3 Tagen
    • Gemeldet - anzeigen

    Ich hab vor einiger Zeit mal folgenden Code bei mir eingebaut. Sollte das tun, was du brauchst:

    let response := http("GET", "https://openplzapi.org/de/Localities?postalCode=" + PLZ);
    if response.error then    "!!ERROR!!"
    else    let data := parseJSON(text(response.result));
    text(item(data, 0).federalState.name)
    end

    ...vielleicht kann da noch optimiert werden, aber grundsätzlich tut es das was es soll :-)

      • john_eans
      • vor 21 Stunden
      • Gemeldet - anzeigen

      Ich pack das Vorgehen mal hier drunter:

      Du hast bei dir in der Vorlage bereits das Feld "PLZ", "Ort" und "Bundesland".

      Wie bei  öffnest du die Optionen beim Textfeld PLZ und fügst bei "Trigger nach Änderung" folgenden Code ein:

      let response := http("GET", "https://openplzapi.org/de/Localities?postalCode=" + PLZ);
      Bundesland := if response.error then
              "!!ERROR!!"
          else
              let data := parseJSON(text(response.result));
              text(item(data, 0).federalState.name)
          end;
      Ort := if response.error then
              "!!ERROR!!"
          else
              let data := parseJSON(text(response.result));
              text(item(data, 0).name)
          end
      

      Was macht der Code?
      Eigentlich das selbe wie auch aus dem anderen Beispiel.
      Vereinfacht: Er zieht sich aus eine Datenbank die entsprechenden Werte.
      Kompliziert: Er sendet eine Anfrage an openplzapi.org und bittet um Mitteilung, welche Daten für die eingegebene Postleitzahl hinterlegt sind. Diese Rückmeldung wird in der Variablen "response" gespeichert. (erste Zeile)
      Wenn keine Werte gefunden werden, dann wird "!!ERROR!!" ausgegeben. (Zeile 2+3 sowie 8+9).
      Wenn Werte gefunden wurden, dann werden in deine Textfelder "Bundesland" und "Ort" die Ergebnisse eingetragen. Dazu wird die Rückmeldung entsprechend aufbereitet und ausgewertet.

      Wichtig dabei: theoretisch kann es für eine PLZ mehrere Werte geben. Es wird aber immer nur der erste Wert eingetragen.
       

    • lucas_kruell
    • vor 3 Tagen
    • Gemeldet - anzeigen

    mega cool!
    Danke schonmal für die beiden Antworten.

    könntet ihr ein bisschen vorher ansetzen und erklären wie ich das dann implementiere?
    Ich mache sowas zum 1. mal.

    Ein Link zum nachlesen würde auch funktionieren.

      • Ninox-Professional
      • planoxpro
      • vor 3 Tagen
      • Gemeldet - anzeigen

       

      Wenn du die CSV-Datei auf deinen Rechner heruntergeladen hast, kannst du in deine Tabelle importieren, indem du auf die Startseite deiner Datenbank mit der Tabellenübersicht gehst und auf "Datei importieren" klickst, dann auf "CSV-Datei importieren". Nun erscheint ein Dateiauswahl-Dialog, mit dem du die zu importierende Datei auf deinem Computer auswählen kannst. Mit "Öffnen" bestätigen.

       

      Den folgenden Dialog zu "Datenquelle" und "Import-Einstellungen" solltest du ohne Änderungen mit "Weiter" bestätigen können.

      Als nächstes erscheint ein Dialog, der links die zu importierenden Felder und rechts die entsprechenden Feldtypen auflistet. Oben unter "Tabellenname" kannst du das ".csv" entfernen. Falls rechts die Feldtypen zu "VonPLZ" und "BisPLZ" auf "Zahl" stehen, dann solltest du sie unbedingt auf "Text" ändern.

       

      Nach Klick auf "Weiter" erhälst du eine tabellarische Übersicht der Daten. Wenn alles okay ist, kannst du die Date mit "Importieren" als eigenständige Tabelle in deine Datenbank übernehmen.

      Als nächstes öffnest du deine Kunden-Tabelle, aktivierst ggf. den Admin-Modus und rufst die Optionen zum Textfeld(!) PLZ auf.

       

      Dort gibst du unter "Trigger nach Änderung" folgenden Code ein:

      Bundesland := if PLZ then
         let myPLZ := PLZ;
         first(select 'PLZ-Bereiche' where VonPLZ <= myPLZ and BisPLZ >= myPLZ).Bundesland
      else
         null
      end

      Wenn du nun eine beliebige PLZ eingibst, sollte im gleichnamigen Feld automatisch das Bundesland eingetragen werden.