Files
Fileinterface_Cron_Job/README.md
2026-08-19 19:27:41 +02:00

221 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FileInterface FileSystemWatcher + CronScheduler
## HTTP-Webclient Login
Der Webclient ist standardmaessig per HTTP Basic Authentication geschuetzt.
```text
Benutzer: admin
Kennwort: admin
```
Die Zugangsdaten koennen in `FileinterfaceCronScheduler/App.config` geaendert werden:
```xml
<add key="Scheduler.WebUser" value="admin" />
<add key="Scheduler.WebPassword" value="admin" />
```
Wichtig: Fuer den produktiven Betrieb sollte das Standardkennwort geaendert werden.
Eigenständiges Visual-Studio-/C#-Projekt für ereignisbasierte **und** zeitgesteuerte Datei-Verarbeitung über iTAC IMSAPI CustomFunctions.
## Architektur
Beide Mechanismen laufen gleichzeitig und unabhängig voneinander:
```text
HTTP Webclient
|
+-- FileSystemWatcher-Konfiguration --> beliebig viele FileSystemWatcher
|
+-- Cron-Konfiguration ---------------> beliebig viele Cronjobs
|
+-----------------------------+
|
gemeinsame IMSAPI Session
|
customFunction(...)
```
## Enthalten
- `FileinterfaceCronScheduler.sln`
- .NET Framework 4.8 / x86
- Windows-Dienst und Konsolenmodus
- enthaltene `IMSApiDotNet.dll` Version 10.0.0-3
- IMSAPI Initialisierung und `regLogin(...)`
- beliebig viele FileSystemWatcher
- beliebig viele Cronjobs
- zentrale HTTP-Administration
- beliebig viele `inArgs` pro Watcher/Cronjob
- eigene CustomFunction pro Watcher/Cronjob
- Datei nach Erfolg optional verschieben
- Laufzeit-Log und Status im Browser
## HTTP Webclient
Standard:
```text
http://127.0.0.1:8095/
```
Für Zugriff aus dem Netzwerk in `App.config`:
```xml
<add key="Scheduler.WebPrefix" value="http://+:8095/" />
```
Danach `scripts\allow-webinterface-network.bat` als Administrator ausführen. Für Netzwerkzugriff sollten `Scheduler.WebUser` und `Scheduler.WebPassword` gesetzt werden.
Der Webclient besitzt zwei Bereiche:
### FileSystemWatcher
Pro Watcher konfigurierbar:
- Aktiv / Inaktiv
- Quellverzeichnis
- Dateifilter, z. B. `*.xml`
- Unterverzeichnisse
- Events `Created`, `Changed`, `Renamed`
- Debounce in Millisekunden
- File-Ready Wiederholungen / Wartezeit
- CustomFunction
- beliebig viele `inArgs`
- leere Zeilen entfernen
- Zeilentrenner
- Datei nach Erfolg verschieben Ja/Nein
- Zielverzeichnis
- bestehende Zieldatei überschreiben Ja/Nein
- vorhandene Dateien manuell verarbeiten
- Watcher ohne Dienstneustart neu laden
Änderungen werden beim Speichern sofort persistent geschrieben und die FileSystemWatcher werden automatisch neu aufgebaut.
### CronScheduler
Pro Cronjob konfigurierbar:
- Aktiv / Inaktiv
- Cron-Ausdruck mit 5 Feldern
- optional CustomFunction ohne Datei aufrufen
- Quellverzeichnis / Filter / Unterverzeichnisse
- CustomFunction
- beliebig viele `inArgs`
- Datei nach Erfolg verschieben Ja/Nein
- manuell `Jetzt ausführen`
Beispiele:
```text
*/5 * * * *
0 */2 * * *
15 2 * * *
0 6 * * 1-5
```
## Platzhalter
Für Watcher und Cronjobs:
```text
{{CONTENT}}
{{RAW_CONTENT}}
{{FILE_NAME}}
{{FILE_PATH}}
{{FILE_DIR}}
{{FILE_EXT}}
{{JOB_NAME}}
{{NOW}}
```
Nur beim FileSystemWatcher zusätzlich:
```text
{{EVENT}}
```
`{{EVENT}}` enthält z. B. `Created`, `Changed`, `Renamed` oder `ManualScan`.
## Persistente Konfiguration
Die Jobs sind getrennt gespeichert:
```text
cronjobs.json
watcherjobs.json
```
Pfade können in `App.config` geändert werden:
```xml
<add key="Scheduler.ConfigFile" value="cronjobs.json" />
<add key="Watcher.ConfigFile" value="watcherjobs.json" />
```
## IMSAPI
`IMSApiDotNet.dll` liegt bereits unter:
```text
FileinterfaceCronScheduler\lib\IMSApiDotNet.dll
```
Beim Programmstart:
1. `IMSApiDotNet.setProperty(...)`
2. `IMSApiDotNet.loadLibrary()`
3. `imsapiInit()`
4. `regLogin(...)`
5. Start FileSystemWatcher + CronScheduler + HTTP-Webclient
Die Aufrufe verwenden anschließend dieselbe Session:
```csharp
imsapi.customFunction(
sessionContext,
customFunctionName,
inArgs,
out outArgs,
out customErrorString
);
```
## IMS-Konfiguration
In `FileinterfaceCronScheduler\App.config`:
```xml
<add key="IMS.AppID" value="FileInterfaceCronScheduler" />
<add key="IMS.ServerUrl" value="http://YOUR-IMS-SERVER:PORT" />
<add key="IMS.StationNumber" value="YOUR_STATION" />
<add key="IMS.ClientNumber" value="1" />
<add key="IMS.RegistrationType" value="S" />
<add key="IMS.PropertyDirectory" value="." />
<add key="IMS.SerializeCalls" value="false" />
```
`IMS.SerializeCalls=false` erlaubt unabhängigen Watchern und Cronjobs parallele CustomFunction-Aufrufe. Wenn die eingesetzte IMSAPI-Umgebung das nicht verträgt, kann auf `true` gestellt werden.
## Visual Studio
1. `FileinterfaceCronScheduler.sln` öffnen.
2. `App.config` konfigurieren.
3. Build `Debug` oder `Release`; das Projekt kompiliert als x86.
4. Starten.
5. Browser auf `http://127.0.0.1:8095/` öffnen.
## Windows-Dienst
Unter `scripts`:
- `install-service.bat`
- `uninstall-service.bat`
- `allow-webinterface-network.bat`
Vor der Dienstinstallation zuerst Release bauen.