Inhaltsverzeichnis
Direkte API-Anbindung
Hinweis: Um die SmartProcess API nutzen zu können, ist es erforderlich in den Einstellungen das API-Profil zu konfigurieren.. Als Beispiel für sämtliche API-Aufrufe wird in dieser Dokumentation die f…
Um die SmartProcess API nutzen zu können, ist es erforderlich in den Einstellungen das API-Profil zu konfigurieren.
Allgemeines
Die SmartProcess REST/ODATA API folgt dem OData Standard: https://www.odata.org/. OData ist ein HTTP-basiertes Protokoll.
Die verschiedenen Operationen, die Sie auf ihre Daten anwenden können, werden durch verschiedene HTTP-Methoden implementiert. Nicht alle Operationen werden von allen Daten unterstützt.
Operation | HTTP-Methode |
Lesen | GET |
Anlegen | POST |
Ändern | PATCH / PUT |
Löschen | DELETE |
Authentifizierung
Um die API verwenden zu können, müssen Sie sich mit einem gültigen SmartProcess Benutzer über das HTTP BASIC-AUTH Verfahren anmelden. Dies ist nur für Benutzer mit einer Designer-Lizenz möglich, für die in SmartProcess ein API-Profil erstellt wurde.
Die Anmeldung erfolgt mit dem SmartProcess-Benutzernamen und dem zugeteilten API-Schlüssel.
Testen der Authentifizierung
Um die Authentifizierung zu testen, können Sie folgenden Request verwenden. Ist die Authentifizierung erfolgreich, dann wird ihr Benutzername im JSON-Format ausgegeben.
Request | GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/UserAuthTest |
Antwort | {"username":"admin"} |
Service-Dokument und Metadaten
Eine Beschreibung der API kann über folgende URLs abgerufen werden.
GET https://SUBDOMAIN.smartprocess.com/CwaData.svc
GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/$metadata
Objekte in OData
Entitäten (eigenständige Objekte) | Auf ihnen können alle Operationen ausgeführt werden, sie bestehen wiederum aus komplexen und primitiven Eigenschaften. |
Komplexe Eigenschaften (keine eigenständigen Objekte) | Sie fassen mehrere primitive Eigenschaften zusammen. |
Primitive Eigenschaften | z.B. die ID oder das Erstelldatum. Sie sind von einem der Grunddatentypen (Zeichenkette, Wahrheitswert, Ganzzahl, Datum etc.) |
Content Type
Der Standard Content Type der Request-Antworten ist application/json. Die Ausgabe kann durch Anhängen von $format=<format> an die URL (bei GET Requests) geändert werden. Eine weitere Möglichkeit, das Ausgabeformat zu beeinflussen, ist das Setzen des Request Headers Accept.
Beispiel (URL) | GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/$metadata?$format=xml |
Beispiel (Request Header) | Accept: application/xml |
Es werden folgende Formate unterstützt:
Format | URL | Accept Header |
JSON | $format=json | application/json |
XML | $format=xml | application/xml |
Atom | $format=atom | application/atom |
URL encoding
Für den Zugriff auf Daten über einen Schlüssel, der nicht-URL-konforme Zeichen enthält, wird dieser encodiert.
Aus dem uncodierten Schlüssel „Name mit Leerzeichen“ wird so zum Beispiel der Schlüssel „Name%20mit%20Leerzeichen“.
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
- https://www.webreload.de/url-encoding/
Operation Lesen (GET)
Das Auslesen funktioniert für alle Entitäten (Katalog, Anhang, Vorgang) gleich und ist abhängig von der im Bereich API-Profil erklärten Konfiguration. Die Schlüssel, um einen einzelnen Eintrag auszulesen, werden dort ebenfalls eingestellt.
Für weitere Information, siehe Paging.
Alle Einträge einer Entität abrufen | GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/Artikelkatalog |
Einzelnen Eintrag abrufen (einzelner Schlüssel) | GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/Artikelkatalog(12) alternativ GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/Artikelkatalog(Id=12) |
Einzelnen Eintrag abrufen (mehrere Schlüssel) | Mehrere Schlüssel werden durch Komma getrennt GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/Artikelkatalog(Sprache='Deutsch',Name='bestimmter Artikel') |
Navigation
Zwischen Entitäten lässt sich navigieren. Die Metadaten dokumentieren, welche Navigation erlaubt ist. Die Navigation zwischen einer Vorgangsart und dem Anhang sowie einem Katalog und dem Anhang ist immer möglich. Die Navigation zwischen einem Vorgang und einem Subvorgang muss erst in der Konfiguration eingeschaltet werden.
Beispiel einer Navigation
Die folgende URL gibt alle Subvorgänge aus, die zum Hauptvorgang mit der ID 12345 gehören:
GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/Hauptvorgang(12345)/Subvorgang
Query-Operationen
Folgende Query-Operationen werden unterstützt:
$orderby | Diese Option ermöglicht Sortierung. Wird sie nicht angegeben, werden die Schlüssel zur Sortierung verwendet. Wird keine Richtung angegeben, wird aufsteigend (asc) sortiert. Einige Felder können nicht zur Sortierung verwendet werden. Eine entsprechende Anfrage resultiert in einer Fehlerausgabe. - Die Daten eines Attachment - Das Gelöscht-Feld einer Feldgruppe - Der Betreff eines Vorgangs - Der Status eines Vorgangs - Die Priorität eines Vorgangs - Textfelder mit Auswahl Beispiel: GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/Vorgang?$orderby=Zuständig asc,Erstelldatum desc | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$select | Select bestimmt, welche Felder ausgegeben werden sollen, sodass unnötige Daten nicht übertragen werden müssen. Beispiel: GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/Vorgang?$select=Vorgangsnummer,Änderungsdatum,Zuständig | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$count | Diese Option kann auf true gesetzt werden, damit die Zahl der gefundenen Entitäten gemeinsam mit den Entitäten ausgegeben wird. Der Standardwert ist false. Format: $count=[true|false] Beispiel: GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/API_Workflow?$select=Bezeichnung,Gesamtsumme_in_EUR&$count=true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$filter | Die Filteroption bietet viele Möglichkeiten, die Suche auf gewünschte Werte einzuschränken. Einige Felder können nicht für Filterfunktionen verwendet werden. Eine entsprechende Anfrage resultiert in einer Fehlerausgabe. Beispiel: GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/Vorgang?$filter=Zuständig eq 'Jochen' and (Änderungsdatum ge 2024-09-15T00:00:00Z or Priorität eq ‚Hoch‘) Diese Abfrage sucht alle Vorgänge, für die der Nutzer Jochen zuständig ist und die seit dem 15.09. erstellt wurden oder eine hohe Priorität haben. Logische Operatoren, die unterstützt werden:
Arithmetische Operationen, die unterstützt werden:
Zeichenketten-Funktionen, die unterstützt werden:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$expand | Der Expand-Operator gibt Entitäten an, die ebenfalls ausgegeben werden sollen und ist für alle Entitäten verfügbar, zu denen navigiert werden kann. Beispiel: GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/Hauptvorgang(12345)?$expand=Untervorgang,Anhang Expand lässt sich mit den anderen Operatoren kombinieren, sodass besipielsweise die ausgegebenen Untervorgänge gefiltert werden können. Die inneren Operatoren werden in Klammern und mit Semikolon getrennt angegeben. Beispiel: GET https://SUBDOMAIN.smartprocess.com/CwaData.svc/Hauptvorgang(12345)?$expand=Untervorgang($filter=Priorität eq 'hoch';$expand=Aktivität($filter=Status eq 'Erledigt'),Anhang Diese Abfrage gibt den Vorgang der Art „Hauptvorgang“ mit der ID 12345 aus. Zusätzlich werden alle Vorgänge der Art „Untervorgang“ ausgegeben, die eine hohe Priorität haben. Von den Untervorgängen werden alle Vorgänge der Art „Aktivität“ mitgeliefert, die erledigt sind. Zu guter Letzt werden alle Anhänge zurückgegeben. |
Paging
Pro Anfrage kann nur eine begrenzte Anzahl an Daten ausgelesen werden, dabei liegt das Höchstlimit bei 500 Elementen auf einer Ebene.
Bei einer Beispielabfrage von
https://SUBDOMAIN.smartprocess.com/CwaData.svc/Hauptvorgang?$expand=Subvorgang
heißt das, es können maximal 500 Hauptvorgänge mit jeweils (!) maximal 500 Subvorgängen ausgelesen werden.
Die Seitengröße lässt sich steuern, indem man den Prefer-Header anpasst. Im Beispiel für eine Seitengröße von 3.
Prefer: odata.maxpagesize=3
Erreicht eine Anfrage das Seitenlimit, enthält sie außerdem die „@odata.nextLink“-Variable, die den Link zur nächsten Seite enthält.

Die $expand-, $format- und $select-Optionen werden übernommen, können aber noch angepasst werden. Außerdem wird ein $skiptoken-Parameter übergeben, anhand dessen die Zuordnung zur nächsten Seite ermöglicht wird. Dieser Parameter darf nicht verändert werden. Die gewünschte Seitenzahl kann ebenfalls bei jeder Anfrage geändert werden. Andere Query-Optionen wie $filter werden nicht berücksichtigt, weil sie bereits in der ersten Anfrage angewandt wurden.
Die IDs der zurückzugebenden Objekte werden bei der ersten Anfrage berechnet. Wenn zwischen der ersten und einer folgenden Abfrage Objekte angelegt oder geändert werden, wirkt sich das nicht mehr auf die Auswahl der zurückzugebenden Objekte aus.
Die Daten der Objekte wiederum werden anfragenaktuell ausgelesen.
Operation Erstellen (POST)
Das Erstellen von Entitäten ist abhängig von der im Bereich API-Profil erklärten Konfiguration. War das Erstellen erfolgreich, liefert der Server den Status 201 und die neu erstellte Entität zurück.
Eine beispielhafte Abfrage, um einen Vorgang mit einer Feldgruppe und einem Kontakt zu erstellen, wäre:
POST https://SUBDOMAIN.smartprocess.com/CwaData.svc/API_Workflow
Content-Type: application/json
Authorization: Basic {{apiUsername}} {{apiPassword}}
{
"Kontakt_Nr": "C1030",
"Kontaktperson": "Thomas Obermann",
"E_Mail": "email-adresse@cwa.de",
"Firma": "TTWW GmbH",
"Artikel": [
{
"Gelöscht": false,
"Anzahl_in_Stk": 3.0,
"Artikel_Bezeichnung": "Monitor",
"Artikel_Nr": "2001",
"Einzelpreis_in_EUR": 429.99
},
{
"Gelöscht": false,
"Anzahl_in_Stk": 3.0,
"Artikel_Bezeichnung": "Keyboard",
"Artikel_Nr": "0817",
"Einzelpreis_in_EUR": 8.15
}
],
"Anforderung___Norm": "ISO 9001:2015",
"Abschnitt": "1",
"Bezeichnung_Anforderung": "Anwendungsbereich",
"Bezeichnung": "Dies ist ein Test",
"Neuanlage_": "Ja",
"Bereich": "Option A",
"Grund": [
"Zwei",
"Drei"
],
"Verantwortlich": "Mustermann, Max",
"Teilbereich": "Geschäftsführung",
"Begründung": "Ja",
"Anzahl_Teile": 5.0,
"Datum_Eingang": "2024-12-19",
"Datum_und_Uhrzeit_Deadline": "2024-12-19T09:00:00+01:00",
"Kommentar": "Dies ist ein Kommentar",
"Ausführlicher_Kommentar": "<p style=\"font-family: Arial; font-size: 10pt;\"><span style=\"font-size: 12pt;\"><strong>Dies ist ein ausführlicher, formatierter Kommentar</strong></span></p>"
}
Deep insert
Es lassen sich direkt verknüpfte Entitäten (z.B. Untervorgänge, Anhänge) erstellen.
Eine beispielhafte Abfrage, um einen Vorgang mit einem Sub-Vorgang vom Typ "Maßnahme" zu erstellen, wäre:
POST https://SUBDOMAIN.smartprocess.com/CwaData.svc/API_Workflow
Content-Type: application/json
Authorization: Basic {{apiUsername}} {{apiPassword}}
{
"Kontakt_Nr": "C1030",
"Kontaktperson": "Thomas Obermann",
"E_Mail": "demo-e-mail@cwa.de",
...,
"Maßnahme":[
{
"Auslöser": "Sonstiges",
"Feststelldatum": "2024-12-19",
"Geplante_Maßnahme": "<p style=\"font-family: Arial; font-size: 10pt;\">Test der Maßnahme</p>",
"Termin": "2025-12-31",
"Titel_der_Maßnahme": "Test",
"Verantwortlich": "Mustermann, Max",
"Weitere_Maßnahme_erstellen_": "Nein"
}
]
}
Binding
Eine neue Entität kann mit bestehende Entitäten über @odata.bind verknüpft werden (z.B. wenn ein Sub-Vorgang oder eine Aktivität zu einem Hauptvorgang hinzugefügt werden soll).
Eine beispielhafte Abfrage, um einen neuen Sub-Vorgang vom Typ "Maßnahme" zu einem bestehenden Vorgang hinzuzufügen, wäre:
POST https://SUBDOMAIN.smartprocess.com/CwaData.svc/Maßnahme
Content-Type: application/json
Authorization: Basic {{apiUsername}} {{apiPassword}}
{
"API_Workflow@odata.bind": "API_Workflow('40413014')",
"Auslöser": "Sonstiges",
"Feststelldatum": "2024-12-19",
"Geplante_Maßnahme": "<p style=\"font-family: Arial; font-size: 10pt;\">Test der Maßnahme</p>",
"Termin": "2024-12-31",
"Titel_der_Maßnahme": "Test",
"Verantwortlich": "Mustermann, Max",
"Weitere_Maßnahme_erstellen_": "Nein"
}
Operation Verändern (PATCH / PUT)
Das Verändern ist dem Erstellen fast identisch, mit wenigen Unterschieden:
- Die URL muss einen Schlüssel für das Objekt enthalten, das geändert werden soll.
- Einige Felder lassen sich nach Erstellung nicht mehr verändern. Im Fall eines Änderungsversuchs wird ein Fehler ausgegeben.
Wenn ein Vorgang mit Feldgruppen geändert wird, gilt folgendes Vorgehen:
PATCH
- Feldgruppen, die mit einem Schlüssel eines Objekts im Request-Body übereinstimmen, werden überschrieben.
- Feldgruppen, die mit keinem Schlüssel übereinstimmen, werden beibehalten.
- Objekte im Request-Body, die mit keiner existierenden Feldgruppe übereinstimmen, werden neu angelegt.
- Um eine Feldgruppe zu löschen, gibt es das künstliche Feld „Gelöscht“. Indem dieses Feld (in der Konfiguration aktiviert und) auf true gesetzt wird, signalisiert man dem System, dass die Gruppe gelöscht werden soll.
- Wird im Request-Body „Feldgruppen“: null angegeben, werden alle Feldgruppen gelöscht.
PUT
Bei PUT wird jede nicht angegebene Feldgruppe gelöscht (das gilt auch, wenn keine Feldgruppen angegeben werden).
War die Änderung erfolgreich, wird der Statuscode 204 ohne Inhalt zurückgegeben.
PATCH bedeutet, dass nicht angegebene Felder ignoriert werden.
PUT bedeutet, dass nicht angegebene Felder als null interpretiert und somit geleert werden.
Eine beispielhafte Abfrage, um einen bestehenden Vorgang zu ändern und einen Feldgruppeneintrag zu löschen, wäre:
PATCH https://SUBDOMAIN.smartprocess.com/CwaData.svc/API_Workflow('40413104')
Content-Type: application/json
Authorization: Basic {{apiUsername}} {{apiPassword}}
{
"Kontakt_Nr": "C1033",
"Kontaktperson": "Christiane Feurig",
"E_Mail": "demo-e-mail@cwa.de",
"Firma": "Bremer Gewürzhandel",
"Artikel": [
{
"Gelöscht": true,
"Anzahl_in_Stk": 5.0,
"Artikel_Bezeichnung": "Monitor",
"Artikel_Nr": "2001",
"Einzelpreis_in_EUR": 429.99
},
{
"Gelöscht": false,
"Anzahl_in_Stk": 3.0,
"Artikel_Bezeichnung": "Keyboard",
"Artikel_Nr": "0817",
"Einzelpreis_in_EUR": 8.15
},
{
"Gelöscht": false,
"Anzahl_in_Stk": 5.0,
"Artikel_Bezeichnung": "PC",
"Artikel_Nr": "2002",
"Einzelpreis_in_EUR": 5429.99
}
],
"Anforderung___Norm": "ISO 9001:2015",
"Abschnitt": "2",
"Bezeichnung_Anforderung": "Normative Verweise",
"Bezeichnung": "Bezeichnung geändert",
"Neuanlage_": "Nein",
"Bereich": "Option D",
"Grund": [
"Eins",
"Zwei"
],
"Verantwortlich": "Perso, Petra",
"Teilbereich": "Geschäftsführung / QM",
"Begründung": "Nein",
"Anzahl_Teile": 99.0,
"Datum_Eingang": "2024-12-20",
"Datum_und_Uhrzeit_Deadline": "2024-12-20T09:00:00+01:00",
"Kommentar": "GEÄNDERT: Dies ist ein Kommentar",
"Ausführlicher_Kommentar": "<p style=\"font-family: Arial; font-size: 10pt;\"><span style=\"font-size: 12pt;\"><strong>GEÄNDERT:Dies ist ein ausführlicher, formatierter Kommentar</strong></span></p>"
}Operation Löschen (DELETE)
Für das Löschen wird ein eindeutiger Schlüssel des Objekts benötigt.
War das Löschen erfolgreich, gibt der Server den Statuscode 204 zurück.
Eine beispielhafte Abfrage, um einen bestehenden Vorgang mit der Vorgangsnummer 40413013 zu löschen, wäre:
DELETE https://SUBDOMAIN.smartprocess.com/CwaData.svc/API_Workflow('40413013')
Authorization: Basic {{apiUsername}} {{apiPassword}}HTTP Statuscodes
Der Status einer API-Abfrage wird in HTTP Codes zurückgegeben, die zur Untersuchung möglicher Fehler beitragen können. Mögliche Statuscodes und Beispiele sind:
HTTP Statuscode | Beispiel |
200 -> OK | Eine READ-Operation hat einen Eintrag gefunden und zurückgegeben. |
201 -> Created | Eine CREATE-Operation wurde erfolgreich durchgeführt. |
204 -> No content | Eine UPDATE- oder DELETE-Operation wurde erfolgreich ausgeführt - No content wird als Antwort ausgegeben, weil die Operation keinen Fehler ausgelöst hat und gleichzeitig keinen Inhalt zurückgibt. |
400 -> Bad request | Der Benutzer hat beim API-Aufruf nicht die geforderte Syntax berücksichtigt. Beispiel: https://SUBDOMAIN.smartprocess.com/CwaData.svc/API_Workflow(123456) Der Benutzer versucht, einen Vorgang vom Typ API_Workflow mit der Vorgangsnummer 123456 aufzurufen. Die Vorgangsnummer ist aber als Zeichenkette definiert, weshalb die Anfrage fehlschlägt. |
401 -> Unauthorized | Der Benutzer führt einen beliebigen API-Aufruf aus, aber hat sich zuvor noch nicht mit seinem SmartProcess-User + API Key authentifiziert. |
403 -> Forbidden | Der Benutzer hat sich zwar autorisiert, aber versucht eine Operation auszuführen, die er gemäß seiner Rechte nicht ausführen darf (z. B. ein Benutzer ohne Designer-Lizenz oder API Key) |
404 -> Not found | Der API-Aufruf des Benutzers erfüllt zwar alle Syntax-Anforderungen, aber es wird kein entsprechender Eintrag gefunden. Beispiel: https://SUBDOMAIN.smartprocess.com/CwaData.svc/API_Workflow('123456')Dieser Fehlercode wird zurückgegeben, wenn kein Vorgang vom Typ API_Workflow mit der Vorgangsnummer 123456 existiert (oder der API-Nutzer keine Leseberechtigung dafür hat). |
500 -> Internal server error | Es ist ein interner Serverfehler aufgetreten. |
501 -> Not implemented | Der Benutzer versucht eine API-Operation zu nutzen, die aktuell nicht implementiert ist. |
Zugriffsbegrenzung
Damit SmartProcess durch API-Aufrufe nicht zu sehr ausgelastet wird, werden API-Zugriffe gemessen und limitiert. Unter normalen Einstellungen sind erlaubt:
- Alle 2 Minuten 50 Aufrufe zu maximal 60 Sekunden Bearbeitungsdauer.
- Alle 60 Minuten 1000 Aufrufe zu maximal 900 Sekunden Bearbeitungsdauer.
- Pro GET-Aufruf maximal 500 zurückgegebene Entitäten (mit jeweils maximal 500 Sub-Entitäten).
Sollten Sie mehrere Profile haben, werden diese nicht voneinander beeinträchtigt.
Einschränkungen
Aus den Sachzusammenhängen und der Komplexität der Anwendung ergeben sich einige Einschränkungen in der Benutzung der REST-API:
Allgemein
Es werden nur Namen erlaubt, die kein ‘-‘ oder ‘.‘ enthalten und dem NCName-Schema entsprechen.
Vorgänge
Sichtbarkeitsbeschränkungen und die Validierung aus den Formularfeldern werden wie beim Import ignoriert.
Die Optionen „(…) nur aus Kontaktverwaltung (…)“ und „Kontakte automatisch (…) übernehmen“ aus Kontaktfeldern werden wie beim Import ignoriert.
Zyklische Vorgänge werden nicht unterstützt. Wenn also ein Vorgangsbaum wie folgt aussieht: Hauptvorgang -> Subvorgang_Eins -> Subvorgang_Zwei -> Hauptvorgang, dann kann die REST-API nur bis Subvorgang_Zwei arbeiten.
Anhangtypbeschränkung und Anhangmindestzahl werden ignoriert.
Zwingende Eingabe wird ignoriert, damit per REST unvollständige Vorgänge manuell vervollständigt werden können.
„Eindeutig für Import“ gilt nicht für die REST-API.
Bei der Datenquelle „Organisationseinheit, Rolle und Benutzer“ wird die Validität der Eingabe nicht geprüft.
Bis auf die Kennzahlerfassung sind alle besonderen Workflows von der API ausgeschlossen.
Anhänge
Anhänge können nur angelegt, nicht aber geändert werden.
Anhänge können nur im Kontext anderer Objekte verwendet werden. Es können z.B. nicht alle Anhänge ausgegeben werden, wohl aber alle Anhänge, die zu Vorgang x oder Katalogeintrag y gehören.
Kataloge
Sprache und Kategorie sind nach Erstellen nicht per API änderbar.
Zwingende Eingabe wird analog zum Vorgang ignoriert.
Nur Katalog-Typ Standard wird unterstützt (SAP, Benutzerverwaltung, etc. nicht).
War der Artikel hilfreich?
Einführung SmartProcess API
Anbindung über Zapier