Skip to content

Extended Functions

Jani Giannoudis edited this page Jul 9, 2023 · 10 revisions

Extended Functions

Zur Entwicklung umfangreicher und komplexer Regulierungen besteht die Möglichkeit, die Engine Laufzeitfunktionen mit eigenen C# Klassen zu erweitern. Die Auslagerung der Funktionen bietet diverse Vorteile:

  • Der Code kann von übergeordneten Regulierungen wiederverwertet werden
  • Entwicklung in professionelle Entwicklungsumgebungen (Syntax-Highlight, Intellisense usw.)
  • Debuging Support für Case und Report Scripts
  • Besserer Integration in Versionsmanagement-Systeme

Die Umsetzung erfolgt in drei Schriten

  1. Implementierung der Business-Funktionen in C#
  2. Funktionserweiterung registrieren
  3. Verwenden der erweiterten Funktionalität

Composite Function

Die Bussinesfunktionen wird C# Klassen, welche via Argument den Zugriff auf die WageTypeValueFunction erhält.

1  using System;
2  using PayrollEngine.Client.Scripting.Function;
3  namespace ExtendedPayroll.Scripts;
4  public class CompositeWageTypeValueFunction
5  {
6    private WageTypeValueFunction Function { get; }
7    public CompositeWageTypeValueFunction(WageTypeValueFunction function)
8    {
9      Function = function ?? throw new ArgumentNullException(nameof(function));
10   }
11   public decimal GetSalary()
12   {
13     return Function.CaseValue["Salary"];
14   }
15 }

Der Code im Detail:

  • 7-10: Constructor with wage type value function argument
  • 11-14: Custom wage type value method GetSlalary()

Function Registration

Im nächsten Schritt wird die WageTypeValueFunction mit partial erweitert und der Zugriff auf den zuvor estellten Typ gewährleistet.

1 using ExtendedPayroll.Scripts;
2 namespace PayrollEngine.Client.Scripting.Function;
3 public partial class WageTypeValueFunction
4 {
5   private CompositeWageTypeValueFunction function;
6   public CompositeWageTypeValueFunction MyRegulation => function ??= new(this);
7 }

Der Code im Detail:

  • 3: Extend the partial function
  • 5-6: Provide access to the composite function with MyRegulation

Extended Function Usage

Die erweiter Klasse kann in der Wage Type ValueExpression verwendet werden

1 "wageTypes": [
2   {
3     "wageTypeNumber": 100,
4     "name": "Salary",
5     "valueExpression": "MyRegulation.GetSalary()"
6   }
7 ]

In Zeile 6 befindet sich der Aufruf der zusaätzlichen Lohnartfunktion MyRegulation.GetSalary().

Die Erweitung lässt sich mit der Payroll Konsole überprüfen

PayrollConsole PayrunEmployeeTest Test.et.json

TODO add link to the Composite-Example Repo


Next steps

Clone this wiki locally