Browse Source

Querabhängigkeit Maskenfelder impl. #323767

master
Daniel Quathamer 1 day ago
parent
commit
66eb09635f
  1. 2
      superx/WEB-INF/conf/edustore/db/install/conf/builddatum.txt
  2. 8
      superx/WEB-INF/conf/edustore/db/install/conf/his1/dbconv/view.eduetl/dim_semester.view
  3. 33
      superx/WEB-INF/conf/edustore/db/install/conf/his1/dbconv/view.eduetl/dim_stg_astat_sb_fgr.view
  4. 6
      superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_install/edustore_kern_integrate_pg.sql
  5. 36
      superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_install/edustore_kern_masken_einspielen.xml
  6. 36
      superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_install/edustore_kern_masken_entladen.xml
  7. 6
      superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_install/edustore_kern_masken_loeschen.sql
  8. 11
      superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_install/edustore_kern_masken_loeschen.xml
  9. 171
      superx/WEB-INF/conf/edustore/db/install/conf/kern.html
  10. 2
      superx/WEB-INF/conf/edustore/db/install/conf/kern.rtf
  11. 37
      superx/WEB-INF/conf/edustore/db/install/conf/kern.xml
  12. 8
      superx/WEB-INF/conf/edustore/db/install/conf/kern_mask_test_ant.xml
  13. 8
      superx/WEB-INF/conf/edustore/db/install/conf/module_drop_views.sql
  14. 1
      superx/WEB-INF/conf/edustore/db/install/conf/module_grant.x
  15. 1
      superx/WEB-INF/conf/edustore/db/install/conf/module_revoke.x
  16. 224
      superx/WEB-INF/conf/edustore/db/install/conf/sx_fields_fuellen.sql
  17. 8
      superx/WEB-INF/conf/edustore/db/install/conf/sx_tables_fuellen.sql
  18. 50
      superx/WEB-INF/conf/edustore/db/install/kern_install_pg.sql
  19. 4
      superx/WEB-INF/conf/edustore/db/install/kern_masken_einspielen_pg.x
  20. 3
      superx/WEB-INF/conf/edustore/db/install/kern_masken_entladen_pg.x
  21. 2
      superx/WEB-INF/conf/edustore/db/install/kern_masken_loeschen_pg.x
  22. 12
      superx/WEB-INF/conf/edustore/db/install/schluesseltabellen/release_unloads/fm_templates.unl
  23. 30
      superx/WEB-INF/conf/edustore/db/install/upgrade/kern_upgrade_themenbaum.sql
  24. 104
      superx/WEB-INF/conf/edustore/db/install/upgrade/kern_upgrade_views_pg.sql
  25. 0
      superx/WEB-INF/conf/extra_connections.properties.sam
  26. 4
      superx/WEB-INF/conf/quartz.properties
  27. 2
      superx/WEB-INF/conf/version.properties
  28. 20
      superx/WEB-INF/kern_dbforms-config_pg.xml
  29. 16
      superx/xml/js/memtext/nd_functions.js
  30. 193
      superx/xml/js/memtext/sx_functions.js
  31. 30
      superx/xml/nd_templates.xsl

2
superx/WEB-INF/conf/edustore/db/install/conf/builddatum.txt

@ -1 +1 @@
19.08.2026 03.10.2026

8
superx/WEB-INF/conf/edustore/db/install/conf/his1/dbconv/view.eduetl/dim_semester.view

@ -10,8 +10,8 @@ folgesem,
folgesem_sem_beginn, folgesem_sem_beginn,
ist_zukunft, ist_zukunft,
akad_jahr, akad_jahr,
akad_jahr_absolv, pruefungsjahr,
akad_jahr_stud) as studienjahr) as
with tmp_semester as (select C.apnr as tid, with tmp_semester as (select C.apnr as tid,
C.druck as eintrag, C.druck as eintrag,
@ -37,8 +37,8 @@ akad_jahr_stud) as
folgesem_sem_beginn, folgesem_sem_beginn,
(case when sem_beginn > current_date then 1 else 0 end) as ist_zukunft, (case when sem_beginn > current_date then 1 else 0 end) as ist_zukunft,
case when semestertyp='1' then (tid/10)-1 when semestertyp='2' then (tid/10) end as akad_jahr, case when semestertyp='1' then (tid/10)-1 when semestertyp='2' then (tid/10) end as akad_jahr,
case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10)+1 end as akad_jahr_absolv, case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10)+1 end as pruefungsjahr,
case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10) end as akad_jahr_stud case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10) end as studienjahr
from tmp_semester from tmp_semester
where length('' || tid)=5 and substring('' || tid from 5 for 1) in ('1','2','3','4') where length('' || tid)=5 and substring('' || tid from 5 for 1) in ('1','2','3','4')

33
superx/WEB-INF/conf/edustore/db/install/conf/his1/dbconv/view.eduetl/dim_stg_astat_sb_fgr.view

@ -0,0 +1,33 @@
create view dim_stg_astat_sb_fgr(
stg_astat,
stg_astat_str,
stg_bund,
stg_bund_str,
sb,
sb_str,
fgr,
fgr_str,
gueltig_ab,
gueltig_bis) as
select L.schluessel as stg_astat,
L.name as stg_astat_str,
L.keybund as stg_bund,
F.name as stg_bund_str,
F.sb,SB.name as sb_str,
SB.fgr,
FGR.name as fgr_str,
L.gueltig_ab,
coalesce(L.gueltig_bis,30000) as gueltig_bis
from k_astat_studienfach_land L,
k_astat_studienbereich SB,
k_astat_studienfach F,
k_astat_faechergruppe FGR,
cif C_land
where C_land.key=659
and C_land.apnr=L.land
and SB.schluessel=F.sb
and FGR.schluessel=SB.fgr
and L.keybund=F.schluessel
;

6
superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_install/edustore_kern_integrate_pg.sql

@ -723,6 +723,12 @@ insert into tmp_themenbaum
gueltig_bis) gueltig_bis)
values('Übersicht Datenblatt-Archiv','71860','Datenmanagement',date_val('01.01.1900'),date_val('01.01.3000')); values('Übersicht Datenblatt-Archiv','71860','Datenmanagement',date_val('01.01.1900'),date_val('01.01.3000'));
insert into tmp_themenbaum
( name ,maskeninfo_id, parentname,
gueltig_seit ,
gueltig_bis)
values('Tabelleninhalt anzeigen','71900','Administration',date_val('01.01.1900'),date_val('01.01.3000'));
--gibt es die Maske schon? --gibt es die Maske schon?
delete from tmp_themenbaum where maskeninfo_id in (select T.maskeninfo_id from themenbaum T); delete from tmp_themenbaum where maskeninfo_id in (select T.maskeninfo_id from themenbaum T);

36
superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_install/edustore_kern_masken_einspielen.xml

@ -2087,4 +2087,40 @@
<dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="n" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71880_maske_system_bez.unl"/> <dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="n" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71880_maske_system_bez.unl"/>
</dbi:data> </dbi:data>
</dbi:dbaction> </dbi:dbaction>
<dbi:dbaction dbi:action="sqlexec">eduetl:delete from maskeninfo where tid = 71900;
</dbi:dbaction>
<dbi:dbaction dbi:action="sqlexec">eduetl:delete from felderinfo where tid in
(select felderinfo_id from masken_felder_bez where maskeninfo_id = 71900);
</dbi:dbaction>
<dbi:dbaction dbi:action="sqlexec">eduetl:delete from masken_felder_bez where maskeninfo_id = 71900;
</dbi:dbaction>
<dbi:dbaction dbi:action="sqlexec">eduetl:delete from sachgeb_maske_bez where maskeninfo_id = 71900;
</dbi:dbaction>
<dbi:dbaction dbi:action="sqlexec">eduetl:delete from maske_system_bez where maskeninfo_id = 71900;
</dbi:dbaction>
<dbi:dbaction dbi:action="importFile">
<dbi:data database="eduetl" table="maskeninfo">
<dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="n" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71900_maskeninfo.unl"/>
</dbi:data>
</dbi:dbaction>
<dbi:dbaction dbi:action="importFile">
<dbi:data database="eduetl" table="felderinfo">
<dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="n" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71900_felderinfo.unl"/>
</dbi:data>
</dbi:dbaction>
<dbi:dbaction dbi:action="importFile">
<dbi:data database="eduetl" table="masken_felder_bez">
<dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="n" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71900_masken_felder_bez.unl"/>
</dbi:data>
</dbi:dbaction>
<dbi:dbaction dbi:action="importFile">
<dbi:data database="eduetl" table="sachgeb_maske_bez">
<dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="n" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71900_sachgeb_maske_bez.unl"/>
</dbi:data>
</dbi:dbaction>
<dbi:dbaction dbi:action="importFile">
<dbi:data database="eduetl" table="maske_system_bez">
<dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="n" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71900_maske_system_bez.unl"/>
</dbi:data>
</dbi:dbaction>
</dbi:dbactions> </dbi:dbactions>

36
superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_install/edustore_kern_masken_entladen.xml

@ -2087,4 +2087,40 @@
<dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="y" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71880_maske_system_bez.unl"/> <dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="y" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71880_maske_system_bez.unl"/>
</dbi:data> </dbi:data>
</dbi:dbaction> </dbi:dbaction>
<dbi:dbaction dbi:action="exportFile">
<dbi:data sqlVarDatabase="" database="eduetl">
<extraction-sql>select * from maskeninfo where tid = 71900;
</extraction-sql>
<dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="y" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71900_maskeninfo.unl"/>
</dbi:data>
</dbi:dbaction>
<dbi:dbaction dbi:action="exportFile">
<dbi:data sqlVarDatabase="" database="eduetl">
<extraction-sql>select * from felderinfo where tid in
(select felderinfo_id from masken_felder_bez where maskeninfo_id = 71900) order by tid;
</extraction-sql>
<dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="y" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71900_felderinfo.unl"/>
</dbi:data>
</dbi:dbaction>
<dbi:dbaction dbi:action="exportFile">
<dbi:data sqlVarDatabase="" database="eduetl">
<extraction-sql>select maskeninfo_id, felderinfo_id from masken_felder_bez where maskeninfo_id = 71900 order by 1,2;
</extraction-sql>
<dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="y" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71900_masken_felder_bez.unl"/>
</dbi:data>
</dbi:dbaction>
<dbi:dbaction dbi:action="exportFile">
<dbi:data sqlVarDatabase="" database="eduetl">
<extraction-sql>select sachgebiete_id, maskeninfo_id from sachgeb_maske_bez where maskeninfo_id = 71900 order by 1,2;
</extraction-sql>
<dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="y" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71900_sachgeb_maske_bez.unl"/>
</dbi:data>
</dbi:dbaction>
<dbi:dbaction dbi:action="exportFile">
<dbi:data sqlVarDatabase="" database="eduetl">
<extraction-sql>select maskeninfo_id, systeminfo_id from maske_system_bez where maskeninfo_id = 71900 order by 1,2;
</extraction-sql>
<dbi:file encoding="UTF-8" separator="^" trailingSeparator="y" withNativeClient="y" firstLinedescription="n" structure="CSV" filename="$SUPERX_DIR/db/install/masken/71900_maske_system_bez.unl"/>
</dbi:data>
</dbi:dbaction>
</dbi:dbactions> </dbi:dbactions>

6
superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_install/edustore_kern_masken_loeschen.sql

@ -346,3 +346,9 @@ delete from felderinfo where tid in
delete from masken_felder_bez where maskeninfo_id = 71880; delete from masken_felder_bez where maskeninfo_id = 71880;
delete from sachgeb_maske_bez where maskeninfo_id = 71880; delete from sachgeb_maske_bez where maskeninfo_id = 71880;
delete from maske_system_bez where maskeninfo_id = 71880; delete from maske_system_bez where maskeninfo_id = 71880;
delete from maskeninfo where tid = 71900;
delete from felderinfo where tid in
(select felderinfo_id from masken_felder_bez where maskeninfo_id = 71900);
delete from masken_felder_bez where maskeninfo_id = 71900;
delete from sachgeb_maske_bez where maskeninfo_id = 71900;
delete from maske_system_bez where maskeninfo_id = 71900;

11
superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_install/edustore_kern_masken_loeschen.xml

@ -636,5 +636,16 @@
<dbi:dbaction dbi:action="sqlexec">eduetl:delete from sachgeb_maske_bez where maskeninfo_id = 71880; <dbi:dbaction dbi:action="sqlexec">eduetl:delete from sachgeb_maske_bez where maskeninfo_id = 71880;
</dbi:dbaction> </dbi:dbaction>
<dbi:dbaction dbi:action="sqlexec">eduetl:delete from maske_system_bez where maskeninfo_id = 71880; <dbi:dbaction dbi:action="sqlexec">eduetl:delete from maske_system_bez where maskeninfo_id = 71880;
</dbi:dbaction>
<dbi:dbaction dbi:action="sqlexec">eduetl:delete from maskeninfo where tid = 71900;
</dbi:dbaction>
<dbi:dbaction dbi:action="sqlexec">eduetl:delete from felderinfo where tid in
(select felderinfo_id from masken_felder_bez where maskeninfo_id = 71900);
</dbi:dbaction>
<dbi:dbaction dbi:action="sqlexec">eduetl:delete from masken_felder_bez where maskeninfo_id = 71900;
</dbi:dbaction>
<dbi:dbaction dbi:action="sqlexec">eduetl:delete from sachgeb_maske_bez where maskeninfo_id = 71900;
</dbi:dbaction>
<dbi:dbaction dbi:action="sqlexec">eduetl:delete from maske_system_bez where maskeninfo_id = 71900;
</dbi:dbaction> </dbi:dbaction>
</dbi:dbactions> </dbi:dbactions>

171
superx/WEB-INF/conf/edustore/db/install/conf/kern.html

File diff suppressed because one or more lines are too long

2
superx/WEB-INF/conf/edustore/db/install/conf/kern.rtf

File diff suppressed because one or more lines are too long

37
superx/WEB-INF/conf/edustore/db/install/conf/kern.xml

@ -8819,6 +8819,43 @@ where dimension_bp_id=(select D.tid from dimension_bp D where D.apnr='bluep_absc
]]></sql> ]]></sql>
</view>
<view name="dim_stg_astat_sb_fgr" version="6.0" caption="Fach (amtlich), Studienbereich, Fächergruppe" thema="Stammdaten verwalten" typ="Schlüsseltabelle" releaseUnload="demo">
<columns>
<column name="stg_astat" type ="VARCHAR" size ="255" default ="" notnull ="false" description="Fach (Land) Schlüssel"/>
<column name="stg_astat_str" type ="VARCHAR" size ="255" default ="" notnull ="false" description="Fach (Land) Name" />
<column name="stg_bund" type ="VARCHAR" size ="255" default ="" notnull ="false" description="Fach (Bund) Schlüssel"/>
<column name="stg_bund_str" type ="VARCHAR" size ="255" default ="" notnull ="false" description="Fach (Bund) Name" />
<column name="sb" type ="VARCHAR" size ="255" default ="" notnull ="false" description="Studienbereich Schlüssel"/>
<column name="sb_str" type ="VARCHAR" size ="255" default ="" notnull ="false" description="Studienbereich Name"/>
<column name="fgr" type ="VARCHAR" size ="255" default ="" notnull ="false" description="Fächergruppe Schlüssel" />
<column name="fgr_str" type ="VARCHAR" size ="255" default ="" notnull ="false" description="Fächergruppe Name"/>
<column name="gueltig_ab" type ="INTEGER" size ="10" default ="" notnull ="false" description="Gültig von"><comment>Semester fünfstellig, z.B. 20262 für WiSe 2026/2027</comment></column>
<column name="gueltig_bis" type ="INTEGER" size ="10" default ="" notnull ="false" description="Gültig bis"><comment>Semester fünfstellig, z.B. 20271 für SoSe 2027</comment></column>
</columns>
<sql dbsystem=""><![CDATA[
select L.schluessel as stg_astat,
L.name as stg_astat_str,
L.keybund as stg_bund,
F.name as stg_bund_str,
F.sb,SB.name as sb_str,
SB.fgr,
FGR.name as fgr_str,
L.gueltig_ab,
coalesce(L.gueltig_bis,30000) as gueltig_bis
from k_astat_studienfach_land L,
k_astat_studienbereich SB,
k_astat_studienfach F,
k_astat_faechergruppe FGR,
cif C_land
where C_land.key=659
and C_land.apnr=L.land
and SB.schluessel=F.sb
and FGR.schluessel=SB.fgr
and L.keybund=F.schluessel
]]></sql>
</view> </view>
</views> </views>

8
superx/WEB-INF/conf/edustore/db/install/conf/kern_mask_test_ant.xml

@ -398,5 +398,13 @@
<arg value="-logger:conf/edustore/db/conf/logging.properties"/> <arg value="-logger:conf/edustore/db/conf/logging.properties"/>
<classpath refid="classpath"/> <classpath refid="classpath"/>
</java> </java>
<!--Test Maske - tid: 71900 - Maskenname: Tabelleninhalt anzeigen-->
<java classname="de.superx.bin.ExecuteMask" fork="true" failonerror="true" classpathref="classpath" dir="${WEBAPP_DIR}/WEB-INF">
<arg value="-tid:71900"/>
<arg value="-out:71900.htm"/>
<arg value="-user:admin"/>
<arg value="-logger:conf/edustore/db/conf/logging.properties"/>
<classpath refid="classpath"/>
</java>
</target> </target>
</project> </project>

8
superx/WEB-INF/conf/edustore/db/install/conf/module_drop_views.sql

@ -58,6 +58,9 @@ select sp_table_exists('dim_kreis') from xdummy;
<sqlvar name="dim_semester_view_exists"> <sqlvar name="dim_semester_view_exists">
select sp_table_exists('dim_semester') from xdummy; select sp_table_exists('dim_semester') from xdummy;
</sqlvar> </sqlvar>
<sqlvar name="dim_stg_astat_sb_fgr_view_exists">
select sp_table_exists('dim_stg_astat_sb_fgr') from xdummy;
</sqlvar>
</sqlvars> </sqlvars>
@ -151,3 +154,8 @@ drop view dim_kreis;
drop view dim_semester; drop view dim_semester;
</#if> </#if>
<#if dim_stg_astat_sb_fgr_view_exists ==1>
drop view dim_stg_astat_sb_fgr;
</#if>

1
superx/WEB-INF/conf/edustore/db/install/conf/module_grant.x

@ -526,6 +526,7 @@ DOQUERY "grant $RIGHT on dim_kost to $GRANTEE;"
DOQUERY "grant $RIGHT on dim_kotr to $GRANTEE;" DOQUERY "grant $RIGHT on dim_kotr to $GRANTEE;"
DOQUERY "grant $RIGHT on dim_kreis to $GRANTEE;" DOQUERY "grant $RIGHT on dim_kreis to $GRANTEE;"
DOQUERY "grant $RIGHT on dim_semester to $GRANTEE;" DOQUERY "grant $RIGHT on dim_semester to $GRANTEE;"
DOQUERY "grant $RIGHT on dim_stg_astat_sb_fgr to $GRANTEE;"
if [ "$DATABASE" == "POSTGRES" ] if [ "$DATABASE" == "POSTGRES" ]
then then

1
superx/WEB-INF/conf/edustore/db/install/conf/module_revoke.x

@ -508,6 +508,7 @@ DOQUERY "revoke $RIGHT on dim_kost from $GRANTEE;"
DOQUERY "revoke $RIGHT on dim_kotr from $GRANTEE;" DOQUERY "revoke $RIGHT on dim_kotr from $GRANTEE;"
DOQUERY "revoke $RIGHT on dim_kreis from $GRANTEE;" DOQUERY "revoke $RIGHT on dim_kreis from $GRANTEE;"
DOQUERY "revoke $RIGHT on dim_semester from $GRANTEE;" DOQUERY "revoke $RIGHT on dim_semester from $GRANTEE;"
DOQUERY "revoke $RIGHT on dim_stg_astat_sb_fgr from $GRANTEE;"
if [ "$DATABASE" == "POSTGRES" ] if [ "$DATABASE" == "POSTGRES" ]
then then

224
superx/WEB-INF/conf/edustore/db/install/conf/sx_fields_fuellen.sql

@ -23799,7 +23799,7 @@ currentlyUsed,
check_integrity, check_integrity,
is_sum) is_sum)
values('dim_semester', values('dim_semester',
'akad_jahr_absolv', 'pruefungsjahr',
'Prüfungsjahr', 'Prüfungsjahr',
'Def. Absolv.: vorheriges WiSe + SoSe (z.B. 2006 = 20052 + 20061) https://www.destatis.de/DE/Mediathek/Digitales-Magazin/Bildung/Glossar/pruefungsjahr.html', 'Def. Absolv.: vorheriges WiSe + SoSe (z.B. 2006 = 20052 + 20061) https://www.destatis.de/DE/Mediathek/Digitales-Magazin/Bildung/Glossar/pruefungsjahr.html',
'INTEGER', 'INTEGER',
@ -23821,7 +23821,7 @@ currentlyUsed,
check_integrity, check_integrity,
is_sum) is_sum)
values('dim_semester', values('dim_semester',
'akad_jahr_stud', 'studienjahr',
'Studienjahr', 'Studienjahr',
'Def. Studienjahr: SoSe + WiSe (z.B. 2006 = 20061 + 20062)', 'Def. Studienjahr: SoSe + WiSe (z.B. 2006 = 20061 + 20062)',
'INTEGER', 'INTEGER',
@ -24117,6 +24117,226 @@ values('dim_stg',
0, 0,
1); 1);
insert into tmp_fields (
table_name,
name,
caption,
description,
field_type,
field_size,
field_not_null,
currentlyUsed,
check_integrity,
is_sum)
values('dim_stg_astat_sb_fgr',
'stg_astat',
'Fach (Land) Schlüssel',
'',
'VARCHAR',
'255',
0,
1,
0,
1);
insert into tmp_fields (
table_name,
name,
caption,
description,
field_type,
field_size,
field_not_null,
currentlyUsed,
check_integrity,
is_sum)
values('dim_stg_astat_sb_fgr',
'stg_astat_str',
'Fach (Land) Name',
'',
'VARCHAR',
'255',
0,
1,
0,
1);
insert into tmp_fields (
table_name,
name,
caption,
description,
field_type,
field_size,
field_not_null,
currentlyUsed,
check_integrity,
is_sum)
values('dim_stg_astat_sb_fgr',
'stg_bund',
'Fach (Bund) Schlüssel',
'',
'VARCHAR',
'255',
0,
1,
0,
1);
insert into tmp_fields (
table_name,
name,
caption,
description,
field_type,
field_size,
field_not_null,
currentlyUsed,
check_integrity,
is_sum)
values('dim_stg_astat_sb_fgr',
'stg_bund_str',
'Fach (Bund) Name',
'',
'VARCHAR',
'255',
0,
1,
0,
1);
insert into tmp_fields (
table_name,
name,
caption,
description,
field_type,
field_size,
field_not_null,
currentlyUsed,
check_integrity,
is_sum)
values('dim_stg_astat_sb_fgr',
'sb',
'Studienbereich Schlüssel',
'',
'VARCHAR',
'255',
0,
1,
0,
1);
insert into tmp_fields (
table_name,
name,
caption,
description,
field_type,
field_size,
field_not_null,
currentlyUsed,
check_integrity,
is_sum)
values('dim_stg_astat_sb_fgr',
'sb_str',
'Studienbereich Name',
'',
'VARCHAR',
'255',
0,
1,
0,
1);
insert into tmp_fields (
table_name,
name,
caption,
description,
field_type,
field_size,
field_not_null,
currentlyUsed,
check_integrity,
is_sum)
values('dim_stg_astat_sb_fgr',
'fgr',
'Fächergruppe Schlüssel',
'',
'VARCHAR',
'255',
0,
1,
0,
1);
insert into tmp_fields (
table_name,
name,
caption,
description,
field_type,
field_size,
field_not_null,
currentlyUsed,
check_integrity,
is_sum)
values('dim_stg_astat_sb_fgr',
'fgr_str',
'Fächergruppe Name',
'',
'VARCHAR',
'255',
0,
1,
0,
1);
insert into tmp_fields (
table_name,
name,
caption,
description,
field_type,
field_size,
field_not_null,
currentlyUsed,
check_integrity,
is_sum)
values('dim_stg_astat_sb_fgr',
'gueltig_ab',
'Gültig von',
'Semester fünfstellig, z.B. 20262 für WiSe 2026/2027',
'INTEGER',
'10',
0,
1,
0,
1);
insert into tmp_fields (
table_name,
name,
caption,
description,
field_type,
field_size,
field_not_null,
currentlyUsed,
check_integrity,
is_sum)
values('dim_stg_astat_sb_fgr',
'gueltig_bis',
'Gültig bis',
'Semester fünfstellig, z.B. 20271 für SoSe 2027',
'INTEGER',
'10',
0,
1,
0,
1);
insert into tmp_fields ( insert into tmp_fields (
table_name, table_name,
name, name,

8
superx/WEB-INF/conf/edustore/db/install/conf/sx_tables_fuellen.sql

@ -1183,6 +1183,14 @@ values('dim_stg','Studienfach','Studienfach Dimension für OLAP',
'Studierende', 'Studierende',
0); 0);
insert into tmp_tables (name,caption,description,table_type,systeminfo_id,systeminfo_orig,thema,sachgebiete_id)
values('dim_stg_astat_sb_fgr','Fach (amtlich), Studienbereich, Fächergruppe','',
'Schlüsseltabelle',
9,
9,
'Stammdaten verwalten',
0);
insert into tmp_tables (name,caption,description,table_type,systeminfo_id,systeminfo_orig,thema,sachgebiete_id) insert into tmp_tables (name,caption,description,table_type,systeminfo_id,systeminfo_orig,thema,sachgebiete_id)
values('dimension_view','','View auf dimension-Tabelle nach HIS1-DB-Struktur ', values('dimension_view','','View auf dimension-Tabelle nach HIS1-DB-Struktur ',
'', '',

50
superx/WEB-INF/conf/edustore/db/install/kern_install_pg.sql

@ -5054,8 +5054,8 @@ folgesem,
folgesem_sem_beginn, folgesem_sem_beginn,
ist_zukunft, ist_zukunft,
akad_jahr, akad_jahr,
akad_jahr_absolv, pruefungsjahr,
akad_jahr_stud) as studienjahr) as
with tmp_semester as (select C.apnr as tid, with tmp_semester as (select C.apnr as tid,
C.druck as eintrag, C.druck as eintrag,
@ -5081,14 +5081,50 @@ akad_jahr_stud) as
folgesem_sem_beginn, folgesem_sem_beginn,
(case when sem_beginn > current_date then 1 else 0 end) as ist_zukunft, (case when sem_beginn > current_date then 1 else 0 end) as ist_zukunft,
case when semestertyp='1' then (tid/10)-1 when semestertyp='2' then (tid/10) end as akad_jahr, case when semestertyp='1' then (tid/10)-1 when semestertyp='2' then (tid/10) end as akad_jahr,
case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10)+1 end as akad_jahr_absolv, case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10)+1 end as pruefungsjahr,
case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10) end as akad_jahr_stud case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10) end as studienjahr
from tmp_semester from tmp_semester
where length('' || tid)=5 and substring('' || tid from 5 for 1) in ('1','2','3','4') where length('' || tid)=5 and substring('' || tid from 5 for 1) in ('1','2','3','4')
; ;
select now(), 'Erzeuge View dim_stg_astat_sb_fgr';
create view dim_stg_astat_sb_fgr(
stg_astat,
stg_astat_str,
stg_bund,
stg_bund_str,
sb,
sb_str,
fgr,
fgr_str,
gueltig_ab,
gueltig_bis) as
select L.schluessel as stg_astat,
L.name as stg_astat_str,
L.keybund as stg_bund,
F.name as stg_bund_str,
F.sb,SB.name as sb_str,
SB.fgr,
FGR.name as fgr_str,
L.gueltig_ab,
coalesce(L.gueltig_bis,30000) as gueltig_bis
from k_astat_studienfach_land L,
k_astat_studienbereich SB,
k_astat_studienfach F,
k_astat_faechergruppe FGR,
cif C_land
where C_land.key=659
and C_land.apnr=L.land
and SB.schluessel=F.sb
and FGR.schluessel=SB.fgr
and L.keybund=F.schluessel
;
--Funktion / Prozedur sp_user_themen --Funktion / Prozedur sp_user_themen
\! DOSQL $SUPERX_DIR/db/install/prozeduren/proc_sp_user_themen_pg.sql \! DOSQL $SUPERX_DIR/db/install/prozeduren/proc_sp_user_themen_pg.sql
--Funktion / Prozedur sp_user_orga --Funktion / Prozedur sp_user_orga
@ -6279,6 +6315,12 @@ insert into tmp_themenbaum
gueltig_bis) gueltig_bis)
values('Übersicht Datenblatt-Archiv','71860','Datenmanagement',date_val('01.01.1900'),date_val('01.01.3000')); values('Übersicht Datenblatt-Archiv','71860','Datenmanagement',date_val('01.01.1900'),date_val('01.01.3000'));
insert into tmp_themenbaum
( name ,maskeninfo_id, parentname,
gueltig_seit ,
gueltig_bis)
values('Tabelleninhalt anzeigen','71900','Administration',date_val('01.01.1900'),date_val('01.01.3000'));
--gibt es die Maske schon? --gibt es die Maske schon?
delete from tmp_themenbaum where maskeninfo_id in (select T.maskeninfo_id from themenbaum T); delete from tmp_themenbaum where maskeninfo_id in (select T.maskeninfo_id from themenbaum T);

4
superx/WEB-INF/conf/edustore/db/install/kern_masken_einspielen_pg.x

@ -235,3 +235,7 @@ sx_auto_insert_mask 71860
echo "Maske Nr. 71880 einfügen:" echo "Maske Nr. 71880 einfügen:"
cd $SUPERX_DIR/db/install/masken cd $SUPERX_DIR/db/install/masken
sx_auto_insert_mask 71880 sx_auto_insert_mask 71880
#Maske Nr.71900 Tabelleninhalt anzeigen
echo "Maske Nr. 71900 einfügen:"
cd $SUPERX_DIR/db/install/masken
sx_auto_insert_mask 71900

3
superx/WEB-INF/conf/edustore/db/install/kern_masken_entladen_pg.x

@ -177,3 +177,6 @@ sx_select_mask 71860
#Maske Nr.71880 Downloads löschen #Maske Nr.71880 Downloads löschen
cd "$SUPERX_DIR/db/install/masken" cd "$SUPERX_DIR/db/install/masken"
sx_select_mask 71880 sx_select_mask 71880
#Maske Nr.71900 Tabelleninhalt anzeigen
cd "$SUPERX_DIR/db/install/masken"
sx_select_mask 71900

2
superx/WEB-INF/conf/edustore/db/install/kern_masken_loeschen_pg.x

@ -173,3 +173,5 @@ sx_auto_delete_mask 71860
#Maske Nr.71880 Downloads löschen #Maske Nr.71880 Downloads löschen
sx_auto_delete_mask 71880 sx_auto_delete_mask 71880
sx_auto_delete_mask 71880 sx_auto_delete_mask 71880
#Maske Nr.71900 Tabelleninhalt anzeigen
sx_auto_delete_mask 71900

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

@ -450,9 +450,9 @@ create temp table tmp_cifx2\
key smallint not null ,\ key smallint not null ,\
hs integer not null,\ hs integer not null,\
apnr char(255) ,\ apnr char(255) ,\
kurz char(10),\ kurz varchar(255),\
druck varchar(100),\ druck varchar(255),\
lang_1 char(150),\ lang_1 varchar(255),\
astat char(10) ,\ astat char(10) ,\
parent char(255) , \ parent char(255) , \
uniquename CHAR(255) , \ uniquename CHAR(255) , \
@ -983,9 +983,9 @@ create temp table tmp_cifx2\
key smallint not null ,\ key smallint not null ,\
hs integer not null,\ hs integer not null,\
apnr char(255) ,\ apnr char(255) ,\
kurz char(10),\ kurz varchar(255),\
druck varchar(100),\ druck varchar(255),\
lang_1 char(150),\ lang_1 varchar(255),\
astat char(10) ,\ astat char(10) ,\
parent char(255) , \ parent char(255) , \
uniquename CHAR(255) , \ uniquename CHAR(255) , \

30
superx/WEB-INF/conf/edustore/db/install/upgrade/kern_upgrade_themenbaum.sql

@ -1799,6 +1799,36 @@ select
delete from tmp_themenbaum; delete from tmp_themenbaum;
insert into tmp_themenbaum(
name,
maskeninfo_id,
gueltig_seit,
gueltig_bis)
select 'Tabelleninhalt anzeigen'::char(255),71900,
date_val('01.01.1900'),date_val('30.09.2999')
from xdummy;
delete from tmp_themenbaum where 0 <
(select count(*) from themenbaum where maskeninfo_id=71900);
update tmp_themenbaum set parent=(select max(tid) from themenbaum where name='Administration');
insert into themenbaum(
name,
maskeninfo_id,
parent,
gueltig_seit,
gueltig_bis,
erlaeuterung)
select
name,
maskeninfo_id,
parent,
gueltig_seit,
gueltig_bis,
erlaeuterung
from tmp_themenbaum;
delete from tmp_themenbaum;
drop table tmp_themenbaum; drop table tmp_themenbaum;
<#if SQLdialect='Postgres'> <#if SQLdialect='Postgres'>

104
superx/WEB-INF/conf/edustore/db/install/upgrade/kern_upgrade_views_pg.sql

@ -21,7 +21,8 @@ select relname,relname as tabelle from pg_class where relname::varchar(200) in (
'dim_kost', 'dim_kost',
'dim_kotr', 'dim_kotr',
'dim_kreis', 'dim_kreis',
'dim_semester') UNION 'dim_semester',
'dim_stg_astat_sb_fgr') UNION
SELECT N.nspname||'.'||C.relname as relname, N.nspname||'.'||C.relname as tabelle SELECT N.nspname||'.'||C.relname as relname, N.nspname||'.'||C.relname as tabelle
FROM pg_class C, pg_namespace N FROM pg_class C, pg_namespace N
WHERE N.oid = C.relnamespace and N.nspname||'.'||C.relname in ('user_groups', WHERE N.oid = C.relnamespace and N.nspname||'.'||C.relname in ('user_groups',
@ -41,7 +42,8 @@ WHERE N.oid = C.relnamespace and N.nspname||'.'||C.relname in ('user_groups',
'dim_kost', 'dim_kost',
'dim_kotr', 'dim_kotr',
'dim_kreis', 'dim_kreis',
'dim_semester' 'dim_semester',
'dim_stg_astat_sb_fgr'
);</sqlvar> );</sqlvar>
</sqlvars> </sqlvars>
@ -690,8 +692,8 @@ folgesem,
folgesem_sem_beginn, folgesem_sem_beginn,
ist_zukunft, ist_zukunft,
akad_jahr, akad_jahr,
akad_jahr_absolv, pruefungsjahr,
akad_jahr_stud) as studienjahr) as
with tmp_semester as (select C.apnr as tid, with tmp_semester as (select C.apnr as tid,
C.druck as eintrag, C.druck as eintrag,
@ -717,8 +719,8 @@ akad_jahr_stud) as
folgesem_sem_beginn, folgesem_sem_beginn,
(case when sem_beginn > current_date then 1 else 0 end) as ist_zukunft, (case when sem_beginn > current_date then 1 else 0 end) as ist_zukunft,
case when semestertyp='1' then (tid/10)-1 when semestertyp='2' then (tid/10) end as akad_jahr, case when semestertyp='1' then (tid/10)-1 when semestertyp='2' then (tid/10) end as akad_jahr,
case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10)+1 end as akad_jahr_absolv, case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10)+1 end as pruefungsjahr,
case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10) end as akad_jahr_stud case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10) end as studienjahr
from tmp_semester from tmp_semester
where length('' || tid)=5 and substring('' || tid from 5 for 1) in ('1','2','3','4') where length('' || tid)=5 and substring('' || tid from 5 for 1) in ('1','2','3','4')
@ -728,6 +730,52 @@ akad_jahr_stud) as
</#if> </#if>
<#if views?seq_contains("dim_stg_astat_sb_fgr") >
select now(), 'view dim_stg_astat_sb_fgr exists - fine';
<#else>
select now(), 'Erzeuge View dim_stg_astat_sb_fgr';
create view dim_stg_astat_sb_fgr(
stg_astat,
stg_astat_str,
stg_bund,
stg_bund_str,
sb,
sb_str,
fgr,
fgr_str,
gueltig_ab,
gueltig_bis) as
select L.schluessel as stg_astat,
L.name as stg_astat_str,
L.keybund as stg_bund,
F.name as stg_bund_str,
F.sb,SB.name as sb_str,
SB.fgr,
FGR.name as fgr_str,
L.gueltig_ab,
coalesce(L.gueltig_bis,30000) as gueltig_bis
from k_astat_studienfach_land L,
k_astat_studienbereich SB,
k_astat_studienfach F,
k_astat_faechergruppe FGR,
cif C_land
where C_land.key=659
and C_land.apnr=L.land
and SB.schluessel=F.sb
and FGR.schluessel=SB.fgr
and L.keybund=F.schluessel
;
</#if>
<#else> <#else>
@ -1191,8 +1239,8 @@ folgesem,
folgesem_sem_beginn, folgesem_sem_beginn,
ist_zukunft, ist_zukunft,
akad_jahr, akad_jahr,
akad_jahr_absolv, pruefungsjahr,
akad_jahr_stud) as studienjahr) as
with tmp_semester as (select C.apnr as tid, with tmp_semester as (select C.apnr as tid,
C.druck as eintrag, C.druck as eintrag,
@ -1218,8 +1266,8 @@ akad_jahr_stud) as
folgesem_sem_beginn, folgesem_sem_beginn,
(case when sem_beginn > current_date then 1 else 0 end) as ist_zukunft, (case when sem_beginn > current_date then 1 else 0 end) as ist_zukunft,
case when semestertyp='1' then (tid/10)-1 when semestertyp='2' then (tid/10) end as akad_jahr, case when semestertyp='1' then (tid/10)-1 when semestertyp='2' then (tid/10) end as akad_jahr,
case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10)+1 end as akad_jahr_absolv, case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10)+1 end as pruefungsjahr,
case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10) end as akad_jahr_stud case when semestertyp='1' then (tid/10) when semestertyp='2' then (tid/10) end as studienjahr
from tmp_semester from tmp_semester
where length('' || tid)=5 and substring('' || tid from 5 for 1) in ('1','2','3','4') where length('' || tid)=5 and substring('' || tid from 5 for 1) in ('1','2','3','4')
@ -1227,4 +1275,40 @@ akad_jahr_stud) as
; ;
select now(), 'Erzeuge View dim_stg_astat_sb_fgr';
create view dim_stg_astat_sb_fgr(
stg_astat,
stg_astat_str,
stg_bund,
stg_bund_str,
sb,
sb_str,
fgr,
fgr_str,
gueltig_ab,
gueltig_bis) as
select L.schluessel as stg_astat,
L.name as stg_astat_str,
L.keybund as stg_bund,
F.name as stg_bund_str,
F.sb,SB.name as sb_str,
SB.fgr,
FGR.name as fgr_str,
L.gueltig_ab,
coalesce(L.gueltig_bis,30000) as gueltig_bis
from k_astat_studienfach_land L,
k_astat_studienbereich SB,
k_astat_studienfach F,
k_astat_faechergruppe FGR,
cif C_land
where C_land.key=659
and C_land.apnr=L.land
and SB.schluessel=F.sb
and FGR.schluessel=SB.fgr
and L.keybund=F.schluessel
;
</#if> </#if>

0
superx/WEB-INF/conf/extra_connections.properties → superx/WEB-INF/conf/extra_connections.properties.sam

4
superx/WEB-INF/conf/quartz.properties

@ -17,6 +17,6 @@ org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQL
org.quartz.jobStore.isClustered: true org.quartz.jobStore.isClustered: true
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = quartz_jobs.xml org.quartz.plugin.jobInitializer.fileNames = quartz_jobs.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = false org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 30 org.quartz.plugin.jobInitializer.scanInterval = 30
org.quartz.plugin.jobInitializer.wrapInUserTransaction = false org.quartz.plugin.jobInitializer.wrapInUserTransaction = false

2
superx/WEB-INF/conf/version.properties

@ -1,2 +1,2 @@
git.branch=HEAD git.branch=HEAD
git.commit.hash=1dc091e79e42f6833099f87816927f2b27de525e git.commit.hash=eb163ec837e1a674401a5e5354484d5b644c5f8f

20
superx/WEB-INF/kern_dbforms-config_pg.xml

@ -2036,10 +2036,10 @@
<field name="akad_jahr" description="Akad. Jahr" fieldType="int" size="6" isKey="" sortable=""> <field name="akad_jahr" description="Akad. Jahr" fieldType="int" size="6" isKey="" sortable="">
<comment>Def. Akad. Jahr STBA: WiSe + nachfolgendes SoSe (z.B. 2006 = 20062 + 20071)</comment> <comment>Def. Akad. Jahr STBA: WiSe + nachfolgendes SoSe (z.B. 2006 = 20062 + 20071)</comment>
</field> </field>
<field name="akad_jahr_absolv" description="Prüfungsjahr" fieldType="int" size="6" isKey="" sortable=""> <field name="pruefungsjahr" description="Prüfungsjahr" fieldType="int" size="6" isKey="" sortable="">
<comment>Def. Absolv.: vorheriges WiSe + SoSe (z.B. 2006 = 20052 + 20061) https://www.destatis.de/DE/Mediathek/Digitales-Magazin/Bildung/Glossar/pruefungsjahr.html</comment> <comment>Def. Absolv.: vorheriges WiSe + SoSe (z.B. 2006 = 20052 + 20061) https://www.destatis.de/DE/Mediathek/Digitales-Magazin/Bildung/Glossar/pruefungsjahr.html</comment>
</field> </field>
<field name="akad_jahr_stud" description="Studienjahr" fieldType="int" size="6" isKey="" sortable=""> <field name="studienjahr" description="Studienjahr" fieldType="int" size="6" isKey="" sortable="">
<comment>Def. Studienjahr: SoSe + WiSe (z.B. 2006 = 20061 + 20062)</comment> <comment>Def. Studienjahr: SoSe + WiSe (z.B. 2006 = 20061 + 20062)</comment>
</field> </field>
</table> </table>
@ -2060,6 +2060,22 @@
<field name="stg_astgrp" description="Fächergruppe (Schlüssel)" fieldType="char" size="10" isKey="" sortable=""/> <field name="stg_astgrp" description="Fächergruppe (Schlüssel)" fieldType="char" size="10" isKey="" sortable=""/>
<field name="stg_astgrp_str" description="Fächergruppe" fieldType="varchar" size="255" isKey="" sortable=""/> <field name="stg_astgrp_str" description="Fächergruppe" fieldType="varchar" size="255" isKey="" sortable=""/>
</table> </table>
<table name="dim_stg_astat_sb_fgr">
<field name="stg_astat" description="Fach (Land) Schlüssel" fieldType="varchar" size="255" isKey="" sortable=""/>
<field name="stg_astat_str" description="Fach (Land) Name" fieldType="varchar" size="255" isKey="" sortable=""/>
<field name="stg_bund" description="Fach (Bund) Schlüssel" fieldType="varchar" size="255" isKey="" sortable=""/>
<field name="stg_bund_str" description="Fach (Bund) Name" fieldType="varchar" size="255" isKey="" sortable=""/>
<field name="sb" description="Studienbereich Schlüssel" fieldType="varchar" size="255" isKey="" sortable=""/>
<field name="sb_str" description="Studienbereich Name" fieldType="varchar" size="255" isKey="" sortable=""/>
<field name="fgr" description="Fächergruppe Schlüssel" fieldType="varchar" size="255" isKey="" sortable=""/>
<field name="fgr_str" description="Fächergruppe Name" fieldType="varchar" size="255" isKey="" sortable=""/>
<field name="gueltig_ab" description="Gültig von" fieldType="int" size="6" isKey="" sortable="">
<comment>Semester fünfstellig, z.B. 20262 für WiSe 2026/2027</comment>
</field>
<field name="gueltig_bis" description="Gültig bis" fieldType="int" size="6" isKey="" sortable="">
<comment>Semester fünfstellig, z.B. 20271 für SoSe 2027</comment>
</field>
</table>
<table name="dimension_view"> <table name="dimension_view">
<field name="id" description="" fieldType="int" size="6" isKey="" sortable=""/> <field name="id" description="" fieldType="int" size="6" isKey="" sortable=""/>
<field name="dimension_bp_id" description="" fieldType="int" size="6" isKey="" sortable=""/> <field name="dimension_bp_id" description="" fieldType="int" size="6" isKey="" sortable=""/>

16
superx/xml/js/memtext/nd_functions.js

@ -337,3 +337,19 @@ async function loadHtml(url,targetElement) {
console.error(error.message); console.error(error.message);
} }
} }
function setSelectFldFromKeyField(fld,varname)
{
var selectFld=document.getElementById('select_' +varname);
if(selectFld)
{
selectFld.value=fld.value;
for (i = 0; i < selectFld.options.length; i++) {
if (selectFld.options[i].value==fld.value)
{
selectFld.options[i].selected="selected";
}
}
}
}

193
superx/xml/js/memtext/sx_functions.js

@ -1957,84 +1957,6 @@ function resetValidation()
var el=document.getElementById('validation'); var el=document.getElementById('validation');
if(el) if(el)
el.innerHTML = ""; el.innerHTML = "";
if(1==2)
{ //still experimental
for(var i=1; i < felder.length; i++)
{
if(felder[i]["isDynamic"]=="true")
{
var tmpFname=felder[i]["name"];
var fieldID=createVarname(tmpFname);
console.log("Feld " +felder[i]["name"]+ " ist dynamisch");
if(felder[i].dependsOn && felder[i].dependsOn.length >0)
{
for(var k=0;k < felder[i].dependsOn.length;k++)
{
var dependsOnFieldname=felder[i].dependsOn[k];
var dependsOnFieldID=createVarname(dependsOnFieldname);
var dependsOnFieldvalue="";
if(document.getElementById(dependsOnFieldID))
dependsOnFieldvalue=document.getElementById(dependsOnFieldID).value;
else
console.log("Feld " +dependsOnFieldname+ "existiert nicht im Formular");
console.log("Feld " +tmpFname+ " hängt ab von " +dependsOnFieldname);
if(dependsOnFieldvalue != "")
{
console.log("requery mit "+dependsOnFieldvalue);
if(felder[i]["art"]=="1")
{
//reset field:
var previousValue=document.getElementById(fieldID).value;
var previousValueLabel=document.getElementById("label_"+fieldID).value;
console.log("prüfe Feld "+tmpFname );
//Ajax Load
var callurl="../servlet/SuperXmlMaske?tid="+maskentid+"&getJSON_"+getEncoded(tmpFname)+"=xxxxxx-xxxxxx@";
var params=maskeComboOderSichtBuildParams(document.forms[0],tmpFname,1, tmpFname); //dependsOnFieldname+"="+dependsOnFieldvalue;
callurl+=params;
//console.log("callurl "+callurl );
var previousValueIsStillPossible=false;
var isFirstPossibleValue=true;
var valueLoadedOk=getComboValue(callurl).then((jsonData) => {
if(jsonData && jsonData.nodes ) //&& jsonData.nodes.length ==2 ein leeres Element + ein gefülltes, nicht mehr
{
for(var j=0;j < jsonData.nodes.length;j++)
{
var node=jsonData.nodes[j];
if(previousValue==node.objectId)
previousValueIsStillPossible=true;
//console.log("setze Feld "+tmpFname + " auf Wert "+node.objectId +" ("+node.title+")");
}
if(previousValueIsStillPossible)
{
document.getElementById(fieldID).value=node.objectId;
document.getElementById("label_"+fieldID).value=node.title;
}
else
{ //Reset field:
document.getElementById(fieldID).value="";
document.getElementById("label_"+fieldID).value="";
}
}
});
}
}
}
}
}
else
{
console.log("Feld " +felder[i]["name"]+ " ist nicht dynamisch");
}
}
}
} }
async function getComboValue(url) async function getComboValue(url)
{ {
@ -2047,6 +1969,7 @@ async function getComboValue(url)
const comboContent = await response.text(); const comboContent = await response.text();
if(comboContent) if(comboContent)
{ {
console.log("comboContent: " +comboContent);
return purgeval(comboContent); return purgeval(comboContent);
} }
else else
@ -2119,7 +2042,6 @@ function validiereNeueMaskennr(frm,platform)
} }
} }
/* Funktionen für Javascript Baum, z.B. GANG Studiengang-Menü: */ /* Funktionen für Javascript Baum, z.B. GANG Studiengang-Menü: */
function srcUrl(url,targetElem) function srcUrl(url,targetElem)
{ {
@ -2222,7 +2144,7 @@ function renderTreeNode(treeNodes,myNode)
//hat Element kinder? //hat Element kinder?
if(myNode.isFolder) if(myNode.isFolder)
{ {
ret+="<span class=\"treeCaret\" id=\"treeCaret_\""+myNode.apnr+"\" onClick=\"renderTreeChildNodes(treeNodes,'"+myNode.apnr+"',this)\"></span>&nbsp;"; ret+="<span class=\"treeCaret\" id=\"treeCaret_\""+myNode.apnr+"\" onClick=\"renderTreeChildNodes(treeNodes,'"+myNode.apnr+"',this)\"></span>";
} }
if(myNode.onClickHandler !="" && !myNode.isFolder) if(myNode.onClickHandler !="" && !myNode.isFolder)
{ {
@ -2252,3 +2174,114 @@ function treeNodeHasChildren(treeNodes,nodeId)
} }
return hasChildren; return hasChildren;
} }
function setDependentFields(fld)
{
//still experimental
for(var i=1; i < felder.length; i++)
{
if(felder[i]["isDynamic"]=="true" )
{
var tmpFname=felder[i]["htmlname"];
var fieldID=createVarname(tmpFname);
console.log("Feld " +felder[i]["name"]+ " ist dynamisch");
if(felder[i].dependsOn && felder[i].dependsOn.length >0 && document.forms["maske"].elements[felder[i]["name"]].value !="")
{
for(var k=0;k < felder[i].dependsOn.length;k++)
{
var dependsOnFieldname=felder[i].dependsOn[k];
var dependsOnFieldID=createVarname(dependsOnFieldname);
var dependsOnFieldvalue="";
if(document.getElementById(dependsOnFieldID))
dependsOnFieldvalue=document.getElementById(dependsOnFieldID).value;
else
console.log("Feld " +dependsOnFieldname+ "existiert nicht im Formular");
console.log("Feld " +tmpFname+ " hängt ab von " +dependsOnFieldname);
if(dependsOnFieldvalue != "")
{
console.log("Feld "+tmpFname +" ist abhängig von " + dependsOnFieldvalue );
if(document.getElementById(fieldID) && document.getElementById("label_"+fieldID))
{
document.getElementById(fieldID).value="";
document.getElementById("label_"+fieldID).value="";
}
console.log("requery mit "+dependsOnFieldvalue);
if(felder[i]["art"]=="1")
{
//reset field:
var previousValue=document.getElementById(fieldID).value;
var previousValueLabel=document.getElementById("label_"+fieldID).value;
console.log("prüfe Feld "+tmpFname );
//Ajax Load
var callurl="../servlet/SuperXmlMaske?tid="+maskentid+"&getJSON_"+getEncoded(tmpFname)+"=xxxxxx-xxxxxx@";
var params=maskeComboOderSichtBuildParams(document.forms["maske"],tmpFname,1, tmpFname); //dependsOnFieldname+"="+dependsOnFieldvalue;
callurl+=params;
//console.log("callurl "+callurl );
//var isFirstPossibleValue=true;
try {
var valueLoadedOk=getComboValue(callurl).then((jsonData) => {
if(jsonData) //&& jsonData.nodes.length ==2 ein leeres Element + ein gefülltes, nicht mehr
{
console.log("jsonData: " +jsonData);
if(jsonData.error)
{
//reset field
console.log("Feld "+tmpFname +" Wert " + previousValue +" passt nicht mehr" );
document.getElementById(tmpFname).value="";
document.getElementById("label_"+tmpFname).value="";
}
if(jsonData.nodes ) //&& jsonData.nodes.length ==2 ein leeres Element + ein gefülltes, nicht mehr
{
for(var j=0;j < jsonData.nodes.length;j++)
{
var node=jsonData.nodes[j];
if(previousValue==node.objectId)
previousValueIsStillPossible=true;
//console.log("setze Feld "+tmpFname + " auf Wert "+node.objectId +" ("+node.title+")");
}
if(previousValueIsStillPossible)
{
document.getElementById(fieldID).value=node.objectId;
document.getElementById("label_"+fieldID).value=node.title;
}
else
{ //Reset field:
document.getElementById(fieldID).value="";
document.getElementById("label_"+fieldID).value="";
}
}
}
//else
// previousValueIsStillPossible=true;
});
console.log("Prüfung Feld "+tmpFname + " abgeschlossen");
}
catch (error)
{
//reset field
console.log("Ajax Fehler, Feld "+fieldID +" Wert " + previousValue +" passt nicht mehr" );
document.getElementById(fieldID).value="";
document.getElementById("label_"+fieldID).value="";
}
}
}
}
}
}
else
{
console.log("Feld " +felder[i]["name"]+ " ist nicht dynamisch");
}
}
}

30
superx/xml/nd_templates.xsl

@ -2450,11 +2450,22 @@ Seite 1 von 1
<!--20260216 deaktiviert<xsl:attribute name="tabindex"> <!--20260216 deaktiviert<xsl:attribute name="tabindex">
<xsl:value-of select="100+(nummer*10)+2"/> <xsl:value-of select="100+(nummer*10)+2"/>
</xsl:attribute>--> </xsl:attribute>-->
<xsl:attribute name="onchange"> <xsl:choose>
<xsl:text>c=document.getElementById('</xsl:text> <xsl:when test="attribut='{InputAction:setDependentFields}'">
<xsl:text>select_</xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template> <xsl:attribute name="onchange">
<xsl:text>');document.getElementById('</xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template><xsl:text>').value=c.options[c.selectedIndex].value;resetValidation();</xsl:text> <xsl:text>c=document.getElementById('</xsl:text>
</xsl:attribute> <xsl:text>select_</xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template>
<xsl:text>');document.getElementById('</xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template><xsl:text>').value=c.options[c.selectedIndex].value;setDependentFields(c);</xsl:text>
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="onchange">
<xsl:text>c=document.getElementById('</xsl:text>
<xsl:text>select_</xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template>
<xsl:text>');document.getElementById('</xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template><xsl:text>').value=c.options[c.selectedIndex].value;resetValidation();</xsl:text>
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="obligatorisch='1'"> <xsl:if test="obligatorisch='1'">
<xsl:attribute name="required"><xsl:text>true</xsl:text></xsl:attribute> <xsl:attribute name="required"><xsl:text>true</xsl:text></xsl:attribute>
</xsl:if> </xsl:if>
@ -2721,7 +2732,8 @@ Seite 1 von 1
text-Workaround --> text-Workaround -->
<xsl:if test="art='1' or art='12'"> <xsl:if test="art='1' or art='12'">
<div class="control" style="display:none"> <div class="control" style="display:none">
<xsl:text disable-output-escaping="yes"><![CDATA[<input type="text" size="10" onchange="resetValidation();"]]></xsl:text> <xsl:text disable-output-escaping="yes"><![CDATA[<input type="text" size="10" onchange="resetValidation();setSelectFldFromKeyField(this,']]></xsl:text>
<xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template><xsl:text>');"</xsl:text>
<xsl:text><![CDATA[ id="]]></xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template><xsl:text>" </xsl:text> <xsl:text><![CDATA[ id="]]></xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template><xsl:text>" </xsl:text>
<xsl:text><![CDATA[ name="]]></xsl:text><xsl:value-of select="name"/><xsl:text>" </xsl:text> <xsl:text><![CDATA[ name="]]></xsl:text><xsl:value-of select="name"/><xsl:text>" </xsl:text>
<!--20260216 deaktiviert<xsl:text><![CDATA[ tabindex="]]></xsl:text><xsl:value-of select="100+(nummer*10)+1"/><xsl:text>" </xsl:text>--> <!--20260216 deaktiviert<xsl:text><![CDATA[ tabindex="]]></xsl:text><xsl:value-of select="100+(nummer*10)+1"/><xsl:text>" </xsl:text>-->
@ -2738,11 +2750,11 @@ Seite 1 von 1
<xsl:choose> <xsl:choose>
<xsl:when test="(art=1 or art=2) and (zeilenanzahl=1 and @isDynamic='false')"> <xsl:when test="(art=1 or art=2) and (zeilenanzahl=1 and @isDynamic='false')">
<!-- select-box deaktivieren--> <!-- select-box deaktivieren-->
<xsl:text><![CDATA[ onfocus="]]></xsl:text> <xsl:text>document.forms[0].elements['select_</xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template><xsl:text>'].selectedIndex =-1;" </xsl:text> <xsl:text><![CDATA[ onfocus="]]></xsl:text> <xsl:text>document.forms['maske'].elements['select_</xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template><xsl:text>'].selectedIndex =-1;" </xsl:text>
</xsl:when> </xsl:when>
<xsl:otherwise> <!-- Labelfeld leeren--> <xsl:otherwise> <!-- Labelfeld leeren-->
<xsl:text><![CDATA[ onfocus="]]></xsl:text><xsl:text>document.forms[0].elements['label_</xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template><xsl:text>'].value ='';"</xsl:text> <xsl:text><![CDATA[ onfocus="]]></xsl:text><xsl:text>document.forms['maske'].elements['label_</xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template><xsl:text>'].value ='';"</xsl:text>
<xsl:text><![CDATA[ onblur="]]></xsl:text><xsl:text>document.forms[0].elements['label_</xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template><xsl:text>'].value =this.value;" </xsl:text> <xsl:text><![CDATA[ onblur="]]></xsl:text><xsl:text>document.forms['maske'].elements['label_</xsl:text><xsl:call-template name="create_varname"><xsl:with-param name="string"><xsl:value-of select="name"/></xsl:with-param></xsl:call-template><xsl:text>'].value =this.value;" </xsl:text>
</xsl:otherwise> </xsl:otherwise>
</xsl:choose> </xsl:choose>

Loading…
Cancel
Save