Zum Hauptinhalt springen

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 username und secret des 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 mit 401 und fordert zur Anmeldung auf; falsche oder gesperrte Zugangsdaten werden mit 403 abgewiesen.
  • 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.
Secret rotieren

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​

URLhttps://app.leitstand.eu/v1/feeds/servicenow/apps (die genaue URL zeigt die Karte unter Integrationen)
MethodeGET
AnmeldungHTTP Basic Auth: username und secret eines technischen Users mit Verwendung „Nur Lese-Feed“
FormatJSON (Standard) oder CSV mit ?format=csv
Gelöschte Appswerden 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​

SpalteInhalt
leitstand_idEindeutige, dauerhafte ID der Applikation – der Schlüssel für die Zuordnung im Fremdsystem
nameName
descriptionBeschreibung
statusLeitstand-Status: active, planned, evaluating, deprecated
operational_statusServiceNow-Betriebsstatus: 1 = Operational (aktiv, abgekündigt), 7 = Pipeline (geplant, in Evaluierung), 6 = Retired (gelöscht)
criticalityLeitstand-Kritikalität: critical, high, medium, low
business_criticalityServiceNow-Schreibweise: 1 - most critical … 4 - not critical
business_owner_emailE-Mail der fachlich verantwortlichen Person
it_owner_emailE-Mail der betrieblich verantwortlichen Person
eol_dateEnd-of-Life-Datum (JJJJ-MM-TT) oder leer
org_unitName der Organisationseinheit
leitstand_urlLink auf das Factsheet der Applikation in Leitstand
updated_atZeitpunkt der letzten Änderung
deletedtrue, 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.

Zuerst in einer Testinstanz

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

FeldWert
NameLeitstand – Applikationen
Import set table labelLeitstand App Import (Tabelle u_leitstand_app_import wird angelegt)
TypeFile
FormatJSON
Path for each row//records
File retrieval methodHTTPS
Serverapp.leitstand.eu
File path/v1/feeds/servicenow/apps
Username / Passwordusername / 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):

QuelleZielHinweis
u_leitstand_idcorrelation_idCoalesce = true – darüber erkennt ServiceNow „dieselbe“ Applikation
u_namename
u_descriptionshort_description
u_operational_statusoperational_status
u_business_criticalitybusiness_criticality
u_business_owner_emailowned_byper Feldskript, siehe unten
u_it_owner_emailmanaged_byper 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.
Pflege nur in Leitstand absichern

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.

WerkzeugSo geht's
Excel / Power BIDaten 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-ToolsImport aus einer Datei- oder REST-Quelle (JSON oder CSV) mit Basic Auth einrichten; leitstand_id als eindeutigen Schlüssel verwenden.
Eigene Skriptecurl -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.