0

"Weiter"/"Zurück" Button erstellen

Hallo Zusammen,

normalerweise kan bei Ninox in den Tabellen ja ganz einfach per Pfeiltasten (Laptop) navigiert werden. Auch in der IPad-Version ist dies durch Wischen oder drücken auf die Ninox-Pfeiltasten möglich. Soweit, so gut. Nun nutze ich aber die Option openFullscreen() um meine Anschicht zu maximieren. In dieser Fullscreen-Ansicht gibt es auf dem iPad nun keine Schaltfläche mehr mit Pfeiltasten (sonst ja neben Drucker, Papierkorb, Duplizieren und Neuer datensatz zu finden). Hier möchte ich gerne eine Pfeiltaste machen, sodass ich auch aus Ansichten zum nächsten Datensatz navigieren kann.

Ich habe also einen verknüpften Datensatz in meinem Dashboard (in einer Ansicht per popupRecord() geöffnet - Ansicht läuft übergens direkt auf den mit dem Dashboard verknüpften Datensatz, ohne select). Wie kann ich nun per "Weiter"-Button zum nächsten Datensatz kommen? Ich habe schon einiges versucht, komme nur nicht wirklich zu einem Ansatz. Es soll zum nächsten Datensatz in Alphabetischer Reihenfolge des Namens gegangen werden und am Ende der Liste natürlich auch wieder zum 1. Eintrag (ein zweiter Button soll natürlich auch wieder zurück navigieren können ;)).

Habt ihr einen Lösungsansatz? Es gab mal ein Beispiel in einer Webinar-Datenbank, die finde ich nur einfach nicht mehr - trotz 45-Minuten-Suche.
Über die  Nr kann ich ja nicht gehe, sonst hätte ich so etwas wie first(Datensatz.Nr>me.Nr) gesagt. Mein Kopf ist Watte. Ich brauche mal eure frische Kreativität ;)

Danke!!!

6 Antworten

null
    • Wolfgang
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Stephan, schau Dir in der 0001 Referenzdatenbank, Praxisbeispiele Examples Nr. 15 und 16 an.
    15 Code für Button zum nächsten Datensatz

    (https://app.ninox.com/#/teams/cZRtHt9HkFRu7FyX9/database/cr9r5bxgmfvp/module/F/view/DbKLJrf8wtiLQwSS/node/F3/tab/default)

    16 Code für Button vorheriger Datensatz

    (https://app.ninox.com/#/teams/cZRtHt9HkFRu7FyX9/database/cr9r5bxgmfvp/module/G/view/kAEz7jqW9MZNd6Oq/node/G5/tab/0)

     

    Wolfgang

    • Wolfgang
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Für nächsten Datensatz :

    ---

    let myFlag := false;
    let myN := TABELLENSPALTE;
    let myArr := for i in (select TABELLE) order by TABELLENSPALTE do
    if not myFlag and i.TABELLENSPALTE != myN then
    void
    else
    if i.TABELLENSPALTE = myN then myFlag := true else i end
    end
    end;
    openRecord(first(myArr))
    ---

    für vorherigen Datensatz:

    ---

    let myFlag := false;
    let myN := TABELLENSPALTE;
    let myArr := for i in (select TABELLE) order by TABELLENSPALTE do
    if not myFlag and i.TABELLENSPALTE != myN then
    i
    else
    if i.TABELLENSPALTE = myN then myFlag := true end
    end
    end;
    openRecord(last(myArr))
    ---

    Gruss Wolfgang 

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

    Oder vielleicht einfach so (Sortierfeld = 'Name')?

     

    Datensatz vor:

    let myN := Name;
    let myR := first((select Tabelle where Name > myN) order by Name);
    if myR = null then
       myR := first((select Tabelle) order by Name)
    end;
    openRecord(myR)

     

    Datensatz zurück:

    let myN := Name;
    let myR := last((select Tabelle where Name < myN) order by Name);
    if myR = null then
       myR := last((select Tabelle) order by Name)
    end;
    openRecord(myR)

    • Stephan_Haumann
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Danke euch beiden! @Wolfgang: Genau die hatte ich gesucht! @Copytexter: Einfache Lösung, allerdings gib es ein Problem: Wenn die Personen den gleichen Nachnamen haben, dann klappt es leider nicht und es wird natürlich der zweite Eintrag des gleichen Nachnamens übersprungen. Es sei denn, ich baue mir in der ausgewählten Tabelle mit dem Namen ein eindeutiges Feld (z.B. Nachname+", "+Vorname+", "+Geburtsdatum) auf das ich mich beziehe - ich glaube dann wird es eindeutig.

    Danke euch auf jeden Fall!!!

    Liebe Grüße

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

    Ja, das Sortierfeld sollte eindeutig sein. Man kann das aber auch direkt im Skript machen:

     

    let myT := Name + Vorname;
    let myR := first((select TabelleA where Name + Vorname > myT) order by Name + Vorname);
    if myR = null then
       myR := first((select TabelleA) order by Name + Vorname)
    end;
    openRecord(myR)

     

    Aber letztlich ist es natürlich egal. Hauptsache, es funktioniert. ;)

    • Stephan_Haumann
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Stimmt, so spart man sich das zusätzliche Feld in der übergeordneten Tabelle. Guter Punkt! Danke Dir!!!