diff --git a/superx/edit/kern/superx_komponentenverwaltung.jsp b/superx/edit/kern/superx_komponentenverwaltung.jsp
index 433c13e2..adad2831 100644
--- a/superx/edit/kern/superx_komponentenverwaltung.jsp
+++ b/superx/edit/kern/superx_komponentenverwaltung.jsp
@@ -416,6 +416,7 @@ boolean jobLogHasStatus = false;
String dbVersionTableTag = tag("unbekannt", "warn");
String dbVersionRowsHtml = "";
String dbVersionFallbackJson = "{}";
+String dbSpecialJobsJson = "[]";
String availableVersionFallbackJson = "{}";
String availableVersionRowsHtml = "";
Map availableVersionMap = new LinkedHashMap();
@@ -537,6 +538,47 @@ try {
versionJson.append("}");
dbVersionFallbackJson = versionJson.toString();
}
+
+ // Sonderladeroutinen direkt aus etl_job lesen. Dadurch bleiben sie auch sichtbar,
+ // wenn /etl/list das zugehörige Modul nicht liefert.
+ if (tableExistsByRegclass(diagCon, "etl_job") || tableExistsByRegclass(diagCon, "public.etl_job")) {
+ ps = null;
+ rs = null;
+ StringBuilder specialJson = new StringBuilder();
+ specialJson.append("[");
+ boolean firstSpecial = true;
+ try {
+ ps = diagCon.prepareStatement(
+ "select uniquename, caption, systeminfo_id from etl_job " +
+ "where right(lower(uniquename),8) = '_special' " +
+ "order by systeminfo_id, uniquename"
+ );
+ rs = ps.executeQuery();
+ while (rs.next()) {
+ String jobId = rs.getString(1);
+ String caption = rs.getString(2);
+ Object sidObj = rs.getObject(3);
+ if (jobId == null || jobId.trim().length() == 0) continue;
+ if (!firstSpecial) specialJson.append(",");
+ firstSpecial = false;
+ specialJson.append("{\"id\":\"").append(jsString(jobId.trim())).append("\"");
+ specialJson.append(",\"name\":\"").append(jsString(caption == null || caption.trim().length() == 0 ? jobId.trim() : caption.trim())).append("\"");
+ specialJson.append(",\"description\":\"\"");
+ specialJson.append(",\"sourceDatabase\":\"\"");
+ specialJson.append(",\"jobType\":\"special\"");
+ specialJson.append(",\"fromDatabase\":true");
+ if (sidObj != null) specialJson.append(",\"systeminfoId\":").append(String.valueOf(sidObj));
+ specialJson.append("}");
+ }
+ } catch (Exception e) {
+ specialJson = new StringBuilder("[]");
+ } finally {
+ try { if (rs != null) rs.close(); } catch (Exception e) { }
+ try { if (ps != null) ps.close(); } catch (Exception e) { }
+ }
+ if (specialJson.charAt(specialJson.length() - 1) != ']') specialJson.append("]");
+ dbSpecialJobsJson = specialJson.toString();
+ }
} catch (Exception e) {
dbDiagnosticMessage = e.getMessage();
dbInfoHtml = "
Direkte DB-Prüfung " + tag("nicht verfügbar", "warn") + " " + html(e.getMessage()) + " ";
@@ -567,6 +609,16 @@ body{background:#f5f7fa}
.code{font-family:Consolas,Monaco,"Courier New",monospace;font-size:.78rem;background:#eef2f6;border:1px solid #dfe5ec;border-radius:5px;padding:.1rem .35rem;color:#273647;word-break:break-all}
.action-cell{min-width:470px}
.action-row{display:flex;flex-wrap:wrap;gap:.4rem}
+.special-toggle-arrow{display:inline-block;width:.9rem;text-align:center;margin-right:.2rem;font-size:.82rem}
+.special-routines-row>td{padding:.15rem .75rem .9rem .75rem!important;border-top:0!important;background:#f8fafc}
+.special-routines-panel{border:1px solid #d9e5ef;border-left:4px solid #3c88b8;border-radius:8px;background:#fff;padding:.9rem 1rem;box-shadow:0 .25em .65em -.2em rgba(10,10,10,.08)}
+.special-routines-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:.65rem}
+.special-routines-list{display:grid;gap:.55rem}
+.special-routine-item{display:grid;grid-template-columns:minmax(240px,1.25fr) minmax(280px,1.75fr) auto;gap:1rem;align-items:center;padding:.7rem .8rem;border:1px solid #e7edf3;border-radius:7px;background:#fbfcfd}
+.special-routine-name{font-weight:700;margin-bottom:.2rem}
+.special-routine-description{font-size:.8rem;color:#697386;line-height:1.35}
+.special-routine-meta{font-size:.78rem;color:#697386;line-height:1.55}
+.special-routine-meta .code{margin-left:.25rem}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:1rem}
.panel-head h2{margin:0;font-size:1.15rem;font-weight:700}
.panel-body{padding:0}
@@ -586,7 +638,7 @@ pre.json{white-space:pre-wrap;word-break:break-word;background:#f2f5f8;border:1p
.message{margin-bottom:1rem}
.small,.muted{color:#697386}.small{font-size:.8rem;line-height:1.35}
.table td,.table th{vertical-align:top}
-@media(max-width:1150px){.details-grid,.kv,.plan-grid,.run-grid{grid-template-columns:1fr}.action-cell{min-width:320px}}
+@media(max-width:1150px){.details-grid,.kv,.plan-grid,.run-grid,.special-routine-item{grid-template-columns:1fr}.action-cell{min-width:320px}}
.diagnostics-panel{border-left:5px solid #3c88b8}
.diagnostics-panel .panel-head{margin-bottom:.75rem}
@@ -630,7 +682,7 @@ pre.json{white-space:pre-wrap;word-break:break-word;background:#f2f5f8;border:1p
-Alle Module Installiert Unload & Update möglich Unload möglich Update möglich DB verbunden DB nicht verbunden Aktualisieren Diagnose
+Alle Module Installiert Unload & Update möglich Unload möglich Update möglich Sonderladeroutinen vorhanden DB verbunden DB nicht verbunden Module neu einlesen Diagnose
Systemdiagnose Diagnose aktualisieren Schließen
@@ -678,8 +730,13 @@ find <%= html(servletRealPath == null ? "/home/superx/webapps/superx" : servletR
Modul Status Versionen Letztes Update Datenquelle DB-Verbindung Aktionen Module werden geladen...
+
+ Nicht zugeordnete Sonderladeroutinen 0
+ Diese Sonderladeroutinen sind in der ETL-Jobdatenbank vorhanden, konnten aber keinem aktuell gelieferten Modul aus der Komponentenliste zugeordnet werden.
+
+
-Aktueller Lauf Status aktualisieren Stoppen
JobExecutionId
-
Job
-
Status
Kein aktiver Lauf bekannt.
Fortschritt
+Aktueller Lauf Status aktualisieren Stoppen
JobExecutionId
-
Job
-
Status
Kein aktiver Lauf bekannt.
Fortschritt
Log-Ausgabe Noch kein Log geladen. Log laden Log leeren
Noch kein Lauf gestartet.
diff --git a/superx/edit/kern/sx_repository_list.jsp b/superx/edit/kern/sx_repository_list.jsp
index e2225a3f..9e455a58 100644
--- a/superx/edit/kern/sx_repository_list.jsp
+++ b/superx/edit/kern/sx_repository_list.jsp
@@ -1,7 +1,7 @@
<%@ taglib uri="/WEB-INF/dbforms.tld" prefix="db" %>
<%@page pageEncoding="utf-8" contentType="text/html; charset=UTF-8" %>
-
+
@@ -49,12 +49,10 @@ if(mandantobject != null)
//der superx-Default-Mandant ist bei dbforms ein Leerstring
if(mandantenid.equals("default"))
mandantenid="";
-String db_form_name="sx_repository";
+String db_form_name="sx_repository_list";
String erlaubt="0";
%>
-
<%@ include file="/edit/check_authentication.inc" %>
-
<%
if(erlaubt.equals("0"))
{
@@ -74,7 +72,6 @@ keyfieldsused=kf.toString();
-
<% if(!mandantenid.equals("default") && !mandantenid.equals(""))
out.println("Mandant: " + mandantenid +" ");
%>
@@ -90,6 +87,16 @@ if(sachgebiete_id != null && !sachgebiete_id.equals("null")){
filter +="sachgebiete_id="+sachgebiete_id;
}
%>
+
+<%
+String art = request.getParameter("art");
+if(art != null && !art.equals("null")){
+ if (!filter.isEmpty()) {
+ filter += ",";
+ }
+ filter +=",art="+art;
+}
+%>