0

Dashboard mit Suchfunktion für Kunden

Hallo, vielleicht kann mir jemand weiterhelfen. 

Ich habe eine kleine Kundendatenbank mit einem vorgeschalteten Dashboard (Tabelle). Auf diesem Dashboard möchte ich nun eine Suchfunktion für einen Kunden eingeben. Das heisst:

Ein Textfeld wo ich den Kundennamen eingeben kann und einem Button, der dann die gespeicherten Kundendaten aufruft.  

Die Tabelle für die Kunden heisst:  'Kunden'

Ich krieg es leider nicht hin. Einfache Funktionen ja, so komplexe leider nicht.

Vielleicht kann mit ja jemand mit dem Code helfen.

Vielen Dank im Voraus

48 Antworten

null
    • Felix.5
    • vor 11 MonatenFri, January 26, 2024 at 9:43 AM UTC
    • Gemeldet - anzeigen

    Hallo Jutta, 

    es folgt eine ganz nette Möglichkeit: ("do as server" kannst Du theoretisch auch weglassen) 

    "Suche" ist ein Textfeld, welches Du vorher erstellen müsstest, es dient der Eingabe der Suchbegriffe. 

    "Nachname", "Vorname" und "Firma" sind Beispiele, hier kannst Du alle Felder platzieren nach denen Du später suchen möchtest. 

    do as server
        let mySuche := Suche;
        if Suche != null then
            (select 'Kunden')[Nachname like mySuche or Vorname like mySuche or
                Firma like mySuche]
        else
            if Suche = null then select 'Kunden' end
        end
    end

    So würde es dann aussehen: 

      • Jutta_Lotze
      • vor 11 MonatenFri, January 26, 2024 at 9:50 AM UTC
      • Gemeldet - anzeigen

       Danke für die schnelle Antwort. Das Formelfeld zeigt mir aber leider Fehler an in den Zeilen 1, 2 und 5.

      Ich hatte die Firma rausgenommen, weil ich kein Feld für Firma haben. (Kosmetikstudio)

        let mySuche := Suche;
          if Suche != null then
              (select 'Kunden')[Nachname like mySuche or Vorname like mySuche]
          else
              if Suche = null then select 'Kunden' end
          end
       Vielleicht hast Du ja noch eine Idee was falsch ist. Brauchst Du weitere Infos über die Tabellen?

      Gruß und Danke Jutta

      • Felix.5
      • vor 11 MonatenFri, January 26, 2024 at 9:59 AM UTC
      • Gemeldet - anzeigen

      Sehr gerne! 

      Sofern Du vorher ein "Textfeld" namens "Suche" erstellt hast, dürfte es in Zeile 1 zu keinem Fehler kommen. Zeile 2 und 5 sieht es vermutlich ähnlich aus, auch hier findet er kein Feld namens "Suche". Du kannst dem Feld natürlich auch irgendeinen anderen Namen geben. 

       eine Button-Lösung ist mir auf Anhieb leider nicht eingefallen, vielleicht ist diese passender für Dich,  . :)

      Das Ausblenden der Feldbezeichnung war auch etwas unnötig von mir, so sieht es in meinem Test aus: 

      • Jutta_Lotze
      • vor 11 MonatenSat, January 27, 2024 at 9:22 AM UTC
      • Gemeldet - anzeigen

       Hallo, da ich leider in meinem Abo keine Felder wie -Auswahl dynamisch - habe, habe ich jetzt mich noch einmal an Deiner Lösung versucht. Habs es auch hingekriegt. Musste nur, wie Du sagtest, die erste Zeile rausnehmen. Jetzt funktioniert es. Danke für die Hilfe. Das mit der dynamischen Auswahl gefällt mir auch sehr gut  aber da muss ich wohl erst mal mit dem Abo was machen. Gruß

    • Ninox-Professional
    • planoxpro
    • vor 11 MonatenFri, January 26, 2024 at 9:48 AM UTC
    • Gemeldet - anzeigen

    Hallo Jutta, der Code für den Button könnte bspw. so aussehen:

    let myS := upper(TEXTFELD);
    let myK := first(select Kunden where upper(Name) = myS);
    if myK then
       openRecord(myK)
    else
       alert(“Kunde nicht gefunden.“)
    end

    Statt openRecord() könnte man auch popupRecord() nehmen.

    Edit: Sehe gerade, dass über eine Ansicht geredet wird. Ich hatte angenommen, der gefundene Kunden-Datensatz solle direkt geöffnet werden.

      • Jutta_Lotze
      • vor 11 MonatenFri, January 26, 2024 at 9:57 AM UTC
      • Gemeldet - anzeigen

       Hi und auch Dank an Dich für die Antwort. 

      Hab den Code probiert und leicht angepasst (Name= Nachname) Aber in Zeile 1 wird (Textfeld) bemängelt und lässt sich leider deswegen nicht speichern. 

      In der Kundentabelle wird der Nachname in einem Textfeld eingetragen.

      Danke und vielleicht hast Du auch noch ne Idee wo es hakt. Gruß Jutta

      • Ninox-Professional
      • planoxpro
      • vor 11 MonatenFri, January 26, 2024 at 10:06 AM UTC
      • Gemeldet - anzeigen

       TEXTFELD war nur ein Platzhalter. Hast du ihn durch den tatsächlichen Namen deines Feldes ersetzt? Ich vermute, es heißt 'Suche' (was ich zu dem Zeitpunkt noch nicht wusste).

      Davon ab: Willst du eine Ansicht (Tabelle mit mehreren Einträgen) oder den gefundenen Datensatz ggf. direkt öffnen?

      • Jutta_Lotze
      • vor 11 MonatenFri, January 26, 2024 at 10:17 AM UTC
      • Gemeldet - anzeigen

       Datensatz direkt

      🤦‍♀️ Natürlich muss ich ,Textfeld' durch das Eingabefeld des ,Namens; ersetzen. Manchmal ....

      Funktioniert super.

      Danke an Euch beide. Habt mir sehr weitergeholfen. Komm gerne auf Euch zurück.

      • Ninox-Professional
      • planoxpro
      • vor 11 MonatenFri, January 26, 2024 at 10:43 AM UTC
      • Gemeldet - anzeigen

       

      Felix‘ Ansatz mit der Ansicht hätte den Vorteil, dass auch mehrere Treffer berücksichtigt würden. Also, wenn man bspw. nach „Müller“ sucht und es drei davon gibt. Die würden dann alle mit weiteren Infos in der Ansicht-Tabelle gezeigt und man könnte den tatsächlich gemeinten auswählen.

      Bei der Button-Variante würde immer gleich der erste gefundene „Müller“-Datensatz geöffnet. Deshalb arbeite ich selber auch meistens mit Ansichten.

      Nur so als Anregung.

    • Ninox-Professional
    • planoxpro
    • vor 11 MonatenFri, January 26, 2024 at 9:50 AM UTC
    • Gemeldet - anzeigen

     Schon wieder! Ich bin einfach zu langsam ... 😄

      • Jutta_Lotze
      • vor 11 MonatenFri, January 26, 2024 at 9:58 AM UTC
      • Gemeldet - anzeigen

       🙂

    • Klaus_J
    • vor 11 MonatenFri, January 26, 2024 at 3:32 PM UTC
    • Gemeldet - anzeigen

    Hallo ich habe die Suche nach dem Kunde so gelöst .

    1. Ein Textfeld für Nachname wenn ich den Kenne .

    und eine Ansicht die den Datensatz anzeigt , wenn es mehre gibt

    wird es schwierig ,

    2. Habe ich ein Dynamische Feld für die suche ,da kann ich bei der suche schon viel mehr sehen .

    if '【SucheKundeDy】' then
        let myFF := record(Kunde,number('【SucheKundeDy】'));
        'Suche Kunde Nachname Eingabe' := myFF.Nachname;
        myFF.(BestellungAusEmailErstellen := 1);
        myFF.(KundeBearbeiten := 1);
        openRecord(myFF)
    else
        '【SucheKundeDy】' := null;
        'Suche Kunde Nachname Eingabe' := null
    end

      • Jutta_Lotze
      • vor 11 MonatenFri, January 26, 2024 at 3:40 PM UTC
      • Gemeldet - anzeigen

       Hi, da ich mehrere Kunden mit gleichem Nachnamen habe, wäre das eine prima Lösung. Nur brauch ich noch ein paar Erklärungen. Ich brauche ein Textfeld mit welcher Bezeichnung? und wo muss der Code rein (Button)? Danke im Voraus.

      • Heinrich Frey Maschinenbau GmbH
      • Christian_Rott
      • vor 11 MonatenFri, January 26, 2024 at 6:00 PM UTC
      • Gemeldet - anzeigen

       Ich habe in meinem Kundenstamm ein Formelfeld erstellt in dem ich "Name","Vorname","Strasse","PLZ" und Ort hinterlege. Dies Feld nennt sich bei mir fxSuche und ist in der Datenansicht des Kundenstamms nicht sichtbar (Feldeigenschaft Sichtbar =null).

      Hier ist die Formel für dieses Feld: Vorname + " " + Nachname + " " + Strasse + " " + Ort +
      " " +
      PLZ

      Dann habe ich in meinem Dashboard ein Textfeld "Suche" und einen Button der das Suchfeld wieder leert.

      In dem Dashboard habe ich eine Ansicht welchen den Kundenstamm anzeigt wenn ich nach Eingabe im Suchfeld Enter drücke.

      In der Eigenschaft der Ansicht ist dann ein Code hinterlegt der so aussieht:

      let myS := Suche(das Textfeld im Dashboard);
      select Kunden
          where contains(fxSuche, myS)

      Und nach Eingabe des Suchtextes und anschließend die Entertaste bringt mir die Ansicht alle Datensätze die dem Suchfeld entsprechen.

      Vielleicht hilft es dir ja weiter

      • Jutta_Lotze
      • vor 11 MonatenSat, January 27, 2024 at 9:06 AM UTC
      • Gemeldet - anzeigen

        Danke. Ich habe leider kein Feld -Auswahl dynamisch- . Offensichtlich nicht in meinem Abo enthalten. Deswegen klappt das nicht. Ich muss mir die Abos mal anschauen.

    • Klaus_J
    • vor 11 MonatenFri, January 26, 2024 at 6:23 PM UTC
    • Gemeldet - anzeigen

    hallo hier eine klein Erklärung .

      • Heinrich Frey Maschinenbau GmbH
      • Christian_Rott
      • vor 11 MonatenFri, January 26, 2024 at 6:33 PM UTC
      • Gemeldet - anzeigen

       Das ist auch eine sehr gute Lösung 👍

      • Rafael_Sanchis
      • vor 11 MonatenFri, January 26, 2024 at 9:02 PM UTC
      • Gemeldet - anzeigen

       

      hi Klaus.

      between my little Knowledge and the German, it is very dificultad for me to recrearte this example, there is a small example. Appreciate.

      • Rafael_Sanchis
      • vor 11 MonatenFri, January 26, 2024 at 9:40 PM UTC
      • Gemeldet - anzeigen

       

      This give me a error on line 3 

      The 'Search Staff' is Search field, and the Staff is my my table.

      I place it on choice(dynamic) and on tigger

      • Kruna
      • vor 11 MonatenSat, January 27, 2024 at 8:51 AM UTC
      • Gemeldet - anzeigen

      Hallo Klaus, Deine Lösung ist Klasse! Zwei Fragen hätte ich auch noch.

      In deinem erdsten screenshot sieht man unter dem DAF eine Ansicht. Was für ein Code kommt denn dort hin oder hat die Ansicht erst einmal gar nichts damit zu tun?

      Könnte man auch zB nach Firma suchen?

      Vieln Dank schon mal.

      Gruß Kruna

      • Heinrich Frey Maschinenbau GmbH
      • Christian_Rott
      • vor 11 MonatenSat, January 27, 2024 at 9:16 AM UTC
      • Gemeldet - anzeigen

       So wie ich es sehe hat Klaus dort zwei Möglichkeiten verbaut.

      1. über das DAF dann springt er direkt zum Kunden (sehr gute Lösung leider auf iPad nicht nutzbar am Desktop aber super)

      2. sucht über ein Textfeld was dann die eingebettete Ansicht filtert

      Über Firma kannst du auch suchen mußt dann nur im DAF das mit einbauen

      Gruß

      Christian

      • Kruna
      • vor 11 MonatenSat, January 27, 2024 at 9:31 AM UTC
      • Gemeldet - anzeigen

      HAllo Christian, vielen Dank für Deine Hilfe.

      Ok, jetzt verstehe ich - nur leider weiß ich nicht, wie ich das mit der Ansicht umsetzen kann bzw welcher Code wohin kommt und leider auch nicht wie ich die Suche mit Firma einbauen kann. Geht das mit or oder if - mir fehlt da gerade die Idee dazu. 

      Weißt Du, wie das geht?😅

      Gruß Kruna

      • Kruna
      • vor 11 MonatenSat, January 27, 2024 at 10:00 AM UTC
      • Gemeldet - anzeigen

      Hallo Christian, das Thema Firma habe ich gelöst, indem ich beim DAF einfach noch die Firma im Name des dynamischen Werts hinzugefügt habe.

       

      Gruß Kruna

      • Heinrich Frey Maschinenbau GmbH
      • Christian_Rott
      • vor 11 MonatenSat, January 27, 2024 at 10:20 AM UTC
      • Gemeldet - anzeigen

      Hab mal ne Test DB gemacht zur Ansicht

      • Jutta_Lotze
      • vor 11 MonatenSat, January 27, 2024 at 10:33 AM UTC
      • Gemeldet - anzeigen

       👍

    • Klaus_J
    • vor 11 Monaten
    • Gemeldet - anzeigen

    hallo hier eine klein Erklärung .

      • Rafael_Sanchis
      • vor 11 Monaten
      • Gemeldet - anzeigen

       Danke Cristian 👋

      • Kruna
      • vor 11 Monaten
      • Gemeldet - anzeigen

      wow!!! Ich bin echt begeistert, vielen tausend Dank. Das erleichtert den workflow und die 'ständige' Suche nach Datensätzen uvm.

      So, jetzt wird ein wenig 'aufgeräumt'😄

      Gruß Kruna

    • Klaus_J
    • vor 11 Monaten
    • Gemeldet - anzeigen

    Hallo.   'Search Staff' ohne Eckige klammer . [ ]

      • Rafael_Sanchis
      • vor 11 Monaten
      • Gemeldet - anzeigen

       

      Thanks Klaus , forget the last paréntesis on 2do line 😪 now work.

      Appreciate.

    • Ninox-Professional
    • planoxpro
    • vor 11 Monaten
    • Gemeldet - anzeigen

    Whow, das sind ja eine Menge Ideen hier ... Top. So stelle ich mir Community vor! 👍

    • Klaus_J
    • vor 11 Monaten
    • Gemeldet - anzeigen

    hallo die Dynamischen Felder und etwas versteckt unter Daten Felder nach unten scrollen.

    • mirko3
    • vor 11 Monaten
    • Gemeldet - anzeigen

    Ich habe auch mit Interesse die Beiträge gelesen. Tolle Arbeit. Auch wenn meine Version langsamer ist, da getippt werden muß, stelle ich sie mal hier mit rein, da noch ein kleines Schmankerl dabei ist. 

    Ich habe das logische und/oder mit eingepflegt. Es kann also nach zwei Begriffen gesucht werden, die durch die in Script- und Programmiersprachen gängigen Zeichen "&&" für "und" und "||" für "oder" interpretiert werden. Also Mei&&Dü bringen Kontakte mit z.B. Meier und Düsseldorf und Mei||Dü dementsprechend Meier oder Düsseldorf usw. Witzig ist, wenn man Dü&&Mär eingibt, erscheinen alle die in z.B. Düsseldorf wohnen und im März Geburtstag haben. Na gut, das braucht man nicht oft. Diese Form ist also mehr für die diffizile als für die schnelle Suche gedacht.

    Das HTML-Feld benötigt man im Grunde auch nicht, aber man spart sich die Entertaste für das suchen des Begriffs. Im Adminmodus ist das eigentliche Suchfeld als Textfeld hinterlegt. Wenn man es doch nutzen will, muß man per API die Feld-ID des Textfelds suchen und in das kurze Script nachtragen. Dank an Christian - auf Deine sehr schöne Version der Suche wäre ich nie gekommen - für die DB, die ich gleich mal benutzt habe. Mirko

      • Rafael_Sanchis
      • vor 11 Monaten
      • Gemeldet - anzeigen

       

      Hi Mirko.

      Wenn man es doch nutzen will, muß man per API die Feld-ID des Textfelds suchen und in das kurze Script nachtragen.

      I saw your versión a few Months ago 'Birds' DB, but I have never been able get it working 😓. Frustrating 

      • mirko3
      • vor 11 Monaten
      • Gemeldet - anzeigen

       Do you have public cloud and/or use API?

      • Rafael_Sanchis
      • vor 11 Monaten
      • Gemeldet - anzeigen

      Yes

      • Heinrich Frey Maschinenbau GmbH
      • Christian_Rott
      • vor 11 Monaten
      • Gemeldet - anzeigen
      • mirko3
      • vor 11 Monaten
      • Gemeldet - anzeigen

       Hi, Rafael try this.

      1. Place the function in a function-field (it is on basis of Uwes Code)

      2. Use the table name as text as the parameter of the function and change the "xxxx" to your API

      3. Result is something like this: 

      ID: A - Feldname: Text

      ID: B - Feldname: Bild

      4. Find the Name of your text field where the search results from the input field is landing!!

      5. put the ID in the code of the input field instead of 'A' -> database.update(idNX, 'A', result);

      6. delete the function field with your API

      function findFieldId(nameOfTable : text) do
          let vUrl := "https://api.ninox.com/v1/teams/" + teamId() + "/databases/" + databaseId() +
              "/tables/";
          let vHeader := {
                  Authorization: "Bearer xxxxxxxxxxxxxxxxxxxxxxxx",
                  'Content-Type': "application/json"
              };
          let resultJSON := do as server
                  formatJSON(http("GET", vUrl, vHeader, ""))
              end;
          let resultObjekt := parseJSON(resultJSON);
          let howMany := cnt(resultObjekt.result);
          let result := for i in range(0, howMany) do
                  if item(resultObjekt.result, i).name = nameOfTable then
                      item(resultObjekt.result, i)
                  end
              end;
          let aryFields := item(result, 0).fields;
          join(for i in range(0, cnt(aryFields)) do
              "ID: " + item(aryFields, i).id + " - Feldname: " + item(aryFields, i).name
          end, "
      ")
      end;
      findFieldId("TABELLE")
      
      • Kruna
      • vor 11 Monaten
      • Gemeldet - anzeigen

      Hallo Mirko,

      Deine 'Input' ist ja auch super toll! Soweit habe ich das gut hinbekommen.

      Ich hätte da noch zwei Fragen, die ich gerne umsetzen würde, falls es möglich ist.

      1. Der Button (wie Christian in seiner Beispiel DB), soll quasi das Suchfeld quasi leeren - wie leere ich denn das Formelfeld? Input := null geht ja nicht.

      2. Ich würde gerne das Formelfeld Input etwas anpassen, so dass es in einer Linien mit dem Feld 'Suche' ist. Ich habe es mit margin und padding versucht, aber leider ohne Erfolg. Hast Du eien Idee dazu?

       

      Vielen Dank und Gruß Kruna

      • mirko3
      • vor 11 Monaten
      • Gemeldet - anzeigen

       Hallo Kruna. Das Ausrichten von Funktionsfeldern mit html geht m.W. nicht. Aber ich habe hier noch mal zwei Sachen eingepflegt. Nach Eingabe des Suchwortes mit Enter bestätigen (Feld verlassen) und dann wieder hineinklicken löscht den Sucheintrag und das Textfeld. Letzteres über einen Befehl in den Einstellungen des Funktionsfeld "Beim Klicken" und ersteres durch einen JS-Befehl, wenn der Fokus wieder in das Input-Feld gesetzt wird. Manchmal muss man bei Änderungen am JS-Script erst die Tabelle verlassen um die Änderung zu aktivieren. Also, wenn es nicht gleich funktioniert... Vieleicht hilft Dir das. Mirko

      • Kruna
      • vor 11 Monaten
      • Gemeldet - anzeigen

      das ist schade, aber damit muss ich dann bzw kann ich gut leben auch wenn diesbezüglich mein zweiter Name Monk lautet.😅

      Auch wenn man das Formelfeld nicht 'leeren' kann, finde ich Deine Lösung sehr elegant und sogar besser, denn ob ich nun auf ein Button klicke oder in das Feld selbst - das Ergebnis ist das gleiche. Ich habe es eben angepasst und - einfach TOP!

      Vielen Dank für Deine Hilfe und eine guten Start in die Woche.

      Gruß Kruna

    • Klaus_J
    • vor 11 Monaten
    • Gemeldet - anzeigen

    Hallo Die Ansicht habe ich nur noch zur Kontrolle Das Textfeld ' Suche Kunde Nachname Eingabe' sucht nur nach Nachname in der Tabelle Kunde, seit ich das Auswahlfeld (Dynamisch) benutze brauche ich die Ansicht eigentlich garnicht mehr.

    Das tolle ist ja bei der Auswahl ,das ich Name  oder Vorname oder PLZ oder Ort oder KundenNr, eingeben kann . Denn bei den Kunden Adressen geht es Wild durcheinander , Nachnahme Vorname verdeht oder Firmenname mit Zusatz .

    Die Ansicht Zeigt die Datensätze an.

    let mySuche := lower('Suche Kunde Nachname Eingabe');
    (select Kunde)[Nachname like mySuche]

      • Kruna
      • vor 11 Monaten
      • Gemeldet - anzeigen

      Hallo Klaus, vielen Dank für Deine Erläuterung 👍

      Gruß Kruna

    • Ninox-Professional
    • planoxpro
    • vor 11 Monaten
    • Gemeldet - anzeigen

    Ich habe mir die Datenbanken nicht alle angesehen, es gibt aber Vorschläge, die im Änderungs-Trigger des Dynamischen Auswahlfeldes gleich ein openRecord() für den gewählten Eintrag auslösen.

    Ich will kein Spielverderber sein, aber das funktioniert m. W. nur in den Apps, nicht im Browser, da sich in selbigem dort einige Funktionen wie dialog(), openRecord() oder popupRecord() nicht per Trigger auslösen lassen.

    Das nur als Hinweis für alle, die das im Browser ausprobieren und sich wundern, dass es nicht funktioniert. Beziehungsweise für jene, die es in einer App ausprobieren, die DB aber auch im Browser nutzen wollen.

    In letzterem Fall könnte man bspw. mit ninoxApp() die Plattform abfragen und beim Rückgabewert „web“ einen zusätzlichen Button einblenden, mit dem sich der gewählte Datensatz öffnen lässt.

      • Heinrich Frey Maschinenbau GmbH
      • Christian_Rott
      • vor 11 Monaten
      • Gemeldet - anzeigen

       Axel ich kann das nur bestätigen auf der Mac App läuft dies super. Im Browser nicht und auf dem iPad geht es auch nicht weil man dort nicht im DAF Combobox eine Texteingabe machen kann.

      Also für alle die in der Mac App arbeiten sollte es gehen.

      Gruß

      Christian

      • Rafael_Sanchis
      • vor 11 Monaten
      • Gemeldet - anzeigen

      On Tablet Android work perfect

      • Ninox-Professional
      • planoxpro
      • vor 11 Monaten
      • Gemeldet - anzeigen

       It's also an app. 😉

    • Kruna
    • vor 11 Monaten
    • Gemeldet - anzeigen

    Guten Morgen zusammen,

    wie kann ich die Suche einschränken kann, wenn das Feld 'Status' (Auswahlfeld) eine bestimmten Status hat?

    Desweiteren ist mir aufgefallen, dass bei der Suche via DAF, wenn man auf den gewünschten Datensatz klickt, das Script zwar die Tabelle öffnet, aber bei manchen Datensätzen nicht den entsprechenden Datensatz. Man sieht dann nur oben rechts ein Kästchen mit einem Pfeil nach links. Wenn ich darsuf klicke, passiert jedoch nichts.

     

    Hat jemand eine Idee woran das liegen könnte - eventuell ein bug?

    Gruß Kruna

    • tschijoh
    • vor 11 Monaten
    • Gemeldet - anzeigen

    Guten Morgen zusammen,

    ...gibt es eine maximale Anzahl von Datensätzen in ein DAF? 

    Gruß Tschijoh