4D View Pro: Erweiterung der benutzerdefinierten Funktionen

Manchmal benötigen Sie spezielle Berechnungen für den Inhalt einer Spalte oder Zeile, ohne zu wissen, wie viele Zellen davon betroffen sind.

Mit 4D 20 R5 können Sie nun mehrere Zellbereiche an eine benutzerdefinierte Formel in Ihrer Tabellenkalkulation übergeben, z. B. „A1:C10“ oder ein Objekt wie „OBJECT(„Vorname“,B2, „Nachname“,C2)“, und eine Sammlung oder ein Objekt mit allen Zellinhalten in Ihrer 4D Methode abrufen.

HDI 4DVP Sammlung und Objekt in benutzerdefinierten Funktionen

Benutzerdefinierte Funktionen sind eine leistungsstarke Funktion von 4D View Pro, mit der Sie die Funktionalität erweitern und benutzerdefinierte Berechnungen oder Operationen durchführen können, die auf Ihre speziellen Bedürfnisse zugeschnitten sind. Sie können jetzt Sammlungen als Parameter für benutzerdefinierte Funktionen akzeptieren, die Werte aus benutzerdefinierten Zellbereichen enthalten.

Verwaltung von Sammlungen

Ein Beispiel für eine benutzerdefinierte Funktion, die Sammlungen verwendet, ist die Berechnung des Durchschnitts von Werten, die nicht Null sind. Dieser Prozess umfasst 2 grundlegende Schritte:

  • Erstellen Sie eine Funktion, die von 4D View Pro ausgeführt werden soll, um die Berechnung durchzuführen.
  • Formulieren Sie ein Objekt, um die Optionen der benutzerdefinierten Funktion zu spezifizieren.

Für dieses Beispiel werden wir eine Klasse namens CustomFunctionCreator erstellen.

Schauen wir uns an, wie wir diese Berechnung durchführen können!

Erstellung einer benutzerdefinierten Funktion

Zunächst erstellen wir die Funktion, die von 4D View Pro aufgerufen wird. Diese Funktion mit der Bezeichnung _averageNonZeroValues() benötigt einen Parameter für die Sammlung und ist wie folgt definiert:

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

Aktivieren Sie die benutzerdefinierte Funktion in 4D View Pro

Nachdem wir nun die Funktion _averageNonZeroValues() erstellt haben, wollen wir ihre Verwendung als Formel in 4D View Pro aktivieren. Dazu verwenden wir den Befehl VP SET CUSTOM FUNCTIONS, der ein Objekt benötigt, das die wesentlichen Details zur Erstellung der benutzerdefinierten Funktion in 4D View Pro enthält. Ein umfassendes Verständnis dieses Prozesses finden Sie in 4D View Pro: Use 4D formulas in your spreadsheet blog post, der einen umfassenden Überblick gibt.

Wir implementieren die Funktion averageNonZeroValues(), um das Objekt zu konstruieren, das alle für den Befehl VP SET CUSTOM FUNCTIONS erforderlichen Parameter enthält:

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

Objektverwaltung

SpreadJS bietet eine OBJECT-Formel zur Erzeugung von Objekten, die es dem Benutzer ermöglicht, Inhalte aus mehreren Zellen in einem einheitlichen Objekt zusammenzufassen. Ein Beispiel für eine benutzerdefinierte Funktion, die ein Objekt verwendet, besteht darin, zu definieren, welcher Teil eines Objekts geändert wurde. Wie bei den obigen Sammlungen gibt es 2 grundlegende Schritte für diesen Prozess:

  • Erstellen Sie eine Funktion, die von 4D View Pro ausgeführt werden soll, um die Berechnung durchzuführen.
  • Formulieren Sie ein Objekt, um die Optionen der benutzerdefinierten Funktion festzulegen.

Für dieses Beispiel werden wir die Klasse CustomFunctionCreator erstellen.

Erstellung einer benutzerdefinierten Funktion

Zunächst erstellen wir die Funktion, die von 4D View Pro aufgerufen wird. Diese Funktion mit der Bezeichnung _modifiedProperties() benötigt einen Objektparameter und ist wie folgt definiert:

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 ""

Aktivieren Sie die benutzerdefinierte Funktion in 4D View Pro

Wie für das Beispiel averageNonZeroValues() müssen wir die Funktion modifiedProperties() implementieren, um das Objekt zu erstellen, das alle für den Befehl VP SET CUSTOM FUNCTIONS erforderlichen Parameter enthält:

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

Deklaration der benutzerdefinierten Funktion

Der letzte Schritt ist der Aufruf VP SET CUSTOM FUNCTIONS auf das Ereignis„on Load“ des Formulars mit den Funktionen averageNonZeroValues() und 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 

Jetzt haben Sie 2 neue Funktionen, die Sie in Ihrem 4D View Pro Bereich verwenden können:

  • „MY_AVERAGENONZEROVALUES“::

  • „MEINE_ÄNDERUNGEN“:

blank

Zusammenfassend lässt sich sagen, dass die Verwendung von benutzerdefinierten Funktionen in 4D View Pro die Funktionalität der Tabellenkalkulation auf ein neues Niveau hebt und maßgeschneiderte Berechnungen und Operationen ermöglicht. Weitere Informationen entnehmen Sie bitte unserer Dokumentation.

Fabrice Mainguené
- Product Owner -Fabrice Mainguené gehört seit November 2016 zum 4D Program Team. Als Product Owner ist er verantwortlich für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen. Seine Aufgabe ist es auch, sicherzustellen, dass die gelieferte Funktionsimplementierung den Kundenanforderungen entspricht.Nach seinem Bachelor-Abschluss in Informatik am CNAM arbeitete Fabrice als Windev-Entwickler bei einem kleinen Software-Verlag. Danach arbeitete er für verschiedene Unternehmen in Industrie und Handel als Windev- und Webentwickler sowie als technischer Berater für neue Funktionen.