Lade...
 

CX_HOLIDAY

CX_HOLIDAY

Klassenhierarchie
Beschreibung:

Objekte dieser Klasse dienen als Einträge in Objekten der Klasse CX_HOLIDAYS (die wiederum als Hilfsobjekt für Objekte der Klassen CX_LOCALE dient) und bilden Regeln ab, um Feiertage, Ferien, Betriebsferien, usw. abbzubilden.

Feiertage können für jedes Locale definiert werden. Auch hier gilt, dass die Definitionen kaskadiert angewendet werden: Ein Locale erbt die Definition des übergeordneten Locales.
Eigene CX_HOLIDAY-Objekt können diese Definition erweitern oder auch einschränken: Z.B: weitere Feiertage hinzufügen, eine übergeordnete Feiertags-Definition aufheben, einen Feiertag als Arbeitstag deklarieren.

Beispiel:

Die definierten Feiertage einer übergeordneten Region (Land) werden zuerst erweitert durch Definitionen einer untergeordneten (Bundesland).
Z.B. sind bei der Einstellung "Baden-Württemberg" sowohl nationale ("Tag der deutschen Einheit") wie auch regionale ("Fronleichnam") Feiertage gültig.
Aber es ist auch möglich, für eine untergeordnete Region einen Feiertag wieder aufzuheben. Außerdem kann ein Feiertag als Arbeitstag deklariert werden.
In der Beispiel-Region ist jetzt Fronleichnam kein Feiertag mehr, und am Tag der Deutschen Einheit (bleibt ein Feiertag) wird gearbeitet.

Die Feiertagsdefinition erfolgt in der Locales-Datei locales.xml.

Code-Beispiel:
...

 

Methodenverzeichnis (MDI)
Funktion MA* Parameter Rückgabe Kurzbeschreibung
FormulaMA *      
GetDate     OBJECT  
TermEnumMA *      

* MA = Member-Access-Funktion,
grau unterlegt = geerbte Funktion

 

Datenverzeichnis (DDI)
Datenfeld Typ Referenz-Klasse I* Kurzbeschreibung
termEnum ENUMSHORT    

Der Typ des Feiertags kann eine oder mehrere der folgenden Bezeichner annehmen, wobei die Einträge durch ein "+" verkettet werden.

Bezeichner Beschreibung
TERM Termin
ANNIVERSARY Jahrestag
HOLIDAY Feiertag
VACATION Ferientag
WORKINGDAY Werktag1)

Vergleiche die Bezeichner mit den Datumstyp-Konstanten
Der weitere als Datumstyp-Konstante verfügbare Typ WORKINGDAY wird nicht direkt in den Locales definiert. Er ergibt sich indirekt: Ein Arbeitstag muss zunächst zu den generellen Arbeitstagen des Landes gehören. Diese werden in den Locales mit dem Feld workingDays definiert. Zusätzlich werden aus dieser Menge alle Tage gefiltert, die hier als Jahres-, Feier- oder Ferientag definiert sind.

Mit jeder dieser Definitionen hier werden also auch indirekt alle Funktionen beeinflusst, die auf Basis der Arbeitstage arbeiten, z.B. IsWorkingday.
Bei Datumsperioden muss noch berücksichtigt werden, dass auch auf Funktionen wie NetDuration Einfluss genommen wird. Beim periodische Datum wird die Menge der bestimmten Tage für Ausdrücke wie "Montags und Feiertags" beeinflusst

name MULTIPLE_STRING     In dem Feld Text wird die Bezeichnung des Feiertages als multipler String angegeben
formula STRING    

Mit der Formel wird der Tag selbst definiert, d.h. sie beschreibt, wann dieser Feiertag stattfindet.

Sie wird auf einem Objekt vom Typ CX_DATE ausgewertet, das dem 1. Januar des Jahres entspricht, auf das sich der Feiertag beziehen soll. Soll bspw. der Feiertag im Jahr 2017 berechnet werden, wird die Formel auf CX_DATE(1, 1, 2017) ausgewertet.

Bei der Berechnung ist es zunächst notwendig einen Ausgangstag festzulegen. Hierfür stehen folgende Funktionen zur Verfügung:

Funktion Beschreibung
::Day(tag, monat) Definiert einen festen Tag in jedem Jahr. Soll z.B. der Heiligabend festgelegt werden, so nimmt tag den Wert "24" und monat den Wert "12" an.
::Date(tag, monat, jahr) Definiert einen festen Tag in einem bestimmten Jahr. Dieses ist z.B. bei den sogenannten "beweglichen Ferientagen" von Schulen der Fall, da diese für jedes Jahr neu verteilt werden.
::SpanDate(Startdatum, Enddatum) Definiert nicht einen Tag, sondern einen Zeitraum. Dieses ist insbesondere bei Schulferien der Fall, die je nach Jahr unterschiedlich gelegt werden und dabei keiner Regel, wie es sie beispielsweise für den Umschalttermin von Winter- auf Sommerzeit gibt, folgen.
::Easter() Berechnet für das aktuelle Jahr das Datum des Ostersonntags

Der Aufbau und weitere Erklärungen zu einer Formel sind der Dokumentation der Formel-Klasse zu entnehmen.

Das so angegebene Ausgangsdatum kann nun mit jeder Funktion, die auf ein Datum anwendbar ist und als Ergebnis ein neues Datum liefert, manipuliert werden. Vorzugsweise werden dieses die Funktionen Next und Previous, sowie die Operatoren + und - zum Addieren bzw. Subtrahieren einer bestimmten Anzahl von Tagen, sein.

Achtung!
Es ist derzeit nicht möglich, Feiertage zu definieren, die
die kein vollständiges Datum haben (weil sie z.B. in jedem Jahr gelten sollen), und
den Jahreswechsel überlappen (z.B. die erste Kalenderwoche)

Im folgenden soll eine Beispiel-Formel aufgeführt werden, die den "1. Advent" spezifiziert. Dieser Tag ist definiert als der vierte Sonntag vor dem ersten Weihnachtstag. D.h. ausgehend vom ersten Weihnachtstag wird zunächst der vorhergehende Sonntag gesucht und dann werden drei Wochen von diesem Tag abgezogen. Die zugehörige Formel sieht dann wie folgt aus:

HOLIDAY T("Ostermontag", "Easter monday") "::Easter() + 1" LIMITED HOLIDAY T("1. Weihnachtstag", "Christmas") "::Day(25,12)" ALL

Da es sich hierbei um vollständige Formeln handelt, können auch komplexere Ausdrücke angegeben werden:

HOLIDAY T("Reformationstag", "Reformation day") "if (::YearOfDate() > 2017) ::Day(31,10) else ::Date(31,10,2017)" ALL

 

evaluatable CHAR    

Mit dem Bereich wird die Gültigkeit eines Feiertags für Funktionen wie NameOfDay bestimmt. Dabei existieren die Fälle "LIMITED" und "ALL". "LIMITED" wird immer dann angegeben, wenn der beschriebene Feiertag nicht in jedem Jahr an demselben Datum stattfindet. Dieses gilt z.B. für die Osterfeiertage. Dementsprechend werden Tage, die jedes Jahr an dem gleichen Tag stattfinden, wie z.B. Weihnachten, mit "ALL" gekennzeichnet.

Diese Kennzeichnung hat nur Auswirkung bei Verwendung von unvollständigen Daten, wie z.B. "25. Dezember", beim Aufruf von Funktionen, die sich auf Feiertage beziehen. Diese Funktionen untersuchen dann nur die Feiertagsdefinitionen, die mit "ALL" gekennzeichnet sind.
Wegen dieser Einschränkung wird ein unvollständiges Datum, das z.B. dem Ostersonntag des laufenden Jahres entspricht, auch dann wie ein Datum behandelt, das kein Feiertag ist

owner REL_1M CX_LOCALE    

* I = Indizierbares Datenfeld,
grau unterlegt = geerbtes Datenfeld

 

Verwendung in AppsWH
Modul Kurzbeschreibung