4D View Pro: Mejora de las funciones personalizadas

Traducido automáticamente de Deepl

A veces, puede necesitar cálculos especializados sobre el contenido de una columna o fila sin saber cuántas celdas se verán afectadas.

Con 4D 20 R5, ahora puede pasar múltiples rangos de celdas a una fórmula personalizada dentro de su fórmula de hoja de cálculo, como «A1:C10», o un objeto como «OBJECT(«Firstname»,B2, «Lastname»,C2)», y recuperar una colección o un objeto que contenga todo el contenido de las celdas en su método 4D.

HDI 4DVP Colección y Objeto en Funciones Personalizadas

Las funciones personalizadas son una potente característica de 4D View Pro que le permite ampliar su funcionalidad y realizar cálculos u operaciones personalizadas adaptadas a sus necesidades específicas. Ahora puede aceptar colecciones como parámetros de funciones personalizadas que contengan valores de rangos de celdas especificados por el usuario.

Gestión de colecciones

Un ejemplo de función personalizada que utiliza colecciones consiste en calcular la media de los valores distintos de cero. Este proceso comprende 2 etapas fundamentales:

  • Establecer una función destinada a ser ejecutada por 4D View Pro para realizar el cálculo.
  • Formular un objeto para especificar las opciones de la función personalizada.

Para este ejemplo, crearemos una clase llamada CustomFunctionCreator.

¡Veamos cómo realizar este cálculo!

Creación de la función personalizada

En primer lugar, crearemos la función llamada por 4D View Pro. Esta función, llamada _averageNonZeroValues(), toma un parámetro de colección y se define así:

Function _averageNonZeroValues($values : Collection) : Real
    // Average of the non zero and non null values in the range
	
    // Sum of all the collection values
    var $total:=$values.flat().sum()
    // Calculates the number of cells containing a value other than 0 or NUll
    var $NonZeroValueNumber : Integer:=$values.flat().count()-$values.flat().countValues(0)
	
    // Returns the calculation result to be displayed in the cell
    return $NonZeroValueNumber>0 ? $total/$NonZeroValueNumber : 0

Habilitar la función personalizada en 4D View Pro

Ahora que hemos establecido la función _averageNonZeroValues(), queremos habilitar su uso como fórmula en 4D View Pro. Para lograrlo, empleamos el comando VP SET CUSTOM FUNCTIONS, que necesita un objeto que abarque los detalles esenciales requeridos para crear la función personalizada dentro de 4D View Pro. Para una comprensión completa de este proceso, puede referirse a 4D View Pro : Use 4D formulas in your spreadsheet blog post, que proporciona una visión general.

Implementamos la función averageNonZeroValues() para construir el objeto que aloja todos los parámetros necesarios para el comando VP SET CUSTOM FUNCTIONS:

Function averageNonZeroValues()->$customFunction : Object
    var $this : Object
	
    $customFunction:={}
    $this:=This // Capture This for the formula
	
    // formula that will be called when the custom function is used in the spreadsheet
    $customFunction.formula:=Formula($this._averageNonZeroValues($1))
    // If a parameter is of collection type, the declaration of the custom function parameters is mandatory
    $customFunction.parameters:=[{name: "Values"; type: Is collection}]
    // Summary of the custom function using in the autocomplete popup 
    $customFunction.summary:="Returns the average of non zero values"
    // Expected number of parameters
    $customFunction.minParams:=1
    $customFunction.maxParams:=1

Gestión de objetos

SpreadJS ofrece una fórmula OBJECT diseñada para generar objetos, lo que permite a los usuarios consolidar el contenido de varias celdas en un objeto unificado. Una ilustración de una función personalizada que utiliza un objeto consiste en definir qué parte de un objeto ha sido modificada. Al igual que con las colecciones anteriores, este proceso consta de 2 pasos básicos:

  • Establecer una función destinada a ser ejecutada por 4D View Pro para realizar el cálculo.
  • Formular un objeto para especificar las opciones de la función personalizada.

Para este ejemplo, completaremos la clase CustomFunctionCreator .

Creación de la función personalizada

En primer lugar, crearemos la función llamada por 4D View Pro. Esta función, llamada _modifiedProperties(), toma un parámetro de objeto y se define así:

Function _modifiedProperties($object: Object) : Text
    // Comparison between the properties in the Form.people object and the properties in the spreadsheet
    var $myObject : Object:=$object.value

     // Search the object attributes modified between the people data and the data in the spreadsheet
     For each ($property; $myObject)
          // comparison between the object returned by the spreadsheet and the Form.people object
          If ($myObject[$property]#Form.people[$property])
               return "Data modified."
          End if 
     End for each 
     return ""

Habilitar la función personalizada en 4D View Pro

Como para el ejemplo averageNonZeroValues(), necesitamos implementar la función modifiedProperties() para construir el objeto que contiene todos los parámetros necesarios para el comando VP SET CUSTOM FUNCTIONS:

Function modifiedProperties()->$customFunction : Object
    var $this : Object
	
    $customFunction:={}
    $this:=This // Capture This for the formula
	
    // formula that will be called when the custom function is used in the spreadsheet
    $customFunction.formula:=Formula($this._modifiedProperties($1))
    // If a parameter is of collection type, the declaration of the custom function parameters is mandatory
    $customFunction.parameters:=[{name: "Values"; type: Is object}]
    // Summary of the custom function using in the autocomplete popup 
    $customFunction.summary:="Returns a message when the object is modified by the user"
    // Expected number of parameters
    $customFunction.minParams:=1
    $customFunction.maxParams:=1

Declaración de la función personalizada

El último paso es llamar a VP SET CUSTOM FUNCTIONS al evento«on Load » del formulario utilizando las funciones averageNonZeroValues() y modifiedProperties():

Case of 
		
  : (FORM Event.code=On Load)
    var $customFunctions:={}

    // Declaration of authorized custom functions in the 4D View Pro area
    var $creator:=cs.CustomFunctionsCreator.new()
    $customFunctions.MY_AVERAGENONZEROVALUES:=$creator.averageNonZeroValues()
    $customFunctions.MY_MODIFICATIONS:=$creator.modifiedProperties()

    VP SET CUSTOM FUNCTIONS("ViewProArea"; $customFunctions)
End case 

Ahora, tiene 2 nuevas funciones utilizables en su área 4D View Pro:

  • «MY_AVERAGENONZEROVALUES»:

  • «MIS_MODIFICACIONES»:

blank

En conclusión, el uso de funciones personalizadas en 4D View Pro eleva la funcionalidad de la hoja de cálculo a nuevas cotas, permitiendo cálculos y operaciones a medida. Consulte nuestra documentación para más información.

Fabrice Mainguené
- Product Owner -Fabrice Mainguené se unió al equipo de 4D Program en noviembre de 2016. Como Product Owner, está a cargo de escribir las historias de usuario y luego traducirlas a especificaciones funcionales. Su papel es también asegurarse de que la implementación de la característica entregada cumple con las necesidades del cliente. Después de obtener una licenciatura en Ciencias de la Computación en el CNAM, Fabrice se unió a una pequeña empresa de publicación de software como desarrollador Windev. A continuación, trabajó para diferentes empresas del sector industrial y comercial como desarrollador de Windev y de la web, así como asesor técnico de nuevas funcionalidades.