Fremdsysteme mit Daten aus Leitstand versorgen
Viele Unternehmen pflegen Applikationen zusätzlich in einem Service-Management- oder CMDB-Werkzeug – etwa ServiceNow, Jira Service Management, TOPdesk oder in Auswertungen mit Excel/Power BI. Damit du Applikationen und Verantwortliche nur noch in Leitstand pflegen musst, stellt Leitstand die Daten als Lese-Feed bereit: Das Fremdsystem holt sie regelmäßig selbst ab.
Leitstand (führend) Fremdsystem
┌───────────────────────────┐ HTTPS + Basic Auth ┌──────────────────────────┐
│ Feed /v1/feeds/… │ ◄───────────────────── │ geplanter Abruf │
│ (nur Daten deines Mandanten)│ ─── JSON / CSV ────► │ (z. B. stündlich) │
└───────────────────────────┘ │ → Zuordnung der Felder │
└──────────────────────────┘
Vorteile dieses Wegs:
- Nichts zu installieren – das Fremdsystem nutzt seine Bordmittel zum Abholen einer Datei per HTTPS.
- Kein Zugriff von außen auf dein Fremdsystem – Leitstand schreibt nirgendwo hin, es wird nur abgeholt.
- Selbstheilend – jeder Abruf enthält den vollständigen Stand; Abweichungen im Fremdsystem werden beim nächsten Abruf überschrieben.
Voraussetzung: ein technischer User
Der Abruf läuft mit einem technischen User. Lege dafür unter System → Integrationen einen eigenen technischen User an (z. B. Name „ServiceNow-Feed“) und wähle als Verwendung „Nur Lese-Feed“. Verwende ihn nur für dieses eine Fremdsystem – so kannst du den Zugang jederzeit rotieren oder deaktivieren, ohne andere Integrationen zu berühren.
Ein solcher User darf ausschließlich Feeds lesen: Mit seinen Zugangsdaten lässt sich die übrige Leitstand-API nicht nutzen. Umgekehrt funktionieren normale technische User (Verwendung „API-Integration“) am Feed nicht. Gelangen die im Fremdsystem hinterlegten Zugangsdaten in falsche Hände, sind sie also auf den Lesezugriff des Feeds beschränkt.
Sicherheit: Anmeldung und Mandantentrennung
Der Feed enthält Kundendaten und ist deshalb nie ohne Anmeldung erreichbar.
- Anmeldung bei jedem Abruf: Das Fremdsystem schickt
usernameundsecretdes technischen Users per HTTP Basic Auth mit (nur über HTTPS). Leitstand prüft die Zugangsdaten wie beim normalen Login – und zwar bevor die Anfrage überhaupt verarbeitet wird. Ohne Anmeldung antwortet der Feed mit401und fordert zur Anmeldung auf; falsche oder gesperrte Zugangsdaten werden mit403abgewiesen. - Nur Feed-User: Persönliche Logins von Mitarbeitenden und normale technische
User funktionieren am Feed bewusst nicht (
403). - Sofort wirksam: Deaktivierst du den technischen User oder rotierst sein Secret, wirkt das beim nächsten Abruf.
- Mandantentrennung: Jeder technische User gehört genau zu deinem Mandanten. Der Feed liefert ausschließlich dessen Daten. Im Abruf lässt sich kein Mandant angeben oder wechseln – wer Daten eines anderen Mandanten sehen wollte, bräuchte die Zugangsdaten eines technischen Users dieses Mandanten.
- Nur lesen: Feeds sind reine Lese-Endpunkte. Über sie lässt sich nichts ändern.
- Nachvollziehbar: Jeder erfolgreiche Abruf wird protokolliert. Unter System → Integrationen siehst du in der Karte „ServiceNow-Anbindung“, wann zuletzt abgerufen wurde, wie viele Applikationen übertragen wurden und mit welchem technischen User.
Rotierst du das Secret des technischen Users, musst du das neue Secret im
Fremdsystem hinterlegen – bis dahin schlagen die Abrufe mit 401 fehl.
Der Applikations-Feed
| URL | https://app.leitstand.eu/v1/feeds/servicenow/apps (die genaue URL zeigt die Karte unter Integrationen) |
| Methode | GET |
| Anmeldung | HTTP Basic Auth: username und secret eines technischen Users mit Verwendung „Nur Lese-Feed“ |
| Format | JSON (Standard) oder CSV mit ?format=csv |
| Gelöschte Apps | werden als „gelöscht“ markierte Zeilen mitgeliefert (Standard: Löschungen der letzten 90 Tage, einstellbar mit ?deleted_days=0 bis 365) |
Der Feed heißt „servicenow“, weil die Werte für Status und Kritikalität schon in ServiceNow-Schreibweise mitkommen. Er eignet sich aber genauso für jedes andere Werkzeug – die Leitstand-Originalwerte sind ebenfalls enthalten.
Spalten
| Spalte | Inhalt |
|---|---|
leitstand_id | Eindeutige, dauerhafte ID der Applikation – der Schlüssel für die Zuordnung im Fremdsystem |
name | Name |
description | Beschreibung |
status | Leitstand-Status: active, planned, evaluating, deprecated |
operational_status | ServiceNow-Betriebsstatus: 1 = Operational (aktiv, abgekündigt), 7 = Pipeline (geplant, in Evaluierung), 6 = Retired (gelöscht) |
criticality | Leitstand-Kritikalität: critical, high, medium, low |
business_criticality | ServiceNow-Schreibweise: 1 - most critical … 4 - not critical |
business_owner_email | E-Mail der fachlich verantwortlichen Person |
it_owner_email | E-Mail der betrieblich verantwortlichen Person |
eol_date | End-of-Life-Datum (JJJJ-MM-TT) oder leer |
org_unit | Name der Organisationseinheit |
leitstand_url | Link auf das Factsheet der Applikation in Leitstand |
updated_at | Zeitpunkt der letzten Änderung |
deleted | true, wenn die Applikation in Leitstand gelöscht wurde – dann sind außer ID, Name und Status alle Felder leer |
Spalten werden künftig höchstens ergänzt, nie umbenannt – deine Zuordnung im Fremdsystem bleibt also stabil.
Beispiel (JSON)
{
"generated_at": "2026-10-11T10:00:00+00:00",
"count": 2,
"records": [
{
"leitstand_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "Webshop",
"description": "B2B- und B2C-Onlineshop",
"status": "active",
"operational_status": "1",
"criticality": "critical",
"business_criticality": "1 - most critical",
"business_owner_email": "vertrieb@beispiel.de",
"it_owner_email": "it-betrieb@beispiel.de",
"eol_date": "",
"org_unit": "Vertrieb",
"leitstand_url": "https://app.leitstand.eu/#/apps/3fa85f64-5717-4562-b3fc-2c963f66afa6",
"updated_at": "2026-10-01T10:00:00+00:00",
"deleted": false
}
]
}
Schnell testen
curl -u "<username>:<secret>" https://app.leitstand.eu/v1/feeds/servicenow/apps
curl -u "<username>:<secret>" "https://app.leitstand.eu/v1/feeds/servicenow/apps?format=csv"
Einrichtung in ServiceNow
Die Einrichtung ist reine Konfiguration – kein Skript-Paket, keine
Zusatzlizenz (IntegrationHub wird nicht benötigt). Ziel ist die Tabelle
Business Application (cmdb_ci_business_app). Die Schritte erledigt ein
ServiceNow-Administrator.
Richte den Import zuerst in einer Test- oder Entwicklungsinstanz ein und prüfe das Ergebnis, bevor du ihn in der Produktion aktivierst. Feldnamen und Auswahlwerte können je nach ServiceNow-Version und CMDB-Konfiguration abweichen.
1. Data Source anlegen
System Import Sets → Administration → Data Sources → New
| Feld | Wert |
|---|---|
| Name | Leitstand – Applikationen |
| Import set table label | Leitstand App Import (Tabelle u_leitstand_app_import wird angelegt) |
| Type | File |
| Format | JSON |
| Path for each row | //records |
| File retrieval method | HTTPS |
| Server | app.leitstand.eu |
| File path | /v1/feeds/servicenow/apps |
| Username / Password | username / secret des technischen Users („Nur Lese-Feed“) |
Mit „Test Load 20 Records“ legt ServiceNow die Spalten der Staging-Tabelle an
(u_leitstand_id, u_name, u_business_owner_email …).
2. Transform Map anlegen
System Import Sets → Administration → Transform Maps → New: Quelle
u_leitstand_app_import, Ziel cmdb_ci_business_app.
Feldzuordnungen (Field Maps):
| Quelle | Ziel | Hinweis |
|---|---|---|
u_leitstand_id | correlation_id | Coalesce = true – darüber erkennt ServiceNow „dieselbe“ Applikation |
u_name | name | |
u_description | short_description | |
u_operational_status | operational_status | |
u_business_criticality | business_criticality | |
u_business_owner_email | owned_by | per Feldskript, siehe unten |
u_it_owner_email | managed_by | per Feldskript, siehe unten |
Feldskript für Verantwortliche (für owned_by; für managed_by analog mit
u_it_owner_email): ordnet die E-Mail einem ServiceNow-Benutzer zu und lässt das
Feld unverändert, wenn es keinen passenden Benutzer gibt.
answer = (function transformEntry(source) {
var email = source.u_business_owner_email + '';
if (!email) return target.owned_by;
var user = new GlideRecord('sys_user');
user.addQuery('email', email);
user.addActiveQuery();
user.setLimit(1);
user.query();
if (user.next()) return user.getUniqueValue();
log.warn('Leitstand: kein aktiver Benutzer mit E-Mail ' + email);
return target.owned_by;
})(source);
onBefore-Skript (Transform Map → Transform Scripts → onBefore): verknüpft
beim ersten Lauf bestehende Business Applications über den Namen und setzt in
Leitstand gelöschte Applikationen auf „Retired“, statt sie anzulegen oder zu
überschreiben.
(function runTransformScript(source, map, log, target) {
var id = source.u_leitstand_id + '';
// Gelöscht in Leitstand → vorhandenen CI auf "Retired" setzen, sonst nichts tun
if (source.u_deleted + '' == 'true') {
var retired = new GlideRecord('cmdb_ci_business_app');
if (retired.get('correlation_id', id)) {
retired.operational_status = 6;
retired.update();
}
ignore = true;
return;
}
// Erster Abgleich: noch nicht verknüpften CI mit eindeutigem Namen übernehmen
var linked = new GlideRecord('cmdb_ci_business_app');
if (!linked.get('correlation_id', id)) {
var byName = new GlideRecord('cmdb_ci_business_app');
byName.addQuery('name', source.u_name + '');
byName.addNullQuery('correlation_id');
byName.query();
if (byName.getRowCount() == 1 && byName.next()) {
byName.correlation_id = id;
byName.update();
}
}
})(source, map, log, target);
3. Regelmäßigen Abruf einrichten
System Import Sets → Administration → Scheduled Data Imports → New: Data Source
Leitstand – Applikationen, Run z. B. Periodically alle 1 Stunde. Mit
„Execute Now“ startest du den ersten Lauf.
4. Prüfen
- In ServiceNow: Import Set Runs zeigt je Zeile, ob angelegt, aktualisiert oder übersprungen wurde.
- In Leitstand: Die Karte „ServiceNow-Anbindung“ unter System → Integrationen zeigt den letzten Abruf.
Damit niemand die übertragenen Felder versehentlich in ServiceNow ändert, kann
der ServiceNow-Administrator sie für Benutzer schreibschützen (z. B. per UI
Policy auf cmdb_ci_business_app). Änderungen, die trotzdem passieren,
überschreibt der nächste Abruf.
Andere Werkzeuge
Jedes Werkzeug, das eine Datei per HTTPS mit Basic Auth abholen kann, lässt sich genauso anbinden – die Schritte sind immer: technischer User mit Verwendung „Nur Lese-Feed“ anlegen → Feed-URL und Zugangsdaten hinterlegen → Spalten zuordnen → Abruf planen.
| Werkzeug | So geht's |
|---|---|
| Excel / Power BI | Daten abrufen → Aus dem Web, Feed-URL mit ?format=csv, Anmeldung „Standard/Basic“ mit username und secret. Aktualisieren lädt den aktuellen Stand. |
| Andere Service-Management-/CMDB-Tools | Import aus einer Datei- oder REST-Quelle (JSON oder CSV) mit Basic Auth einrichten; leitstand_id als eindeutigen Schlüssel verwenden. |
| Eigene Skripte | curl -u oder jede HTTP-Bibliothek; siehe Die API nutzen für alle weiteren Endpunkte. |
Brauchst du andere Daten als Applikationen – etwa Schnittstellen oder Dienstleister – nutzt du die normale Leitstand-API mit Token.
Häufige Fragen
Was passiert, wenn eine verantwortliche Person in ServiceNow nicht existiert? Das Feld bleibt in ServiceNow unverändert, im Import-Protokoll erscheint ein Hinweis. Lege den Benutzer in ServiceNow an oder korrigiere die E-Mail in Leitstand – der nächste Abruf übernimmt dann die Zuordnung.
Werden Applikationen in ServiceNow gelöscht, wenn ich sie in Leitstand lösche? Nein. Sie werden auf „Retired“ gesetzt, damit Tickets und Historie erhalten bleiben.
Wie schnell kommen Änderungen an? So schnell, wie das Fremdsystem abruft – bei stündlichem Abruf also spätestens nach einer Stunde.
Der Abruf liefert 403 – was ist falsch?
Meist ist es eines von drei Dingen: Benutzername oder Secret stimmen nicht (z. B.
nach einer Rotation), der technische User ist deaktiviert, oder er wurde mit der
Verwendung „API-Integration“ statt „Nur Lese-Feed“ angelegt. Die Verwendung lässt
sich nicht nachträglich ändern – lege in diesem Fall einen neuen technischen User
an.
Kann der Feed auch Daten in Leitstand schreiben? Nein, Feeds sind reine Lese-Endpunkte. Gepflegt wird ausschließlich in Leitstand.