Zdarzenie pola widoku

obraz.png

Ninext dodaje zdarzenia do widoków Ninox: kliknięcie wiersza pola widoku (onclick) i wybranie rekordu w widoku tabeli (onselected). W formułach funkcje te zapisuje się dokładnie w ten sposób, małymi literami.

Te zdarzenia wyłącza się w panelu Ustawienia Ninext, w sekcji „Ulepszenia interfejsu”: Zdarzenia widoku (onClick, onSelect) (domyślnie włączone).

Kliknięcie wiersza pola widoku: onclick

Krótki przegląd właściwości JSON przekazywanych do onclick

WłaściwośćOpisPrzykład / zastosowanie
previousIDIdentyfikator rekordu wybranego w widoku przed kliknięciem; pusty, jeśli żadnego nie było.„A1”
targetIDIdentyfikator rekordu wskazanego kliknięciem.„A3”
targetLineNumNumer wiersza, w który kliknął użytkownik (liczony od zera).3
targetColumnNumNumer klikniętej kolumny w widoku (liczony od zera).4
targetColumnValueWartość tekstowa wyświetlana w klikniętej komórce.„Lisa”
targetColumnCaptionNagłówek kolumny z konfiguracji pola (z "caption" albo "field.caption").„First Name”

Ogólny przebieg pracy

  1. Zdefiniuj funkcję onclick w formule pola widoku
    Funkcja onclick musi zostać umieszczona w formule pola widoku. Otrzymuje ona obiekt (o nazwie "event") zawierający właściwości opisane powyżej. W tej funkcji this wskazuje rekord, który zawiera pole widoku, a nie kliknięty wiersz: ten ostatni odnajduje się przez event.targetID.
  2. Wykonanie własnego kodu
    Gdy użytkownik kliknie lub dotknie komórkę w widoku, mechanizm Ninext wykonuje funkcję onclick. Skrypt może wtedy na przykład:
    • Zaktualizować właściwości rekordu (np. przełączyć pole logiczne).
    • Zapisać identyfikator klikniętego rekordu do wskazanego pola.
    • Uruchomić działania warunkowe zależne od klikniętej kolumny.
  3. Zwrócenie zawartości widoku
    Na końcu funkcji formuła musi zwrócić zawartość widoku (na przykład "select Customer"). To mówi Ninox, które rekordy wyświetlić po wykonaniu skryptu.

Przykłady zastosowania

Pełny przykład

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

Komentarze:

  • Funkcja zaczyna od zapisania identyfikatora klikniętego rekordu w polu "ID of selected customer".
  • Następnie pobiera odpowiedni rekord z tabeli "Customer".
  • Jeśli nagłówek klikniętej kolumny zawiera "checked", przełącza pole "Checked" w tym rekordzie i zwraca true, sygnalizując, że kliknięcie zostało obsłużone.
  • W przeciwnym razie funkcja zwraca true lub false w zależności od tego, czy numer klikniętej kolumny wynosi 0.
  • Na koniec formuła zwraca "select Customer", co wyświetla zawartość widoku po wykonaniu skryptu.

Przykład minimalny

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

Komentarze:

  • Skrypt po prostu zapisuje identyfikator klikniętego rekordu i wypisuje komunikat debugowania.
  • Zwrócenie false pozwala zachować domyślne zachowanie dla działań, które nie są obsłużone w szczególny sposób.
  • Jak zawsze formuła kończy się na "select Customer", aby wyświetlić zawartość widoku.

Najważniejsze do zapamiętania

  • Umiejscowienie w formule pola widoku:
    Funkcja onclick musi być zdefiniowana bezpośrednio w formule pola widoku, a nie w wyzwalaczu czy innej części aplikacji.
  • Zwracanie zawartości widoku:
    W odróżnieniu od innych funkcji, które oczekują wartości logicznej, ostatni wiersz formuły musi zwrócić zawartość widoku (np. "select Customer").
  • Wartość zwracana przez onclick:
    true sygnalizuje, że kliknięcie zostało obsłużone: Ninox nie otwiera klikniętego rekordu. false lub brak wartości pozwala Ninox zastosować zwykłe zachowanie i otworzyć rekord. Kliknięcie wiersza grupowania nie wywołuje onclick.
  • Funkcja obliczana osobno:
    Ninext wyodrębnia z formuły samą funkcję onclick, a następnie oblicza ją osobno. Nie widzi ona więc ani zmiennych, ani innych funkcji zadeklarowanych w innym miejscu formuły: wszystko, czego potrzebuje, należy zadeklarować wewnątrz onclick.
  • Wykorzystanie parametrów zdarzenia:
    Informacje z obiektu "event" (previousID, targetID, targetLineNum, targetColumnNum, targetColumnValue, targetColumnCaption) pozwalają dostosować działania do kontekstu kliknięcia.
  • Testowanie na różnych urządzeniach:
    Proszę upewnić się, że funkcja działa poprawnie zarówno na komputerach, jak i na urządzeniach dotykowych, ponieważ mechanizm obsługuje zdarzenia "click" i "touchend".

Wybranie rekordu w widoku tabeli: onselected

Ninext wywołuje funkcję onselected() za każdym razem, gdy w widoku tabeli (liście rekordów tabeli) zostanie wybrany wiersz. Należy ją zadeklarować, bez parametru, w formule prawa odczytu tabeli („Readable if”). W tej funkcji this wskazuje wybrany rekord. Zwracana przez nią wartość nie jest wykorzystywana, a Ninox otwiera rekord jak zwykle.

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

Tutaj każde wybranie zapisuje w karcie Śledzenie debugowania, przy otwartym panelu Ninext, wiersz podsumowujący wybrany rekord.

Formuła zachowuje swoją rolę: to jej ostatnią wartość Ninox wykorzystuje, aby zdecydować, kto może odczytywać tabelę. Należy ją więc zakończyć zwykłym warunkiem odczytu; true, jak tutaj, nie zmienia niczego w prawie odczytu tabeli otwartej dla wszystkich. Podobnie jak onclick, funkcja jest wyodrębniana z formuły osobno.