1
0
mirror of https://github.com/pcvolkmer/osc-variant.git synced 2025-04-19 19:56:50 +00:00
osc-variant/README.md

262 lines
9.9 KiB
Markdown

# OSC-Variant
Anwendung zum Anpassen einer OSC-Datei an einen Standort.
## Funktion
Diese Anwendung passt die Inhalte eine OSC-Datei an, sodass (standortbezogene) Formularvarianten für Formularverweise
verwendet werden.
Weiterhin ist das Auflisten der Inhalte einer OSC-Datei möglich.
Hierzu wird die Datei deserialisiert, die entsprechenden Formularfelder ermittelt und die Formularvariante
sowie die Anzeige anhand eines Profils angepasst.
Wird in einer OSC-Datei eine noch nicht bekannte Eigenschaft erkannt, wird die weitere Bearbeitung abgebrochen, um keine
unvollständigen Ausgabedateien zu erzeugen.
### Beispiele
Die folgenden Unterbefehle sind verfügbar
```
Anwendung zum Anpassen einer OSC-Datei an einen Standort
Usage: osc-variant <COMMAND>
Commands:
sha256sum Berechne SHA256 Prüfsumme für die angegebene Datei
list Zeigt alle enthaltenen Kataloge und Formulare mit Revision an.
tree Zeigt Kataloge und Formulare mit Revision und Abhängigkeiten an.
modify Modifiziert die angegebene Datei anhand der Profildatei
diff Vergleiche zwei Dateien anhand der Revision der enthaltenen Inhalte
check Prüfe eine OSC-Datei auf bekannte Problemen
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
```
#### Unterbefehl `sha256sum`
Das Berechnen der SHA256 Prüfsumme ist mit dem Unterbefehl `sha256sum` auch unter Windows einfach möglich
und erzeugt eine Ausgabe analog dem Befehl auf Linux-Systemen:
```
osc-variant sha256sum meine-beispieldatei.osc
```
#### Unterbefehl `list`
Zum Auflisten der Inhalte einer Datei wird folgender Befehl verwendet:
```
osc-variant list meine-beispieldatei.osc
```
Mit der Option `--filter` kann die Ausgabe eingeschränkt werden.
*Bei Verwendung der OSB-Funktionalität kann die Eingabe eines Passworts erforderlich sein.*
#### Unterbefehl `tree`
Zum Auflisten der Inhalte mit allen Abhängigkeiten, z.B. Daten- und Merkmalskataloge und bei Formularen wird der Befehl
`tree` verwendet:
```
osc-variant tree meine-beispieldatei.osc
```
Abhängigkeiten werden je nach Art gekennzeichnet:
* `+`: Datenkatalog
* `-`: Merkmalskatalog
* `>`: Formularverweis
* `*`: Unterformular
Für Formularverweise und Unterformulare werden dabei die verwendeten Datenkataloge nicht erneut ausgegeben.
Achtung! Dies erzeugt eine sehr umfangreiche Ausgabe.
Mit der Option `--filter` kann auch hier die Ausgabe eingeschränkt werden.
#### Unterbefehl `diff`
Zum Vergleich zweier OSC-Dateien wird der Unterbefehl `diff` verwendet.
Der optionale Parameter `--strict` vergleicht auch den Inhalt der OSC-Datei.
Ohne diesen wird nur das Vorhandensein von Inhalten und die Revision verglichen.
```
osc-variant diff meine-beispieldatei.osc andere-beispieldatei.osc
```
bzw.
```
osc-variant diff meine-beispieldatei.osc andere-beispieldatei.osc --strict
```
#### Unterbefehl `modify`
Zum Anpassen des Inhalts einer Datei:
```
osc-variant modify meine-beispieldatei.osc --profile ukw-profil.yml --output ukw-beispieldatei.osc
```
Die Parameter `--profile` und `--output` sind optional.
Mit dem ebenfalls optionalen Parameter `--interactve` oder `-i` können die Parameter zur kompakten Ausgabe, zum
Sortieren
und dem Entfernen von Inhalten der Systembibliothek interaktiv gesetzt werden.
Ohne Profildatei wird die Datei lediglich eingelesen, Leerzeichen am Ende eines XML-Tags entfernt und wieder ausgegeben.
Ohne eine Angabe der Ausgabedatei wird auf die Standardausgabe ausgegeben.
##### Enthaltene Profile
Die im Ordner [`examples/`](/examples) enthaltenen Profile für Standorte sind in der ausführbaren Anwendung enthalten
und die Dateien müssen nicht explizit als Datei vorliegen:
* `--profile examples/dnpm-uka.yml` => `--profile UKA` für **Aachen**
* `--profile examples/dnpm-ukm.yml` => `--profile UKM` für **Marburg**
* `--profile examples/dnpm-ukr.yml` => `--profile UKR` für **Regensburg**
* `--profile examples/dnpm-ukw.yml` => `--profile UKW` für **Würzburg**
* `--profile examples/dnpm-umg.yml` => `--profile UMG` für **Göttingen**
#### Unterbefehl `unzip-osb`
Ab Version 0.6.0 ist die Anwendung zudem in der Lage, die für eine Aktualisierung der OS-Bibliothek genutzten
OSB-Dateien zu entpacken:
```
osc-variant unzip-osb OSBIB-6.10.osb
```
Dieser Befehl kennt die beiden optionalen Parameter
* `-d`: Optionale Angabe des Zielverzeichnisses. Wenn keine Angabe vorhanden ist, wird das aktuelle Verzeichnis
verwendet.
* `-p`/`--password`: Optionale Angabe des Passworts zum Entpacken der OSB-Datei.
Dies setzt voraus, dass die Anwendung mit dem Feature `unzip-osb` compiliert wurde.
#### Unterbefehl `check`
Der Unterbefehl `check` prüft eine OSC- oder OSB-Datei (sofern unterstützt) auf bekannte Probleme und gibt eine Liste
mit erkannten Problemen aus.
In OSB-Dateien werden nur enthaltene OSC-Dateien mit Onkostar-Formularen geprüft.
Eine Liste mit bekannten Problemen wird mit `check --list` ausgegeben.
*Bei Verwendung der OSB-Funktionalität kann die Eingabe eines Passworts erforderlich sein.*
#### Kompakte Ausgabe
OSC-Dateien sind XML-Dateien. Diese Anwendung ermöglicht optional die Ausgabe als kompaktere XML-Datei ohne
Zeilenumbrüche.
Hierzu ist die Option `--compact` vorgesehen. Es können, je nach Datei, bis zu 30 % eingespart werden.
#### Filter
Bei der Auflistung von Inhalten ist es möglich, die Anzeige für die Unterbefehle `list` und `tree` anhand des Namens zu
filtern.
Hierzu ist die Option `--filter=` vorgesehen.
Wird diese angewendet, werden nur Inhalte angezeigt, deren Name die angegebene Zeichenkette beinhalten.
#### Sortierung
Bei der Auflistung der Inhalte, kann die Option `--sorted` dazu verwendet werden, die angezeigten Einträge alphabetisch
zu sortieren.
Die Sortierung erfolgt dabei nach Namen des Katalogs oder des Formulars.
Beim Modifizieren der Inhalte kann ebenfalls die Option `--sorted` dazu verwendet werden, die Einträge im Anschluss an
die Modifikation
nach Namen und für Formulare der Abhängigkeit von Formularverweisen und Unterformularen zu sortieren.
Formulare, die von anderen Formularen in einem Formularverweis oder als Unterformular verwendet werden, werden dabei
weiter oben angeordnet,
da Onkostar einen Formularimport sequenziell, ohne Berücksichtigung von Abhängigkeiten, durchführt.
Dies erlaubt eine konsistente Reihenfolge der Einträge, wodurch ein direkter Vergleich mit Vorversionen ermöglicht wird.
*Die Einteilung in Formualre und Unterformualare wird hierdurch nicht angepasst.*
##### Entfernen von Inhalten der Systembibliothek bei Modifikation
Mit der die experimentelle Option `--strip` ist es möglich, die in der OSC-Datei enthaltenen und beim Import nicht
genutzten Inhalte aus der Systembibliothek zu entfernen.
Hierbei werden alle Inhalte entfernt, die im Ordner "ONKOSTAR Bibliothek" enthalten sind, beim Import jedoch ignoriert
werden.
## Profile
Zum Erstellen von Varianten einer OSC-Datei wird eine Profildatei im YAML-Format verwendet.
In ihr sind die durchzuführenden Änderungen definiert. Eine Profildatei hat die folgende Form:
```
forms:
- name: "ExampleForm"
form_fields:
- name: "formularfeld"
hide: true
- name: "otherformfield"
default_value: "T"
remove_filter: true
scripts_code: |
// Beispielcode
console.log(getFieldValue('ref_first_mtb'));
form_references:
- name: "ref_first_mtb"
referenced_data_form: "Formularverweis.Variante"
anzeige_auswahl: "Referenziertes Formular vom: {Datum}"
anzeige: "Datum im referenzierten Formular: {Datum}"
scripts_code: |
// Beispielcode
console.log(getFieldValue('ref_first_mtb'));
menu_category:
name: Beispielformulare
position: 1.0
column: 0
```
Hierzu wird die Anwendung angewiesen im Formular "ExampleForm" den Formularverweis im Formularfeld "ref_first_mtb":
* den Verweis auf das Formular "Formularverweis.Variante" zu setzen
* die Anzeige im Auswahlmenü auf "Referenziertes Formular vom: {Datum}" zu setzen
* die Anzeige unterhalb des Auswahlmenüs auf "Datum im referenzierten Formular: {Datum}" zu setzen
* den Code zur Ausführung "nach Aktualisierung" für Formularfelder werden auf die angegebene, mehrzeilige Zeichenkette
anzupassen. Dies kann in `form_fields`, als auch `form_references` geschehen.
und dabei die vorhandenen Angaben für den Formularverweis zu ersetzen.
Die Angaben für `referenced_data_form`, `anzeige_auswahl`, `anzeige` und `scripts_code` sind optional.
Wird keine Angabe gemacht, wird der bestehende Wert beibehalten.
Zudem wird im Formular "ExampleForm" das Formularfeld "formularfeld" ausgeblendet, indem der Filter auf "false" gesetzt
wird.
Dadurch wird das Formularfeld nie angezeigt.
Ein zuvor bestehender Filter wird ersetzt und das Formularfeld wird nie angezeigt.
Weiterhin wird die Eigenschaft "Speichern" des Formularfelds auf "Immer speichern" gesetzt um sicherzustellen, dass
zuvor enthaltene Daten weiterhin gespeichert bleiben und werden, auch wenn das Formularfeld nicht sichtbar ist.
Um das Gegenteil zu erreichen und das Formularfeld *immer* anzuzeigen, kann `never_hide: true` verwendet werden.
Der Standardwert des Feldes `otherformfield` ist nun auf `T` gesetzt.
Zum Löschen eines Standardwerts ist `""` anzugeben.
Das Formularfeld wird dabei nun immer angezeigt, auch wenn zuvor ein (Anzeige)-Filter gesetzt war.
Dieser wird mir `remove_filter: true` oder `never_hide: true` entfernt.
**Achtung!** Diese Anwendung überprüft keine Scripts und verwendet angegebene Scripts als "valid" im resultierenden
OSC-File.
Zudem kann die Menükategorie angepasst werden.
Die Angabe einer `menu_category` ist fakultativ.
Wird sie angeben, sind die Felder `name`, `position` und `column` verpflichtend.
Es können beliebig viele Formulare mit beliebig vielen Änderungen zu Formularverweisen in einer Profildatei
hinterlegt werden, jedoch ist mindestens eine Angabe zu einem Formularfeld erforderlich.
Beispiele für eine Profildatei sind unter [`examples/`](/examples) zu finden.