Ereignis im Ansichtsfeld

Bild.png

Ninext ergänzt die Ansichten von Ninox um Ereignisse: den Klick auf eine Zeile eines Ansichtsfeldes (onclick) und die Auswahl eines Datensatzes in der Ansicht einer Tabelle (onselected). In Ihren Formeln werden diese Funktionen genau so geschrieben, in Kleinbuchstaben.

Diese Ereignisse lassen sich in den Ninext Einstellungen ausschalten, Abschnitt „UI-Verbesserungen“: Ansichts-Ereignisse (onClick, onSelect) (standardmäßig aktiviert).

Klick auf eine Zeile eines Ansichtsfeldes: onclick

Kurzüberblick über die an onclick übergebenen JSON-Eigenschaften

EigenschaftBeschreibungBeispiel / Verwendung
previousIDDie ID des Datensatzes, der vor dem Klick in der Ansicht ausgewählt war; leer, wenn es keinen gab.„A1“
targetIDDie ID des durch den Klick angesteuerten Datensatzes.„A3“
targetLineNumDie Nummer der angeklickten Zeile (beginnend bei null).3
targetColumnNumDie Nummer der in der Ansicht angeklickten Spalte (beginnend bei null).4
targetColumnValueDer in der angeklickten Zelle angezeigte Textwert.„Lisa“
targetColumnCaptionDie Spaltenbeschriftung aus der Feldkonfiguration (entweder "caption" oder "field.caption").„First Name“

Allgemeiner Ablauf

  1. Die Funktion onclick in der Formel des Ansichtsfeldes definieren
    Die Funktion onclick muss in die Formel des Ansichtsfeldes eingebaut werden. Sie erhält ein Objekt (namens "event") mit den oben beschriebenen Eigenschaften. In dieser Funktion bezeichnet this den Datensatz, der das Ansichtsfeld trägt, nicht die angeklickte Zeile: Diese finden Sie über event.targetID.
  2. Eigenen Code ausführen
    Klickt oder tippt ein Benutzer auf eine Zelle der Ansicht, so führt der Hook von Ninext die Funktion onclick aus. Das Skript kann dann zum Beispiel:
    • Eigenschaften eines Datensatzes ändern (etwa ein boolesches Feld umschalten).
    • Die ID des angeklickten Datensatzes in ein dafür vorgesehenes Feld schreiben.
    • Je nach angeklickter Spalte bedingte Aktionen auslösen.
  3. Den Inhalt der Ansicht zurückgeben
    Am Ende der Funktion muss die Formel den Inhalt der Ansicht zurückgeben (zum Beispiel "select Customer"). Damit erfährt Ninox, welche Datensätze nach der Ausführung des Skripts anzuzeigen sind.

Umsetzungsbeispiele

Vollständiges Beispiel

Ninox
function onclick(event : any) do
    'ID of selected customer' := event.targetID;
    var selCustomer := first(select Customer where Id = event.targetID);
    debug("onclick");
    if event.targetColumnCaption like "checked" then
        selCustomer.(Checked := not Checked);
        true
    else
        if event.targetColumnNum = 0 then
            true
        else
            false
        end
    end
end;
select Customer

Anmerkungen:

  • Die Funktion schreibt zunächst die ID des angeklickten Datensatzes in das Feld "ID of selected customer".
  • Anschließend holt sie den zugehörigen Datensatz aus der Tabelle "Customer".
  • Enthält die Spaltenbeschriftung der angeklickten Zelle "checked", so schaltet sie das Feld "Checked" dieses Datensatzes um und gibt true zurück, um anzuzeigen, dass der Klick behandelt wurde.
  • Andernfalls gibt die Funktion true oder false zurück, je nachdem, ob die Nummer der angeklickten Spalte 0 ist.
  • Zuletzt gibt die Formel "select Customer" zurück, wodurch nach der Ausführung des Skripts der Inhalt der Ansicht erscheint.

Minimalbeispiel

Ninox
function onclick(event : any) do
     'ID of selected customer' := event.targetID;
     debug("Clicked on Customer " + event.targetID);
     "No specific action is performed here.";
     false
 end;

select Customer

Anmerkungen:

  • Dieses Skript schreibt lediglich die ID des angeklickten Datensatzes und gibt eine Debug-Meldung aus.
  • Die Rückgabe von false lässt das Standardverhalten für alle nicht eigens behandelten Aktionen zu.
  • Wie immer endet die Formel mit "select Customer", um den Inhalt der Ansicht anzuzeigen.

Das sollten Sie sich merken

  • Platzierung in der Formel des Ansichtsfeldes:
    Die Funktion onclick muss unmittelbar in der Formel des Ansichtsfeldes stehen, nicht in einem Trigger oder an anderer Stelle der Anwendung.
  • Rückgabe des Ansichtsinhalts:
    Anders als bei Funktionen, die einen booleschen Wert erwarten, muss die letzte Zeile der Formel den Inhalt der Ansicht zurückgeben (z. B. "select Customer").
  • Rückgabewert von onclick:
    true zeigt an, dass der Klick behandelt ist: Ninox öffnet den angeklickten Datensatz nicht. false oder gar kein Wert lässt Ninox sein übliches Verhalten anwenden und den Datensatz öffnen. Ein Klick auf eine Gruppierungszeile ruft onclick nicht auf.
  • Eine separat ausgewertete Funktion:
    Ninext entnimmt der Formel nur die Funktion onclick und wertet sie dann separat aus. Sie sieht also weder die Variablen noch die anderen Funktionen, die an anderer Stelle in der Formel deklariert sind: Deklarieren Sie innerhalb von onclick alles, was sie benötigt.
  • Nutzung der Ereignisparameter:
    Verwenden Sie die Angaben aus dem Objekt "event" (previousID, targetID, targetLineNum, targetColumnNum, targetColumnValue, targetColumnCaption), um Ihre Aktionen auf den Klickzusammenhang abzustimmen.
  • Test auf verschiedenen Geräten:
    Vergewissern Sie sich, dass die Funktion sowohl auf Desktop-Rechnern als auch auf Touch-Geräten richtig arbeitet, denn der Hook behandelt sowohl das Ereignis "click" als auch "touchend".

Auswahl eines Datensatzes in der Ansicht einer Tabelle: onselected

Ninext ruft eine Funktion onselected() jedes Mal auf, wenn in der Ansicht einer Tabelle (der Liste der Datensätze der Tabelle) eine Zeile ausgewählt wird. Deklarieren Sie sie ohne Parameter in der Formel des Leserechts der Tabelle („Readable if“). In dieser Funktion bezeichnet this den ausgewählten Datensatz. Ihr Rückgabewert wird nicht verwendet, und Ninox öffnet den Datensatz wie gewohnt.

Ninox
function onselected() do
    debug("customer->onselect : " + this)
end;
true

Hier schreibt jede Auswahl bei geöffnetem Ninext-Panel eine Zeile in den Debug-Tracer, die den gewählten Datensatz zusammenfasst.

Die Formel behält ihre Aufgabe: Ninox entscheidet anhand ihres letzten Wertes, wer die Tabelle lesen darf. Beenden Sie sie daher mit Ihrer üblichen Lesebedingung; true, wie hier, ändert nichts am Leserecht einer für alle offenen Tabelle. Wie bei onclick wird die Funktion allein aus der Formel entnommen.