<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://superxhosting.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bisping</id>
	<title>SuperX - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://superxhosting.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bisping"/>
	<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php/Spezial:Beitr%C3%A4ge/Bisping"/>
	<updated>2026-05-05T15:50:31Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:hsinfo_superx_server_uhi.png&amp;diff=14708</id>
		<title>Datei:hsinfo superx server uhi.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:hsinfo_superx_server_uhi.png&amp;diff=14708"/>
		<updated>2025-06-27T10:52:56Z</updated>

		<summary type="html">&lt;p&gt;Bisping: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bisping</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Hochschuleigene_Laderoutinen&amp;diff=14671</id>
		<title>Hochschuleigene Laderoutinen</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Hochschuleigene_Laderoutinen&amp;diff=14671"/>
		<updated>2025-06-18T09:04:52Z</updated>

		<summary type="html">&lt;p&gt;Bisping: /* Fehlermeldungen FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Übersicht =&lt;br /&gt;
Eigene Laderoutinen sind öfter gewünscht, wenn bestimmte Daten von den bisherigen Modulen (noch) nicht übernommen werden.&lt;br /&gt;
Als Beispiele könnten sein&lt;br /&gt;
* erfasste Mathenote von Bewerbern&lt;br /&gt;
* neue Tabelle zu Lehrbeauftragten&lt;br /&gt;
* bestimmte Zusatzfelder in MBS.inst&lt;br /&gt;
Dabei geht es darum, die Daten zunächst aus dem Quellsystem zu entladen (CSV), sie dann in SuperX/BI einzuspielen und ggfs. noch zu transformieren.&lt;br /&gt;
=Lade-Techniken=&lt;br /&gt;
Folgende Lade-Techniken sind möglich:&lt;br /&gt;
* [[Kernmodul_Shellscripte#Umgang_mit_Tabellen|Shellscripte]] (DOQUERY, sx_upload_table.x )&lt;br /&gt;
* [[Kettle-Grundlagen|Kettle]]&lt;br /&gt;
* [[Modul_ETL_Administrationshandbuch|ETL-Sonderladeroutinen]]&lt;br /&gt;
&lt;br /&gt;
=Beispielanforderung Mathenote=&lt;br /&gt;
Die Technische Universität Hamburg (TUHH) erfasst die Mathematiknoten, welche Bewerber auf ihrem bisherigen Bildungsweg erreichten. Diese Mathematiknoten sollen zukünftig in Auswertungen einbezogen werden.&lt;br /&gt;
==Ziel der Laderoutine==&lt;br /&gt;
Das Ziel der Laderoutine ist das Befüllen einer neuen Tabelle mit Bewerbernummer und Mathematiknote. Diese neue Tabelle wird über das Feld &#039;Weitere Tabellen&#039; im &amp;quot;Bewerbungen und Zulassungen Datenblatt&amp;quot; erreichbar sein. Ggf. ist noch ein Zeitraum anzugeben. &amp;lt;/br&amp;gt;Tabellenstruktur:&lt;br /&gt;
* Tabellenname: zul_bew_mathenote&lt;br /&gt;
*Felder:&lt;br /&gt;
** Bewerbernummer (INT)&lt;br /&gt;
** Mathenote (FLOAT)&lt;br /&gt;
* Zusätzlich zum Hochladen noch eine &amp;quot;_neu&amp;quot;-Tabelle, die quasi als Zwischenlager dient.&lt;br /&gt;
&lt;br /&gt;
==Implementierung der Laderoutine==&lt;br /&gt;
===Entscheidung über die Technik des Ladens===&lt;br /&gt;
* Shellscripte (DOQUERY, sx_upload_table.x )&lt;br /&gt;
* Kettle&lt;br /&gt;
* BI Sonderladeroutine&lt;br /&gt;
===Unload aus dem Vorsystem===&lt;br /&gt;
Entladen der Tabelle &#039;&#039;&#039;application_content&#039;&#039;&#039;, im Ergebnis eine CSV Datei&lt;br /&gt;
===Laden der CSV-Datei===&lt;br /&gt;
Hochladen mit Kettle oder Shellscript in _neu-Tabelle&lt;br /&gt;
===Transformation in finale Tabelle===&lt;br /&gt;
Aus der _neu-Tabelle in die finale Tabelle schreiben, ggf. noch Tranformation, z.B. von Noten-Punkten zur Note Dezimal (z.B. 11=&amp;quot;gut&amp;quot;)&lt;br /&gt;
===Automatisierung===&lt;br /&gt;
Nächtliches Laden mit Shellscript oder Kettle&lt;br /&gt;
==Einbinden in das Bewerbungen Datenblatt==&lt;br /&gt;
* sx_tables: Einfügen der Tabellennamen&lt;br /&gt;
* sx_fields: Einfügen der Spaltennamen inkl. Relationen (Fremdschlüssel-Beziehung von Bewerber-Mathenote zu Bewerbung Datenblatt (zul_bew_mathenote.bewnr = zul_antr_aggr.bewnr)&lt;br /&gt;
=ETL Sonderladeroutinen=&lt;br /&gt;
Im ETL-Modul gibt es die Möglichkeit, eigene Sonderladeroutinen zu entwerfen. Diese können dann auch in der HISinOne-BI ab Version 2024.12 in der [https://wiki.his.de/mediawiki/index.php/Konnektoren_ausfuehren_-_HISinOne-BI neuen Komponentenverwaltung] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung dafür ist, dass das ETL-Modul aus dem [https://download.superx-projekt.de Downloadbereich] installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Laderoutine kann Entladeschritte, Ladeschritte und Transformationsschritte (SQL) enthalten.&lt;br /&gt;
&lt;br /&gt;
Die Installation einer Sonderladeroutine läuft über ein komplexes Script, dass mit Freemarker-Variablen gefüllt wird und dann später zu reinem SQL transformiert wird, der die Installation ausführt.&amp;lt;br&amp;gt;&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== etl_step_type ===&lt;br /&gt;
Kontrollieren Sie, ob die BI-Tabelle etl_step_type mit fünf Datensätzen gefüllt ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls diese bei Ihnen leer ist, fügen Sie folgende Step-Types ein&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO etl_step_type (tid,uniquename,caption,handler) &lt;br /&gt;
VALUES&lt;br /&gt;
  (1,&#039;LOAD&#039;,&#039;Tabelle hochladen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerUploadRecords&#039;),&lt;br /&gt;
  (2,&#039;DOSQL&#039;,&#039;SQL-Script ausführen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerDosql&#039;),&lt;br /&gt;
  (3,&#039;DOQUERY&#039;,&#039;SQL-Query ausführen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerDoquery&#039;),&lt;br /&gt;
  (4,&#039;UNLOAD&#039;,&#039;SQL-Ergebnis entladen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerUnloadRecords&#039;),&lt;br /&gt;
  (5,&#039;MSG&#039;,&#039;Logausgabe&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerMsg&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ETL-Makros zur Generierung ===&lt;br /&gt;
Um fertigen SQL zu generieren muss in der verwendeten Datenbank in der Tabelle fm_templates die ETL_MAKRO aus mind. ETL-Modul 0.5 installiert sein. Damit ist nur die Generierung von Installations-SQL gemeint, zur Verwendung der Steps ist dies nicht nötig.&lt;br /&gt;
&lt;br /&gt;
==Definition von Sonderladeroutinen==&lt;br /&gt;
Ausgangspunkt ist die Definition einer (oder mehrerer) Sonderladeroutinen.&lt;br /&gt;
Als uniquename muss eine eindeutige Kennung gewählt werden, die auf &amp;quot;special&amp;quot; endet und bei systeminfo, die ID zu welchem Teilbereich (wie Finanzen,Personal oder Studierende) entsprechend der Tabelle systeminfo die Sonderladeroutine gehört und unter deren Hauptkonnektor sie erscheinen soll. etl_job_params können leer bleiben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_jobs = [&lt;br /&gt;
  {&amp;quot;uniquename&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst und Proj aus MBS übertragen&amp;quot;, &amp;quot;systeminfo_id&amp;quot;:3 ,&amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
   ] /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;#assign  etl_job_params = [&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel Entladen/Laden-Schritte ==&lt;br /&gt;
In einem einfachen Fall will man bestimmte Zusatzfelder entladen. Dazu legt man zwei ETL-Steps an.&lt;br /&gt;
Das Attribut &amp;quot;etl_job&amp;quot; verweist auf den ETL-JOB (&amp;quot;fin_inst_special&amp;quot;) zu dem die Steps gehören sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dann gibt man ihnen einen uniquename, einen Namen und einen Typ&lt;br /&gt;
* UNLOAD zum Entladenaus einer Quell-Datenbank&lt;br /&gt;
* LOAD zum Einspielen in die BI-Datenbank&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter für UNLOAD-Steps ==&lt;br /&gt;
Folgende Parameter müssen für einen UNLOAD-Step hinterlegt werden datasource,sql und unlFile.&amp;lt;br&amp;gt;&lt;br /&gt;
Das attribut &amp;quot;datasource&amp;quot; gibt die Quelldatenbankverbindung in HisInOne an. (hier im Beispiel mbs).&amp;lt;br&amp;gt;&lt;br /&gt;
Im Script darf es für alle step_properties nur eine Definition mit &amp;lt;#assign etl_step_properties= .. geben, weitere StepProperties müssen in dieser Aufzählung ergänzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select inst_nr, key_ext,lehr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.inst; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sourceVersions&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; } -- des Jobs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter für LOAD-Steps ==&lt;br /&gt;
Folgende Parameter müssen für einen LOAD-Step hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut &amp;quot;tableName&amp;quot; (hier im Beispiel &amp;quot;fin_inst_plus&amp;quot;)gibt die Zieltabelle an, in die vorher entladenen Daten eingespielt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Script darf es für alle step_properties nur eine Definition mit &amp;lt;#assign etl_step_properties= .. geben, weitere StepProperties müssen in dieser Aufzählung ergänzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
 {&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_inst_plus&amp;quot; }&lt;br /&gt;
 ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden, insbesondere header true könnte interessant sein.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;database&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;delimiter&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;^&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;refresh&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;header&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;false&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;usePostgresCopyApi&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== DOSQL-Step ==&lt;br /&gt;
Einen DOSQL-Step, der eine SQL-Datei ausführt legt man folgendermaßen an:&amp;lt;br&amp;gt;&lt;br /&gt;
Innerhalb der etl_steps Definition mach man einen Eintrag mit dem etl_job und einem eindeutigen uniquename, der später die SQL-Datei referenziert, Typ ist &amp;quot;DOSQL&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;meinJob&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Aktualisierung Schlüsseltabelle fin_zusatzmerkmale&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOSQL&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }  &lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Innerhalb der etl_step_properties muss für den DOSQL-Step der folgende Eintrag definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlScriptPath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_PFAD/schluesseltabellen/update_fin_zusatzmerkmale.sql&amp;quot; },&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hinweis:&lt;br /&gt;
Es sollte nicht mit SUPERX_DIR gearbeitet werden, denn bei Ausführung im Browser funktioniert das, per Shellscript ist es aber anders definiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;databaseSystem&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;postgres&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;limitDebugStmts&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;-1&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOQUERY-Step ==&lt;br /&gt;
Einen DOQUERY-Step, der einen einzelnen SQL-Befehli ausführt legt man folgendermaßen an:&amp;lt;br&amp;gt;&lt;br /&gt;
Innerhalb der etl_steps Definition mach man einen Eintrag mit dem etl_job und einem eindeutigen uniquename, der später die SQL-Datei referenziert, Typ ist &amp;quot;DOQUERY&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;meinJob&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_test&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Schlüsseltabelle fin_zusatzmerkmale aktiv schalten&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOQUERY&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }  &lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Innerhalb der etl_step_properties müssen für den DOSQL-Step der folgende Eintrag definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_test&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;update fin_zusatzmerkmale set aktiv=1;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;databaseSystem&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;postgres&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== MSG-Step ==&lt;br /&gt;
wird von HisInOne 2024.12 noch nicht unterstützt&lt;br /&gt;
== komplettes Beispiel ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
--Freemarker Template&lt;br /&gt;
&amp;lt;#assign  etl_jobs = [&lt;br /&gt;
  {&amp;quot;uniquename&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst und Proj aus MBS übertragen&amp;quot;, &amp;quot;systeminfo_id&amp;quot;:3 ,&amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;#assign  etl_job_params = [&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Proj entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Proj laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Aktualisierung Schlüsseltabelle fin_zusatzmerkmale&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOSQL&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select inst_nr, key_ext,lehr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.inst; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select projnr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.proj; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_proj_plus.unl&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_inst_plus&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_proj_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_proj_plus&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlScriptPath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$SUPERX_DIR/db/module/etl/potsdam/update_fin_zusatzmerkmale.sql&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;#assign testfaelle  = [&lt;br /&gt;
 ] /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;@ETL_STEPS_FUELLEN/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Ausführung per Shellscript ==&lt;br /&gt;
Für Ausführung per HisInOne SHellscript muss ein Job das Attribut custom_job = 1 haben (0= HIS Auslieferung, 1= hochschulspezfisch,2 Memtext AUslieferung)&amp;lt;br&amp;gt;&lt;br /&gt;
Das Makro ETL erzeugt derzeit 2 Memtext Auslieferung, also für Ausführung per Shellscript noch nachbearbeiten:&lt;br /&gt;
 UPDATE etl_job SET custom_job = 1 WHERE uniquename=&#039;fin_inst_proj_special&#039;;&lt;br /&gt;
&lt;br /&gt;
Allgemeine Hinweise zum Ausführen von Laderoutinen per Script finden sich im [https://wiki.his.de/mediawiki/index.php/Skriptbasierte_Komponentenverwaltung_-_HISinOne-BI HisWiki].&amp;lt;br&amp;gt;&lt;br /&gt;
Kopieren Sie unter webapps/superx/scripts/shell die Datei component_admin_cli.sh.sam nach component_admin_cli.sh und passen darin die Variable SUPERX_DIR gemäß Ihrer Installation an.&amp;lt;br&amp;gt;Dann geben Sie der Datei Ausführungsrechte.&lt;br /&gt;
Eine Sonderladeroutine kann man ausführen mit &lt;br /&gt;
  component_admin_cli.sh -e UNIQUENAME&lt;br /&gt;
z.B.&lt;br /&gt;
  component_admin_cli.sh -e fin_inst_proj_special&lt;br /&gt;
Es erscheinen eine Menge Logausgaben wie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2025-06-17 09:31:00,558 [main] INFO  org.springframework.batch.core.launch.support.SimpleJobLauncher - No TaskExecutor has been set, defaulting to synchronous executor.&lt;br /&gt;
2025-06-17 09:31:00,613 [main] WARN  org.springframework.data.convert.CustomConversions - Registering converter from class java.lang.Boolean to class org.springframework.data.jdbc.core.convert.JdbcValue as writing converter although it doesn&#039;t convert to a store-supported type! You might want to check your annotation setup at the converter implementation.&lt;br /&gt;
2025-06-17 09:31:01,098 [main] WARN  org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer - No transaction manager was provided, using a DataSourceTransactionManager&lt;br /&gt;
2025-06-17 09:31:01,111 [main] INFO  org.springframework.batch.core.repository.support.JobRepositoryFactoryBean - No database type set, using meta data indicating: POSTGRES&lt;br /&gt;
2025-06-17 09:29:41,741 [main] INFO  de.superx.rest.EtlJobApi - Job not registered yet: Zusatzfelder Inst und Proj aus MBS übertragen&lt;br /&gt;
2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die hier aufgeführten WARN Meldungen kann man ignorieren.Andererseits sind Meldungen, die sich konkret auf den Job beziehen wichtig. Im folgenden Beispiel wird ein Script nicht gefunden&lt;br /&gt;
  2025-06-17 09:31:02,641 [main] WARN  de.superx.spring.service.BatchJobDescriptionAdapter - SQL Skriptfile doesn&#039;t exist: $FIN_PFAD/potsdam/7950_update_fin_zusatzmerkmale.sql&lt;br /&gt;
oder hier ein allgemeiner ERROR-Meldung&lt;br /&gt;
  2025-06-17 09:37:16,188 [main] ERROR de.superx.bin.ComponentAdminCLI - ERROR executing job fin_inst_proj_special&lt;br /&gt;
&lt;br /&gt;
Der Exitstatus des Script scheint in HisInOne2024.12 auch bei Fehlern noch teilweise 0 zurückzuliefern. &amp;lt;br&amp;gt;Man sollte also auf etwaige Fehler ggfs. manuell die Logdateien prüfen.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese liegt unter webapps/superx/WEB-INF/logs/jobs/JOBNAME.log&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldungen FAQ ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Cannot invoke &amp;quot;javax.sql.DataSource.unwrap(java.lang.Class)&amp;quot; because the return value of  de.superx.spring.batch.reader.JdbcUnloadReader.getDataSource()&amp;quot; is null&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
bedeutet,dass bei einem UnloadStep als dataSource z.B. &amp;quot;mbs&amp;quot; angegeben wurde, aber in der databases.xml (oder Spezialversion davon) keine Datenquelle &amp;quot;mbs&amp;quot; definiert ist.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;ERROR:  null value in column &amp;quot;step_type_id&amp;quot; of relation &amp;quot;etl_step&amp;quot; violates not-null constraint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kontrollieren Sie, ob die Tabelle etl_step_type gefüllt ist (s.o.).&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;[main] ERROR de.superx.bin.ComponentAdminCLI - ERROR executing job fin_inst_proj_special org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT tid, uniquename, caption, systeminfo_id, custom_job FROM etl_job WHERE uniquename like ?]; nested exception is org.postgresql.util.PSQLException: Cannot cast to boolean: &amp;quot;2.0&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
Für Ausführung per HisInOne SHellscript muss ein Job das Attribut custom_job = 1 haben (0= HIS Auslieferung, 1= hochschulspezfisch,2 Memtext AUslieferung)&amp;lt;br&amp;gt;&lt;br /&gt;
Das Makro ETL erzeugt derzeit 2 Memtext Auslieferung, also für Ausführung per Shellscript noch nachbearbeiten:&lt;br /&gt;
 UPDATE etl_job SET custom_job = 1 WHERE uniquename=&#039;fin_inst_proj_special&#039;;&lt;/div&gt;</summary>
		<author><name>Bisping</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Hochschuleigene_Laderoutinen&amp;diff=14670</id>
		<title>Hochschuleigene Laderoutinen</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Hochschuleigene_Laderoutinen&amp;diff=14670"/>
		<updated>2025-06-18T09:01:50Z</updated>

		<summary type="html">&lt;p&gt;Bisping: /* Ausführung per Shellscript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Übersicht =&lt;br /&gt;
Eigene Laderoutinen sind öfter gewünscht, wenn bestimmte Daten von den bisherigen Modulen (noch) nicht übernommen werden.&lt;br /&gt;
Als Beispiele könnten sein&lt;br /&gt;
* erfasste Mathenote von Bewerbern&lt;br /&gt;
* neue Tabelle zu Lehrbeauftragten&lt;br /&gt;
* bestimmte Zusatzfelder in MBS.inst&lt;br /&gt;
Dabei geht es darum, die Daten zunächst aus dem Quellsystem zu entladen (CSV), sie dann in SuperX/BI einzuspielen und ggfs. noch zu transformieren.&lt;br /&gt;
=Lade-Techniken=&lt;br /&gt;
Folgende Lade-Techniken sind möglich:&lt;br /&gt;
* [[Kernmodul_Shellscripte#Umgang_mit_Tabellen|Shellscripte]] (DOQUERY, sx_upload_table.x )&lt;br /&gt;
* [[Kettle-Grundlagen|Kettle]]&lt;br /&gt;
* [[Modul_ETL_Administrationshandbuch|ETL-Sonderladeroutinen]]&lt;br /&gt;
&lt;br /&gt;
=Beispielanforderung Mathenote=&lt;br /&gt;
Die Technische Universität Hamburg (TUHH) erfasst die Mathematiknoten, welche Bewerber auf ihrem bisherigen Bildungsweg erreichten. Diese Mathematiknoten sollen zukünftig in Auswertungen einbezogen werden.&lt;br /&gt;
==Ziel der Laderoutine==&lt;br /&gt;
Das Ziel der Laderoutine ist das Befüllen einer neuen Tabelle mit Bewerbernummer und Mathematiknote. Diese neue Tabelle wird über das Feld &#039;Weitere Tabellen&#039; im &amp;quot;Bewerbungen und Zulassungen Datenblatt&amp;quot; erreichbar sein. Ggf. ist noch ein Zeitraum anzugeben. &amp;lt;/br&amp;gt;Tabellenstruktur:&lt;br /&gt;
* Tabellenname: zul_bew_mathenote&lt;br /&gt;
*Felder:&lt;br /&gt;
** Bewerbernummer (INT)&lt;br /&gt;
** Mathenote (FLOAT)&lt;br /&gt;
* Zusätzlich zum Hochladen noch eine &amp;quot;_neu&amp;quot;-Tabelle, die quasi als Zwischenlager dient.&lt;br /&gt;
&lt;br /&gt;
==Implementierung der Laderoutine==&lt;br /&gt;
===Entscheidung über die Technik des Ladens===&lt;br /&gt;
* Shellscripte (DOQUERY, sx_upload_table.x )&lt;br /&gt;
* Kettle&lt;br /&gt;
* BI Sonderladeroutine&lt;br /&gt;
===Unload aus dem Vorsystem===&lt;br /&gt;
Entladen der Tabelle &#039;&#039;&#039;application_content&#039;&#039;&#039;, im Ergebnis eine CSV Datei&lt;br /&gt;
===Laden der CSV-Datei===&lt;br /&gt;
Hochladen mit Kettle oder Shellscript in _neu-Tabelle&lt;br /&gt;
===Transformation in finale Tabelle===&lt;br /&gt;
Aus der _neu-Tabelle in die finale Tabelle schreiben, ggf. noch Tranformation, z.B. von Noten-Punkten zur Note Dezimal (z.B. 11=&amp;quot;gut&amp;quot;)&lt;br /&gt;
===Automatisierung===&lt;br /&gt;
Nächtliches Laden mit Shellscript oder Kettle&lt;br /&gt;
==Einbinden in das Bewerbungen Datenblatt==&lt;br /&gt;
* sx_tables: Einfügen der Tabellennamen&lt;br /&gt;
* sx_fields: Einfügen der Spaltennamen inkl. Relationen (Fremdschlüssel-Beziehung von Bewerber-Mathenote zu Bewerbung Datenblatt (zul_bew_mathenote.bewnr = zul_antr_aggr.bewnr)&lt;br /&gt;
=ETL Sonderladeroutinen=&lt;br /&gt;
Im ETL-Modul gibt es die Möglichkeit, eigene Sonderladeroutinen zu entwerfen. Diese können dann auch in der HISinOne-BI ab Version 2024.12 in der [https://wiki.his.de/mediawiki/index.php/Konnektoren_ausfuehren_-_HISinOne-BI neuen Komponentenverwaltung] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung dafür ist, dass das ETL-Modul aus dem [https://download.superx-projekt.de Downloadbereich] installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Laderoutine kann Entladeschritte, Ladeschritte und Transformationsschritte (SQL) enthalten.&lt;br /&gt;
&lt;br /&gt;
Die Installation einer Sonderladeroutine läuft über ein komplexes Script, dass mit Freemarker-Variablen gefüllt wird und dann später zu reinem SQL transformiert wird, der die Installation ausführt.&amp;lt;br&amp;gt;&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== etl_step_type ===&lt;br /&gt;
Kontrollieren Sie, ob die BI-Tabelle etl_step_type mit fünf Datensätzen gefüllt ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls diese bei Ihnen leer ist, fügen Sie folgende Step-Types ein&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO etl_step_type (tid,uniquename,caption,handler) &lt;br /&gt;
VALUES&lt;br /&gt;
  (1,&#039;LOAD&#039;,&#039;Tabelle hochladen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerUploadRecords&#039;),&lt;br /&gt;
  (2,&#039;DOSQL&#039;,&#039;SQL-Script ausführen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerDosql&#039;),&lt;br /&gt;
  (3,&#039;DOQUERY&#039;,&#039;SQL-Query ausführen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerDoquery&#039;),&lt;br /&gt;
  (4,&#039;UNLOAD&#039;,&#039;SQL-Ergebnis entladen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerUnloadRecords&#039;),&lt;br /&gt;
  (5,&#039;MSG&#039;,&#039;Logausgabe&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerMsg&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ETL-Makros zur Generierung ===&lt;br /&gt;
Um fertigen SQL zu generieren muss in der verwendeten Datenbank in der Tabelle fm_templates die ETL_MAKRO aus mind. ETL-Modul 0.5 installiert sein. Damit ist nur die Generierung von Installations-SQL gemeint, zur Verwendung der Steps ist dies nicht nötig.&lt;br /&gt;
&lt;br /&gt;
==Definition von Sonderladeroutinen==&lt;br /&gt;
Ausgangspunkt ist die Definition einer (oder mehrerer) Sonderladeroutinen.&lt;br /&gt;
Als uniquename muss eine eindeutige Kennung gewählt werden, die auf &amp;quot;special&amp;quot; endet und bei systeminfo, die ID zu welchem Teilbereich (wie Finanzen,Personal oder Studierende) entsprechend der Tabelle systeminfo die Sonderladeroutine gehört und unter deren Hauptkonnektor sie erscheinen soll. etl_job_params können leer bleiben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_jobs = [&lt;br /&gt;
  {&amp;quot;uniquename&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst und Proj aus MBS übertragen&amp;quot;, &amp;quot;systeminfo_id&amp;quot;:3 ,&amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
   ] /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;#assign  etl_job_params = [&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel Entladen/Laden-Schritte ==&lt;br /&gt;
In einem einfachen Fall will man bestimmte Zusatzfelder entladen. Dazu legt man zwei ETL-Steps an.&lt;br /&gt;
Das Attribut &amp;quot;etl_job&amp;quot; verweist auf den ETL-JOB (&amp;quot;fin_inst_special&amp;quot;) zu dem die Steps gehören sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dann gibt man ihnen einen uniquename, einen Namen und einen Typ&lt;br /&gt;
* UNLOAD zum Entladenaus einer Quell-Datenbank&lt;br /&gt;
* LOAD zum Einspielen in die BI-Datenbank&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter für UNLOAD-Steps ==&lt;br /&gt;
Folgende Parameter müssen für einen UNLOAD-Step hinterlegt werden datasource,sql und unlFile.&amp;lt;br&amp;gt;&lt;br /&gt;
Das attribut &amp;quot;datasource&amp;quot; gibt die Quelldatenbankverbindung in HisInOne an. (hier im Beispiel mbs).&amp;lt;br&amp;gt;&lt;br /&gt;
Im Script darf es für alle step_properties nur eine Definition mit &amp;lt;#assign etl_step_properties= .. geben, weitere StepProperties müssen in dieser Aufzählung ergänzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select inst_nr, key_ext,lehr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.inst; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sourceVersions&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; } -- des Jobs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter für LOAD-Steps ==&lt;br /&gt;
Folgende Parameter müssen für einen LOAD-Step hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut &amp;quot;tableName&amp;quot; (hier im Beispiel &amp;quot;fin_inst_plus&amp;quot;)gibt die Zieltabelle an, in die vorher entladenen Daten eingespielt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Script darf es für alle step_properties nur eine Definition mit &amp;lt;#assign etl_step_properties= .. geben, weitere StepProperties müssen in dieser Aufzählung ergänzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
 {&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_inst_plus&amp;quot; }&lt;br /&gt;
 ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden, insbesondere header true könnte interessant sein.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;database&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;delimiter&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;^&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;refresh&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;header&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;false&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;usePostgresCopyApi&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== DOSQL-Step ==&lt;br /&gt;
Einen DOSQL-Step, der eine SQL-Datei ausführt legt man folgendermaßen an:&amp;lt;br&amp;gt;&lt;br /&gt;
Innerhalb der etl_steps Definition mach man einen Eintrag mit dem etl_job und einem eindeutigen uniquename, der später die SQL-Datei referenziert, Typ ist &amp;quot;DOSQL&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;meinJob&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Aktualisierung Schlüsseltabelle fin_zusatzmerkmale&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOSQL&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }  &lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Innerhalb der etl_step_properties muss für den DOSQL-Step der folgende Eintrag definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlScriptPath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_PFAD/schluesseltabellen/update_fin_zusatzmerkmale.sql&amp;quot; },&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hinweis:&lt;br /&gt;
Es sollte nicht mit SUPERX_DIR gearbeitet werden, denn bei Ausführung im Browser funktioniert das, per Shellscript ist es aber anders definiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;databaseSystem&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;postgres&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;limitDebugStmts&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;-1&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOQUERY-Step ==&lt;br /&gt;
Einen DOQUERY-Step, der einen einzelnen SQL-Befehli ausführt legt man folgendermaßen an:&amp;lt;br&amp;gt;&lt;br /&gt;
Innerhalb der etl_steps Definition mach man einen Eintrag mit dem etl_job und einem eindeutigen uniquename, der später die SQL-Datei referenziert, Typ ist &amp;quot;DOQUERY&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;meinJob&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_test&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Schlüsseltabelle fin_zusatzmerkmale aktiv schalten&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOQUERY&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }  &lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Innerhalb der etl_step_properties müssen für den DOSQL-Step der folgende Eintrag definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_test&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;update fin_zusatzmerkmale set aktiv=1;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;databaseSystem&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;postgres&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== MSG-Step ==&lt;br /&gt;
wird von HisInOne 2024.12 noch nicht unterstützt&lt;br /&gt;
== komplettes Beispiel ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
--Freemarker Template&lt;br /&gt;
&amp;lt;#assign  etl_jobs = [&lt;br /&gt;
  {&amp;quot;uniquename&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst und Proj aus MBS übertragen&amp;quot;, &amp;quot;systeminfo_id&amp;quot;:3 ,&amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;#assign  etl_job_params = [&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Proj entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Proj laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Aktualisierung Schlüsseltabelle fin_zusatzmerkmale&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOSQL&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select inst_nr, key_ext,lehr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.inst; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select projnr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.proj; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_proj_plus.unl&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_inst_plus&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_proj_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_proj_plus&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlScriptPath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$SUPERX_DIR/db/module/etl/potsdam/update_fin_zusatzmerkmale.sql&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;#assign testfaelle  = [&lt;br /&gt;
 ] /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;@ETL_STEPS_FUELLEN/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Ausführung per Shellscript ==&lt;br /&gt;
Für Ausführung per HisInOne SHellscript muss ein Job das Attribut custom_job = 1 haben (0= HIS Auslieferung, 1= hochschulspezfisch,2 Memtext AUslieferung)&amp;lt;br&amp;gt;&lt;br /&gt;
Das Makro ETL erzeugt derzeit 2 Memtext Auslieferung, also für Ausführung per Shellscript noch nachbearbeiten:&lt;br /&gt;
 UPDATE etl_job SET custom_job = 1 WHERE uniquename=&#039;fin_inst_proj_special&#039;;&lt;br /&gt;
&lt;br /&gt;
Allgemeine Hinweise zum Ausführen von Laderoutinen per Script finden sich im [https://wiki.his.de/mediawiki/index.php/Skriptbasierte_Komponentenverwaltung_-_HISinOne-BI HisWiki].&amp;lt;br&amp;gt;&lt;br /&gt;
Kopieren Sie unter webapps/superx/scripts/shell die Datei component_admin_cli.sh.sam nach component_admin_cli.sh und passen darin die Variable SUPERX_DIR gemäß Ihrer Installation an.&amp;lt;br&amp;gt;Dann geben Sie der Datei Ausführungsrechte.&lt;br /&gt;
Eine Sonderladeroutine kann man ausführen mit &lt;br /&gt;
  component_admin_cli.sh -e UNIQUENAME&lt;br /&gt;
z.B.&lt;br /&gt;
  component_admin_cli.sh -e fin_inst_proj_special&lt;br /&gt;
Es erscheinen eine Menge Logausgaben wie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2025-06-17 09:31:00,558 [main] INFO  org.springframework.batch.core.launch.support.SimpleJobLauncher - No TaskExecutor has been set, defaulting to synchronous executor.&lt;br /&gt;
2025-06-17 09:31:00,613 [main] WARN  org.springframework.data.convert.CustomConversions - Registering converter from class java.lang.Boolean to class org.springframework.data.jdbc.core.convert.JdbcValue as writing converter although it doesn&#039;t convert to a store-supported type! You might want to check your annotation setup at the converter implementation.&lt;br /&gt;
2025-06-17 09:31:01,098 [main] WARN  org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer - No transaction manager was provided, using a DataSourceTransactionManager&lt;br /&gt;
2025-06-17 09:31:01,111 [main] INFO  org.springframework.batch.core.repository.support.JobRepositoryFactoryBean - No database type set, using meta data indicating: POSTGRES&lt;br /&gt;
2025-06-17 09:29:41,741 [main] INFO  de.superx.rest.EtlJobApi - Job not registered yet: Zusatzfelder Inst und Proj aus MBS übertragen&lt;br /&gt;
2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die hier aufgeführten WARN Meldungen kann man ignorieren.Andererseits sind Meldungen, die sich konkret auf den Job beziehen wichtig. Im folgenden Beispiel wird ein Script nicht gefunden&lt;br /&gt;
  2025-06-17 09:31:02,641 [main] WARN  de.superx.spring.service.BatchJobDescriptionAdapter - SQL Skriptfile doesn&#039;t exist: $FIN_PFAD/potsdam/7950_update_fin_zusatzmerkmale.sql&lt;br /&gt;
oder hier ein allgemeiner ERROR-Meldung&lt;br /&gt;
  2025-06-17 09:37:16,188 [main] ERROR de.superx.bin.ComponentAdminCLI - ERROR executing job fin_inst_proj_special&lt;br /&gt;
&lt;br /&gt;
Der Exitstatus des Script scheint in HisInOne2024.12 auch bei Fehlern noch teilweise 0 zurückzuliefern. &amp;lt;br&amp;gt;Man sollte also auf etwaige Fehler ggfs. manuell die Logdateien prüfen.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese liegt unter webapps/superx/WEB-INF/logs/jobs/JOBNAME.log&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldungen FAQ ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Cannot invoke &amp;quot;javax.sql.DataSource.unwrap(java.lang.Class)&amp;quot; because the return value of  de.superx.spring.batch.reader.JdbcUnloadReader.getDataSource()&amp;quot; is null&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
bedeutet,dass bei einem UnloadStep als dataSource z.B. &amp;quot;mbs&amp;quot; angegeben wurde, aber in der databases.xml (oder Spezialversion davon) keine Datenquelle &amp;quot;mbs&amp;quot; definiert ist.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;ERROR:  null value in column &amp;quot;step_type_id&amp;quot; of relation &amp;quot;etl_step&amp;quot; violates not-null constraint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kontrollieren Sie, ob die Tabelle etl_step_type gefüllt ist (s.o.).&lt;/div&gt;</summary>
		<author><name>Bisping</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Hochschuleigene_Laderoutinen&amp;diff=14657</id>
		<title>Hochschuleigene Laderoutinen</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Hochschuleigene_Laderoutinen&amp;diff=14657"/>
		<updated>2025-06-17T08:56:39Z</updated>

		<summary type="html">&lt;p&gt;Bisping: /* Ausführung per Shellscript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Übersicht =&lt;br /&gt;
Eigene Laderoutinen sind öfter gewünscht, wenn bestimmte Daten von den bisherigen Modulen (noch) nicht übernommen werden.&lt;br /&gt;
Als Beispiele könnten sein&lt;br /&gt;
* erfasste Mathenote von Bewerbern&lt;br /&gt;
* neue Tabelle zu Lehrbeauftragten&lt;br /&gt;
* bestimmte Zusatzfelder in MBS.inst&lt;br /&gt;
Dabei geht es darum, die Daten zunächst aus dem Quellsystem zu entladen (CSV), sie dann in SuperX/BI einzuspielen und ggfs. noch zu transformieren.&lt;br /&gt;
=Lade-Techniken=&lt;br /&gt;
Folgende Lade-Techniken sind möglich:&lt;br /&gt;
* [[Kernmodul_Shellscripte#Umgang_mit_Tabellen|Shellscripte]] (DOQUERY, sx_upload_table.x )&lt;br /&gt;
* [[Kettle-Grundlagen|Kettle]]&lt;br /&gt;
* [[Modul_ETL_Administrationshandbuch|ETL-Sonderladeroutinen]]&lt;br /&gt;
&lt;br /&gt;
=Beispielanforderung Mathenote=&lt;br /&gt;
Die Technische Universität Hamburg (TUHH) erfasst die Mathematiknoten, welche Bewerber auf ihrem bisherigen Bildungsweg erreichten. Diese Mathematiknoten sollen zukünftig in Auswertungen einbezogen werden.&lt;br /&gt;
==Ziel der Laderoutine==&lt;br /&gt;
Das Ziel der Laderoutine ist das Befüllen einer neuen Tabelle mit Bewerbernummer und Mathematiknote. Diese neue Tabelle wird über das Feld &#039;Weitere Tabellen&#039; im &amp;quot;Bewerbungen und Zulassungen Datenblatt&amp;quot; erreichbar sein. Ggf. ist noch ein Zeitraum anzugeben. &amp;lt;/br&amp;gt;Tabellenstruktur:&lt;br /&gt;
* Tabellenname: zul_bew_mathenote&lt;br /&gt;
*Felder:&lt;br /&gt;
** Bewerbernummer (INT)&lt;br /&gt;
** Mathenote (FLOAT)&lt;br /&gt;
* Zusätzlich zum Hochladen noch eine &amp;quot;_neu&amp;quot;-Tabelle, die quasi als Zwischenlager dient.&lt;br /&gt;
&lt;br /&gt;
==Implementierung der Laderoutine==&lt;br /&gt;
===Entscheidung über die Technik des Ladens===&lt;br /&gt;
* Shellscripte (DOQUERY, sx_upload_table.x )&lt;br /&gt;
* Kettle&lt;br /&gt;
* BI Sonderladeroutine&lt;br /&gt;
===Unload aus dem Vorsystem===&lt;br /&gt;
Entladen der Tabelle &#039;&#039;&#039;application_content&#039;&#039;&#039;, im Ergebnis eine CSV Datei&lt;br /&gt;
===Laden der CSV-Datei===&lt;br /&gt;
Hochladen mit Kettle oder Shellscript in _neu-Tabelle&lt;br /&gt;
===Transformation in finale Tabelle===&lt;br /&gt;
Aus der _neu-Tabelle in die finale Tabelle schreiben, ggf. noch Tranformation, z.B. von Noten-Punkten zur Note Dezimal (z.B. 11=&amp;quot;gut&amp;quot;)&lt;br /&gt;
===Automatisierung===&lt;br /&gt;
Nächtliches Laden mit Shellscript oder Kettle&lt;br /&gt;
==Einbinden in das Bewerbungen Datenblatt==&lt;br /&gt;
* sx_tables: Einfügen der Tabellennamen&lt;br /&gt;
* sx_fields: Einfügen der Spaltennamen inkl. Relationen (Fremdschlüssel-Beziehung von Bewerber-Mathenote zu Bewerbung Datenblatt (zul_bew_mathenote.bewnr = zul_antr_aggr.bewnr)&lt;br /&gt;
=ETL Sonderladeroutinen=&lt;br /&gt;
Im ETL-Modul gibt es die Möglichkeit, eigene Sonderladeroutinen zu entwerfen. Diese können dann auch in der HISinOne-BI ab Version 2024.12 in der [https://wiki.his.de/mediawiki/index.php/Konnektoren_ausfuehren_-_HISinOne-BI neuen Komponentenverwaltung] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung dafür ist, dass das ETL-Modul aus dem [https://download.superx-projekt.de Downloadbereich] installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Laderoutine kann Entladeschritte, Ladeschritte und Transformationsschritte (SQL) enthalten.&lt;br /&gt;
&lt;br /&gt;
Die Installation einer Sonderladeroutine läuft über ein komplexes Script, dass mit Freemarker-Variablen gefüllt wird und dann später zu reinem SQL transformiert wird, der die Installation ausführt.&amp;lt;br&amp;gt;&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== etl_step_type ===&lt;br /&gt;
Kontrollieren Sie, ob die BI-Tabelle etl_step_type mit fünf Datensätzen gefüllt ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls diese bei Ihnen leer ist, fügen Sie folgende Step-Types ein&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO etl_step_type (tid,uniquename,caption,handler) &lt;br /&gt;
VALUES&lt;br /&gt;
  (1,&#039;LOAD&#039;,&#039;Tabelle hochladen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerUploadRecords&#039;),&lt;br /&gt;
  (2,&#039;DOSQL&#039;,&#039;SQL-Script ausführen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerDosql&#039;),&lt;br /&gt;
  (3,&#039;DOQUERY&#039;,&#039;SQL-Query ausführen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerDoquery&#039;),&lt;br /&gt;
  (4,&#039;UNLOAD&#039;,&#039;SQL-Ergebnis entladen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerUnloadRecords&#039;),&lt;br /&gt;
  (5,&#039;MSG&#039;,&#039;Logausgabe&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerMsg&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ETL-Makros zur Generierung ===&lt;br /&gt;
Um fertigen SQL zu generieren muss in der verwendeten Datenbank in der Tabelle fm_templates die ETL_MAKRO aus mind. ETL-Modul 0.5 installiert sein. Damit ist nur die Generierung von Installations-SQL gemeint, zur Verwendung der Steps ist dies nicht nötig.&lt;br /&gt;
&lt;br /&gt;
==Definition von Sonderladeroutinen==&lt;br /&gt;
Ausgangspunkt ist die Definition einer (oder mehrerer) Sonderladeroutinen.&lt;br /&gt;
Als uniquename muss eine eindeutige Kennung gewählt werden, die auf &amp;quot;special&amp;quot; endet und bei systeminfo, die ID zu welchem Teilbereich (wie Finanzen,Personal oder Studierende) entsprechend der Tabelle systeminfo die Sonderladeroutine gehört und unter deren Hauptkonnektor sie erscheinen soll. etl_job_params können leer bleiben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_jobs = [&lt;br /&gt;
  {&amp;quot;uniquename&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst und Proj aus MBS übertragen&amp;quot;, &amp;quot;systeminfo_id&amp;quot;:3 ,&amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
   ] /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;#assign  etl_job_params = [&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel Entladen/Laden-Schritte ==&lt;br /&gt;
In einem einfachen Fall will man bestimmte Zusatzfelder entladen. Dazu legt man zwei ETL-Steps an.&lt;br /&gt;
Das Attribut &amp;quot;etl_job&amp;quot; verweist auf den ETL-JOB (&amp;quot;fin_inst_special&amp;quot;) zu dem die Steps gehören sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dann gibt man ihnen einen uniquename, einen Namen und einen Typ&lt;br /&gt;
* UNLOAD zum Entladenaus einer Quell-Datenbank&lt;br /&gt;
* LOAD zum Einspielen in die BI-Datenbank&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter für UNLOAD-Steps ==&lt;br /&gt;
Folgende Parameter müssen für einen UNLOAD-Step hinterlegt werden datasource,sql und unlFile.&amp;lt;br&amp;gt;&lt;br /&gt;
Das attribut &amp;quot;datasource&amp;quot; gibt die Quelldatenbankverbindung in HisInOne an. (hier im Beispiel mbs).&amp;lt;br&amp;gt;&lt;br /&gt;
Im Script darf es für alle step_properties nur eine Definition mit &amp;lt;#assign etl_step_properties= .. geben, weitere StepProperties müssen in dieser Aufzählung ergänzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select inst_nr, key_ext,lehr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.inst; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sourceVersions&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; } -- des Jobs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter für LOAD-Steps ==&lt;br /&gt;
Folgende Parameter müssen für einen LOAD-Step hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut &amp;quot;tableName&amp;quot; (hier im Beispiel &amp;quot;fin_inst_plus&amp;quot;)gibt die Zieltabelle an, in die vorher entladenen Daten eingespielt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Script darf es für alle step_properties nur eine Definition mit &amp;lt;#assign etl_step_properties= .. geben, weitere StepProperties müssen in dieser Aufzählung ergänzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
 {&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_inst_plus&amp;quot; }&lt;br /&gt;
 ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden, insbesondere header true könnte interessant sein.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;database&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;delimiter&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;^&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;refresh&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;header&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;false&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;usePostgresCopyApi&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== DOSQL-Step ==&lt;br /&gt;
Einen DOSQL-Step, der eine SQL-Datei ausführt legt man folgendermaßen an:&amp;lt;br&amp;gt;&lt;br /&gt;
Innerhalb der etl_steps Definition mach man einen Eintrag mit dem etl_job und einem eindeutigen uniquename, der später die SQL-Datei referenziert, Typ ist &amp;quot;DOSQL&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;meinJob&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Aktualisierung Schlüsseltabelle fin_zusatzmerkmale&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOSQL&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }  &lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Innerhalb der etl_step_properties muss für den DOSQL-Step der folgende Eintrag definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlScriptPath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_PFAD/schluesseltabellen/update_fin_zusatzmerkmale.sql&amp;quot; },&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hinweis:&lt;br /&gt;
Es sollte nicht mit SUPERX_DIR gearbeitet werden, denn bei Ausführung im Browser funktioniert das, per Shellscript ist es aber anders definiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;databaseSystem&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;postgres&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;limitDebugStmts&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;-1&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOQUERY-Step ==&lt;br /&gt;
Einen DOQUERY-Step, der einen einzelnen SQL-Befehli ausführt legt man folgendermaßen an:&amp;lt;br&amp;gt;&lt;br /&gt;
Innerhalb der etl_steps Definition mach man einen Eintrag mit dem etl_job und einem eindeutigen uniquename, der später die SQL-Datei referenziert, Typ ist &amp;quot;DOQUERY&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;meinJob&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_test&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Schlüsseltabelle fin_zusatzmerkmale aktiv schalten&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOQUERY&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }  &lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Innerhalb der etl_step_properties müssen für den DOSQL-Step der folgende Eintrag definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_test&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;update fin_zusatzmerkmale set aktiv=1;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;databaseSystem&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;postgres&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== MSG-Step ==&lt;br /&gt;
wird von HisInOne 2024.12 noch nicht unterstützt&lt;br /&gt;
== komplettes Beispiel ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
--Freemarker Template&lt;br /&gt;
&amp;lt;#assign  etl_jobs = [&lt;br /&gt;
  {&amp;quot;uniquename&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst und Proj aus MBS übertragen&amp;quot;, &amp;quot;systeminfo_id&amp;quot;:3 ,&amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;#assign  etl_job_params = [&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Proj entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Proj laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Aktualisierung Schlüsseltabelle fin_zusatzmerkmale&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOSQL&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select inst_nr, key_ext,lehr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.inst; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select projnr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.proj; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_proj_plus.unl&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_inst_plus&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_proj_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_proj_plus&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlScriptPath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$SUPERX_DIR/db/module/etl/potsdam/update_fin_zusatzmerkmale.sql&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;#assign testfaelle  = [&lt;br /&gt;
 ] /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;@ETL_STEPS_FUELLEN/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Ausführung per Shellscript ==&lt;br /&gt;
Allgemeine Hinweise zum Ausführen von Laderoutinen per Script finden sich im [https://wiki.his.de/mediawiki/index.php/Skriptbasierte_Komponentenverwaltung_-_HISinOne-BI HisWiki].&amp;lt;br&amp;gt;&lt;br /&gt;
Kopieren Sie unter webapps/superx/scripts/shell die Datei component_admin_cli.sh.sam nach component_admin_cli.sh und passen darin die Variable SUPERX_DIR gemäß Ihrer Installation an.&amp;lt;br&amp;gt;Dann geben Sie der Datei Ausführungsrechte.&lt;br /&gt;
Eine Sonderladeroutine kann man ausführen mit &lt;br /&gt;
  component_admin_cli.sh -e UNIQUENAME&lt;br /&gt;
z.B.&lt;br /&gt;
  component_admin_cli.sh -e fin_inst_proj_special&lt;br /&gt;
Es erscheinen eine Menge Logausgaben wie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2025-06-17 09:31:00,558 [main] INFO  org.springframework.batch.core.launch.support.SimpleJobLauncher - No TaskExecutor has been set, defaulting to synchronous executor.&lt;br /&gt;
2025-06-17 09:31:00,613 [main] WARN  org.springframework.data.convert.CustomConversions - Registering converter from class java.lang.Boolean to class org.springframework.data.jdbc.core.convert.JdbcValue as writing converter although it doesn&#039;t convert to a store-supported type! You might want to check your annotation setup at the converter implementation.&lt;br /&gt;
2025-06-17 09:31:01,098 [main] WARN  org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer - No transaction manager was provided, using a DataSourceTransactionManager&lt;br /&gt;
2025-06-17 09:31:01,111 [main] INFO  org.springframework.batch.core.repository.support.JobRepositoryFactoryBean - No database type set, using meta data indicating: POSTGRES&lt;br /&gt;
2025-06-17 09:29:41,741 [main] INFO  de.superx.rest.EtlJobApi - Job not registered yet: Zusatzfelder Inst und Proj aus MBS übertragen&lt;br /&gt;
2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die hier aufgeführten WARN Meldungen kann man ignorieren.Andererseits sind Meldungen, die sich konkret auf den Job beziehen wichtig. Im folgenden Beispiel wird ein Script nicht gefunden&lt;br /&gt;
  2025-06-17 09:31:02,641 [main] WARN  de.superx.spring.service.BatchJobDescriptionAdapter - SQL Skriptfile doesn&#039;t exist: $FIN_PFAD/potsdam/7950_update_fin_zusatzmerkmale.sql&lt;br /&gt;
oder hier ein allgemeiner ERROR-Meldung&lt;br /&gt;
  2025-06-17 09:37:16,188 [main] ERROR de.superx.bin.ComponentAdminCLI - ERROR executing job fin_inst_proj_special&lt;br /&gt;
&lt;br /&gt;
Der Exitstatus des Script scheint in HisInOne2024.12 auch bei Fehlern noch teilweise 0 zurückzuliefern. &amp;lt;br&amp;gt;Man sollte also auf etwaige Fehler ggfs. manuell die Logdateien prüfen.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese liegt unter webapps/superx/WEB-INF/logs/jobs/JOBNAME.log&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldungen FAQ ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Cannot invoke &amp;quot;javax.sql.DataSource.unwrap(java.lang.Class)&amp;quot; because the return value of  de.superx.spring.batch.reader.JdbcUnloadReader.getDataSource()&amp;quot; is null&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
bedeutet,dass bei einem UnloadStep als dataSource z.B. &amp;quot;mbs&amp;quot; angegeben wurde, aber in der databases.xml (oder Spezialversion davon) keine Datenquelle &amp;quot;mbs&amp;quot; definiert ist.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;ERROR:  null value in column &amp;quot;step_type_id&amp;quot; of relation &amp;quot;etl_step&amp;quot; violates not-null constraint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kontrollieren Sie, ob die Tabelle etl_step_type gefüllt ist (s.o.).&lt;/div&gt;</summary>
		<author><name>Bisping</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Hochschuleigene_Laderoutinen&amp;diff=14655</id>
		<title>Hochschuleigene Laderoutinen</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Hochschuleigene_Laderoutinen&amp;diff=14655"/>
		<updated>2025-06-17T08:20:57Z</updated>

		<summary type="html">&lt;p&gt;Bisping: /* Ausführung per Shellscript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Übersicht =&lt;br /&gt;
Eigene Laderoutinen sind öfter gewünscht, wenn bestimmte Daten von den bisherigen Modulen (noch) nicht übernommen werden.&lt;br /&gt;
Als Beispiele könnten sein&lt;br /&gt;
* erfasste Mathenote von Bewerbern&lt;br /&gt;
* neue Tabelle zu Lehrbeauftragten&lt;br /&gt;
* bestimmte Zusatzfelder in MBS.inst&lt;br /&gt;
Dabei geht es darum, die Daten zunächst aus dem Quellsystem zu entladen (CSV), sie dann in SuperX/BI einzuspielen und ggfs. noch zu transformieren.&lt;br /&gt;
=Lade-Techniken=&lt;br /&gt;
Folgende Lade-Techniken sind möglich:&lt;br /&gt;
* [[Kernmodul_Shellscripte#Umgang_mit_Tabellen|Shellscripte]] (DOQUERY, sx_upload_table.x )&lt;br /&gt;
* [[Kettle-Grundlagen|Kettle]]&lt;br /&gt;
* [[Modul_ETL_Administrationshandbuch|ETL-Sonderladeroutinen]]&lt;br /&gt;
&lt;br /&gt;
=Beispielanforderung Mathenote=&lt;br /&gt;
Die Technische Universität Hamburg (TUHH) erfasst die Mathematiknoten, welche Bewerber auf ihrem bisherigen Bildungsweg erreichten. Diese Mathematiknoten sollen zukünftig in Auswertungen einbezogen werden.&lt;br /&gt;
==Ziel der Laderoutine==&lt;br /&gt;
Das Ziel der Laderoutine ist das Befüllen einer neuen Tabelle mit Bewerbernummer und Mathematiknote. Diese neue Tabelle wird über das Feld &#039;Weitere Tabellen&#039; im &amp;quot;Bewerbungen und Zulassungen Datenblatt&amp;quot; erreichbar sein. Ggf. ist noch ein Zeitraum anzugeben. &amp;lt;/br&amp;gt;Tabellenstruktur:&lt;br /&gt;
* Tabellenname: zul_bew_mathenote&lt;br /&gt;
*Felder:&lt;br /&gt;
** Bewerbernummer (INT)&lt;br /&gt;
** Mathenote (FLOAT)&lt;br /&gt;
* Zusätzlich zum Hochladen noch eine &amp;quot;_neu&amp;quot;-Tabelle, die quasi als Zwischenlager dient.&lt;br /&gt;
&lt;br /&gt;
==Implementierung der Laderoutine==&lt;br /&gt;
===Entscheidung über die Technik des Ladens===&lt;br /&gt;
* Shellscripte (DOQUERY, sx_upload_table.x )&lt;br /&gt;
* Kettle&lt;br /&gt;
* BI Sonderladeroutine&lt;br /&gt;
===Unload aus dem Vorsystem===&lt;br /&gt;
Entladen der Tabelle &#039;&#039;&#039;application_content&#039;&#039;&#039;, im Ergebnis eine CSV Datei&lt;br /&gt;
===Laden der CSV-Datei===&lt;br /&gt;
Hochladen mit Kettle oder Shellscript in _neu-Tabelle&lt;br /&gt;
===Transformation in finale Tabelle===&lt;br /&gt;
Aus der _neu-Tabelle in die finale Tabelle schreiben, ggf. noch Tranformation, z.B. von Noten-Punkten zur Note Dezimal (z.B. 11=&amp;quot;gut&amp;quot;)&lt;br /&gt;
===Automatisierung===&lt;br /&gt;
Nächtliches Laden mit Shellscript oder Kettle&lt;br /&gt;
==Einbinden in das Bewerbungen Datenblatt==&lt;br /&gt;
* sx_tables: Einfügen der Tabellennamen&lt;br /&gt;
* sx_fields: Einfügen der Spaltennamen inkl. Relationen (Fremdschlüssel-Beziehung von Bewerber-Mathenote zu Bewerbung Datenblatt (zul_bew_mathenote.bewnr = zul_antr_aggr.bewnr)&lt;br /&gt;
=ETL Sonderladeroutinen=&lt;br /&gt;
Im ETL-Modul gibt es die Möglichkeit, eigene Sonderladeroutinen zu entwerfen. Diese können dann auch in der HISinOne-BI ab Version 2024.12 in der [https://wiki.his.de/mediawiki/index.php/Konnektoren_ausfuehren_-_HISinOne-BI neuen Komponentenverwaltung] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung dafür ist, dass das ETL-Modul aus dem [https://download.superx-projekt.de Downloadbereich] installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Laderoutine kann Entladeschritte, Ladeschritte und Transformationsschritte (SQL) enthalten.&lt;br /&gt;
&lt;br /&gt;
Die Installation einer Sonderladeroutine läuft über ein komplexes Script, dass mit Freemarker-Variablen gefüllt wird und dann später zu reinem SQL transformiert wird, der die Installation ausführt.&amp;lt;br&amp;gt;&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== etl_step_type ===&lt;br /&gt;
Kontrollieren Sie, ob die BI-Tabelle etl_step_type mit fünf Datensätzen gefüllt ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls diese bei Ihnen leer ist, fügen Sie folgende Step-Types ein&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO etl_step_type (tid,uniquename,caption,handler) &lt;br /&gt;
VALUES&lt;br /&gt;
  (1,&#039;LOAD&#039;,&#039;Tabelle hochladen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerUploadRecords&#039;),&lt;br /&gt;
  (2,&#039;DOSQL&#039;,&#039;SQL-Script ausführen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerDosql&#039;),&lt;br /&gt;
  (3,&#039;DOQUERY&#039;,&#039;SQL-Query ausführen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerDoquery&#039;),&lt;br /&gt;
  (4,&#039;UNLOAD&#039;,&#039;SQL-Ergebnis entladen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerUnloadRecords&#039;),&lt;br /&gt;
  (5,&#039;MSG&#039;,&#039;Logausgabe&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerMsg&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ETL-Makros zur Generierung ===&lt;br /&gt;
Um fertigen SQL zu generieren muss in der verwendeten Datenbank in der Tabelle fm_templates die ETL_MAKRO aus mind. ETL-Modul 0.5 installiert sein. Damit ist nur die Generierung von Installations-SQL gemeint, zur Verwendung der Steps ist dies nicht nötig.&lt;br /&gt;
&lt;br /&gt;
==Definition von Sonderladeroutinen==&lt;br /&gt;
Ausgangspunkt ist die Definition einer (oder mehrerer) Sonderladeroutinen.&lt;br /&gt;
Als uniquename muss eine eindeutige Kennung gewählt werden, die auf &amp;quot;special&amp;quot; endet und bei systeminfo, die ID zu welchem Teilbereich (wie Finanzen,Personal oder Studierende) entsprechend der Tabelle systeminfo die Sonderladeroutine gehört und unter deren Hauptkonnektor sie erscheinen soll. etl_job_params können leer bleiben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_jobs = [&lt;br /&gt;
  {&amp;quot;uniquename&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst und Proj aus MBS übertragen&amp;quot;, &amp;quot;systeminfo_id&amp;quot;:3 ,&amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
   ] /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;#assign  etl_job_params = [&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel Entladen/Laden-Schritte ==&lt;br /&gt;
In einem einfachen Fall will man bestimmte Zusatzfelder entladen. Dazu legt man zwei ETL-Steps an.&lt;br /&gt;
Das Attribut &amp;quot;etl_job&amp;quot; verweist auf den ETL-JOB (&amp;quot;fin_inst_special&amp;quot;) zu dem die Steps gehören sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dann gibt man ihnen einen uniquename, einen Namen und einen Typ&lt;br /&gt;
* UNLOAD zum Entladenaus einer Quell-Datenbank&lt;br /&gt;
* LOAD zum Einspielen in die BI-Datenbank&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter für UNLOAD-Steps ==&lt;br /&gt;
Folgende Parameter müssen für einen UNLOAD-Step hinterlegt werden datasource,sql und unlFile.&amp;lt;br&amp;gt;&lt;br /&gt;
Das attribut &amp;quot;datasource&amp;quot; gibt die Quelldatenbankverbindung in HisInOne an. (hier im Beispiel mbs).&amp;lt;br&amp;gt;&lt;br /&gt;
Im Script darf es für alle step_properties nur eine Definition mit &amp;lt;#assign etl_step_properties= .. geben, weitere StepProperties müssen in dieser Aufzählung ergänzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select inst_nr, key_ext,lehr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.inst; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sourceVersions&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; } -- des Jobs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter für LOAD-Steps ==&lt;br /&gt;
Folgende Parameter müssen für einen LOAD-Step hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut &amp;quot;tableName&amp;quot; (hier im Beispiel &amp;quot;fin_inst_plus&amp;quot;)gibt die Zieltabelle an, in die vorher entladenen Daten eingespielt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Script darf es für alle step_properties nur eine Definition mit &amp;lt;#assign etl_step_properties= .. geben, weitere StepProperties müssen in dieser Aufzählung ergänzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
 {&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_inst_plus&amp;quot; }&lt;br /&gt;
 ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden, insbesondere header true könnte interessant sein.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;database&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;delimiter&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;^&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;refresh&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;header&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;false&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;usePostgresCopyApi&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== DOSQL-Step ==&lt;br /&gt;
Einen DOSQL-Step, der eine SQL-Datei ausführt legt man folgendermaßen an:&amp;lt;br&amp;gt;&lt;br /&gt;
Innerhalb der etl_steps Definition mach man einen Eintrag mit dem etl_job und einem eindeutigen uniquename, der später die SQL-Datei referenziert, Typ ist &amp;quot;DOSQL&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;meinJob&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Aktualisierung Schlüsseltabelle fin_zusatzmerkmale&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOSQL&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }  &lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Innerhalb der etl_step_properties muss für den DOSQL-Step der folgende Eintrag definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlScriptPath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_PFAD/schluesseltabellen/update_fin_zusatzmerkmale.sql&amp;quot; },&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hinweis:&lt;br /&gt;
Es sollte nicht mit SUPERX_DIR gearbeitet werden, denn bei Ausführung im Browser funktioniert das, per Shellscript ist es aber anders definiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;databaseSystem&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;postgres&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;limitDebugStmts&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;-1&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOQUERY-Step ==&lt;br /&gt;
Einen DOQUERY-Step, der einen einzelnen SQL-Befehli ausführt legt man folgendermaßen an:&amp;lt;br&amp;gt;&lt;br /&gt;
Innerhalb der etl_steps Definition mach man einen Eintrag mit dem etl_job und einem eindeutigen uniquename, der später die SQL-Datei referenziert, Typ ist &amp;quot;DOQUERY&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;meinJob&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_test&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Schlüsseltabelle fin_zusatzmerkmale aktiv schalten&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOQUERY&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }  &lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Innerhalb der etl_step_properties müssen für den DOSQL-Step der folgende Eintrag definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_test&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;update fin_zusatzmerkmale set aktiv=1;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;databaseSystem&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;postgres&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== MSG-Step ==&lt;br /&gt;
wird von HisInOne 2024.12 noch nicht unterstützt&lt;br /&gt;
== komplettes Beispiel ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
--Freemarker Template&lt;br /&gt;
&amp;lt;#assign  etl_jobs = [&lt;br /&gt;
  {&amp;quot;uniquename&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst und Proj aus MBS übertragen&amp;quot;, &amp;quot;systeminfo_id&amp;quot;:3 ,&amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;#assign  etl_job_params = [&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Proj entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Proj laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Aktualisierung Schlüsseltabelle fin_zusatzmerkmale&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOSQL&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select inst_nr, key_ext,lehr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.inst; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select projnr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.proj; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_proj_plus.unl&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_inst_plus&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_proj_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_proj_plus&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlScriptPath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$SUPERX_DIR/db/module/etl/potsdam/update_fin_zusatzmerkmale.sql&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;#assign testfaelle  = [&lt;br /&gt;
 ] /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;@ETL_STEPS_FUELLEN/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Ausführung per Shellscript ==&lt;br /&gt;
Allgemeine Hinweise zum Ausführen von Laderoutinen per Script finden sich im [https://wiki.his.de/mediawiki/index.php/Skriptbasierte_Komponentenverwaltung_-_HISinOne-BI HisWiki].&amp;lt;br&amp;gt;&lt;br /&gt;
Kopieren Sie unter webapps/superx/scripts/shell die Datei component_admin_cli.sh.sam nach component_admin_cli.sh und passen darin die Variable SUPERX_DIR gemäß Ihrer Installation an.&amp;lt;br&amp;gt;Dann geben Sie der Datei Ausführungsrechte.&lt;br /&gt;
Eine Sonderladeroutine kann man ausführen mit &lt;br /&gt;
  component_admin_cli.sh -e UNIQUENAME&lt;br /&gt;
z.B.&lt;br /&gt;
  component_admin_cli.sh -e fin_inst_proj_special&lt;br /&gt;
Es erscheinen eine Menge Logausgaben wie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2025-06-17 09:31:00,558 [main] INFO  org.springframework.batch.core.launch.support.SimpleJobLauncher - No TaskExecutor has been set, defaulting to synchronous executor.&lt;br /&gt;
2025-06-17 09:31:00,613 [main] WARN  org.springframework.data.convert.CustomConversions - Registering converter from class java.lang.Boolean to class org.springframework.data.jdbc.core.convert.JdbcValue as writing converter although it doesn&#039;t convert to a store-supported type! You might want to check your annotation setup at the converter implementation.&lt;br /&gt;
2025-06-17 09:31:01,098 [main] WARN  org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer - No transaction manager was provided, using a DataSourceTransactionManager&lt;br /&gt;
2025-06-17 09:31:01,111 [main] INFO  org.springframework.batch.core.repository.support.JobRepositoryFactoryBean - No database type set, using meta data indicating: POSTGRES&lt;br /&gt;
2025-06-17 09:29:41,741 [main] INFO  de.superx.rest.EtlJobApi - Job not registered yet: Zusatzfelder Inst und Proj aus MBS übertragen&lt;br /&gt;
2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die hier aufgeführten WARN Meldungen kann man ignorieren.Andererseits sind Meldungen, die sich konkret auf den Job beziehen wichtig. Im folgenden Beispiel wird ein Script nicht gefunden&lt;br /&gt;
  2025-06-17 09:31:02,641 [main] WARN  de.superx.spring.service.BatchJobDescriptionAdapter - SQL Skriptfile doesn&#039;t exist: $FIN_PFAD/potsdam/7950_update_fin_zusatzmerkmale.sql&lt;br /&gt;
oder hier ein allgemeiner ERROR-Meldung&lt;br /&gt;
  2025-06-17 09:37:16,188 [main] ERROR de.superx.bin.ComponentAdminCLI - ERROR executing job fin_inst_proj_special&lt;br /&gt;
&lt;br /&gt;
Der Exitstatus des Script scheint in HisInOne2024.12 noch meist oder immer 0 zurückzuliefern. Man sollte also auf etwaige Fehler ggfs. manuell die Logdateien prüfen.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldungen FAQ ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Cannot invoke &amp;quot;javax.sql.DataSource.unwrap(java.lang.Class)&amp;quot; because the return value of  de.superx.spring.batch.reader.JdbcUnloadReader.getDataSource()&amp;quot; is null&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
bedeutet,dass bei einem UnloadStep als dataSource z.B. &amp;quot;mbs&amp;quot; angegeben wurde, aber in der databases.xml (oder Spezialversion davon) keine Datenquelle &amp;quot;mbs&amp;quot; definiert ist.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;ERROR:  null value in column &amp;quot;step_type_id&amp;quot; of relation &amp;quot;etl_step&amp;quot; violates not-null constraint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kontrollieren Sie, ob die Tabelle etl_step_type gefüllt ist (s.o.).&lt;/div&gt;</summary>
		<author><name>Bisping</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Hochschuleigene_Laderoutinen&amp;diff=14654</id>
		<title>Hochschuleigene Laderoutinen</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Hochschuleigene_Laderoutinen&amp;diff=14654"/>
		<updated>2025-06-17T08:20:29Z</updated>

		<summary type="html">&lt;p&gt;Bisping: /* Fehlermeldungen FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Übersicht =&lt;br /&gt;
Eigene Laderoutinen sind öfter gewünscht, wenn bestimmte Daten von den bisherigen Modulen (noch) nicht übernommen werden.&lt;br /&gt;
Als Beispiele könnten sein&lt;br /&gt;
* erfasste Mathenote von Bewerbern&lt;br /&gt;
* neue Tabelle zu Lehrbeauftragten&lt;br /&gt;
* bestimmte Zusatzfelder in MBS.inst&lt;br /&gt;
Dabei geht es darum, die Daten zunächst aus dem Quellsystem zu entladen (CSV), sie dann in SuperX/BI einzuspielen und ggfs. noch zu transformieren.&lt;br /&gt;
=Lade-Techniken=&lt;br /&gt;
Folgende Lade-Techniken sind möglich:&lt;br /&gt;
* [[Kernmodul_Shellscripte#Umgang_mit_Tabellen|Shellscripte]] (DOQUERY, sx_upload_table.x )&lt;br /&gt;
* [[Kettle-Grundlagen|Kettle]]&lt;br /&gt;
* [[Modul_ETL_Administrationshandbuch|ETL-Sonderladeroutinen]]&lt;br /&gt;
&lt;br /&gt;
=Beispielanforderung Mathenote=&lt;br /&gt;
Die Technische Universität Hamburg (TUHH) erfasst die Mathematiknoten, welche Bewerber auf ihrem bisherigen Bildungsweg erreichten. Diese Mathematiknoten sollen zukünftig in Auswertungen einbezogen werden.&lt;br /&gt;
==Ziel der Laderoutine==&lt;br /&gt;
Das Ziel der Laderoutine ist das Befüllen einer neuen Tabelle mit Bewerbernummer und Mathematiknote. Diese neue Tabelle wird über das Feld &#039;Weitere Tabellen&#039; im &amp;quot;Bewerbungen und Zulassungen Datenblatt&amp;quot; erreichbar sein. Ggf. ist noch ein Zeitraum anzugeben. &amp;lt;/br&amp;gt;Tabellenstruktur:&lt;br /&gt;
* Tabellenname: zul_bew_mathenote&lt;br /&gt;
*Felder:&lt;br /&gt;
** Bewerbernummer (INT)&lt;br /&gt;
** Mathenote (FLOAT)&lt;br /&gt;
* Zusätzlich zum Hochladen noch eine &amp;quot;_neu&amp;quot;-Tabelle, die quasi als Zwischenlager dient.&lt;br /&gt;
&lt;br /&gt;
==Implementierung der Laderoutine==&lt;br /&gt;
===Entscheidung über die Technik des Ladens===&lt;br /&gt;
* Shellscripte (DOQUERY, sx_upload_table.x )&lt;br /&gt;
* Kettle&lt;br /&gt;
* BI Sonderladeroutine&lt;br /&gt;
===Unload aus dem Vorsystem===&lt;br /&gt;
Entladen der Tabelle &#039;&#039;&#039;application_content&#039;&#039;&#039;, im Ergebnis eine CSV Datei&lt;br /&gt;
===Laden der CSV-Datei===&lt;br /&gt;
Hochladen mit Kettle oder Shellscript in _neu-Tabelle&lt;br /&gt;
===Transformation in finale Tabelle===&lt;br /&gt;
Aus der _neu-Tabelle in die finale Tabelle schreiben, ggf. noch Tranformation, z.B. von Noten-Punkten zur Note Dezimal (z.B. 11=&amp;quot;gut&amp;quot;)&lt;br /&gt;
===Automatisierung===&lt;br /&gt;
Nächtliches Laden mit Shellscript oder Kettle&lt;br /&gt;
==Einbinden in das Bewerbungen Datenblatt==&lt;br /&gt;
* sx_tables: Einfügen der Tabellennamen&lt;br /&gt;
* sx_fields: Einfügen der Spaltennamen inkl. Relationen (Fremdschlüssel-Beziehung von Bewerber-Mathenote zu Bewerbung Datenblatt (zul_bew_mathenote.bewnr = zul_antr_aggr.bewnr)&lt;br /&gt;
=ETL Sonderladeroutinen=&lt;br /&gt;
Im ETL-Modul gibt es die Möglichkeit, eigene Sonderladeroutinen zu entwerfen. Diese können dann auch in der HISinOne-BI ab Version 2024.12 in der [https://wiki.his.de/mediawiki/index.php/Konnektoren_ausfuehren_-_HISinOne-BI neuen Komponentenverwaltung] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung dafür ist, dass das ETL-Modul aus dem [https://download.superx-projekt.de Downloadbereich] installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Laderoutine kann Entladeschritte, Ladeschritte und Transformationsschritte (SQL) enthalten.&lt;br /&gt;
&lt;br /&gt;
Die Installation einer Sonderladeroutine läuft über ein komplexes Script, dass mit Freemarker-Variablen gefüllt wird und dann später zu reinem SQL transformiert wird, der die Installation ausführt.&amp;lt;br&amp;gt;&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== etl_step_type ===&lt;br /&gt;
Kontrollieren Sie, ob die BI-Tabelle etl_step_type mit fünf Datensätzen gefüllt ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls diese bei Ihnen leer ist, fügen Sie folgende Step-Types ein&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO etl_step_type (tid,uniquename,caption,handler) &lt;br /&gt;
VALUES&lt;br /&gt;
  (1,&#039;LOAD&#039;,&#039;Tabelle hochladen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerUploadRecords&#039;),&lt;br /&gt;
  (2,&#039;DOSQL&#039;,&#039;SQL-Script ausführen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerDosql&#039;),&lt;br /&gt;
  (3,&#039;DOQUERY&#039;,&#039;SQL-Query ausführen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerDoquery&#039;),&lt;br /&gt;
  (4,&#039;UNLOAD&#039;,&#039;SQL-Ergebnis entladen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerUnloadRecords&#039;),&lt;br /&gt;
  (5,&#039;MSG&#039;,&#039;Logausgabe&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerMsg&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ETL-Makros zur Generierung ===&lt;br /&gt;
Um fertigen SQL zu generieren muss in der verwendeten Datenbank in der Tabelle fm_templates die ETL_MAKRO aus mind. ETL-Modul 0.5 installiert sein. Damit ist nur die Generierung von Installations-SQL gemeint, zur Verwendung der Steps ist dies nicht nötig.&lt;br /&gt;
&lt;br /&gt;
==Definition von Sonderladeroutinen==&lt;br /&gt;
Ausgangspunkt ist die Definition einer (oder mehrerer) Sonderladeroutinen.&lt;br /&gt;
Als uniquename muss eine eindeutige Kennung gewählt werden, die auf &amp;quot;special&amp;quot; endet und bei systeminfo, die ID zu welchem Teilbereich (wie Finanzen,Personal oder Studierende) entsprechend der Tabelle systeminfo die Sonderladeroutine gehört und unter deren Hauptkonnektor sie erscheinen soll. etl_job_params können leer bleiben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_jobs = [&lt;br /&gt;
  {&amp;quot;uniquename&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst und Proj aus MBS übertragen&amp;quot;, &amp;quot;systeminfo_id&amp;quot;:3 ,&amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
   ] /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;#assign  etl_job_params = [&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel Entladen/Laden-Schritte ==&lt;br /&gt;
In einem einfachen Fall will man bestimmte Zusatzfelder entladen. Dazu legt man zwei ETL-Steps an.&lt;br /&gt;
Das Attribut &amp;quot;etl_job&amp;quot; verweist auf den ETL-JOB (&amp;quot;fin_inst_special&amp;quot;) zu dem die Steps gehören sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dann gibt man ihnen einen uniquename, einen Namen und einen Typ&lt;br /&gt;
* UNLOAD zum Entladenaus einer Quell-Datenbank&lt;br /&gt;
* LOAD zum Einspielen in die BI-Datenbank&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter für UNLOAD-Steps ==&lt;br /&gt;
Folgende Parameter müssen für einen UNLOAD-Step hinterlegt werden datasource,sql und unlFile.&amp;lt;br&amp;gt;&lt;br /&gt;
Das attribut &amp;quot;datasource&amp;quot; gibt die Quelldatenbankverbindung in HisInOne an. (hier im Beispiel mbs).&amp;lt;br&amp;gt;&lt;br /&gt;
Im Script darf es für alle step_properties nur eine Definition mit &amp;lt;#assign etl_step_properties= .. geben, weitere StepProperties müssen in dieser Aufzählung ergänzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select inst_nr, key_ext,lehr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.inst; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sourceVersions&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; } -- des Jobs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter für LOAD-Steps ==&lt;br /&gt;
Folgende Parameter müssen für einen LOAD-Step hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut &amp;quot;tableName&amp;quot; (hier im Beispiel &amp;quot;fin_inst_plus&amp;quot;)gibt die Zieltabelle an, in die vorher entladenen Daten eingespielt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Script darf es für alle step_properties nur eine Definition mit &amp;lt;#assign etl_step_properties= .. geben, weitere StepProperties müssen in dieser Aufzählung ergänzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
 {&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_inst_plus&amp;quot; }&lt;br /&gt;
 ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden, insbesondere header true könnte interessant sein.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;database&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;delimiter&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;^&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;refresh&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;header&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;false&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;usePostgresCopyApi&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== DOSQL-Step ==&lt;br /&gt;
Einen DOSQL-Step, der eine SQL-Datei ausführt legt man folgendermaßen an:&amp;lt;br&amp;gt;&lt;br /&gt;
Innerhalb der etl_steps Definition mach man einen Eintrag mit dem etl_job und einem eindeutigen uniquename, der später die SQL-Datei referenziert, Typ ist &amp;quot;DOSQL&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;meinJob&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Aktualisierung Schlüsseltabelle fin_zusatzmerkmale&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOSQL&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }  &lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Innerhalb der etl_step_properties muss für den DOSQL-Step der folgende Eintrag definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlScriptPath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_PFAD/schluesseltabellen/update_fin_zusatzmerkmale.sql&amp;quot; },&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hinweis:&lt;br /&gt;
Es sollte nicht mit SUPERX_DIR gearbeitet werden, denn bei Ausführung im Browser funktioniert das, per Shellscript ist es aber anders definiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;databaseSystem&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;postgres&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;limitDebugStmts&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;-1&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOQUERY-Step ==&lt;br /&gt;
Einen DOQUERY-Step, der einen einzelnen SQL-Befehli ausführt legt man folgendermaßen an:&amp;lt;br&amp;gt;&lt;br /&gt;
Innerhalb der etl_steps Definition mach man einen Eintrag mit dem etl_job und einem eindeutigen uniquename, der später die SQL-Datei referenziert, Typ ist &amp;quot;DOQUERY&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;meinJob&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_test&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Schlüsseltabelle fin_zusatzmerkmale aktiv schalten&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOQUERY&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }  &lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Innerhalb der etl_step_properties müssen für den DOSQL-Step der folgende Eintrag definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_test&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;update fin_zusatzmerkmale set aktiv=1;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;databaseSystem&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;postgres&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== MSG-Step ==&lt;br /&gt;
wird von HisInOne 2024.12 noch nicht unterstützt&lt;br /&gt;
== komplettes Beispiel ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
--Freemarker Template&lt;br /&gt;
&amp;lt;#assign  etl_jobs = [&lt;br /&gt;
  {&amp;quot;uniquename&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst und Proj aus MBS übertragen&amp;quot;, &amp;quot;systeminfo_id&amp;quot;:3 ,&amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;#assign  etl_job_params = [&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Proj entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Proj laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Aktualisierung Schlüsseltabelle fin_zusatzmerkmale&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOSQL&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select inst_nr, key_ext,lehr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.inst; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select projnr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.proj; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_proj_plus.unl&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_inst_plus&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_proj_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_proj_plus&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlScriptPath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$SUPERX_DIR/db/module/etl/potsdam/update_fin_zusatzmerkmale.sql&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;#assign testfaelle  = [&lt;br /&gt;
 ] /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;@ETL_STEPS_FUELLEN/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Ausführung per Shellscript ==&lt;br /&gt;
Allgemeine Hinweise zum Ausführen von Laderoutinen per Script finden sich im [https://wiki.his.de/mediawiki/index.php/Skriptbasierte_Komponentenverwaltung_-_HISinOne-BI HisWiki].&lt;br /&gt;
Kopieren Sie unter webapps/superx/scripts/shell die Datei component_admin_cli.sh.sam nach component_admin_cli.sh und passen darin die Variable SUPERX_DIR gemäß Ihrer Installation an.&amp;lt;br&amp;gt;Dann geben Sie der Datei Ausführungsrechte.&lt;br /&gt;
Eine Sonderladeroutine kann man ausführen mit &lt;br /&gt;
  component_admin_cli.sh -e UNIQUENAME&lt;br /&gt;
z.B.&lt;br /&gt;
  component_admin_cli.sh -e fin_inst_proj_special&lt;br /&gt;
Es erscheinen eine Menge Logausgaben wie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2025-06-17 09:31:00,558 [main] INFO  org.springframework.batch.core.launch.support.SimpleJobLauncher - No TaskExecutor has been set, defaulting to synchronous executor.&lt;br /&gt;
2025-06-17 09:31:00,613 [main] WARN  org.springframework.data.convert.CustomConversions - Registering converter from class java.lang.Boolean to class org.springframework.data.jdbc.core.convert.JdbcValue as writing converter although it doesn&#039;t convert to a store-supported type! You might want to check your annotation setup at the converter implementation.&lt;br /&gt;
2025-06-17 09:31:01,098 [main] WARN  org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer - No transaction manager was provided, using a DataSourceTransactionManager&lt;br /&gt;
2025-06-17 09:31:01,111 [main] INFO  org.springframework.batch.core.repository.support.JobRepositoryFactoryBean - No database type set, using meta data indicating: POSTGRES&lt;br /&gt;
2025-06-17 09:29:41,741 [main] INFO  de.superx.rest.EtlJobApi - Job not registered yet: Zusatzfelder Inst und Proj aus MBS übertragen&lt;br /&gt;
2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die hier aufgeführten WARN Meldungen kann man ignorieren.Andererseits sind Meldungen, die sich konkret auf den Job beziehen wichtig. Im folgenden Beispiel wird ein Script nicht gefunden&lt;br /&gt;
  2025-06-17 09:31:02,641 [main] WARN  de.superx.spring.service.BatchJobDescriptionAdapter - SQL Skriptfile doesn&#039;t exist: $FIN_PFAD/potsdam/7950_update_fin_zusatzmerkmale.sql&lt;br /&gt;
oder hier ein allgemeiner ERROR-Meldung&lt;br /&gt;
  2025-06-17 09:37:16,188 [main] ERROR de.superx.bin.ComponentAdminCLI - ERROR executing job fin_inst_proj_special&lt;br /&gt;
&lt;br /&gt;
Der Exitstatus des Script scheint in HisInOne2024.12 noch meist oder immer 0 zurückzuliefern. Man sollte also auf etwaige Fehler ggfs. manuell die Logdateien prüfen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldungen FAQ ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Cannot invoke &amp;quot;javax.sql.DataSource.unwrap(java.lang.Class)&amp;quot; because the return value of  de.superx.spring.batch.reader.JdbcUnloadReader.getDataSource()&amp;quot; is null&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
bedeutet,dass bei einem UnloadStep als dataSource z.B. &amp;quot;mbs&amp;quot; angegeben wurde, aber in der databases.xml (oder Spezialversion davon) keine Datenquelle &amp;quot;mbs&amp;quot; definiert ist.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;ERROR:  null value in column &amp;quot;step_type_id&amp;quot; of relation &amp;quot;etl_step&amp;quot; violates not-null constraint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kontrollieren Sie, ob die Tabelle etl_step_type gefüllt ist (s.o.).&lt;/div&gt;</summary>
		<author><name>Bisping</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Hochschuleigene_Laderoutinen&amp;diff=14653</id>
		<title>Hochschuleigene Laderoutinen</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Hochschuleigene_Laderoutinen&amp;diff=14653"/>
		<updated>2025-06-17T07:45:17Z</updated>

		<summary type="html">&lt;p&gt;Bisping: /* DOSQL-Step */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Übersicht =&lt;br /&gt;
Eigene Laderoutinen sind öfter gewünscht, wenn bestimmte Daten von den bisherigen Modulen (noch) nicht übernommen werden.&lt;br /&gt;
Als Beispiele könnten sein&lt;br /&gt;
* erfasste Mathenote von Bewerbern&lt;br /&gt;
* neue Tabelle zu Lehrbeauftragten&lt;br /&gt;
* bestimmte Zusatzfelder in MBS.inst&lt;br /&gt;
Dabei geht es darum, die Daten zunächst aus dem Quellsystem zu entladen (CSV), sie dann in SuperX/BI einzuspielen und ggfs. noch zu transformieren.&lt;br /&gt;
=Lade-Techniken=&lt;br /&gt;
Folgende Lade-Techniken sind möglich:&lt;br /&gt;
* [[Kernmodul_Shellscripte#Umgang_mit_Tabellen|Shellscripte]] (DOQUERY, sx_upload_table.x )&lt;br /&gt;
* [[Kettle-Grundlagen|Kettle]]&lt;br /&gt;
* [[Modul_ETL_Administrationshandbuch|ETL-Sonderladeroutinen]]&lt;br /&gt;
&lt;br /&gt;
=Beispielanforderung Mathenote=&lt;br /&gt;
Die Technische Universität Hamburg (TUHH) erfasst die Mathematiknoten, welche Bewerber auf ihrem bisherigen Bildungsweg erreichten. Diese Mathematiknoten sollen zukünftig in Auswertungen einbezogen werden.&lt;br /&gt;
==Ziel der Laderoutine==&lt;br /&gt;
Das Ziel der Laderoutine ist das Befüllen einer neuen Tabelle mit Bewerbernummer und Mathematiknote. Diese neue Tabelle wird über das Feld &#039;Weitere Tabellen&#039; im &amp;quot;Bewerbungen und Zulassungen Datenblatt&amp;quot; erreichbar sein. Ggf. ist noch ein Zeitraum anzugeben. &amp;lt;/br&amp;gt;Tabellenstruktur:&lt;br /&gt;
* Tabellenname: zul_bew_mathenote&lt;br /&gt;
*Felder:&lt;br /&gt;
** Bewerbernummer (INT)&lt;br /&gt;
** Mathenote (FLOAT)&lt;br /&gt;
* Zusätzlich zum Hochladen noch eine &amp;quot;_neu&amp;quot;-Tabelle, die quasi als Zwischenlager dient.&lt;br /&gt;
&lt;br /&gt;
==Implementierung der Laderoutine==&lt;br /&gt;
===Entscheidung über die Technik des Ladens===&lt;br /&gt;
* Shellscripte (DOQUERY, sx_upload_table.x )&lt;br /&gt;
* Kettle&lt;br /&gt;
* BI Sonderladeroutine&lt;br /&gt;
===Unload aus dem Vorsystem===&lt;br /&gt;
Entladen der Tabelle &#039;&#039;&#039;application_content&#039;&#039;&#039;, im Ergebnis eine CSV Datei&lt;br /&gt;
===Laden der CSV-Datei===&lt;br /&gt;
Hochladen mit Kettle oder Shellscript in _neu-Tabelle&lt;br /&gt;
===Transformation in finale Tabelle===&lt;br /&gt;
Aus der _neu-Tabelle in die finale Tabelle schreiben, ggf. noch Tranformation, z.B. von Noten-Punkten zur Note Dezimal (z.B. 11=&amp;quot;gut&amp;quot;)&lt;br /&gt;
===Automatisierung===&lt;br /&gt;
Nächtliches Laden mit Shellscript oder Kettle&lt;br /&gt;
==Einbinden in das Bewerbungen Datenblatt==&lt;br /&gt;
* sx_tables: Einfügen der Tabellennamen&lt;br /&gt;
* sx_fields: Einfügen der Spaltennamen inkl. Relationen (Fremdschlüssel-Beziehung von Bewerber-Mathenote zu Bewerbung Datenblatt (zul_bew_mathenote.bewnr = zul_antr_aggr.bewnr)&lt;br /&gt;
=ETL Sonderladeroutinen=&lt;br /&gt;
Im ETL-Modul gibt es die Möglichkeit, eigene Sonderladeroutinen zu entwerfen. Diese können dann auch in der HISinOne-BI ab Version 2024.12 in der [https://wiki.his.de/mediawiki/index.php/Konnektoren_ausfuehren_-_HISinOne-BI neuen Komponentenverwaltung] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung dafür ist, dass das ETL-Modul aus dem [https://download.superx-projekt.de Downloadbereich] installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Laderoutine kann Entladeschritte, Ladeschritte und Transformationsschritte (SQL) enthalten.&lt;br /&gt;
&lt;br /&gt;
Die Installation einer Sonderladeroutine läuft über ein komplexes Script, dass mit Freemarker-Variablen gefüllt wird und dann später zu reinem SQL transformiert wird, der die Installation ausführt.&amp;lt;br&amp;gt;&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== etl_step_type ===&lt;br /&gt;
Kontrollieren Sie, ob die BI-Tabelle etl_step_type mit fünf Datensätzen gefüllt ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls diese bei Ihnen leer ist, fügen Sie folgende Step-Types ein&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO etl_step_type (tid,uniquename,caption,handler) &lt;br /&gt;
VALUES&lt;br /&gt;
  (1,&#039;LOAD&#039;,&#039;Tabelle hochladen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerUploadRecords&#039;),&lt;br /&gt;
  (2,&#039;DOSQL&#039;,&#039;SQL-Script ausführen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerDosql&#039;),&lt;br /&gt;
  (3,&#039;DOQUERY&#039;,&#039;SQL-Query ausführen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerDoquery&#039;),&lt;br /&gt;
  (4,&#039;UNLOAD&#039;,&#039;SQL-Ergebnis entladen&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerUnloadRecords&#039;),&lt;br /&gt;
  (5,&#039;MSG&#039;,&#039;Logausgabe&#039;,&#039;de.superx.elt.ActionHandler.EtlActionHandlerMsg&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ETL-Makros zur Generierung ===&lt;br /&gt;
Um fertigen SQL zu generieren muss in der verwendeten Datenbank in der Tabelle fm_templates die ETL_MAKRO aus mind. ETL-Modul 0.5 installiert sein. Damit ist nur die Generierung von Installations-SQL gemeint, zur Verwendung der Steps ist dies nicht nötig.&lt;br /&gt;
&lt;br /&gt;
==Definition von Sonderladeroutinen==&lt;br /&gt;
Ausgangspunkt ist die Definition einer (oder mehrerer) Sonderladeroutinen.&lt;br /&gt;
Als uniquename muss eine eindeutige Kennung gewählt werden, die auf &amp;quot;special&amp;quot; endet und bei systeminfo, die ID zu welchem Teilbereich (wie Finanzen,Personal oder Studierende) entsprechend der Tabelle systeminfo die Sonderladeroutine gehört und unter deren Hauptkonnektor sie erscheinen soll. etl_job_params können leer bleiben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_jobs = [&lt;br /&gt;
  {&amp;quot;uniquename&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst und Proj aus MBS übertragen&amp;quot;, &amp;quot;systeminfo_id&amp;quot;:3 ,&amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
   ] /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;#assign  etl_job_params = [&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel Entladen/Laden-Schritte ==&lt;br /&gt;
In einem einfachen Fall will man bestimmte Zusatzfelder entladen. Dazu legt man zwei ETL-Steps an.&lt;br /&gt;
Das Attribut &amp;quot;etl_job&amp;quot; verweist auf den ETL-JOB (&amp;quot;fin_inst_special&amp;quot;) zu dem die Steps gehören sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dann gibt man ihnen einen uniquename, einen Namen und einen Typ&lt;br /&gt;
* UNLOAD zum Entladenaus einer Quell-Datenbank&lt;br /&gt;
* LOAD zum Einspielen in die BI-Datenbank&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter für UNLOAD-Steps ==&lt;br /&gt;
Folgende Parameter müssen für einen UNLOAD-Step hinterlegt werden datasource,sql und unlFile.&amp;lt;br&amp;gt;&lt;br /&gt;
Das attribut &amp;quot;datasource&amp;quot; gibt die Quelldatenbankverbindung in HisInOne an. (hier im Beispiel mbs).&amp;lt;br&amp;gt;&lt;br /&gt;
Im Script darf es für alle step_properties nur eine Definition mit &amp;lt;#assign etl_step_properties= .. geben, weitere StepProperties müssen in dieser Aufzählung ergänzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select inst_nr, key_ext,lehr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.inst; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sourceVersions&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; } -- des Jobs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter für LOAD-Steps ==&lt;br /&gt;
Folgende Parameter müssen für einen LOAD-Step hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut &amp;quot;tableName&amp;quot; (hier im Beispiel &amp;quot;fin_inst_plus&amp;quot;)gibt die Zieltabelle an, in die vorher entladenen Daten eingespielt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Script darf es für alle step_properties nur eine Definition mit &amp;lt;#assign etl_step_properties= .. geben, weitere StepProperties müssen in dieser Aufzählung ergänzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
 {&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_inst_plus&amp;quot; }&lt;br /&gt;
 ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden, insbesondere header true könnte interessant sein.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;database&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;delimiter&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;^&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;refresh&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;header&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;false&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;usePostgresCopyApi&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== DOSQL-Step ==&lt;br /&gt;
Einen DOSQL-Step, der eine SQL-Datei ausführt legt man folgendermaßen an:&amp;lt;br&amp;gt;&lt;br /&gt;
Innerhalb der etl_steps Definition mach man einen Eintrag mit dem etl_job und einem eindeutigen uniquename, der später die SQL-Datei referenziert, Typ ist &amp;quot;DOSQL&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;meinJob&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Aktualisierung Schlüsseltabelle fin_zusatzmerkmale&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOSQL&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }  &lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Innerhalb der etl_step_properties muss für den DOSQL-Step der folgende Eintrag definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlScriptPath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_PFAD/schluesseltabellen/update_fin_zusatzmerkmale.sql&amp;quot; },&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hinweis:&lt;br /&gt;
Es sollte nicht mit SUPERX_DIR gearbeitet werden, denn bei Ausführung im Browser funktioniert das, per Shellscript ist es aber anders definiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;databaseSystem&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;postgres&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;limitDebugStmts&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;-1&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOQUERY-Step ==&lt;br /&gt;
Einen DOQUERY-Step, der einen einzelnen SQL-Befehli ausführt legt man folgendermaßen an:&amp;lt;br&amp;gt;&lt;br /&gt;
Innerhalb der etl_steps Definition mach man einen Eintrag mit dem etl_job und einem eindeutigen uniquename, der später die SQL-Datei referenziert, Typ ist &amp;quot;DOQUERY&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;meinJob&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_test&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Schlüsseltabelle fin_zusatzmerkmale aktiv schalten&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOQUERY&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }  &lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Innerhalb der etl_step_properties müssen für den DOSQL-Step der folgende Eintrag definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_test&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;update fin_zusatzmerkmale set aktiv=1;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die folgenden Parameter werden vom Script automatisch mit defaultwerten gefüllt, könnten bei Bedarf aber zusätzlich definiert werden&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;active&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;custom&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;true&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;databaseSystem&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;postgres&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;systemInfoId&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;xx&amp;quot; }, -- vom Job&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== MSG-Step ==&lt;br /&gt;
wird von HisInOne 2024.12 noch nicht unterstützt&lt;br /&gt;
== komplettes Beispiel ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
--Freemarker Template&lt;br /&gt;
&amp;lt;#assign  etl_jobs = [&lt;br /&gt;
  {&amp;quot;uniquename&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst und Proj aus MBS übertragen&amp;quot;, &amp;quot;systeminfo_id&amp;quot;:3 ,&amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;#assign  etl_job_params = [&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&amp;lt;#assign  etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Proj entladen&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Inst laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Zusatzfelder Proj laden&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;fin_inst_proj_special&amp;quot;, &amp;quot;uniquename&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;, &amp;quot;name&amp;quot;:&amp;quot;Aktualisierung Schlüsseltabelle fin_zusatzmerkmale&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;DOSQL&amp;quot;, &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot; }&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#assign  etl_step_properties = [&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select inst_nr, key_ext,lehr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.inst; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;mbs&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;select projnr,freitext01,freitext02,freitext03,freitext04,freitext05,freitext06,freitext07,freitext08,freitext09,freitext10 from  cob.proj; &amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;unload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_proj_plus.unl&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_inst_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_inst&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_inst_plus&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$FIN_LOAD_PATH/unl/fin_proj_plus.unl&amp;quot; },&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;upload_fin_proj&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;fin_proj_plus&amp;quot; },&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;update_fin_zusatzmerkmale&amp;quot;,&amp;quot;prop_name&amp;quot;:&amp;quot;sqlScriptPath&amp;quot;, &amp;quot;prop_value&amp;quot;:&amp;quot;$SUPERX_DIR/db/module/etl/potsdam/update_fin_zusatzmerkmale.sql&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ] /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;#assign testfaelle  = [&lt;br /&gt;
 ] /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;@ETL_STEPS_FUELLEN/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Fehlermeldungen FAQ ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Cannot invoke &amp;quot;javax.sql.DataSource.unwrap(java.lang.Class)&amp;quot; because the return value of  de.superx.spring.batch.reader.JdbcUnloadReader.getDataSource()&amp;quot; is null&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
bedeutet,dass bei einem UnloadStep als dataSource z.B. &amp;quot;mbs&amp;quot; angegeben wurde, aber in der databases.xml (oder Spezialversion davon) keine Datenquelle &amp;quot;mbs&amp;quot; definiert ist.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;ERROR:  null value in column &amp;quot;step_type_id&amp;quot; of relation &amp;quot;etl_step&amp;quot; violates not-null constraint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kontrollieren Sie, ob die Tabelle etl_step_type gefüllt ist (s.o.).&lt;/div&gt;</summary>
		<author><name>Bisping</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:Selektionsvorbelegung_angular.jpg&amp;diff=14569</id>
		<title>Datei:Selektionsvorbelegung angular.jpg</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:Selektionsvorbelegung_angular.jpg&amp;diff=14569"/>
		<updated>2025-05-20T07:25:28Z</updated>

		<summary type="html">&lt;p&gt;Bisping: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bisping</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:cifx_stammdatenverwaltung.jpg&amp;diff=14567</id>
		<title>Datei:cifx stammdatenverwaltung.jpg</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:cifx_stammdatenverwaltung.jpg&amp;diff=14567"/>
		<updated>2025-05-20T07:23:06Z</updated>

		<summary type="html">&lt;p&gt;Bisping: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bisping</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:His202506_sos_bug.jpg&amp;diff=14565</id>
		<title>Datei:His202506 sos bug.jpg</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:His202506_sos_bug.jpg&amp;diff=14565"/>
		<updated>2025-05-20T07:20:51Z</updated>

		<summary type="html">&lt;p&gt;Bisping: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bisping</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:SOS_Stichtage_verwalten.jpg&amp;diff=14562</id>
		<title>Datei:SOS Stichtage verwalten.jpg</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:SOS_Stichtage_verwalten.jpg&amp;diff=14562"/>
		<updated>2025-05-20T07:12:07Z</updated>

		<summary type="html">&lt;p&gt;Bisping: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bisping</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Moduldokumentation&amp;diff=14552</id>
		<title>Moduldokumentation</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Moduldokumentation&amp;diff=14552"/>
		<updated>2025-05-19T09:49:55Z</updated>

		<summary type="html">&lt;p&gt;Bisping: /* SuperX-Entwicklung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SuperX.Nummernkreise=&lt;br /&gt;
* [[Nummernkreise|Nummernkreise Masken]]&lt;br /&gt;
* [[Nummernkreise Sachgebiete und Komponenten]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Kern=&lt;br /&gt;
* [[Moduldokumentation Kernmodul|Kernmodul]]&lt;br /&gt;
* [[Kern_Installation_Upgrade|Installation / Upgrade]]&lt;br /&gt;
* [[Kernmodul_Tomcat-Einrichtung|Tomcat-Einrichtung]]&lt;br /&gt;
* [[Kernmodul_LDAP-Einrichtung|LDAP-Einrichtung (obsolet?)]]&lt;br /&gt;
* [[Kern_Konfiguration|Konfiguration]]&lt;br /&gt;
* [[Kern_Oberflaeche|Anpassung der Oberfläche]]&lt;br /&gt;
* [[Kernmodul_Komponentenverwaltung|Komponentenverwaltung]]&lt;br /&gt;
* [[Kernmodul_Regelbetrieb|BI Regelbetrieb]]&lt;br /&gt;
* [[Kernmodul_Shellscripte|Shellscripte]]&lt;br /&gt;
* [[Kern_Bestandteile|Bestandteile]]&lt;br /&gt;
* [[Kern_Clientwerkzeuge|Client-Werkzeuge]]&lt;br /&gt;
* [https://wiki.his.de/mediawiki/index.php/Administration_-_HISinOne-BI Administrationsmasken (HISWIKI)]&lt;br /&gt;
* [[Kern_Benutzerverwaltung|Benutzerverwaltung]]&lt;br /&gt;
&lt;br /&gt;
=SuperX-Entwicklung=&lt;br /&gt;
* [[SuperX-Entwicklung|Übersicht]]&lt;br /&gt;
* [[Masken-Tutorial]]&lt;br /&gt;
* [[Erweiterte Maskenprogrammierung: Freemarker Templates]]&lt;br /&gt;
* [[Masken- und Tabellengestaltung]]&lt;br /&gt;
* [[Masken für das XML-Frontend vorbereiten]] (obsolet)&lt;br /&gt;
* [[Masken für externe Datenbanken (operatives Berichtswesen)]]&lt;br /&gt;
* [[Hochschuleigene Laderoutinen]]&lt;br /&gt;
* [[Abfragemakros (einschl. Schleifen u. Grafiken)]]&lt;br /&gt;
* [https://wiki.his.de/mediawiki/index.php/SXimport_zur_Maskengestaltung_verwerden-HISinOne-BI Teile aus anderen Masken oder externen Tabellen importieren]&lt;br /&gt;
* [[Neue Layouts in SuperX 5.1]] (obsolet)&lt;br /&gt;
* [[Neue Layouts in SuperX 5.2]]&lt;br /&gt;
* [[Entwicklerschulung]]&lt;br /&gt;
* HISWIKI&lt;br /&gt;
** [https://wiki.his.de/mediawiki/index.php/Entwicklerdokumentation_HISinOne Leitfäden für Entwickler]&lt;br /&gt;
** [https://wiki.his.de/mediawiki/index.php/Leitf%C3%A4den_f%C3%BCr_Entwickler_der_HISinOne-BI Leitfäden für Entwickler (BI)]&lt;br /&gt;
* [[Maschinenlesbare Schnittstellen für Ergebnistabellen]]&lt;br /&gt;
* [[Kettle-Grundlagen]]&lt;br /&gt;
* [[Kettle Kurs Teil 2]]&lt;br /&gt;
* [[Kettle Automat. Berichtsausführung und Mailversand]]&lt;br /&gt;
* [[LM-Modul validieren (Abgleich mit EXA)]]&lt;br /&gt;
* [[Dashboards erstellen]]&lt;br /&gt;
* [[Entwicklerhandbuch_xcube]]&lt;br /&gt;
* [[Gxstage-Standalone]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Campus-Management=&lt;br /&gt;
&lt;br /&gt;
* [[Moduldokumentation Bewerbung_Zulassung|Bewerbungen, Zulassungen]]&lt;br /&gt;
** [[Leitfaden Bewerberstammdaten]]&lt;br /&gt;
** [[Auswertungsuebersicht_Bereich_Bewerbung_Zulassung | Auswertungsübersicht]]&lt;br /&gt;
** [[Anwendungshandbuch Bewerbung, Zulassung]]&lt;br /&gt;
** [[Konfigurationshandbuch Bewerbung, Zulassung]]&lt;br /&gt;
* [[Moduldokumentation Studierende_Pruefungen|Studierende, Prüfungen]]&lt;br /&gt;
** [[Auswertungsuebersicht_Bereich_Studierende_Pruefungen | Auswertungsübersicht]]&lt;br /&gt;
** [[Anwendungshandbuch Studierende]]&lt;br /&gt;
** [[Anwendungshandbuch Pruefungen|Anwendungshandbuch Prüfungen]]&lt;br /&gt;
** [[Konfigurationshandbuch Studierenden-Komponente|Konfigurationshandbuch Studierende]]&lt;br /&gt;
** [[Konfiguration Studierende, Pruefungen|Konfiguration Studierende, Prüfungen]]&lt;br /&gt;
* [[Moduldokumentation Studienerfolg|Studienerfolg]]&lt;br /&gt;
** [[Studienerfolg_Akkreditierungsberichte|Akkreditierungsberichte]]&lt;br /&gt;
** [[Studienerfolg Bachelor-Master Übergang|Bachelor-Master Übergang]]&lt;br /&gt;
** [[Anwendungshandbuch_Studienverlauf|Anwendungshandbuch Studienverlauf]]&lt;br /&gt;
** [[Konfigurationshandbuch_Studienverlauf|Konfigurationshandbuch Studienverlauf]]&lt;br /&gt;
* [[Moduldokumentation Leistungsmonitoring|Leistungsmonitoring]]&lt;br /&gt;
** [[Konfigurationshanbuch Leistungsmonitoring|Konfigurationshandbuch]]&lt;br /&gt;
** [[Nutzungshandbuch Leistungsmonitoring|Nutzungshandbuch]]&lt;br /&gt;
* [[Moduldokumentation Studiengaenge|Studiengänge]]&lt;br /&gt;
** [[Konfigurationshandbuch Studiengaenge|Konfigurationshandbuch]]&lt;br /&gt;
** [[Anwendungshandbuch_Studiengaenge|Anwendungshandbuch Studiengänge]]&lt;br /&gt;
* [[Moduldokumentation COSTAGE| COStage (TU Graz CampusOnline)]]&lt;br /&gt;
** [[Modul_COSTAGE_Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_COSTAGE_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
** [[COSTAGE_in_Deutschland|COStage in Deutschland]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Ressourcen-Management=&lt;br /&gt;
* [[Moduldokumentation Personal, Stellen|Personal, Stellen]]&lt;br /&gt;
** [[Konfigurationshandbuch Personal und Stellen|Konfigurationshandbuch]]&lt;br /&gt;
** [[Nutzungshandbuch Personal und Stellen|Nutzungshandbuch]]&lt;br /&gt;
* [[Moduldokumentation Finanzrechnung|Finanzen]]&lt;br /&gt;
* [[Moduldokumentation Kostenrechnung|Kostenrechnung]]&lt;br /&gt;
* [[Moduldokumentation Inventar|Inventar]]&lt;br /&gt;
* [[Moduldokumentation Bau|Flächen, Räume]]&lt;br /&gt;
* [[Moduldokumentation GXStage|GXStage]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Campus-Ressourcen-Übergreifend=&lt;br /&gt;
* [[Moduldokumentation Managementkennzahlen|Managementkennzahlen]]&lt;br /&gt;
**[[Modul_Managementkennzahlen_Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
**[[Modul_Managementkennzahlen_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
* [[Moduldokumentation Grunddaten und Kennzahlen|Landeskennzahlen]]&lt;br /&gt;
** [[Modul_KENN_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
* [[SuperX-Connect|SuperX-Connect]]&lt;br /&gt;
* [[Moduldokumentation Wissensbasis|Wissensbasis]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Technologie und Qualitätssicherung=&lt;br /&gt;
* [[Heartbeat|Moduldokumentation Heartbeat]]&lt;br /&gt;
* [[Moduldokumentation Laderoutinen| Moduldokumentation Laderoutinen (ETL)]]&lt;br /&gt;
**[[Modul_ETL_Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
**[[Modul_ETL_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
* [[Moduldokumentation Qualitätssicherung |Moduldokumentation Qualitätssicherung (QA)]]&lt;br /&gt;
** [[Modul_Qualitätssicherung Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_Qualitätssicherung Benutzerhandbuch|Nutzungshandbuch]]&lt;br /&gt;
*[[Modul_Visualisierung|Moduldokumentation Visualisierung (VIZ)]]&lt;br /&gt;
** [[Modul_Visualisierung_Konfigurationshandbuch| Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_Visualisierung_Nutzungshandbuch| Nutzungshandbuch]]&lt;br /&gt;
*[[Modul_xCube|Moduldokumentation Kreuztabellen (Xcube)]]&lt;br /&gt;
** [[Modul_xCube_Konfigurationshandbuch| Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_xCube_Nutzungshandbuch| Nutzungshandbuch]]&lt;br /&gt;
**[[Entwicklerhandbuch_xcube|Entwicklerhandbuch]]&lt;br /&gt;
*[[Modul_Berichtsassistent|Moduldokumentation Berichtsassistent (RPTA)]]&lt;br /&gt;
** [[Modul_Berichtsassistent_Konfigurationshandbuch| Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_Berichtsassistent_Nutzungshandbuch| Nutzungshandbuch]]&lt;br /&gt;
** [[RPTA_TODOs|TODOs (Intern)]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Bedienung=&lt;br /&gt;
* [[SuperX-Benutzungshandbuch_Basics|SuperX-Benutzungshandbuch: Basics]]&lt;br /&gt;
* [[SuperX_barrierefrei | SuperX barrierefrei?]]&lt;/div&gt;</summary>
		<author><name>Bisping</name></author>
	</entry>
</feed>