Esdeveniment de botó

Fitxa ButtonEvent de la base de dades d'exemple: el botó «Bonjour» porta un badge vermell «2»

A la taula «ButtonEvent» de la base de dades d'exemple, els camps de la fitxa («caption», «the color», «Tooltip», «badge.caption», «badge.color») configuren el text, el color, el text d'ajuda i el badge del botó «Bonjour», mitjançant la funció onUpdate descrita més avall.

Personalitzar els botons amb Ninext

Amb Ninext podeu modificar l'aparença dels botons de Ninox definint una funció anomenada onUpdate a la fórmula «Display field only, if» del botó. Aquesta funció ha de retornar un objecte que descrigui els elements visuals que cal modificar, i l'script ha d'acabar amb un booleà que indiqui si el botó s'ha de mostrar.

Amb aquest enfocament podeu:

  • Canviar el text del botó.
  • Actualitzar el text d'ajuda (o títol) del botó.
  • Canviar el color del botó, entre els tres estils de botó de Ninox: "blue" (fons blau), "red" (fons rosa, text vermell) i "grey" (fons blanc, contorn blau, com el botó «Bonjour» de més amunt).
  • Mostrar un badge per destacar informació important.

Aquesta funció es desactiva a la Configuració de Ninext, secció «Millores d'interfície»: Esdeveniments de botó (onUpdate) (activat per defecte).

Visió ràpida de les propietats JSON

PropietatDescripcióExemple / Ús
captionEl text que es mostra al botó."Send" / "Cancel"
tooltip o titleEl text que apareix en passar el ratolí per sobre, com a text d'ajuda."Click to send"
buttonColorEl color del botó: "blue", "red" o "grey", res més. Qualsevol altre valor s'ignora i el botó conserva el seu color."blue"
badgeUn objecte que descriu el badge que cal mostrar al botó.Vegeu-ne els detalls més avall
badge.captionEl text, el nombre o el símbol que es mostra al badge. Sempre és un text: convertiu un nombre amb text(). Un text buit amaga el badge."3" o "!"
badge.colorEl color de fons del badge (vermell per defecte). El text del badge continua sent blanc."red" o "#4970ff"

Funcionament general

  1. Definiu la funció onUpdate
    A la fórmula «Display field only, if» del botó, declareu una funció anomenada onUpdate. Aquesta funció retorna un objecte (en format JSON) que descriu els elements que cal modificar. Rep com a paràmetre el text i el color del botó tal com estan definits a Ninox: { caption, buttonColor }.
  2. Retorneu un booleà per a la visibilitat
    La fórmula ha d'acabar retornant un booleà (true o false) per indicar si el botó s'ha de mostrar.
  3. Ninext aplica les modificacions
    Quan s'obre o es refresca el registre, Ninext executa la funció onUpdate, llegeix l'objecte retornat i aplica dinàmicament els canvis d'aparença al botó.

Implementació

Un sol bloc de codi a la fórmula «Display field only, if»

Ninox
"Declaration of the onUpdate function that customizes the button";
function onUpdate(buttonValues : any) do
 let count := this.Count;
 {
      caption: if count > 0 then
          "Send (" + count + ")"
      else
          "Send"
      end,
      tooltip: "Click to send your request",
      buttonColor: if count > 0 then "red" else "blue" end,
      badge: {
           caption: if count > 0 then text(count) else "" end,
           color: "red"
      }
 }
end;

"Determination of the button's visibility";
this.Count >= 0

Comentaris:

  • La funció onUpdate construeix un objecte que permet modificar el text del botó (amb un indicador numèric si Count és positiu), el text d'ajuda, el color del botó i mostrar-hi un badge.
  • El bloc de codi final retorna un booleà per determinar si el botó s'ha de mostrar.

Exemple mínim (només badge)

Ninox
"Declaration of the onUpdate function to display only a badge";
function onUpdate(buttonValues : any) do
 let newItems := this.newItems;
 {
      badge: {
           caption: if newItems > 0 then text(newItems) else "" end,
           color: "red"
      }
     }
end;
"The button is always displayed";
true

Comentaris:

  • Només es retorna la propietat badge per mostrar un valor si newItems és més gran que 0.
  • El botó es mostra sense condicions.

Punts importants

  • Retorn booleà final
    Sense retornar true o false al final, el botó no serà visible.
  • Una llegenda de badge sempre en text
    Ninext només mostra el badge si badge.caption és un text no buit. Un nombre (3 en lloc de "3") deixa el badge amagat: feu servir text().
  • Una funció avaluada a part
    Ninext extreu només la funció onUpdate de la fórmula i, després, l'avalua a part, en el context del registre. Per tant, no veu ni les variables ni les altres funcions declarades en altres llocs de «Display field only, if»: declareu dins d'onUpdate tot el que necessiti. Pot llegir els camps del registre (this.Count) i cridar les funcions globals de la base de dades.