Befehlszeile¶
Die Anwendung lässt sich auch über die Befehlszeile steuern. Dazu muss die Befehlszeilen-App angesprochen werden. Dies erfolgt über den Aufruf:
/opt/alvine-platform/bin/alvine-platform
Hinweis
Einige Sonderzeichen, wie $
oder Klammern {
, (
, usw. haben in unterschiedlichen
Shells Sonderfunktionen und müssen u.U. escaped werden. Wie das genau erfolgt ist in der
Dokumentation zur entsprechenden Shell nachzulesen.
Die Befehle verwenden - auf kompatiblen Terminals - Steuercodes zur Darstellung der Ausgabe.
Sollen diese Steuercodes nicht ausgegeben werden, so kann über die Umgebnungsvariable TERM=raw
das Verhalten deaktiviert werden.
Im folgenden werden die einzelnen Befehle aufgeführt.
Allgemeine Befehle¶
Hilfe¶
Mittels help
wird eine Hilfe mit allen Befehlen angezeigt. Über die Option --filter
kann die Ausgabe auf einen Befehl beschränkt werden.
Im folgenden Beispiel werden nur Befehle, die im dev-Namensraum liegen ausgegeben.
/opt/alvine-platform/bin/alvine-platform help --filter dev
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--filter | Filterung der Ausgabe auf den angegebenen Befehl | dev |
Version¶
Der Befehl version
zeigt die Version des Alvine-Systems und die Version der aktuellen Daten an.
Dieser Befehl hat keine Argumente
Legacy¶
Legacy-Befehle ausführen¶
Befehle (cmd) des Legacy-Backends lassen sich über das legacy:run
aufrufen. Die Ausführung erfolgt im Legacy-Kontext.
Über die Optionen können verschiedene Werte übergeben werden.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--argument | -a | URL-Encoded Zeichenkette mit den an das System zu übergebenden Variablenwerten. | a=4&b=5 |
--cmd | -c | CMD des Alvine Backends | 5 |
--output | -o | Ausgabe des Befehls in eine Datei schreiben | /tmp/out.txt |
--uid | -u | Die für den Befehl zu verwendende User-ID | 100 |
--debug | -d | Debugausgabe ausgeben |
/opt/alvine-platform/bin/alvine-platform legacy:run --uid=1 --cmd=5 -d --argument="sxx_export=true&submit=true&sxx_cli_systemintern=true"
Devop¶
Die folgenden Befehle sind für den Betrieb des Systems ausgelegt.
Dateiänderungen prüfen¶
Mit dem Befehl devop:changedfiles
lassen sich Änderungen im Dateisystem prüfen. Beim ersten Durchlauf
werden für die Dateien Prüfsummen gebildet und die Datei über --md5file
angegebene Datei geschrieben.
Bei weiteren Durchläufen werden die angegebenen Dateien mit den Werten in der Prüfdatei verglichen und Änderungen
ausgegeben.
Die Ausgabe der Änderungen kann als text
(default), json
oder xml
erfolgen.
Dieser Befehl kann zum Beispiel mit cron
oder inotifywait
Anwendung finden.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--path | -p | Das zu prüfende Verzeichnis | /srv/images/ |
--md5file | -m | Der Dateiname der MD5-Prüfdatei (die Datei sollte nicht im zu prüfenden Verzeichnis liegen | /srv/img.md5 |
--format | -f | Das Ausgabeformat (Unterstützt werden text (default), json und XML | xml |
--host | -h | Parameter für den Hostname für den Zugriff auf eine externe Ressource | sftp.example.com |
--user | -u | Parameter für den Benutzer für den Zugriff auf eine externe Ressource | sftpuser |
--login | -l | Parameter für den Password für den Zugriff auf eine externe Ressource | sftppassword |
--output | -o | Ausgabe des Befehls in eine Datei schreiben | /tmp/out.txt |
/opt/alvine-platform/bin/alvine-platform devop:changedfiles --path=/srv/www/images \
--md5file=/srv/www/images.md5 --format=json
Die Ausgabe ist im Fall von JSON sieht folgendermaßen aus:
{
"changed": [], // geänderte Dateien
"created": [], // neue Dateien
"removed": [], // entfernete Dateien
"files": [], // Alle geänderten, neuen und entfernten Dateien
"errors": [], // Fehler im Script
"totals": {
"created": 0, // Anzahl der neuen Dateien
"changed": 0, // Anzahl der geänderten Dateien
"removed": 0, // Anzahl der entferneten Dateien
"files": 0, // Anzahl aller geänderten Dateien
"total": 0 // Anzahl aller Dateien im Verzeichnis
}
}
Die gleiche Ausgabe im XML-Format:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<result>
<changed>
</changed>
<created>
</created>
<removed>
</removed>
<files>
</files>
</result>
<totals>
<changed>0</changed>
<created>0</created>
<removed>0</removed>
<files>0</files>
<total>0</total>
</totals>
Webseite crawlen¶
Der Befehl devop:sitemap:crawl
erstellt eine (Sitemap)[https://support.google.com/webmasters/answer/183668?hl=de]
der über die URL --
erreichbaren Webseite.
Über die Optionen können verschiedene Werte übergeben werden.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--url | -u | Erstellen einer Sitemap.xml durch einlesen einer URL | http://example.com/home |
--sitemap | -s | Dateiname der zu erstellenden Sitemap | /srv/sitemap.xml |
--force | -f | Alte Elemente werden gelöscht und die Seitmap neu erstellt | |
--exclude | -e | Urls die auf eines der angegebenen Muster zutreffen werden nicht verarbeitet | index.php |
--domain | -a | Wenn angegeben, so werden nur URL dieser Domain verarbeitet | www.example.com |
--debug | -d | Debugging des Befehls einschalten | |
--output | -o | Ausgabe in Datei umleiten | |
--user-agent | -g | Verwendeter User-Agent. Als Standard wird ein aktueller Chrome-Agent verwendet | Chrome |
--show-status | Zeigt alle URL die mit diesem Status ausgeliefert wurden an. | 200 | |
--show-statistics | Zeigt eine Statistik zum letzten durchlauf an. |
Wenn --sitemap
angegeben wird, so wird eine fertige XML an den angegebenen Ort gespeichert.
/opt/alvine-platform/bin/alvine-platform devop:sitemap:crawl \
--url https://www.example.com/ --domain www.example.com \
--debug --sitemap sitemap.xml --exclude "index\.php" \
--force
Mit der Option --show-statistics
wird die Statistik des letzten Laufes angezeigt.
/opt/alvine-platform/bin/alvine-platform devop:sitemap:crawl \
--url https://www.example.com/ \
--show-statistics
Mit der Option --show-status
können alle URLs die beim letzten Lauf in diesem Status ausgeliefert wurden angezeigt werden.
Mit folgenden Aufruf können alle 200er und 404er angezeigt werden.
/opt/alvine-platform/bin/alvine-platform devop:sitemap:crawl \
--url https://www.example.com/ \
--show-status 200 --show-status 404
Die Arbeitsdateien werden im temporären Verzeichnis des Systems im Verzeichnis alvine-platform/crawler/
gespeichert.
Scripte ausführen¶
Der Befehl devop:run-script
führt das über das Argument --script
angegebene Skript aus.
Hinweis
Neben dem Standardmodus, in dem die Skripte im Anwendungskontext ausgeführt werden, können auch ältere Skripte im Legacy-Modus ausgeführt werden. Der Legacy-Modus darf für neue Scripte nicht mehr verwendet werden.
Über die Optionen können verschiedene Werte übergeben werden.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--argument | -a | URL-Encoded Zeichenkette mit den an das System zu übergebenden Variablenwerten. | a=4&b=5 |
--legacy | -l | Use legacy Environment (deprecated) | 1 |
--uid | -u | Die für den Befehl zu verwendende User-ID | 100 |
--debug | -d | Debugausgabe ausgeben | |
--path | -p | Verzeichnis in dem das Script liegt, ansonsten das aktuelle Verzeichnis. | /Pfad/zum/Script |
--script | -s | Name des Scripts | testscript.php |
--output | -o | Ausgabe des Befehls in eine Datei schreiben | /tmp/out.txt |
/opt/alvine-platform/bin/alvine-platform devop:run-script --legacy=1 \
--uid=1 -d --path=/Pfad/zum/Script -s=testscript.php
Die einzubindenden Scriptdatei wird im Kontext einer Funktion aufgerufen. In dieser Funktion kann zum Beispiel über
Assembly::getInstance()
auf die Anwendung und darüber auf die Datenbankverbindung zugegriffen werden.
Überwachung von cron Vorgängen¶
Über die Optionen können verschiedene Werte übergeben werden.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--name | -n | eindeutiger Name | myJob |
--exit | -e | Exitcode des Programmes | $? |
--message | -m | Mitteilung | my message |
--period | Interval der Prüfung | 1 Minutes |
/opt/alvine-platform/bin/alvine-platform devop:check-cron -n mycron -e $? --period='1 minute'
Beispiele:
mit diesem Aufruf wird ein Fehlereintrag geschrieben, verursacht durch den vorangehenden Wert false
false ; alvine-platform devop:check-cron -n mycron -e $? --period='1 minute'
dieser Aufruf erzeugt einen OK Eintrag, verursacht durch den vorangehenden Wert true
true ; alvine-platform devop:check-cron -n mycron -e $? --period='1 minute'
Mit folgendem API Aufruf /api/util/cron-monitoring
lassen sich die Einträge auslesen.
Datenbankverbindung prüfen¶
Der Befehl devop:mysql:info
gibt die Werte von MySQL-Systemvariablen (wenn man die Rechte hat) aus
Name | Wert |
---|---|
auto_increment_increment | 1 |
auto_increment_offset | 1 |
autocommit | ON |
automatic_sp_privileges | ON |
avoid_temporal_upgrade | OFF |
back_log | 80 |
basedir | /usr/ |
big_tables | OFF |
bind_address | * |
binlog_cache_size | 32768 |
binlog_checksum | CRC32 |
binlog_direct_non_transactional_updates | OFF |
binlog_error_action | ABORT_SERVER |
binlog_format | ROW |
binlog_group_commit_sync_delay | 0 |
binlog_group_commit_sync_no_delay_count | 0 |
folgende Optionen können an den Befehl zusätzlich übergeben werden
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--no-trunc | Werte werden ungekürzt ausgegeben | ||
--as-json | Ausgabe erfolg im JSON Format |
Der Befehl devop:mysql:ping
prüft ob Verbindung möglich ist und gibt 0 bzw 1 als exit zurück
folgende Optionen können an den Befehl zusätzlich übergeben werden
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--version | gibt die Versionsnummer des MYSQL-Servers zurück |
Dokumentation¶
UML-Diagramm erstellen¶
Mit diesem Befehl dev:createuml
können für Klassen UML-Diagramme im plantUML Format erzeugt werden.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--class | -c | Name der Klasse inklusive Namespace | /A/B/C |
--output | -o | Ausgabe des Ergebnisses in eine Datei und nicht auf die Konsole | c:tempa.puml |
Entwicklung¶
Im Bereich Entwicklung dev
sind Befehle zur Systementwicklung und Erweiterung des Systems zusammengefasst.
Phars herunterladen¶
Mit dem Befehl dev:downloadphars
werden die aktuell in der assembly.ini
definierten Phars heruntergeladen.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--output | -o | Verzeichnis in das die Phars gespeichert werden sollen. | c:temp |
--verbose | -v | Namen der Phar-Archive ausgeben |
Wird kein Pfad angegeben, so werden die Dateien in das in der Konfiguration definierte Vendor-Verzeichnis geschrieben.
Datenbank exportieren¶
der Befehl dev:databaseexport
erstellt ein Dump der übergebenen Datenbank sofern diese über die im System hinterlegten Konfigurationsvariablen erreichbar ist.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--name | -n | Name des Datenbankschemas | alvine_platform |
--path | -p | Speicherort des Dumps | |
--exclude | -e | Kommagetrennte Auflistung der Datenbanktabellen die ausgeschlossen werden sollen | sh_shoppingcard,sh_order |
--compress | -c | die exportierten SQL Dateien werden in einem Archiv zusammengefasst | |
--triggers | -t | wird dieser Parameter übergeben so werden die Datenbank Trigger mit exportiert |
Datenbank importieren¶
der Befehl dev:databaseimport
importiert die SQL Dateienin die Datenbank des übergebenen Schemas sofern diese über die im System hinterlegten Konfigurationsvariablen erreichbar ist.
Achtung
die jeweilige übergebene Tabelle wird über diesen Befehl vor dem Import geleert, die Inhalte sind dann unwiderruflich gelöscht.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--name | -n | Name des Datenbankschemas | alvine_platform |
--path | -p | Importpfad für die Dateien / Archiv | |
--compress | -c | über diesen Parameter werden die SQL Dateien aus einem Archiv extrahiert |
Webkomponenten erstellen¶
Vorlagen für neue Webkomponenten zur Darstellung in der Benutzerschnittstellen lassen sich über dev:createwebcomponent
erstellen.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--namespace | Namensraum | a.b.c | |
--version | -v | Version | 1.0.0 |
--name | -n | Name der Komponente | myComponent |
Klassen erstellen¶
Neue Klassen können über das Argument dev:createclass
erstellt, bzw aktualisiert werden.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--class | -c | Name der Klasse inklusive Namespace | /A/B/C |
--type | -t | Typ der Klasse (model) | model |
Weitere Konfigurationsoptionen hängen vom Typ ab.
Modelklassen (Typ model)¶
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--table | Name der Tabelle, die das Model repräsentiert | co_user | |
--exclude | -e | Felder, die nicht in die Objektmap übernommen werden sollen | sys_erpID |
--use | -u | Zu verwendende Traits (erp, archived, ranking) | archive |
Delta SQL Statements erstellen¶
Ein Delta Statement kann über das Argument dev:createdeltasql
erstellt, bzw aktualisiert werden.
Argument | Kurzform | Pflicht | Beschreibung | Beispiel |
---|---|---|---|---|
--name | -n | ja | Name der Tabelle | sh_order |
--id | -i | ja | ID der Tabelle | 7 |
--output | -o | ja | Ausgabe des Statements (print, file, database) | |
--file | -f | nein | Ausgabe in einer Datei | |
-p | nein | Ausgabe in der Console | ||
--database | -d | nein | Ausgabe in der Datenbank | |
--primarykey | -k | nein | Primary Key der Tabelle wird automatisch ermittelt | OID |
--exclude | -e | nein | Die Felder, die nicht für den MD5 verwendet werden sollen zum Beispiel:-e sys_erpLastUpdate -e sys_erpCreation |
sys_erpLastUpdate |
--dateto | nein | Feld für Gültig ab 1 | date_from | |
--datefrom | nein | Feld für Gültig bis 1 | date_to |
/opt/alvine-platform/bin/alvine-platform createdeltasql --name=sh_order -i 7 -o print -e sys_erpLastUpdate -e sys_erpCreation
Die ID muss in der Delta Route definiert und hier übergeben werden. Der Nummernraum der IDs ist im Standard ab der ID '1' und Benutzerdefinierte IDs ab der ID '1000'
Beipsiel : Hier wurde die ID 1 für die Items vergeben.
<configuration>
<urls>
<url name="item" id="1" ><![CDATA[/api/commerce/item/search?q=item.iid%20IN%20%22${idlist}%22]]></url>
</urls>
</configuration>
Ausgabeoptionen¶
Die Ausgabe kann kommagetrennt -o print, file
oder einzeln -o print -o file
oder mit --print -- file
übergeben werden
print¶
Bei der Ausgabe print
werden die Statements direkt in der Console ausgegeben und können kopiert werden.
file¶
Bei der Ausgabe file
werden die Statements in eine sql Datei geschrieben deploymentdatabasetrigger_[Name der Tabelle].sql
database¶
Bei der Ausgabe database
werden die Statements in der Datenbank ausgeführt.
Builder¶
Suchdatenbank aktualisieren¶
Mit dem Befehl build:update-index
kann die Suchdatenbank aktualisiert werden.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--datasource | -s | DataSource-Klasse vom Typ AlvineApplicationPlatformTypesDataSource | |
--indexer | -i | Indexer-Klasse vom Typ AlvineApplicationPlatformBuilderIndexer | |
--locale | -l | Zu verwendende Lokale | |
--company | -c | Mandant | |
--debug | -d | Debugging des Befehls einschalten | |
--config | Json Konfiguration Datei | ||
--idlist | -i | Einschränkungen der zu ladenen IDs, Kommaliste der Primären Schlüssel zum Beispiel IIDs | 10094,10095 |
--disable-delta | abschalten der Delta Funktion | true | |
--delta-uuid | UUID für die Abfrage des letzten Datums in der co_delta_lastrequest | 57a69a47-8f1f-482d-b9e8-ffa1ebc8548b |
Json Konfiguration¶
{
"company": "1",
"locale": "de",
"datasource": "\\Customisation\\Builder\\DataSource\\Commerce\\Item",
"indexer": "\\Customisation\\Builder\\Indexer\\Commerce\\Item",
"delta-uuid": "5b4b135b-5d3b-4fc4-b148-9bbb051fb17c"
}
Die von \Alvine\Application\Platform\Types\DataSource
abgeleitete Klasse muss die Daten bereitstellen.
Abgeleitete Klassen können Traits verwenden, die Inject-Methode definieren. Alle Methoden, die mit inject
anfangen werden
beim Erstellen der Datasource aufgerufen.
Die von \Alvine\Application\Platform\Builder\Indexer
abgeleitete Klasse trägt die Daten in die entsprechende Datenbank ein.
HTML-Fragmente bauen¶
Der Befehl build:create-fragment
erlaubt es mit den Daten einer \Alvine\Application\Platform\Types\DataSource
HTML-Fragmente
zu bauen.
Es können Parameter oder eine Konfigurationsdatei übergeben werden.
Bei Parametern ist nur ein Template und ein Ausgabefile erlaubt.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--datasource | -s | DataSource-Klasse vom Typ AlvineApplicationPlatformTypesDataSource | |
--template | -t | Pfad auf die zu verwendende HTML-Datei | /tmp/template.html |
--locale | -l | Zu verwendende Lokale | de |
--company | -c | Mandant | 1 |
--idlist | -i | Einschränkungen der zu ladenen IDs, Kommaliste der Primären Schlüssel zum Beispiel IIDs | 10094,10095 |
--delta-uuid | UUID für die Abfrage des letzten Datums in der co_delta_lastrequest | 57a69a47-8f1f-482d-b9e8-ffa1ebc8548b | |
--disable-delta | abschalten der Delta Funktion | true | |
--selector | -e | DOM-Selektor zum Ausschneiden von Nodes. | #myID |
--output | -o | Zieldatei, in das das Ergebnis geschrieben wird. Der Dateiname kann Platzhalter aus der Datasource enthalten (Die Platzhalter müssen mit geschweiften Klammern eingefasst sein z.B. | /tmp/result |
--debug | -d | Debugging des Befehls einschalten | |
--config | Json Konfiguration Datei |
Json Konfiguration¶
{
"company": "1",
"locale": "de",
"datasource": "\\Customisation\\Builder\\DataSource\\Commerce\\Item",
"delta-uuid": "5b4b135b-5d3b-4fc4-b148-9bbb051fb17c",
"files": [
{
"template": "{CUSTOMISATIONPATH}resource/frontend/template/detail_guest.html",
"selector": ".myClass",
"output": "{CUSTOMISATIONPATH}resource/frontend/html/detail/guest/{iid}_item.html"
},
{
"template": "{CUSTOMISATIONPATH}resource/frontend/template/detail.html",
"selector": "",
"output": "{CUSTOMISATIONPATH}resource/frontend/html/detail/customer/{iid}_item.html"
},
{
"template": "{CUSTOMISATIONPATH}resource/frontend/template/gallery.html",
"selector": "",
"output": "{CUSTOMISATIONPATH}resource/frontend/html/gallery/customer/{iid}_gallery.html"
},
{
"template": "{CUSTOMISATIONPATH}resource/frontend/template/gallery_guest.html ",
"selector": "",
"output": "{CUSTOMISATIONPATH}resource/frontend/html/gallery/guest/{iid}_gallery.html"
},
{
"template": "{CUSTOMISATIONPATH}resource/frontend/template/interested.html",
"selector": "",
"output": "{CUSTOMISATIONPATH}resource/frontend/html/youmightalsobeinterested/{iid}_gallery.html"
}
]
}
Javscript zusammenfassen¶
Mit dem Befehl build:js
könne Javascript-Dateien zu einer Datei zusammengefasst werden. Es können mehrere Verzeichnisse und Dateien über den
Parameter --source
hinzugefügt werden. Die Dateien werden mittels Babel und Uglify-JS bearbeitet. Externa Bibliotheken können über den
Parameter --extern
hinzugefügt werden. Diese Dateien werden ohne Bearbeitung hinzugefügt.
/opt/alvine-platform/bin/alvine-platform build:js -s source/ -s /dev-source/main.js -e https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/core.js
Hinweis
Für dieses Funktion werden die Node-Module babel
und uglifyJS
benötigt.
Die Konfiguration von Babel muss über Konfigurationsdateien erfolgen. Eine Mögliche Konfiguration
sieht folgendermassen aus babel.config.js
:
module.exports = function (api) {
api.cache(true);
const presets = ['@babel/preset-env'];
return {
presets,
};
}
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--source | -s | Verzeichnis in dem die Quelldateien liegen oder Javascript-Datei. | /src |
--output | -o | Zieldatei in das das Ergebnis geschrieben wird. | /dist |
--node-path | -n | Verzeichnis in dem das Verzeichnis node_modules liegt. | /var/lib/nodejs |
--extern | -e | URL externer Dateien, die eingebunden werden sollen (Datei wird nicht bearbeitet). | /var/lib/nodejs |
--no-minify | Ergebnis nicht minimieren. | ||
--no-babel | BabelJS nicht verwenden |
Css zusammenfassen¶
Mit dem Befehl build:css
können Css-Dateien zu einer Datei zusammengefasst werden.
Argument | Kurzform | Beschreibung | Beispiel |
---|---|---|---|
--source | -s | Verzeichnis in dem die Quelldateien liegen. | /src |
--output | -o | Zieldatei in das das Ergebnis geschrieben wird. | /dist |
--node-path | -n | Verzeichnis in dem das Verzeichnis node_modules liegt. | /var/lib/nodejs |
--extern | -e | URL externer Dateien, die eingebunden werden sollen. | /var/lib/nodejs |
--no-minify | Ergebnis nicht minimieren. |
Voraussetzungen¶
Für einige Befehle sind NodeJS Bibliotheken notwendig. Diese können über folgendes Skript installiert werden:
cat <<"EOF" > package.json
{
"devDependencies": {
"@babel/cli": "^7.2.3",
"@babel/core": "^7.2.2",
"@babel/highlight": "^7.0.0",
"@babel/polyfill": "^7.2.5",
"@babel/preset-env": "^7.2.3",
"html-minifier": "^3.5.21",
"uglify-js": "^3.4.9",
"uglifycss": "0.0.29",
"uglifyjs": "^2.4.11",
"webpack": "^4.28.3",
"webpack-cli": "^3.2.0"
},
"dependencies": {
"core-js": "^2.6.1"
}
}
EOF
npm install
Infos zum Setup von Babel finden sich hier.
-
Datensätze die eine Gültigkeit haben, die evtl. in der Zukunft erst gültig werden oder die Gültigkeit verlieren. Müssen zu den Entsprechenden Zeitpunkten wieder getriggert werden damit das Delta erkannt wird. Hierzu wird der Trigger erweitert mit einem Insert in die ´co_delta_schedule_event´ Tabelle. ↩↩