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. 269
      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 { @@ -1194,7 +1194,11 @@ public class Maske extends NamedIdObject implements Serializable {
rownr++;
// completeFields.append(FieldXmlEncoder.toXml(feld,isFullXMLRequired
// ,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>"
+ "<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" = "-?" ] @@ -29,6 +29,7 @@ if [ "$1" = "" -o "$1" = "--help" -o "$1" = "-?" ]
echo ""
echo "Task compile: Quelldatei.jrxml -> Quelldatei.jasper"
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 "Task fill/fillIgnorePagination: Quelldatei.jasper -> Quelldatei.jrprint"
echo "Quelldatei.jrprint enthält mit Daten gefüllte Berichtsvorlage"
@ -43,6 +44,5 @@ if [ "$1" = "" -o "$1" = "--help" -o "$1" = "-?" ] @@ -43,6 +44,5 @@ if [ "$1" = "" -o "$1" = "--help" -o "$1" = "-?" ]
fi
java $JAVA_OPTS -cp "$JDBC_CLASSPATH" de.superx.bin.SxJasper -logger:$LOGGER_PROPERTIES -db_properties:$DB_PROPERTIES "$@"
java $JAVA_OPTS -cp "$JDBC_CLASSPATH" de.superx.bin.SxJasper -logger:$LOGGER_PROPERTIES "$@"

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

@ -0,0 +1,75 @@ @@ -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+$@}"

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

@ -1,4 +1,4 @@ @@ -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.\
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.\
@ -247,7 +247,7 @@ ORDER BY ${businessKey} \ @@ -247,7 +247,7 @@ ORDER BY ${businessKey} \
\
DROP TABLE ${coreTableName}_input; \
</#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 \
Stand 4.4.05\
FreeMarker Kommentare dieser Art werden von generateSql verschandelt\
@ -412,7 +412,37 @@ execute ${varname};\ @@ -412,7 +412,37 @@ execute ${varname};\
char\
</#if> \
</#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 '${SQLdialect}' from xdummy;\
create temp table tmp_cifx2\
@ -445,11 +475,12 @@ 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_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 />\
\
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 SOSPOS ist im Entladescript "uniquename=apnr\
insert into tmp_cifx2(\
@ -513,40 +544,16 @@ where apnr is not null\ @@ -513,40 +544,16 @@ where apnr is not null\
${c.key}\
<#if c_has_next>,</#if>\
</#foreach>);\
<#-- Kommentarblock ENDE -->\
\
--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.\
\
--zuerst: Duplikate ermitteln:\
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;\
<@tmp_cifx2_apnr_duplikate_nullen />\
\
\
<#-- 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:\
--gibt es den Schlüssel aus dem gleichen Quellsystem schon?\
-- Wenn ja, vorhandene Schlüssel in Ladetabelle umsetzen:\
@ -564,34 +571,10 @@ and T.systeminfo_id=${systeminfo_id} --zul\ @@ -564,34 +571,10 @@ and T.systeminfo_id=${systeminfo_id} --zul\
and T.sourcesystem=${Quellsystem_var} \
)\
;\
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;\
<#-- Kommentarblock ENDE -->\
<@tmp_cifx2_apnr_duplikate_nullen />\
\
<#-- 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?\
update tmp_cifx2 set apnr=(select min(apnr) from trans_cifx T\
where T.sourcesystem_id=tmp_cifx2.sourcesystem_id\
@ -607,34 +590,10 @@ and T.key=tmp_cifx2.key\ @@ -607,34 +590,10 @@ and T.key=tmp_cifx2.key\
and T.sourcesystem=${Quellsystem_var} \
)\
;\
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;\
<#-- Kommentarblock ENDE -->\
<@tmp_cifx2_apnr_duplikate_nullen />\
\
<#-- 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:\
update tmp_cifx2 set apnr=(select min(apnr) from cifx T\
where T.uniquename=tmp_cifx2.uniquename\
@ -648,33 +607,9 @@ and T.key=tmp_cifx2.key\ @@ -648,33 +607,9 @@ and T.key=tmp_cifx2.key\
and today() between T.d_akt_von and T.d_akt_bis\
)\
;\
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;\
<#-- Kommentarblock ENDE -->\
<@tmp_cifx2_apnr_duplikate_nullen />\
<#-- 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!?-->\
--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 \
--serial Feld, das hochzählt\
@ -742,7 +677,9 @@ drop table tmp_keygen;\ @@ -742,7 +677,9 @@ drop table tmp_keygen;\
\
delete from tmp_hilf;\
</#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\
\
--Zum Schluss der Insert:\
@ -772,6 +709,7 @@ where '' || key || '_' || apnr in \ @@ -772,6 +709,7 @@ where '' || key || '_' || apnr in \
\
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:\
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 );\ @@ -812,7 +750,9 @@ and 0=(select count(*) from tmp_dopp D where D.tid=tmp_cifx2.tid );\
\
</#if>\
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\
--Zur Sicherheit zuerst Löschung über uniquename:\
<#if SQLdialect='Postgres'>\
@ -862,7 +802,9 @@ where key = trans_cifx.key and apnr = trans_cifx.apnr)\ @@ -862,7 +802,9 @@ where key = trans_cifx.key and apnr = trans_cifx.apnr)\
where cifx_tid is null\
and 0 < (select count(*) from tmp_cifx2\
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:\
<#list cifx_keys_transform as cifx_key>\
\
@ -873,8 +815,10 @@ and T.systeminfo_id=${systeminfo_id}\ @@ -873,8 +815,10 @@ and T.systeminfo_id=${systeminfo_id}\
and tmp_cifx2.parent::varchar(255)=T.sourcesystem_id)\
where key = ${cifx_key.key}\
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>\
--zuerst vorhandene Schlüssel:\
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,\ @@ -965,7 +909,9 @@ select C.tid+H.tid,key,hs,apnr,kurz,druck,lang_1,\
from tmp_cifx2 C, tmp_hilf H\
where apnr is not 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)\
where kurz is not null and druck is null;\
\
@ -995,19 +941,21 @@ where key = trans_cifx.key and apnr = trans_cifx.apnr);\ @@ -995,19 +941,21 @@ where key = trans_cifx.key and apnr = trans_cifx.apnr);\
drop table tmp_cifx2;\
drop table tmp_keys;\
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\
-- uebereinstimmen, ist folgender UPDATE notwendig:\
\
update ${target_table}\
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_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?\
<#assign cifx_cols = ["kurz", "druck", "lang_1"]>\
<#list cifx_cols as cifx_col>\
@ -1024,6 +972,7 @@ and trim(C2.${cifx_col})!='' \ @@ -1024,6 +972,7 @@ and trim(C2.${cifx_col})!='' \
);\
\
</#list>\
<#-- Kommentarblock ENDE -->\
</#macro>\
<#macro MODUL_CIFX_UPDATE>\
select 'Quellsystem_var ${Quellsystem_var} '::char(30) from xdummy;\
@ -1195,33 +1144,7 @@ and T.key=tmp_cifx2.key\ @@ -1195,33 +1144,7 @@ and T.key=tmp_cifx2.key\
and T.sourcesystem=${Quellsystem_var} \
)\
;\
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;\
<@tmp_cifx2_apnr_duplikate_nullen />\
\
--Falls trans_cifx nicht gefüllt ist, Fallback Lösung:\
update tmp_cifx2 set apnr=(select min(apnr) from cifx T\
@ -1236,33 +1159,7 @@ and T.key=tmp_cifx2.key\ @@ -1236,33 +1159,7 @@ and T.key=tmp_cifx2.key\
and today() between T.d_akt_von and T.d_akt_bis\
)\
;\
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;\
<@tmp_cifx2_apnr_duplikate_nullen />\
\
--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 \
@ -1569,7 +1466,7 @@ drop table tmp_hilf;\ @@ -1569,7 +1466,7 @@ drop table tmp_hilf;\
\
update ${target_table}\
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_bis=date_val('01.01.2900') where d_akt_bis is null;\
@ -2599,7 +2496,7 @@ DROP TABLE tmp_schluessel2;\ @@ -2599,7 +2496,7 @@ DROP TABLE tmp_schluessel2;\
DROP TABLE tmp_doppelt;\
DROP TABLE tmp_merkmale;\
</#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 )\
(c)2011 Daniel Quathamer\
\
@ -2633,16 +2530,38 @@ Utility Makros für die Maske 71280 Tabelle ausgeben und Derivate (z.B. 17110 Se @@ -2633,16 +2530,38 @@ Utility Makros für die Maske 71280 Tabelle ausgeben und Derivate (z.B. 17110 Se
\
<#assign zaehler= zaehler+1 />\
</#list>\
<#assign ist_aggregationsfeld=false />\
\
<#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>\
--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 rownum &lt; get_felder_fk?size>\
<#assign field_list_select=field_list_select+"," />\
</#if>\
<#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+ "," />\
</#if>\
</#if>\
@ -2919,7 +2838,7 @@ from tmp_tabelle\ @@ -2919,7 +2838,7 @@ from tmp_tabelle\
;\
</#if>\
</#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 )\
(c)2011 Daniel Quathamer\
\
@ -3136,7 +3055,7 @@ ${feldname}\ @@ -3136,7 +3055,7 @@ ${feldname}\
from tmp_tabelle;\
</#if>\
</#macro>^Datenbankunabhängigkeit^^1^
45^DatenblattSQLGenerator^<#--\
338^DatenblattSQLGenerator^<#--\
Utility Makro Datenblatt-Berichte\
(c)2023 Daniel Quathamer\
\
@ -3215,6 +3134,7 @@ p_postProcessing\ @@ -3215,6 +3134,7 @@ p_postProcessing\
<#if p_joinTables?has_content >\
<#foreach joinTable in p_joinTables>\
<#assign joinTableName=joinTable.name />\
<#if joinTableName != p_basetable>\
<#assign joinClause=joinClause+ " left outer join "+joinTableName + " on ( 1=1" />\
<#if p_joinWhereClauses?has_content >\
<#foreach joinWhereClause in p_joinWhereClauses>\
@ -3225,6 +3145,7 @@ p_postProcessing\ @@ -3225,6 +3145,7 @@ p_postProcessing\
</#if>\
<#assign joinClause=joinClause+ ")\
" />\
</#if>\
</#foreach>\
</#if>\
\

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

Binary file not shown.
Loading…
Cancel
Save