6 ejemplos prácticos sobre cómo utilizar las macros

Traducido automáticamente de Deepl

4D 18 R5 introdujo las macros de formulario. Pueden ser increíblemente útiles, por ejemplo, proporcionando una forma ideal de ahorrar tiempo en tareas repetitivas. En esta entrada del blog, le mostraremos algunos ejemplos básicos para aprender más sobre el funcionamiento de las macros y las posibilidades que ofrecen. Todos los ejemplos siguientes están disponibles en GitHub.

Ejemplo 1: Cambiar el atributo de un objeto de formulario

Esta es una macro para establecer el color de la fuente en rojo para todos los objetos de formulario seleccionados.

En el archivo FormMacros.json, declaro mi macro:

{
   "macros": {
      "Set Red": {
         "class": "SetRedColor"
      }
}

Creo una clase y con la propiedad«currentSelection«, recupero la colección de objetos de formulario seleccionados. Luego cambio la propiedad del objeto formulario. Finalmente, devuelvo el atributo«currentPage» que contiene las modificaciones para informar a 4D.

El código:

Function onInvoke($editor: Object) : Object
var $name : Text
If ($editor.editor.currentSelection.length>0)
// Set stroke to red for each selected objects
For each ($name;$editor.editor.currentSelection)
$editor .editor.currentPage.objects[$name].stroke:="red"
End for each
Else
ALERT ("Por favor, seleccione un objeto de formulario.")
End if
// Notificar a 4D la modificación
$0 :=New object("currentPage";$editor.editor.currentPage)

La clase«SetRedColor» contiene el código de la macro, está disponible en el componente«HDI_FormMacro» en GitHub.

Ejemplo 2: Utilizar parámetros en el archivo de macros JSON

Algunos textos deben estar en rojo, otros en verde. Podría crear dos macros con sus propias clases asociadas, o puedo crear dos macros con parámetros como el color, y asociarlas a la misma clase.

En el archivo FormMacros.json, declaro dos macros que utilizan la misma clase y el parámetro color:

{
   "macros": {
      "Set Font Color to Red": {
         "class": "SetFontColor",
         "color": "red"
      },
      "Set Font Color to Green": { 
         "class": "SetFontColor", 
         "color": "green"
      },
}

En el constructor de la clase, recupero el parámetro color:

Class constructor
var . := . $1 Object
Thiscolor$1color

En la función onInvoke, puedo utilizar el mismo código que en el ejemplo 1. La única diferencia es que en lugar de utilizar la cadena «rojo», utilizamos la variable «This.color«.

La clase«SetFontColor» contiene el código de la macro, está disponible en el componente«HDI_FormMacro» en GitHub.

Ejemplo 3: Añadir un objeto de formulario con un método

Con una macro, también puedes añadir objetos del formulario con un método. Hay varias formas de asociar o añadir un método. Te recomiendo que leasesta página de la documentación que explica todas las posibilidades.

En este ejemplo, sólo se da la línea de código del método a 4D. Al ejecutarse, 4D creará y nombrará el archivo del método correspondiente.

Function onInvoke($editor: Object)->$result: Object
var $btnHello : Object

// Create a "Hello" button
$btnHello :=New object("type"; "button";\
"text"; "Hello World!";\
"method";New object("source"; "ALERT(\"coucou\")");\
"events";New collection("onClick");\
"width";120;\
"height";20;\
"top";0;\
"left";0)

// Add button in the current page
$editor.editor.currentPage.objects.btnHello:=$btnHello
// Select the new button in the form editor
$editor.editor .currentSelection.clear()
$editor.editor .currentSelection.push("btnHello")

// Notify 4D of the modification
$result :=New object
$result .currentSelection:=$editor.editor.currentSelection
$result .currentPage:=$editor.editor.currentPage

Para posicionar fácilmente el objeto formulario en el formulario y modificar otras propiedades (si es necesario), selecciono el objeto formulario con un simple clear() y push() en la«currentSelection», sin olvidar devolver«currentSelection» para notificar a 4D sobre las modificaciones.

La clase«AddButton» contiene el código de la macro, está disponible en el componente«HDI_FormMacro» en GitHub.

Ejemplo 4: Comprobar las rutas de las imágenes en un formulario

También puedes escribir macros que no modifican el formulario. En cambio, estas macros te permiten validar información, atributos o propiedades en tu formulario. Por ejemplo, validar las rutas de las imágenes de su formulario multipágina.

La clase«CheckImagePath» contiene el código de la macro, está disponible en el componente«HDI_FormMacro» en GitHub.

Ejemplo 5: Utilizar un diálogo modal en la macro

Una macro también puede mostrar un diálogo modal. Por ejemplo, para mostrar la lista de objetos de la página actual con su tipo, nombre y clase CSS, o cualquier otro parámetro que desee. Cuando el desarrollador hace clic en el botón Seleccionar del diálogo, los objetos seleccionados también se seleccionan en el editor de formularios.

blank

La clase«ObjectList» contiene el código de la macro, está disponible en el componente«HDI_FormMacro» en GitHub.

Ejemplo 6: Alineación a un objeto

Para alinear objetos a un objeto de referencia en 4D, es necesario pasar por el diálogo de alineación. ¿Por qué no seleccionar varios objetos y decidir que el objeto que está debajo del contexto de clic es el objeto de referencia? Así en su código:

  • recibes la lista de objetos seleccionados en la propiedad «currentSelection» y el nombre del objeto bajo la propiedad
  • y el nombre del objeto bajo el contexto de clic está en la propiedad «target«.

blank

¡Voilà! Gracias a esta información, puede crear todas las alineaciones o distribuciones que desee. En la clase«AlignOnTarget«, tienes un ejemplo de alineación izquierda, derecha, superior e inferior en relación a un objeto. En esta macro, los grupos no están implementados, así que si añades esta opción, ¡no dudes en compartirla en GitHub!

Vanessa Talbot
• Propietario de producto - Vanessa Talbot llegó al equipo de 4D Program en junio de 2014. Como Propietario de producto, está a cargo de escribir las historias de los usuarios y luego traducirlas a especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Desde su llegada, ha trabajado en la definición de funcionalidades claves en 4D. Ha trabajado en la mayoría de las nuevas funcionalidades de multi hilo apropiativo y también en un tema muy complejo: la nueva arquitectura para la aplicación engined. Vanessa es licenciada por Telecom Saint-Etienne. Comenzó su carrera en el Instituto de Investigación Criminal como desarrolladora del departamento audiovisual. También ha trabajado en medios de comunicación y en el ámbito médico como experta en soporte técnico, producción y documentación de nuevas funcionalidades.