App-Link #1031 Webservice/REST-API per ODBC direkt zu nutzen

Z.B. mit Office am Desktop 
und man nutzt Webservices als Datenquelle in Abfragen und Berichten.

Sync oder XML-Transfer sind vielfach nützlich,
aber Direktzugriff per Abfrage/View/Pivot/Chart können aktuelle Daten liefern.





Es gibt Anbieter für ODBC-Treiber und auch Reporttools,
die direkt Webservices nutzen können.

s.a.

--> https://www.google.com/search?q=odbc+http+rest


/public/office_direktzugriff_auf_webservice_per_ODBC.png


- 1 -    (TxtDoc-service2026-07-17.html)


App-Link #1054 Web als Microservice Architektur mit uneinheitlicher API

Es gibt endlos viele Möglichkeiten,
wie der ausführbare Code aufgeteilt sein kann.
- php/aspx/jsp/class/jar/war/js/ts/sql
- html-Seite
- DLL/.so oder statisch gelinkt
- Runtime mit konfigurierbarer Sicherheit (UB, Platten, Netzwerk, Umgebungszugriff ...)
- ein Server/Container mit isolierten Teilanwendungen oder ein Server/Container für eine Anw.
- ...

- 2 -    (TxtDoc-service2026-07-17.html)


AReport_Web #1034 HTML-Ansicht mit Webservice als Datenquelle

z.B. für Datenquellen, 
für die man eine URL hat
und als Tabelle anzeigen möchte.
( Cross-Origin ist hier zu beachten )

KI-Lookups werden auch über diesen Weg genutzt.



z.B. "Tabelle"

--> http://kantn.jobst-software.net:8080/aussendienst4/preferences.html


/public/einstellungen_tabelle_html.png

man kann mit wenig HTML / TypeScript/JavaScript auskommen,

wenn Cross-Origin und Authentifizierung bereits gelöst sind.



<html>
<head>
<title>Einstellungen - Tabelle</title>

<style>
td {
border: solid 1px darkGray; min-width: 2rem; padding: 0.2rem;
}
</style>

<script type="module" >
"use strict";

window.addEventListener( "load", function() {
const select_url = getEinstellungen_Tabelle_Select_url();
fetch( select_url, { credentials: 'include' })
.then( (response) => response.text() )
.then( (text) => {
const table_ele = document.getElementById("d-print-table");
const json_doc = JSON.parse( text);
fill_table( document, table_ele, json_doc);
})
.catch( function( exc) {
alert( "fetch failed (" + exc + ")");
});
});


function fill_table( html_doc, table_ele, json_doc) {
const tag_names = [ "th", "td" ];
for( let tag_name_i=0; tag_name_i < tag_names.length; tag_name_i++ ) {
let tag_name = tag_names[ tag_name_i];
let trs = json_doc;
for( let tr_i=0; tr_i < ( tag_name == "th" && trs.length >= 1 ? 1 : trs.length ); tr_i++ ) {
let tr = trs[ tr_i];

let tr_ele = html_doc.createElement( "tr");
table_ele.appendChild( tr_ele);

let tds = tr;
Object.entries( tds).forEach( ( [fdName, fdValue]) => {
let td_ele = html_doc.createElement( tag_name);
tr_ele.appendChild( td_ele);

td_ele.innerText = ( tag_name == "th" ? fdName : fdValue );
});
}
}
}


function getEinstellungen_Tabelle_Select_url() {
const select = getEinstellungen_Tabelle_Select();
const select_sql = select[ "sql"];
const json_parameters = JSON.stringify( select[ "param"]);

const select_url = "/MywebDb3Servlet" + "?sql=" + encodeURIComponent( select_sql) + "&parameters=" + encodeURIComponent( json_parameters);
return select_url;
}


function getEinstellungen_Tabelle_Select() {
const select_sql = "select _id, PREFERENCE_KEY, PREFERENCE_VALUE from Preferences order by _id";
return { sql: select_sql, param: [] };
}
</script>
</head>

<body>



<h1>Einstellungen - Tabelle</h1>


<table id="d-print-table" >


</table>


</body>
</html>
- 3 -    (TxtDoc-service2026-07-17.html)


App-Link #1029 XML-Validierung vs. Webservice

Wenn die XML-Validierung "valid" ergibt
und der Server ein Dokument trotzdem nicht annimmt.

Wie kann das denn sein ?
z.B.
- die Artikelnummer, Kundennummer, ... kennt der Server nicht (mehr)


Für was auf der Client-Seite validieren
und nicht gleich den Server fragen,
ob er ein Dokument annehmen würde ?

Daher ist "well-formed" heute meist "gut genug".

/public/gjs_htmlxml.png


- 4 -    (TxtDoc-service2026-07-17.html)


AReport_Web #1080 Office-Datennutzung mit Webservice als Datenquelle

z.B. für Datenquellen, 
für die man eine URL hat
und als Abfrage oder im Tabellenkalkulationsprogramm nutzen möchte.

Die Arbeit übernimmt hier die SQL
und das Tabellenkalkulationsprogramm braucht nativen Zugriff auf die SQL-Datenbank (z.B. per SDBC auf PostgreSQL).



z.B. "Tabelle"

--> http://kantn.jobst-software.net:8080/aussendienst4/preferences.html


/public/einstellungen_tabelle_office.png

CREATE FUNCTION frepjs2000.ws_preferences() RETURNS TABLE ( PREFERENCE_KEY text, PREFERENCE_VALUE text) SECURITY DEFINER AS $$

BEGIN
create TEMPORARY table temp_tab ( f1 text) on commit drop;

COPY temp_tab
FROM PROGRAM 'curl "http://kantn.jobst-software.net:8080/MywebDb3Servlet?sql=select%20_id%2C%20PREFERENCE_KEY%2C%20PREFERENCE_VALUE%20from%20Preferences%20order%20by%20_id&parameters=%5B%5D" '
;

return QUERY
select
json_array_elements(f1::json)->>'PREFERENCE_KEY' as PREFERENCE_KEY,
json_array_elements(f1::json)->>'PREFERENCE_VALUE' as PREFERENCE_VALUE
from temp_tab
;
END;
$$ LANGUAGE plpgsql;
- 5 -    (TxtDoc-service2026-07-17.html)


App-Link #1075 Office Verknüpfung auf HTML/CSV-Webquellen bzw. Webservices

s.a.
----
Einfügen externer Daten in Tabellen (Web-Abfrage)

--> https://help.libreoffice.org/26.2/de/text/scalc/01/04090000.html?System=UNIX&DbPAR=CALC&HID=modules/scalc/ui/externaldata/





z.B.

/public/Office_Verknuepfung_mit_externen_Daten.png


--> /frepjs2000/Fr_Artikel_Pflege?art_search_text=O-Bestand


- 6 -    (TxtDoc-service2026-07-17.html)


App-Detail #1025 HTML-Anwendungen ohne Web-Server -- {2}

Es gibt Seiten, die haben alle Daten dabei.

Oder ein Server bzw. Webservice eines Dritten,
stellt die Daten zur Verfügung.

Dann könnte eine HTML-Datei reichen,
um per
- TypeScript/JavaScript HTML CSS
die Daten zu nutzen.

/public/js_es6_app_stempelkarte.png


--> http://kantn.jobst-software.net:8080/aussendienst4/stempelkarte4.html

HTML kann einfach sein (<h3>Überschrift</h3> <p>Text</p> <h3>...</h3> <p>...)

und samt
- CSS
- JavaScript
- ohne Zusatzsoftware
anzeig- und druckbar per Browser.
( z.B. kann man mit einer HTML-Datei eine kleine App umsetzen )


HTML funktioniert mit
- HTTP-Servern
- Dateiservern
- SQL (die den Datentyp XML kennt)
- ...
und kann vom jeweiligen Berechtigungssystem profitieren.

HTML kann man auch so gestalten, dass es maschinenlesbar (XML) ist.
- 7 -    (TxtDoc-service2026-07-17.html)


ADialog_Auftr #1057 EK

<dialog id="dialog_wart_details">
<form> <input name="json_input_ele_no" readonly type="hidden" />
<label>W_Art</label> <input name="W_Art" list="WART_TYP_LIST" />
<label>Intervall_Knz</label> <input name="Intervall_Knz" list="INTERVALL_KNZ_LIST" />
<label>Intervall_Cnt</label> <input name="Intervall_Cnt" type="number" min="0" max="3" step="1" />
<label>W_Text</label> <input name="W_Text" />
</form>

<button name="btnOK" >OK</button>
<button name="btnCancel" >abbrechen</button>
</dialog>

<datalist id="WART_TYP_LIST">
<option value='Wartung'>LF - Service/Wartung</option>
</datalist>

<datalist id="INTERVALL_KNZ_LIST">
<option value='taegl' >taegl</option>
<option value='woechentl' >woechentl</option>
<option value='monatl' >monatl</option>
<option value='jaehrl' >jaehrl</option>
</datalist>


<dialog id="dialog_apos_details">
<form> <input name="json_input_ele_no" readonly type="hidden" />
<label>Pos_Bemerkung</label> <input name="Pos_Bemerkung" />
</form>

<button name="btnOK" >OK</button>
<button name="btnCancel" >abbrechen</button>
</dialog>

- 8 -    (TxtDoc-service2026-07-17.html)


ADialog_Auftr #1056 VK

<dialog id="dialog_wart_details">
<form> <input name="json_input_ele_no" readonly type="hidden" />
<label>W_Art</label> <input name="W_Art" list="WART_TYP_LIST" />
<label>Intervall_Knz</label> <input name="Intervall_Knz" list="INTERVALL_KNZ_LIST" />
<label>Intervall_Cnt</label> <input name="Intervall_Cnt" type="number" min="0" max="3" step="1" />
<label>W_Text</label> <input name="W_Text" />
</form>

<button name="btnOK" >OK</button>
<button name="btnCancel" >abbrechen</button>
</dialog>

<datalist id="WART_TYP_LIST">
<option value='Wiedervorlage'>AN - Wiedervorlage</option>
<option value='Wartung'>LF - Service/Wartung</option>
<option value='Abo'>RE - Abo</option>
</datalist>

<datalist id="INTERVALL_KNZ_LIST">
<option value='taegl' >taegl</option>
<option value='woechentl' >woechentl</option>
<option value='monatl' >monatl</option>
<option value='jaehrl' >jaehrl</option>
</datalist>


<dialog id="dialog_apos_details">
<form> <input name="json_input_ele_no" readonly type="hidden" />
<label>Status</label> <input name="Status" list="APOS_STATUS_LIST" />
<label>W_Art</label> <input name="W_Art" list="APOS_WART_TYP_LIST" />
<label>Lager</label> <input name="Lager" list="APOS_STORAGELOCATION_LIST" />
<hr />
<label>EK_Ref</label> <input name="EK_Ref" />
</form>

<button name="btnOK" >OK</button>
<button name="btnCancel" >abbrechen</button>
</dialog>

<datalist id="APOS_STATUS_LIST">
<option value='begonnen' >begonnen</option>
<option value='beendet' >beendet</option>
<option value='abgenommen' >abgenommen</option>
</datalist>

<datalist id="APOS_WART_TYP_LIST">
<option value='Wartung'>LF - Service/Wartung</option>
</datalist>

<datalist id="APOS_STORAGELOCATION_LIST">
<option value='aLF'>aLF - Zug auf Lagerort Auftragslieferung</option>
</datalist>

- 9 -    (TxtDoc-service2026-07-17.html)


App-Link #1040 Wenn die GUI nicht mehr weiterhilft, dann ev. automatisieren

Man hat viele Daten.

Trotzdem fehlt fast immer Irgendwas.

Entweder,
- man wird ungenauer
- oder holt sich die fehlenden Teile per KI & Co



In der klassischen IT braucht man Ordnungsbegriffe,
wie IBAN, EAN, Kunden-, Artikel-, Kostenstellennummer ...

Diese Genauigkeit ist nicht immer zur Hand,
sind aber meist für eine sinnvolle Automatisierung notwendig.


Klassische Datenbanken tun sich schwer mit diesen Ungenauigkeiten,
darum kann es Sinn machen, mit LLMs Lücken zu schliessen.

Diese werden dynamischer und u.a. durch die Unterstützung von
Dokumentdatentypen der Weg einfacher.
( z.B. die Lesbarkeit von JSON schlägt sich für Mensch und Maschine(Datenbank/Browser) nicht schlecht )

/public/json_beispiel.png

SQL war/ist eine Erleichterung um Daten abzufragen.

Eine Möglichkeit umgangssprachlich formulierte Abfragen abzusetzen,
würde Benutzern noch mehr helfen.

Z.B.:
-----
Selektiere postleitzahlen von im ERP gespeicherten Orten
mit dem Ortsnamen wien

Oder:
-----
Selektiere postleitzahlen von im open-...-data.net angebotenen Orten
mit dem Ortsnamen wien
( z.B. per Linked-Server - Linked/Foreign-Tables auf Webservices )
- 10 -    (TxtDoc-service2026-07-17.html)

INTRANET