Browse Source

Kommandozeilenbefehle JR/Kettle, KERN Makro Datenblätter summieren Aggregationsfelder, Ergebnis-XML hat nun auch feld@zeilenanzahl #7

RELEASE_kern5.1
Daniel Quathamer 3 months ago
parent
commit
83cbc0ffce
  1. 6
      src/de/superx/common/Maske.java
  2. 4
      superx/WEB-INF/conf/edustore/db/bin/sx_jasper.x
  3. 75
      superx/WEB-INF/conf/edustore/db/bin/sx_kitchen.x
  4. 277
      superx/WEB-INF/conf/edustore/db/install/schluesseltabellen/release_unloads/fm_templates.unl
  5. BIN
      superx/WEB-INF/lib/superx5.1.jar

6
src/de/superx/common/Maske.java

@ -1194,7 +1194,11 @@ public class Maske extends NamedIdObject implements Serializable {
rownr++; rownr++;
// completeFields.append(FieldXmlEncoder.toXml(feld,isFullXMLRequired // completeFields.append(FieldXmlEncoder.toXml(feld,isFullXMLRequired
// ,rownr)); // ,rownr));
completeFields.append("<feld varname=\"" + feld.getName() + "\" art=\"" + feld.getArt() + "\">" String isHiddenAttr="";
if(feld.getAttribut().equalsIgnoreCase("hidden") || feld.getArt()==13)
isHiddenAttr=" hidden=\"true\" ";
completeFields.append("<feld varname=\"" + feld.getName() + "\" art=\"" + feld.getArt() + "\""+ isHiddenAttr
+ " zeilenanzahl=\""+ feld.getZeilenanzahl()+"\">"
+ feld.getValueXml() + "<caption_short><![CDATA[" + feld.getCaptionShort() + "]]></caption_short>" + feld.getValueXml() + "<caption_short><![CDATA[" + feld.getCaptionShort() + "]]></caption_short>"
+ "<caption_long><![CDATA[" + feld.getCaptionLong() + "]]></caption_long>" + "</feld>\n"); + "<caption_long><![CDATA[" + feld.getCaptionLong() + "]]></caption_long>" + "</feld>\n");
} }

4
superx/WEB-INF/conf/edustore/db/bin/sx_jasper.x

@ -29,6 +29,7 @@ if [ "$1" = "" -o "$1" = "--help" -o "$1" = "-?" ]
echo "" echo ""
echo "Task compile: Quelldatei.jrxml -> Quelldatei.jasper" echo "Task compile: Quelldatei.jrxml -> Quelldatei.jasper"
echo "Quelldatei.jasper ist kompilierte Beschreibungsdatei für den Bericht" echo "Quelldatei.jasper ist kompilierte Beschreibungsdatei für den Bericht"
echo "Compile wird ausgeführt, wenn nur eine jrxml-Datei und der Logger übergeben wird."
echo "" echo ""
echo "Task fill/fillIgnorePagination: Quelldatei.jasper -> Quelldatei.jrprint" echo "Task fill/fillIgnorePagination: Quelldatei.jasper -> Quelldatei.jrprint"
echo "Quelldatei.jrprint enthält mit Daten gefüllte Berichtsvorlage" echo "Quelldatei.jrprint enthält mit Daten gefüllte Berichtsvorlage"
@ -43,6 +44,5 @@ if [ "$1" = "" -o "$1" = "--help" -o "$1" = "-?" ]
fi fi
java $JAVA_OPTS -cp "$JDBC_CLASSPATH" de.superx.bin.SxJasper -logger:$LOGGER_PROPERTIES "$@"
java $JAVA_OPTS -cp "$JDBC_CLASSPATH" de.superx.bin.SxJasper -logger:$LOGGER_PROPERTIES -db_properties:$DB_PROPERTIES "$@"

75
superx/WEB-INF/conf/edustore/db/bin/sx_kitchen.x

@ -0,0 +1,75 @@
#!/bin/sh
# **************************************************
# ** Libraries used by Kettle: **
# **************************************************
# MB Aufruf Beispiel sx_kitchen.x -file "sospos_res1.kjb" -norep
BASEDIR=`dirname $0`
cd $BASEDIR
DIR=`pwd`
cd - > /dev/null
# MB nicht benötigt . "$DIR/set-pentaho-env.sh"
# MB nicht benötigt setPentahoEnv
#CLASSPATH=$BASEDIR
#CLASSPATH=$CLASSPATH:$BASEDIR/lib/kettle-core.jar
#CLASSPATH=$CLASSPATH:$BASEDIR/lib/kettle-db.jar
#CLASSPATH=$CLASSPATH:$BASEDIR/lib/kettle-engine.jar
#echo $CLASSPATH
# **************************************************
# ** JDBC & other libraries used by Kettle: **
# **************************************************
#for f in `find $BASEDIR/libext -type f -name "*.jar"` `find $BASEDIR/libext -type f -name "*.zip"`
#do
# CLASSPATH=$CLASSPATH:$f
#done
# **************************************************
# ** Platform specific libraries ... **
# **************************************************
# circumvention for the IBM JVM behavior (seems to be a problem with the IBM JVM native compiler)
if [ `uname -s` = "OS400" ]
then
CLASSPATH=${CLASSPATH}:$BASEDIR/libswt/aix/swt.jar
fi
# ******************************************************************
# ** Set java runtime options **
# ** Change 512m to higher values in case you run out of memory **
# ** or set the PENTAHO_DI_JAVA_OPTIONS environment variable **
# ** (JAVAMAXMEM is there for compatibility reasons) **
# ******************************************************************
if [ -z "$JAVAMAXMEM" ]; then
JAVAMAXMEM="512"
fi
if [ -z "$PENTAHO_DI_JAVA_OPTIONS" ]; then
PENTAHO_DI_JAVA_OPTIONS="-Xmx${JAVAMAXMEM}m"
fi
OPT="$PENTAHO_DI_JAVA_OPTIONS -cp $JDBC_CLASSPATH -DKETTLE_HOME=$KETTLE_HOME -DKETTLE_REPOSITORY=$KETTLE_REPOSITORY -DKETTLE_USER=$KETTLE_USER -DKETTLE_PASSWORD=$KETTLE_PASSWORD -DKETTLE_PLUGIN_PACKAGES=$KETTLE_PLUGIN_PACKAGES -DKETTLE_LOG_SIZE_LIMIT=$KETTLE_LOG_SIZE_LIMIT"
if [ "$1" = "-x" ]; then
set LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$BASEDIR/libext
export LD_LIBRARY_PATH
OPT="-Xruntracer $OPT"
shift
fi
# ***************
# ** Run... **
# ***************
"$JAVA_HOME/bin/java" $OPT org.pentaho.di.kitchen.Kitchen "${1+$@}"

277
superx/WEB-INF/conf/edustore/db/install/schluesseltabellen/release_unloads/fm_templates.unl

@ -1,4 +1,4 @@
364^SuperX_general^<#-- General FreeMarker Makros für SuperX -->\ 333^SuperX_general^<#-- General FreeMarker Makros für SuperX -->\
<#-- Einfügen eines Kommentars Die Kommentarverwaltung ist ja ziemlich abgefahren in SuperX.\ <#-- Einfügen eines Kommentars Die Kommentarverwaltung ist ja ziemlich abgefahren in SuperX.\
Standardmäßig werden Kommentare gelöscht, damit nicht soviel an die DB geschickt wird.\ Standardmäßig werden Kommentare gelöscht, damit nicht soviel an die DB geschickt wird.\
Wenn man aber bei Entwicklungszwecken noch Kommentare drin haben will, kann man diese Funktion benutzen.\ Wenn man aber bei Entwicklungszwecken noch Kommentare drin haben will, kann man diese Funktion benutzen.\
@ -247,7 +247,7 @@ ORDER BY ${businessKey} \
\ \
DROP TABLE ${coreTableName}_input; \ DROP TABLE ${coreTableName}_input; \
</#macro>^allgemeine SuperX-Makros^^1^ </#macro>^allgemeine SuperX-Makros^^1^
365^SQL_lingua_franca^<#-- \ 334^SQL_lingua_franca^<#-- \
lingua franca makros um von SQL Dialekten (Informix/Postgres) unabhängig zu werden \ lingua franca makros um von SQL Dialekten (Informix/Postgres) unabhängig zu werden \
Stand 4.4.05\ Stand 4.4.05\
FreeMarker Kommentare dieser Art werden von generateSql verschandelt\ FreeMarker Kommentare dieser Art werden von generateSql verschandelt\
@ -412,7 +412,37 @@ execute ${varname};\
char\ char\
</#if> \ </#if> \
</#macro>^Datenbankunabhängigkeit^^2^ </#macro>^Datenbankunabhängigkeit^^2^
366^KERN_CIFX_UPDATE^<#macro MODUL_CIFX_UPDATE_SORT>\ 335^KERN_CIFX_UPDATE^<#macro tmp_cifx2_apnr_duplikate_nullen>\
CREATE TEMP TABLE tmp_doppelt\
(\
key integer,\
apnr char(255)\
);\
INSERT INTO tmp_doppelt\
SELECT key, apnr FROM tmp_cifx2\
GROUP BY 1, 2\
HAVING count(*) > 1;\
\
<#if SQLdialect='Postgres'>\
--Postgres Dialekt:\
UPDATE tmp_cifx2 SET apnr = NULL\
WHERE (key, apnr) IN (\
SELECT key, apnr\
FROM tmp_doppelt\
);\
<#else>\
--Informix Dialekt:\
UPDATE tmp_cifx2 SET apnr = NULL\
WHERE '' || key || '_' || apnr IN (\
select '' || key || '_' || apnr\
FROM tmp_doppelt\
);\
</#if>\
\
DROP TABLE tmp_doppelt;\
</#macro>\
\
<#macro MODUL_CIFX_UPDATE_SORT>\
select 'Quellsystem_var ${Quellsystem_var} '::char(30) from xdummy;\ select 'Quellsystem_var ${Quellsystem_var} '::char(30) from xdummy;\
select '${SQLdialect}' from xdummy;\ select '${SQLdialect}' from xdummy;\
create temp table tmp_cifx2\ create temp table tmp_cifx2\
@ -445,11 +475,12 @@ create temp table tmp_cifx2\
create temp table tmp_keys(tid serial,key smallint,hs integer);\ create temp table tmp_keys(tid serial,key smallint,hs integer);\
create temp table tmp_hilf(tid integer);\ create temp table tmp_hilf(tid integer);\
\ \
\ <#-- löscht aus 'trans_cifx' alle Mehrfahrvorkommen bzgl. der Gruppierung nach 'key', 'sourcesystem', 'sourcesystem_id' außer dem mit der "minimalen" 'apnr' -->\
<@cleanup_trans_cifx system=systeminfo_id />\ <@cleanup_trans_cifx system=systeminfo_id />\
\ \
update ${source_table} set druck=substring(druck from 1 for 100), lang_1=substring(lang_1 from 1 for 150);\ update ${source_table} set druck=substring(druck from 1 for 100), lang_1=substring(lang_1 from 1 for 150);\
\ \
<#-- Kommentarblock BEGINN: Alle nach 'key' zur "Transformation" ausgewählten Einträge von der 'source_table' nach 'tmp_cifx2' kopieren -->\
--bei HISinOne wird in erster priorität "uniquename" verwandt.\ --bei HISinOne wird in erster priorität "uniquename" verwandt.\
--bei SOSPOS ist im Entladescript "uniquename=apnr\ --bei SOSPOS ist im Entladescript "uniquename=apnr\
insert into tmp_cifx2(\ insert into tmp_cifx2(\
@ -513,40 +544,16 @@ where apnr is not null\
${c.key}\ ${c.key}\
<#if c_has_next>,</#if>\ <#if c_has_next>,</#if>\
</#foreach>);\ </#foreach>);\
<#-- Kommentarblock ENDE -->\
\ \
--nun wird apnr auf Eindeutigkeit geprüft. Bei Datenquelle sospos muss dies gegeben\ --nun wird apnr auf Eindeutigkeit geprüft. Bei Datenquelle sospos muss dies gegeben\
--sein, bei HIS1 ggf. nicht, wenn in uniquename ein NULL oder ein Duplikat steht.\ --sein, bei HIS1 ggf. nicht, wenn in uniquename ein NULL oder ein Duplikat steht.\
\ \
--zuerst: Duplikate ermitteln:\ --zuerst: Duplikate ermitteln:\
create temp table tmp_doppelt\ <@tmp_cifx2_apnr_duplikate_nullen />\
(\
key integer, apnr char(255)\
) \
;\
insert into tmp_doppelt\
select key,apnr FROM tmp_cifx2\
group by 1,2\
having count(*)>1;\
\
\
<#if SQLdialect='Postgres'>\
--Postgres Dialekt:\
update tmp_cifx2 set apnr = NULL\
where (key, apnr) in (\
select key, apnr\
from tmp_doppelt);\
\
<#else>\
--Informix Dialekt:\
update tmp_cifx2 set apnr = NULL\
where '' || key || '_' || apnr in (\
select '' || key || '_' || apnr\
from tmp_doppelt);\
</#if>\
\
drop table tmp_doppelt;\
\ \
\ \
<#-- Kommentarblock BEGINN: WENN es für 'tmp_cifx2' mit 'apnr = NULL' passende Einträge (nach 'sourcesystem_id', 'key', 'systeminfo_id' und 'sourcesystem') in 'trans_cifx' gibt, werden diese gesetzt -->\
--nun: apnr=NULL oder sourcesystem_id bereits vorhanden:\ --nun: apnr=NULL oder sourcesystem_id bereits vorhanden:\
--gibt es den Schlüssel aus dem gleichen Quellsystem schon?\ --gibt es den Schlüssel aus dem gleichen Quellsystem schon?\
-- Wenn ja, vorhandene Schlüssel in Ladetabelle umsetzen:\ -- Wenn ja, vorhandene Schlüssel in Ladetabelle umsetzen:\
@ -564,34 +571,10 @@ and T.systeminfo_id=${systeminfo_id} --zul\
and T.sourcesystem=${Quellsystem_var} \ and T.sourcesystem=${Quellsystem_var} \
)\ )\
;\ ;\
create temp table tmp_doppelt\ <#-- Kommentarblock ENDE -->\
(\ <@tmp_cifx2_apnr_duplikate_nullen />\
key integer, apnr char(255)\
) \
;\
insert into tmp_doppelt\
select key,apnr FROM tmp_cifx2\
group by 1,2\
having count(*)>1;\
\
\
<#if SQLdialect='Postgres'>\
--Postgres Dialekt:\
update tmp_cifx2 set apnr = NULL\
where (key, apnr) in (\
select key, apnr\
from tmp_doppelt);\
\
<#else>\
--Informix Dialekt:\
update tmp_cifx2 set apnr = NULL\
where '' || key || '_' || apnr in (\
select '' || key || '_' || apnr\
from tmp_doppelt);\
</#if>\
\
drop table tmp_doppelt;\
\ \
<#-- Kommentarblock BEGINN: WENN es für 'tmp_cifx2' mit 'apnr = NULL' passende Einträge (nach 'sourcesystem_id', 'key', und 'sourcesystem') in 'trans_cifx' gibt, werden diese gesetzt; d.h., der Kommentar unten ist vermutlich falsch: Hier wird nicht nach anderen _Quellsystemen_ geschaut, sondern ob eine anderen BI-Komponente denselben Schlüssel aus demselben Quellsystem "vorliegen hat" - bei Mehrfachtreffern wird hier wieder einfach per "min" auf 1 reduziert -->\
--gibt es den Schlüssel schon bei anderem Quellsystem?\ --gibt es den Schlüssel schon bei anderem Quellsystem?\
update tmp_cifx2 set apnr=(select min(apnr) from trans_cifx T\ update tmp_cifx2 set apnr=(select min(apnr) from trans_cifx T\
where T.sourcesystem_id=tmp_cifx2.sourcesystem_id\ where T.sourcesystem_id=tmp_cifx2.sourcesystem_id\
@ -607,34 +590,10 @@ and T.key=tmp_cifx2.key\
and T.sourcesystem=${Quellsystem_var} \ and T.sourcesystem=${Quellsystem_var} \
)\ )\
;\ ;\
create temp table tmp_doppelt\ <#-- Kommentarblock ENDE -->\
(\ <@tmp_cifx2_apnr_duplikate_nullen />\
key integer, apnr char(255)\
) \
;\
insert into tmp_doppelt\
select key,apnr FROM tmp_cifx2\
group by 1,2\
having count(*)>1;\
\
\
<#if SQLdialect='Postgres'>\
--Postgres Dialekt:\
update tmp_cifx2 set apnr = NULL\
where (key, apnr) in (\
select key, apnr\
from tmp_doppelt);\
\
<#else>\
--Informix Dialekt:\
update tmp_cifx2 set apnr = NULL\
where '' || key || '_' || apnr in (\
select '' || key || '_' || apnr\
from tmp_doppelt);\
</#if>\
\
drop table tmp_doppelt;\
\ \
<#-- Kommentarblock BEGINN: wenn in 'trans_cifx' keine "passenden" 'apnr''s gefunden wurden, dann wird dies per Lookup auf 'cifx' anhand von 'uniquename', 'key' und dem aktuellen Datum versucht; interessant wäre: (JoWi) Wie kommt denn eine Konstellation, in der 'trans_cifx' leer ist aber 'cifx' nicht? Antwort: Die 'trans_cifx' ist praktisch eigentlich nur in der Konstellation mit zwei Vorsystemen (HISinOne plus Gx) in Verwendung - im anderen Fall wird sie wohl nicht benutzt - daher 'cifx' -->\
--Falls trans_cifx nicht gefüllt ist, Fallback Lösung:\ --Falls trans_cifx nicht gefüllt ist, Fallback Lösung:\
update tmp_cifx2 set apnr=(select min(apnr) from cifx T\ update tmp_cifx2 set apnr=(select min(apnr) from cifx T\
where T.uniquename=tmp_cifx2.uniquename\ where T.uniquename=tmp_cifx2.uniquename\
@ -648,33 +607,9 @@ and T.key=tmp_cifx2.key\
and today() between T.d_akt_von and T.d_akt_bis\ and today() between T.d_akt_von and T.d_akt_bis\
)\ )\
;\ ;\
create temp table tmp_doppelt\ <#-- Kommentarblock ENDE -->\
(\ <@tmp_cifx2_apnr_duplikate_nullen />\
key integer, apnr char(255)\ <#-- Kommentarblock BEGINN: für die 'tmp_cifx2'-Einträge, die noch keine 'apnr' haben (NULL), wird diese erzeugt: Je 'key' werden Schlüssel der Form '_<number>' angelegt (z.B. '_12'), 'number' wird dabei hochgezählt; um nicht mit evtl. früher erzeugten Schlüsseln zu kollidieren, wird als minimale 'number' die höchste 'tid' des 'key' aus 'cifx' gesetzt; die (in einer "Hilfstabelle") generierten Schlüssel werden 'tmp_cifx2' über sie 'sourcesystem_id' zugeordnet; vermutlich weil diese evtl. nicht eindeutig ist (und evtl. mehrere Schlüssel für eine generiert werden) hier das "min" im UPDATE-Statement...(JoWi) aber wie kommt es, dass an dieser Stelle noch immer nicht von Eindeutigkeit auszugehen ist!? Die Prüfroutinenmeldung "...kann nicht erzeugt werden." dürfte eigentlich niemals auftreten, oder!?-->\
) \
;\
insert into tmp_doppelt\
select key,apnr FROM tmp_cifx2\
group by 1,2\
having count(*)>1;\
\
\
<#if SQLdialect='Postgres'>\
--Postgres Dialekt:\
update tmp_cifx2 set apnr = NULL\
where (key, apnr) in (\
select key, apnr\
from tmp_doppelt);\
\
<#else>\
--Informix Dialekt:\
update tmp_cifx2 set apnr = NULL\
where '' || key || '_' || apnr in (\
select '' || key || '_' || apnr\
from tmp_doppelt);\
</#if>\
\
drop table tmp_doppelt;\
--wenn es den Schlüssel noch gar nicht gibt, wird er künstlich erzeugt\ --wenn es den Schlüssel noch gar nicht gibt, wird er künstlich erzeugt\
--dabei wird für jeden key eine temp. Tabelle erzeugt, mit einem \ --dabei wird für jeden key eine temp. Tabelle erzeugt, mit einem \
--serial Feld, das hochzählt\ --serial Feld, das hochzählt\
@ -742,7 +677,9 @@ drop table tmp_keygen;\
\ \
delete from tmp_hilf;\ delete from tmp_hilf;\
</#list>\ </#list>\
<#-- Kommentarblock ENDE -->\
\ \
<#-- Kommentarblock BEGINN: fehlende Gültigkeiten in 'tmp_cifx2' setzen und Abgleich zwischen 'cifx' und 'tmp_cifx2': Wenn ein Satz in 'tmp_cifx2' einen (nach 'key', 'apnr') entsprechenden in 'cifx' hat, wird die 'tid' als 'tid_orig' nach 'tmp_cifx2' übernommen und der Satz aus 'cifx' entfernt -->\
--nun ist apnr immer gefüllt\ --nun ist apnr immer gefüllt\
\ \
--Zum Schluss der Insert:\ --Zum Schluss der Insert:\
@ -772,6 +709,7 @@ where '' || key || '_' || apnr in \
\ \
delete from ${target_table} where tid in (select tid_orig from tmp_cifx2);\ delete from ${target_table} where tid in (select tid_orig from tmp_cifx2);\
\ \
<#-- Kommentarblock BEGINN: jetzt kann es wohl noch Duplikate der Kombination 'key', 'apnr' in 'tmp_cifx2' geben - von diesen werden alle außer denen mit der jeweils niedrigsten 'tid' gelöscht -->\
--Duplikate:\ --Duplikate:\
create temp table tmp_dopp(tid integer,key integer,apnr char(10));\ create temp table tmp_dopp(tid integer,key integer,apnr char(10));\
\ \
@ -812,7 +750,9 @@ and 0=(select count(*) from tmp_dopp D where D.tid=tmp_cifx2.tid );\
\ \
</#if>\ </#if>\
drop table tmp_dopp;\ drop table tmp_dopp;\
<#-- Kommentarblock ENDE -->\
\ \
<#-- Kommentarblock BEGINN: hier werden die den Einträgen in 'tmp_cifx2' entsprechenden Sätze zuerst aus 'trans_cifx' gelöscht und dann durch die aus 'tmp_cifx2' ersetzt - anhand der Kriterien 'key', 'apnr' bzw. 'key', 'sourcesystem_id' (in Bezug auf 'tmp_cifx2') _und_ 'systeminfo_id', 'sourcesystem' (in Bezug auf die Komponente, in der das Skript läuft und das konfigurierte Vorsystem - genauer gesagt werden die 'trans_cifx'-Einträge durch Anreicherung mit diesen Daten aus 'tmp_cifx2' _generiert_); danach wird die 'tid' aus 'cifx' _als_ 'cifx_tid' _in_ 'trans_cifx' nachgetragen ((JoWi) was ich nicht verstehe: ich dachte, das hätten wir in 684 ff. bzgl. 'tmp_cifx2' gemacht - wird aber im INSERT nicht übernommen!? AUßERDEM: Sind nicht die 'cifx'-Einträge gelöscht worden???) -->\
--dann einfügen in trans_cifx\ --dann einfügen in trans_cifx\
--Zur Sicherheit zuerst Löschung über uniquename:\ --Zur Sicherheit zuerst Löschung über uniquename:\
<#if SQLdialect='Postgres'>\ <#if SQLdialect='Postgres'>\
@ -862,7 +802,9 @@ where key = trans_cifx.key and apnr = trans_cifx.apnr)\
where cifx_tid is null\ where cifx_tid is null\
and 0 < (select count(*) from tmp_cifx2\ and 0 < (select count(*) from tmp_cifx2\
where key = trans_cifx.key and apnr = trans_cifx.apnr);\ where key = trans_cifx.key and apnr = trans_cifx.apnr);\
<#-- Kommentarblock ENDE -->\
\ \
<#-- Kommentarblock BEGINN: hier werden die Schlüssel von 'parent'-Elementen gesetzt...(JoWi) vermutlich fachlich inkorrekt: Die 'apnr' als Schlüssel des 'parents' zu setzen, ignoriert, dass in HISinOne Elternelemente sich qua 'lid'-Logik auf _mehrere_ Datensätze beziehen können, während die 'apnr' ja ausweislich der ganzen Logik, mit der sie gepflegt wird, eindeutig sein sollte; das, was sich in dieser Setzung widerspiegelt ist also u.U./gewissen Konstellationen fachlich inkorrekt!? -->\
--nun die parents umsetzen:\ --nun die parents umsetzen:\
<#list cifx_keys_transform as cifx_key>\ <#list cifx_keys_transform as cifx_key>\
\ \
@ -873,8 +815,10 @@ and T.systeminfo_id=${systeminfo_id}\
and tmp_cifx2.parent::varchar(255)=T.sourcesystem_id)\ and tmp_cifx2.parent::varchar(255)=T.sourcesystem_id)\
where key = ${cifx_key.key}\ where key = ${cifx_key.key}\
and parent is not null;\ and parent is not null;\
<#-- Kommentarblock ENDE -->\
\ \
\ \
<#-- Kommentarblock BEGINN: hier werden in erster Linie die Sätze aus 'tmp_cifx2' nach 'cifx' geschrieben; mit der Zweiteilung hat es folgende Bewandtnis: für Einträge, die vorher ihre Entsprechung hatten, die aber (in vorhergehenden Schritten) aus der 'cifx' gelöscht worden sind, bleiben die originalen 'tid's erhalten (die werden _zuerst_ übernommen); für die restlichen Einträge werden neue 'tid's generiert - auf Basis der größten vorhandenen 'tid' in 'cifx' nach dem ersten Schritt -->\
</#list>\ </#list>\
--zuerst vorhandene Schlüssel:\ --zuerst vorhandene Schlüssel:\
insert into ${target_table}(tid,key,hs,apnr,kurz,druck,lang_1,\ insert into ${target_table}(tid,key,hs,apnr,kurz,druck,lang_1,\
@ -965,7 +909,9 @@ select C.tid+H.tid,key,hs,apnr,kurz,druck,lang_1,\
from tmp_cifx2 C, tmp_hilf H\ from tmp_cifx2 C, tmp_hilf H\
where apnr is not null\ where apnr is not null\
and tid_orig is null;\ and tid_orig is null;\
\ <#-- Kommentarblock ENDE -->\
\
<#-- Kommentarblock BEGINN: ein paar 'minor' Schritte!?: Texte kürzen, Schlüssel protokollieren, die nicht transformiert werden konnten, in 'trans_cifx' die dem Eintrag entsprechende 'cifx_tid' - also die 'tid' den entsprechenden 'cifx'-Eintrags hinzufügen ((JoWi) ich weiss leider nicht, wo das genutzt wird!?) -->\
update ${target_table} set druck=kurz, kurz=substring(druck from 1 for 10)\ update ${target_table} set druck=kurz, kurz=substring(druck from 1 for 10)\
where kurz is not null and druck is null;\ where kurz is not null and druck is null;\
\ \
@ -995,19 +941,21 @@ where key = trans_cifx.key and apnr = trans_cifx.apnr);\
drop table tmp_cifx2;\ drop table tmp_cifx2;\
drop table tmp_keys;\ drop table tmp_keys;\
drop table tmp_hilf;\ drop table tmp_hilf;\
<#-- Kommentarblock ENDE -->\
\ \
\ <#-- Kommentarblock BEGINN: Hochschulnummern aus 'hochschulinfo' in 'cifx' nachtragen und leere Gültigkeiten auf Maximalintervall setzen -->\
\
--Damit die Hochschulnummern in der CIFX und in der Hochschulinfo-Tabelle\ --Damit die Hochschulnummern in der CIFX und in der Hochschulinfo-Tabelle\
-- uebereinstimmen, ist folgender UPDATE notwendig:\ -- uebereinstimmen, ist folgender UPDATE notwendig:\
\ \
update ${target_table}\ update ${target_table}\
set hs = (select hs_nr from hochschulinfo)\ set hs = (select hs_nr from hochschulinfo)\
where hs != 0;\ where hs != 0 and (select count(*) from hochschulinfo) = 1;\
\ \
update ${target_table} set d_akt_von=date_val('01.01.1900') where d_akt_von is null;\ update ${target_table} set d_akt_von=date_val('01.01.1900') where d_akt_von is null;\
update ${target_table} set d_akt_bis=date_val('01.01.2900') where d_akt_bis is null;\ update ${target_table} set d_akt_bis=date_val('01.01.2900') where d_akt_bis is null;\
<#-- Kommentarblock ENDE -->\
\ \
<#-- Kommentarblock BEGINN: (JoWi) scheinbar gibt es noch eine 'cifx_customize', in der ergänzende Anpassungen an der 'cifx' hinterlegt werden können!? In den Musterdaten allerdings leer... -->\
--Customize?\ --Customize?\
<#assign cifx_cols = ["kurz", "druck", "lang_1"]>\ <#assign cifx_cols = ["kurz", "druck", "lang_1"]>\
<#list cifx_cols as cifx_col>\ <#list cifx_cols as cifx_col>\
@ -1024,6 +972,7 @@ and trim(C2.${cifx_col})!='' \
);\ );\
\ \
</#list>\ </#list>\
<#-- Kommentarblock ENDE -->\
</#macro>\ </#macro>\
<#macro MODUL_CIFX_UPDATE>\ <#macro MODUL_CIFX_UPDATE>\
select 'Quellsystem_var ${Quellsystem_var} '::char(30) from xdummy;\ select 'Quellsystem_var ${Quellsystem_var} '::char(30) from xdummy;\
@ -1195,33 +1144,7 @@ and T.key=tmp_cifx2.key\
and T.sourcesystem=${Quellsystem_var} \ and T.sourcesystem=${Quellsystem_var} \
)\ )\
;\ ;\
create temp table tmp_doppelt\ <@tmp_cifx2_apnr_duplikate_nullen />\
(\
key integer, apnr char(255)\
) \
;\
insert into tmp_doppelt\
select key,apnr FROM tmp_cifx2\
group by 1,2\
having count(*)>1;\
\
\
<#if SQLdialect='Postgres'>\
--Postgres Dialekt:\
update tmp_cifx2 set apnr = NULL\
where (key, apnr) in (\
select key, apnr\
from tmp_doppelt);\
\
<#else>\
--Informix Dialekt:\
update tmp_cifx2 set apnr = NULL\
where '' || key || '_' || apnr in (\
select '' || key || '_' || apnr\
from tmp_doppelt);\
</#if>\
\
drop table tmp_doppelt;\
\ \
--Falls trans_cifx nicht gefüllt ist, Fallback Lösung:\ --Falls trans_cifx nicht gefüllt ist, Fallback Lösung:\
update tmp_cifx2 set apnr=(select min(apnr) from cifx T\ update tmp_cifx2 set apnr=(select min(apnr) from cifx T\
@ -1236,33 +1159,7 @@ and T.key=tmp_cifx2.key\
and today() between T.d_akt_von and T.d_akt_bis\ and today() between T.d_akt_von and T.d_akt_bis\
)\ )\
;\ ;\
create temp table tmp_doppelt\ <@tmp_cifx2_apnr_duplikate_nullen />\
(\
key integer, apnr char(255)\
) \
;\
insert into tmp_doppelt\
select key,apnr FROM tmp_cifx2\
group by 1,2\
having count(*)>1;\
\
\
<#if SQLdialect='Postgres'>\
--Postgres Dialekt:\
update tmp_cifx2 set apnr = NULL\
where (key, apnr) in (\
select key, apnr\
from tmp_doppelt);\
\
<#else>\
--Informix Dialekt:\
update tmp_cifx2 set apnr = NULL\
where '' || key || '_' || apnr in (\
select '' || key || '_' || apnr\
from tmp_doppelt);\
</#if>\
\
drop table tmp_doppelt;\
\ \
--wenn es den Schlüssel noch gar nicht gibt, wird er künstlich erzeugt\ --wenn es den Schlüssel noch gar nicht gibt, wird er künstlich erzeugt\
--dabei wird für jeden key eine temp. Tabelle erzeugt, mit einem \ --dabei wird für jeden key eine temp. Tabelle erzeugt, mit einem \
@ -1569,7 +1466,7 @@ drop table tmp_hilf;\
\ \
update ${target_table}\ update ${target_table}\
set hs = (select hs_nr from hochschulinfo)\ set hs = (select hs_nr from hochschulinfo)\
where hs != 0;\ where hs != 0 and (select count(*) from hochschulinfo) = 1;\
\ \
update ${target_table} set d_akt_von=date_val('01.01.1900') where d_akt_von is null;\ update ${target_table} set d_akt_von=date_val('01.01.1900') where d_akt_von is null;\
update ${target_table} set d_akt_bis=date_val('01.01.2900') where d_akt_bis is null;\ update ${target_table} set d_akt_bis=date_val('01.01.2900') where d_akt_bis is null;\
@ -2599,7 +2496,7 @@ DROP TABLE tmp_schluessel2;\
DROP TABLE tmp_doppelt;\ DROP TABLE tmp_doppelt;\
DROP TABLE tmp_merkmale;\ DROP TABLE tmp_merkmale;\
</#macro>^Makro cifx-update^^1^ </#macro>^Makro cifx-update^^1^
367^SQL_multitable_output^<#--\ 336^SQL_multitable_output^<#--\
Utility Makros für die Maske 71280 Tabelle ausgeben und Derivate (z.B. 17110 Sekundärinfo Datenblatt )\ Utility Makros für die Maske 71280 Tabelle ausgeben und Derivate (z.B. 17110 Sekundärinfo Datenblatt )\
(c)2011 Daniel Quathamer\ (c)2011 Daniel Quathamer\
\ \
@ -2633,16 +2530,38 @@ Utility Makros für die Maske 71280 Tabelle ausgeben und Derivate (z.B. 17110 Se
\ \
<#assign zaehler= zaehler+1 />\ <#assign zaehler= zaehler+1 />\
</#list>\ </#list>\
<#if feldname=aggregationsfeld >\ <#assign ist_aggregationsfeld=false />\
<#assign field_list_select=field_list_select+aggregatfunktion+table_name+"."+feldname+") as " +table_name+"_"+feldname/>\ \
<#if aggregationsfeld?index_of(",") ==-1>\
<#if feldname=aggregationsfeld >\
<#assign field_list_select=field_list_select+aggregatfunktion+table_name+"."+feldname+") as " +table_name+"_"+feldname/>\
<#assign ist_aggregationsfeld=true />\
<#else>\
<#assign field_list_select=field_list_select+table_name+"."+feldname+" as " + table_name+"_"+feldname />\
</#if>\
<#else>\ <#else>\
<#assign field_list_select=field_list_select+table_name+"."+feldname+" as " + table_name+"_"+feldname />\ --Aggregationsfeld hat mehrere, daher Schleife:\
\
<#list aggregationsfeld?split(",") as aggrfeld>\
<#if feldname==aggrfeld>\
<#assign ist_aggregationsfeld=true />\
</#if>\
</#list>\
\
<#if ist_aggregationsfeld >\
<#assign field_list_select=field_list_select+aggregatfunktion+table_name+"."+feldname+") as " +table_name+"_"+feldname/>\
<#else>\
<#assign field_list_select=field_list_select+table_name+"."+feldname+" as " + table_name+"_"+feldname />\
</#if>\
\
</#if>\ </#if>\
\
<#if rownum &lt; get_felder_fk?size>\ <#if rownum &lt; get_felder_fk?size>\
<#assign field_list_select=field_list_select+"," />\ <#assign field_list_select=field_list_select+"," />\
</#if>\ </#if>\
<#if rownum &lt; get_felder_fk?size+1>\ <#if rownum &lt; get_felder_fk?size+1>\
<#if feldname != aggregationsfeld >\ \
<#if ist_aggregationsfeld==false>\
<#assign field_list_groupby=field_list_groupby +table_name+"."+feldname+ "," />\ <#assign field_list_groupby=field_list_groupby +table_name+"."+feldname+ "," />\
</#if>\ </#if>\
</#if>\ </#if>\
@ -2919,7 +2838,7 @@ from tmp_tabelle\
;\ ;\
</#if>\ </#if>\
</#macro>^Utility Makros Tabelleninhalte Ausgeben für die Maske 16650 (Studierende Datenblatt) und Derivate^(c)2011 Daniel Quathamer^1^ </#macro>^Utility Makros Tabelleninhalte Ausgeben für die Maske 16650 (Studierende Datenblatt) und Derivate^(c)2011 Daniel Quathamer^1^
368^SQL_table_output^<#--\ 337^SQL_table_output^<#--\
Utility Makros für die Maske 71280 Tabelle ausgeben und Derivate (z.B. 17110 Sekundärinfo Datenblatt )\ Utility Makros für die Maske 71280 Tabelle ausgeben und Derivate (z.B. 17110 Sekundärinfo Datenblatt )\
(c)2011 Daniel Quathamer\ (c)2011 Daniel Quathamer\
\ \
@ -3136,7 +3055,7 @@ ${feldname}\
from tmp_tabelle;\ from tmp_tabelle;\
</#if>\ </#if>\
</#macro>^Datenbankunabhängigkeit^^1^ </#macro>^Datenbankunabhängigkeit^^1^
45^DatenblattSQLGenerator^<#--\ 338^DatenblattSQLGenerator^<#--\
Utility Makro Datenblatt-Berichte\ Utility Makro Datenblatt-Berichte\
(c)2023 Daniel Quathamer\ (c)2023 Daniel Quathamer\
\ \
@ -3215,6 +3134,7 @@ p_postProcessing\
<#if p_joinTables?has_content >\ <#if p_joinTables?has_content >\
<#foreach joinTable in p_joinTables>\ <#foreach joinTable in p_joinTables>\
<#assign joinTableName=joinTable.name />\ <#assign joinTableName=joinTable.name />\
<#if joinTableName != p_basetable>\
<#assign joinClause=joinClause+ " left outer join "+joinTableName + " on ( 1=1" />\ <#assign joinClause=joinClause+ " left outer join "+joinTableName + " on ( 1=1" />\
<#if p_joinWhereClauses?has_content >\ <#if p_joinWhereClauses?has_content >\
<#foreach joinWhereClause in p_joinWhereClauses>\ <#foreach joinWhereClause in p_joinWhereClauses>\
@ -3225,6 +3145,7 @@ p_postProcessing\
</#if>\ </#if>\
<#assign joinClause=joinClause+ ")\ <#assign joinClause=joinClause+ ")\
" />\ " />\
</#if>\
</#foreach>\ </#foreach>\
</#if>\ </#if>\
\ \

BIN
superx/WEB-INF/lib/superx5.1.jar

Binary file not shown.
Loading…
Cancel
Save