-
-
Notifications
You must be signed in to change notification settings - Fork 17
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
- Implementierung der Business-Funktionen in C#
- Funktionserweiterung registrieren
- Verwenden der erweiterten Funktionalität
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 methodGetSlalary()
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 thepartial
function -
5-6
: Provide access to the composite function withMyRegulation
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
- Explore the Payroll Engine Resources
🤝 Thank you for supporting this project with a donation.
⚡ This is a pre-relase version of the initial development, please read the restrictions.
- Payroll Engine