Saltar al contenido principal

Hacer que un botón haga algo

Objetivo​

Dar a un botón de la barra de comandos de un formulario o una vista algo que hacer cuando se pulsa.

Requisitos previos​

  • Un formulario o una vista que está editando en su diseñador, con al menos una acción en su franja Acciones.

Pasos​

  1. Abra el formulario en el Diseñador de formularios, o la vista en el Diseñador de vistas.

  2. Seleccione su botón en la franja Acciones.

  3. En Al pulsar, elija qué hace:

    OpciónQué necesitaQué ocurre
    Abrir una vistauna tabla (en blanco significa esta tabla) y una de sus vistasla lista se abre en esa vista
    Nuevo registrouna tabla (en blanco significa esta tabla)se abre un formulario de registro en blanco
    Abrir un panelun panelse abre el panel
    Abrir una pantallauna pantalla dibujadase abre la pantalla
    Ejecutar un informeun informeel informe se abre como pantalla propia, acotado al registro abierto cuando lo hay
    Abrir una dirección webuna dirección http:// o https://, que puede nombrar campos del registrose abre en una pestaña nueva
    Ejecutar un scriptnada aquí; consulte más abajose ejecuta su script de BS Lang
  4. Elija el destino de la lista. Cada uno de esos cuadros abre una lista con búsqueda de lo que realmente tiene su entorno, con el nombre para mostrar de cada elemento en la primera línea y su nombre lógico debajo. Escriba para filtrar: coincide cualquiera de las dos líneas, así que par_inv encuentra «Invoices» y también lo hace escribir inv.

  5. Guarde el formulario o la vista.

Deje la tabla en blanco siempre que quiera decir «esta». Un comando que no nombra ninguna tabla funciona sobre la tabla en la que esté colocado, así que el mismo botón se puede copiar a otro formulario sin tener que volver a apuntarlo. Eso es lo que significa el texto Esta tabla del cuadro vacío, y la ✕ junto a una tabla elegida lo restablece.

La lista de vistas pertenece a la tabla de encima. Elija primero la tabla; las vistas que se ofrecen son las vistas de lista de esa tabla, que son las que puede abrir una página de lista. Si cambia la tabla, una vista que ya había elegido se borra, porque una vista de una tabla no puede abrirse en otra: es mejor volver a elegir que guardar un botón que falla cuando alguien lo pulsa.

Un informe conoce su propia tabla, así que no hay tabla que elegir junto a él.

Una dirección web puede llevar el registro​

Ponga el nombre lógico de un campo entre llaves y la dirección usará el valor de ese campo en el registro abierto:

https://teams.microsoft.com/l/call/0/0?users=4:{pw_phone_number}
https://www.openstreetmap.org/search?query={address1_city}

El valor se codifica para URL automáticamente, de modo que un número de teléfono como +44 20 7946 0000 llega entero. La dirección debe seguir empezando por http:// o https://, escrito explícitamente: un campo puede rellenar parte de una dirección, nunca su esquema.

Si el campo está vacío, no se abre nada y se indica a quien pulsó el botón qué campo es. En una lista no hay registro abierto, así que una dirección con un campo solo funciona en un formulario.

Las cinco primeras llevan al usuario a algún sitio, y dejan una vía de vuelta​

Abrir una vista, Nuevo registro, Abrir un panel, Abrir una pantalla y Ejecutar un informe son navegaciones: cada una sustituye la pantalla en la que se pulsó el botón, y la barra de direcciones lo refleja, de modo que el resultado se puede actualizar, guardar en marcadores o enviar a alguien.

Por eso, la pantalla que abre un comando lleva un botón ← que vuelve al lugar de origen. Al pasar el puntero por encima, nombra ese lugar: «Volver a Accounts», o «Volver a Invoices · Contoso Ltd» cuando el botón se pulsó en un registro.

Se sitúa allí donde ya está la navegación de esa pantalla, así que siempre está en la misma esquina:

  • una lista y un formulario de registro lo ponen al principio de la barra de comandos, donde siempre ha estado la flecha de un formulario; en un formulario es esa flecha, así que hay una sola salida y no dos;
  • un informe lo pone al principio de su propia barra de herramientas, antes del nombre del informe;
  • un panel y una pantalla dibujada no tienen barra de herramientas, así que va en la esquina superior izquierda.

La flecha le acompaña mientras siga moviéndose dentro de la aplicación, de modo que abrir un registro desde una lista a la que le llevó un botón no pierde la vía de vuelta; desaparece cuando elige algo de la navegación propia de la aplicación, que es un cambio de plan y no parte del trayecto. Una pantalla a la que llegó usted mismo desde la navegación no tiene flecha de vuelta, porque no hay nada que deshacer.

Si el formulario que abandona tiene cambios sin guardar, se le pregunta antes de salir: la misma pregunta que hace cualquier otra forma de salir de un formulario.

Un informe ejecutado desde un registro imprime ese registro; uno ejecutado desde una lista abarca toda la tabla. La búsqueda y el filtro de una lista no viajan con él, porque un informe se direcciona por su propio nombre y un filtro no es algo que pueda llevar una dirección. Para hacer un informe sobre un conjunto de registros más reducido, ponga el filtro en el propio informe.

Cuándo escribir un script​

Elija Ejecutar un script y aparecerá el botón Editar código. Recurra a él cuando lo que hace el botón depende de algo que solo sabe el navegador: lo que escribió el usuario o qué filas marcó.

Un script puede llamar a:

LlamadaQué hace
getValue(field)el valor actual de un campo en el formulario abierto
setValue(field, value)establece un campo en el formulario abierto (no guarda)
recordId()el id del registro abierto, o ""
selectedCount() / selectedId(index)cuántas filas están marcadas, y una de ellas
openRecord(table, id)abre un registro; un id vacío abre uno en blanco
newRecord(table, { field: value })abre un registro en blanco con esos campos ya rellenados. No se guarda nada hasta que la persona pulsa Guardar
openView(table, view) / openDashboard(name) / openScreen(name) / runReport(name)los mismos movimientos que el selector
openUrl(url)abre una dirección http/https en una pestaña nueva; un {field} en ella se rellena, como arriba
notify(message)comunica algo al usuario
refresh()vuelve a cargar lo que hay en pantalla
save()pulsa el Guardar del formulario, después de lo que haya establecido el script. Solo en un formulario
if (selectedCount() == 0) {
notify("Tick a ticket first.");
} else {
openRecord("par_ticket", selectedId(0));
}

Así es como el botón Llamar de Sales abre Teams y una llamada telefónica sobre el cliente con una sola pulsación:

openUrl("https://teams.microsoft.com/l/call/0/0?users=4:{telephone1}");
newRecord("pw_activity", {
pw_type: 110000002,
pw_regarding: "contact:" + recordId(),
pw_phone_number: getValue("telephone1")
});

Una búsqueda que puede apuntar a varias tablas se rellena como table:id, como ocurre aquí con pw_regarding.

El editor subraya los errores mientras escribe y completa esas funciones; es el mismo editor en el que se escribe una regla de negocio.

Lo que no puede hacer un comando​

No puede escribir un registro ni imponer nada. setValue cambia el formulario que tiene delante el usuario, y lo que se puede almacenar lo decide el servidor. Una regla que debe cumplirse pulse quien pulse lo que sea corresponde a un paso de complemento de servidor.

save() no es una forma de saltárselo. Pulsa por el usuario el propio Guardar del formulario, con las mismas comprobaciones: campos obligatorios, las reglas que se ejecutan al guardar y lo que rechace el servidor. Es lo que permite que un solo botón establezca un campo y lo guarde, como el Enviar de un correo electrónico:

setValue("pw_delivery", 110000001);
save();

Cada superficie tiene además sus propios límites, y a un comando que pide más se le indica en lugar de aparentar que funciona:

  • una lista no tiene registro abierto, así que setValue no hace nada allí;
  • una pestaña de relacionados dentro de un formulario no tiene dirección propia, así que no puede navegar;
  • un formulario no se vuelve a cargar con refresh(), porque contiene cambios que nadie ha pedido perder.

Cada entrada de un botón dividido hace lo suyo​

Agregue un botón dividido y sus entradas de menú pueden tener su propio comportamiento: una entrada abre una dirección web mientras otra inicia un registro. Una entrada que deje sin configurar recurre al comportamiento del botón principal.

En el menú Más (…) un botón dividido es un grupo: su nombre, con sus entradas debajo. El nombre solo es una entrada por sí mismo cuando el botón hace algo propio; si no, es solo el encabezado.

En la barra funciona igual: cuando un botón dividido no tiene comportamiento propio, pulsar su nombre abre su menú, igual que su flecha.

Solución de problemas​

  • «… does nothing yet: it has neither an action nor a script.» — nunca se dio un comportamiento al botón. Elija uno en Al pulsar.
  • «… is missing what it should open.» — el comportamiento está establecido pero su cuadro está vacío, o la dirección web no es http/https. Una dirección javascript: se rechaza en todas las capas, también al importar.
  • «… needs …, which is empty on this record.» — la dirección web nombra un campo que no tiene nada. Rellene el campo o pulse el botón en un registro que lo tenga.
  • «… could not run: …» — el script falló. El mensaje es el del propio intérprete, y la pantalla sigue funcionando.
  • «… asked for something this screen cannot do.» — consulte los límites anteriores.
  • El informe se abrió pero muestra todos los registros. Se ejecutó desde una lista, o desde un registro que nunca se ha guardado: no hay registro al que acotarlo. Abra primero el registro.
  • Falta el botón Editar código. — el botón ya nombra un comportamiento. Elija Ejecutar un script para recuperar el editor; dos comportamientos en un mismo botón significarían que uno de ellos pierde sin avisar.

Escenarios relacionados​