Eventos de vista

imagen.png

Ninext añade eventos a las vistas de Ninox: el clic en una fila de un campo de vista (onclick) y la selección de un registro en la vista de una tabla (onselected). En sus fórmulas, estas funciones se escriben exactamente así, en minúsculas.

Estos eventos se desactivan en la Configuración de Ninext, sección «Mejoras de interfaz»: Eventos de vista (onClick, onSelect) (activado por defecto).

Clic en una fila de un campo de vista: onclick

Resumen de las propiedades JSON que se pasan a onclick

PropiedadDescripciónEjemplo / Uso
previousIDEl ID del registro seleccionado en la vista antes del clic; vacío si no había ninguno.«A1»
targetIDEl ID del registro al que apunta el clic.«A3»
targetLineNumEl número de fila en la que el usuario ha hecho clic (empezando por cero).3
targetColumnNumEl número de la columna sobre la que se ha hecho clic en la vista (empezando por cero).4
targetColumnValueEl valor de texto que se muestra en la celda pulsada.«Lisa»
targetColumnCaptionEl título de la columna según la configuración del campo (mediante "caption" o "field.caption").«First Name»

Funcionamiento general

  1. Definir la función onclick dentro de la fórmula del campo de vista
    La función onclick debe integrarse en la fórmula del campo de vista. Recibe un objeto (llamado "event") con las propiedades descritas más arriba. En esta función, this designa el registro que contiene el campo de vista, y no la fila pulsada: esta se obtiene mediante event.targetID.
  2. Ejecutar código personalizado
    Cuando el usuario hace clic o toca una celda de la vista, el enganche de Ninext ejecuta la función onclick. El script puede entonces, por ejemplo:
    • Actualizar propiedades de un registro (por ejemplo, invertir un campo booleano).
    • Guardar el ID del registro pulsado en un campo previsto para ello.
    • Lanzar acciones condicionales en función de la columna pulsada.
  3. Devolver el contenido de la vista
    Al final de la función, la fórmula debe devolver el contenido de la vista (por ejemplo, "select Customer"). Así se indica a Ninox qué registros debe mostrar una vez ejecutado el script.

Ejemplos de implementación

Ejemplo completo

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

Comentarios:

  • La función empieza guardando el ID del registro pulsado en el campo "ID of selected customer".
  • Después recupera el registro correspondiente de la tabla "Customer".
  • Si el título de la columna de la celda pulsada contiene "checked", invierte el campo "Checked" de ese registro y devuelve true para indicar que el clic se ha tratado.
  • En caso contrario, la función devuelve true o false según si el número de la columna pulsada es 0.
  • Por último, la fórmula devuelve "select Customer", que muestra el contenido de la vista tras ejecutar el script.

Ejemplo mínimo

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

Comentarios:

  • Este script se limita a guardar el ID del registro pulsado y a escribir un mensaje de depuración.
  • Al devolver false, se deja que el comportamiento predeterminado siga su curso para las acciones que no se tratan expresamente.
  • Como siempre, la fórmula termina con "select Customer" para mostrar el contenido de la vista.

Puntos clave que conviene recordar

  • Ubicación dentro de la fórmula del campo de vista:
    La función onclick debe definirse directamente en la fórmula del campo de vista, no en un desencadenador ni en otra parte de la aplicación.
  • Devolución del contenido de la vista:
    A diferencia de otras funciones que esperan un booleano, la última línea de la fórmula debe devolver el contenido de la vista (por ejemplo, "select Customer").
  • Valor devuelto por onclick:
    true indica que el clic se ha tratado: Ninox no abre el registro pulsado. false, o ningún valor, deja que Ninox aplique su comportamiento habitual y abra el registro. Un clic en una fila de agrupación no llama a onclick.
  • Una función evaluada aparte:
    Ninext extrae únicamente la función onclick de la fórmula y la evalúa aparte. Por tanto, no ve ni las variables ni las demás funciones declaradas en otras partes de la fórmula: declare dentro de onclick todo lo que necesite.
  • Uso de los parámetros del evento:
    Aproveche la información del objeto "event" (previousID, targetID, targetLineNum, targetColumnNum, targetColumnValue, targetColumnCaption) para adaptar sus acciones al contexto del clic.
  • Pruebas en distintos dispositivos:
    Compruebe que la función funciona correctamente tanto en ordenadores como en dispositivos táctiles, ya que el enganche trata a la vez los eventos "click" y "touchend".

Selección de un registro en la vista de una tabla: onselected

Ninext llama a una función onselected() cada vez que se selecciona una fila en la vista de una tabla (la lista de los registros de la tabla). Declárela, sin parámetros, en la fórmula del derecho de lectura de la tabla («Readable if»). En esta función, this designa el registro seleccionado. El valor que devuelve no se utiliza, y Ninox abre el registro como de costumbre.

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

Aquí, cada selección escribe en el Rastreador de depuración, con el panel de Ninext abierto, una línea que resume el registro elegido.

La fórmula conserva su función: Ninox utiliza su último valor para decidir quién puede leer la tabla. Por tanto, termínela con su condición de lectura habitual; true, como aquí, no cambia nada en el derecho de lectura de una tabla abierta a todos. Al igual que onclick, la función se extrae sola de la fórmula.