HTTP REST API

Authentifizierung

Login

Bevor man die API-Methoden aufrufen kann, muss man sich über api/login per HTTP post mit den Parametern username und password einloggen. Es können sich nur Admins oder ETL-Benutzer einloggen.
api/login?username=test&password=test
Nachfolgende HTTP-Requests müssen den entsprechenden Session-Cookie verwenden, um sich zu authentifizieren.

Logout

Eine Sitzung wird mit dem folgenden Befehl beendet:
api/logout

Ping

Ob der Scope-Server bereit ist und antwortet, kann mit api/ping getestet werden. Hierzu muss man nicht angemeldet sein.

JSON-Rückgabe:

{
	"success": true
}

Ready

Ob der Anwender angemeldet ist und die Schnittstelle verwenden kann, wird mit api/isApiReady geprüft.

JSON-Rückgabe:

{
	"success": true,
	"message": ""
}

Werte lesen

Aktuelle Werte für Element-Ids abfragen

Anfrage
Um Formularwerte für eine Menge von Elementen abrufen zu können, gibt man die Liste der Element-Ids und die Liste der Feld-Ids an. Zusätzlich kann auch eine Liste an Element-Stati übergeben werden, nach denen gefiltert werden soll. Ist die Liste der Feld-Ids leer, werden alle Felder ausgelesen. Wird die Element-Status-Liste leer gelassen, werden die Werte aller Elemente in der Menge der Element-Ids, unabhängig von ihrem Status, ausgelesen.
api/getCurrentValuesForElements?elementIds=[Id](&elementIds=[Id])*(&entryIds=[Id])*(&states=[String])*
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. elementIds enthält eine Liste der validen Elemente, entryIds eine Liste der validen Felder, states die möglichen Elementzustände der zurückgegebenen Elemente und datasheets enthält die Liste an Datenblättern aller validen Elemente.
Beispiel

Es sollen für die Elemente 11 und 12 die Werte der Felder 4, 5 und 6 ausgelesen werden.

GET-URL:

api/getCurrentValuesForElements?elementIds=1&elementIds=2&entryIds=4&entryIds=5&entryIds=6

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"elementIds": [11,12],
	"entryIds": [4,5,6],
	"states": ["IMAGINARY","IN_PLANNING","ACTIVE","ON_HOLD","CLOSED","REJECTED","ARCHIVED"], 
	"datasheets": [
		{
			"authorId": 1,
			"elementId": 11,
			"scopeType": {
				"id": 1,
				"name": "Rechnung",
				"type": "NODE"
			},     
			"entries": [
				{
					"id": 4,
					"title": "ReNr",
					"type": "String",
					"isTableColumn": false
				},
				{
					"id": 5,
					"title": "Betrag",
					"type": "Number",
					"isTableColumn": false
				},
				{
					"id": 6,
					"title": "Rechnungsdatum",
					"type": "Date",
					"isTableColumn": false
				}
			],
			"values": [
				{
					"entryId": 4,
					"value": "10345",
					"state": "VALID",
					"isFormula": false,
					"timestamp": "2018-03-19T17:33:46.511Z"
				},
				{
					"entryId": 5,
					"value": {
						"unit": "",
						"value": 26.99
					},
					"state": "VALID",
					"isFormula": false,
					"timestamp": "2018-03-19T14:57:15.938Z"
				},
				{
					"entryId": 6,
					"value": "2018-02-08T12:00:00.000Z",
					"state": "VALID",
					"isFormula": false,
					"timestamp": "2018-03-19T17:33:46.511Z"
				}
			],
			"version": "2018-11-14T01:00:00Z"      
		},
		{
			"authorId": 1,
			"elementId": 12,
			"scopeType": {
				"id": 1,
				"name": "Rechnung",
				"type": "NODE"
			},
			"entries": [
				{
					"id": 4,
					"title": "ReNr",
					"type": "String",
					"isTableColumn": false
				},
				{
					"id": 5,
					"title": "Betrag",
					"type": "Number",
					"isTableColumn": false
				},
				{
					"id": 6,
					"title": "Rechnungsdatum",
					"type": "Date",
					"isTableColumn": false
				}
			],
			"values": [
				{
					"entryId": 4,
					"value": "10346",
					"state": "VALID",
					"isFormula": false,
					"timestamp": "2018-03-19T17:38:49.012Z"
				},
				{
					"entryId": 5,
					"value": {
						"unit": "€",
						"value": 89.95
					},
					"state": "VALID",
					"isFormula": false,
					"timestamp": "2018-03-19T17:38:49.012Z"
				},
				{
					"entryId": 6,
					"value": "2018-02-09T12:00:00.000Z",
					"state": "VALID",
					"isFormula": false,
					"timestamp": "2018-03-19T17:38:49.012Z"
				}
			],
			"version": "2018-11-14T01:00:00Z"      
		}
	]
}

Wertehistorie für Element-Ids abfragen

Anfrage
Um alle Versionen von Formularwerten für eine Menge von Elementen abrufen zu können, gibt man die Liste der Element-Ids und die Liste der Feld-Ids an. Zusätzlich kann auch eine Liste an Element-Stati übergeben werden, nach denen gefiltert werden soll. Ist die Liste der Feld-Ids leer, werden alle Felder ausgelesen. Wird die Element-Status-Liste leer gelassen, werden die Werte aller Elemente in der Menge der Element-Ids, unabhängig von ihrem Status, ausgelesen.
api/getValueHistoryForElements?elementIds=[Id](&elementIds=[Id])*(&entryIds=[Id])*(&states=[String])*
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. elementIds enthält eine Liste der validen Elemente, entryIds eine Liste der validen Felder, states die möglichen Elementzustände der zurückgegebenen Elemente und datasheets enthält die Liste an Datenblättern aller validen Elemente.
Beispiel

Es sollen für die Elemente 11 und 12 die Wertehistorie der Felder 4 und 5 ausgelesen werden.

GET-URL:

api/getValueHistoryForElements?elementIds=1&elementIds=2&entryIds=4&entryIds=5&entryIds=6

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"elementIds": [11,12],
	"entryIds": [4,5],
	"states": ["IMAGINARY","IN_PLANNING","ACTIVE","ON_HOLD","CLOSED","REJECTED","ARCHIVED"], 
	"datasheets": [
		{
			"elementId": 11,
			"scopeType": {
				"id": 1,
				"name": "Rechnung",
				"type": "NODE"
			},     
			"entries": [
				{
					"id": 4,
					"title": "ReNr",
					"type": "String",
					"isTableColumn": false
				},
				{
					"id": 5,
					"title": "Betrag",
					"type": "Number",
					"isTableColumn": false
				}
			],
			"values": [
				{
					"entryId": 5,
					"value": {
						"unit": "",
						"value": 26.99
					},
					"state": "VALID",
					"isFormula": false,
					"timestamp": "2018-03-19T14:57:15.938Z"
				},
				{
					"entryId": 4,
					"value": "10345",
					"state": "VALID",
					"isFormula": false,
					"timestamp": "2018-03-19T17:33:46.511Z"
				}
			],
			"authors": [
				{
					"author": "Musterfrau, Maria",
					"timestamp": "2018-03-19T14:57:15.938Z"
				},
				{
					"author": "Musterfrau, Maria",
					"timestamp": "2018-03-19T17:33:46.511Z"
				}
			]
		},
		{
			"elementId": 12,
			"scopeType": {
				"id": 1,
				"name": "Rechnung",
				"type": "NODE"
			},
			"entries": [
				{
					"id": 4,
					"title": "ReNr",
					"type": "String",
					"isTableColumn": false
				},
				{
					"id": 5,
					"title": "Betrag",
					"type": "Number",
					"isTableColumn": false
				}
			],
			"values": [
				{
					"entryId": 4,
					"value": "10346",
					"state": "VALID",
					"isFormula": false,
					"timestamp": "2018-03-19T17:38:49.012Z"
				},
				{
					"entryId": 5,
					"value": {
						"unit": "€",
						"value": 89.95
					},
					"state": "VALID",
					"isFormula": false,
					"timestamp": "2018-03-19T17:38:49.012Z"
				},
				{
					"entryId": 5,
					"value": {
						"unit": "€",
						"value": 89.95
					},
					"state": "VALID",
					"isFormula": false,
					"timestamp": "2018-04-01T09:01:58.823Z"
				}
			],
			"authors": [
				{
					"author": "Mustermann, Max",
					"timestamp": "2018-03-19T17:38:49.012Z"
				},
				{
					"author": "Musterfrau, Maria",
					"timestamp": "2018-04-01T09:01:58.823Z"
				}
			]
		}
	]
}

Aktuelle Werte eines Layouts abfragen

Anfrage
Um alle Formularwerte für ein einzelnes Layout eines Elementes abzurufen, benutzt man die Methode getValuesForLayout. Wird der Element-Status angegeben, wird nur dann ein Ergebnis zurückgegeben, wenn der aktuelle Status dem angegebenen entspricht.
api/getValuesForLayout?elementId=[Id]&layoutId=[Id](&state=[String])?
Für diese Anfrage sind keine besonderen Rechte notwendig.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. elementId enthält die Id des abgefragten Elements, layoutId die Id des abgefragten Layouts, state den aktuellen Elementstatus und datasheet das Datenblatt mit den Werten.
Beispiel

Es sollen für das Element 11 die Werte des Layouts 4 ausgelesen werden.

GET-URL:

api/getValuesForLayout?elementId=11&layoutId=4

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"elementId": 11,
	"layoutId" : 4
	"state": "ACTIVE", 
	"datasheet": {
		"authorId": 1,
		"elementId": 11,
		"version": "2018-11-14T01:00:00Z"
		"scopeType": {
			"id": 1,
			"name": "Rechnung",
			"type": "NODE"
		},
		"entries": [
			{
				"id": 4,
				"title": "ReNr",
				"type": "String",
				"isTableColumn": false
			},
			{
				"id": 5,
				"title": "Betrag",
				"type": "Number",
				"isTableColumn": false
			},
			{
				"id": 6,
				"title": "Rechnungsdatum",
				"type": "Date",
				"isTableColumn": false
			}
		],
		"values": [
			{
				"entryId": 4,
				"value": "10345",
				"state": "VALID",
				"isFormula": false,
				"timestamp": "2018-03-19T17:33:46.511Z"
			},
			{
				"entryId": 5,
				"value": {
					"unit": "",
					"value": 26.99
				},
				"state": "VALID",
				"isFormula": false,
				"timestamp": "2018-03-19T14:57:15.938Z"
			},
			{
				"entryId": 6,
				"value": "2018-02-08T12:00:00.000Z",
				"state": "VALID",
				"isFormula": false,
				"timestamp": "2018-03-19T17:33:46.511Z"
			}
		],
	}
}

Wertehistorie eines Layouts abfragen

Anfrage
Um alle Versionen von Formularwerten eines einzelnes Layouts abzurufen, benutzt man die Methode getValueHistoryForLayout.
api/getValueHistoryForLayout?elementId=[Id]&layoutId=[Id](&entryIds=[Id])*
Es wird empfohlen, nur die benötigten Felder abzufragen. Werden keine Feld-Ids angegeben, enthält die Antwort alle sichtbaren Felder des Layouts. Die Liste der Autoren ist nur befüllt, wenn in der Konfiguration der Schalter user.versionAuthor.visible aktiv ist.
Für diese Anfrage sind keine besonderen Rechte notwendig.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. elementId enthält die Id des abgefragten Elements, layoutId die Id des abgefragten Layouts, entryIds die ausgelesenen Felder und datasheet das Datenblatt mit den Werten. Die Werte werden aufsteigend nach dem Versionsdatum sortiert.
Beispiel

Es sollen für das Element 11 die Werte der Felder 4 und 5 des Layouts 4 ausgelesen werden.

GET-URL:

api/getValueHistoryForLayout?elementId=11&layoutId=4&entryIds=4&entryIds=5

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"elementId": 11,
	"layoutId" : 4
	"entryIds": [4,5], 
	"datasheet": {
		"elementId": 11,
		"scopeType": {
			"id": 1,
			"name": "Rechnung",
			"type": "NODE"
		},
		"entries": [
			{
				"id": 4,
				"title": "ReNr",
				"type": "String",
				"isTableColumn": false
			},
			{
				"id": 5,
				"title": "Betrag",
				"type": "Number",
				"isTableColumn": false
			}
		],
		"values": [
			{
				"entryId": 5,
				"value": {
					"unit": "",
					"value": 27.98
				},
				"state": "VALID",
				"isFormula": false,
				"timestamp": "2018-03-19T13:08:53.282Z"
			},
			{
				"entryId": 4,
				"value": "10345",
				"state": "VALID",
				"isFormula": false,
				"timestamp": "2018-03-19T14:57:15.938Z"
			},
			{
				"entryId": 5,
				"value": {
					"unit": "",
					"value": 26.99
				},
				"state": "VALID",
				"isFormula": false,
				"timestamp": "2018-03-19T14:57:15.938Z"
			}
		],
		"authors": [
			{
				"author": "Mustermann, Max",
				"timestamp": "2018-03-19T13:08:53.282Z"
			},
			{
				"author": "Musterfrau, Maria",
				"timestamp": "2018-03-19T14:57:15.938Z"
			}
		]
	}
}

Werte für einen Typ abfragen

Anfrage
Um Formularwerte eines Aspekttyps abrufen zu können, gibt man den Namen des Aspekttyps und die Ebenentiefe an. Dabei entspricht die Ebene 0 der Rootknotenebene. API-URL:
api/nodes?typeName=[String]&level=[Id](&states=[String])+(&entries=[String])*
Für diese Anfrage benötigt man administrative Rechte.
Als Element-Status sind folgende Werte erlaubt: IMAGINARY, IN_PLANNING, ACTIVE, ON_HOLD, CLOSED, REJECTED oder ARCHIVED.
Rückgabe
Das Ergebnis ist eine Liste von Maps im JSON-Format. Ein Listenelement entspricht den Formularwerten eines Elements. Die Formularwerte werden als Map zurückgegeben, wobei der Feldname der Schlüssel und der Feldinhalt der Wert ist.
Beispiel

Es sollen vom Aspekttyp Abrechnung von Level 1 (Unterknoten von Rootknoten) alle Rechnungsnummern und Auftragsnummern zurückgegeben werden, deren Elemente den Status ACTIVE oder ON_HOLD haben.

GET-URL:

api/nodes?typeName=Abrechnungen&level=1&entries=Rechnungsnummer&entries=Auftragsnummer&states=ACTIVE&states=ON_HOLD

JSON-Rückgabe:

[
	{
		"Rechnungsnummer": "1234", 
		"Auftragsnummer": "4711"
	},
	{
		"Rechnungsnummer": "3456", 
		"Auftragsnummer": "3241"
	}
]

TableView abfragen

Anfrage
Um Formularwerte eines Aspekttyps abrufen zu können, gibt man den Namen des Aspekttyps und die Ebenentiefe an. Dabei entspricht die Ebene 0 der Rootknotenebene. API-URL:
api/getTableViewData?tableViewId=[Id](&filterCondition=[String])?(&elementIdsFilter=[String])?(&entryIdsFilter=[String])?
Für diese Anfrage sind keine besonderen Rechte notwendig.
Als Element-Status sind folgende Werte erlaubt: IMAGINARY, IN_PLANNING, ACTIVE, ON_HOLD, CLOSED, REJECTED oder ARCHIVED.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. Im Parameter tableViewData wird die TableView mit ihren Spalten und Zeilen beschrieben.
Beispiel

Es soll die TableView mit der Id 1 ausgelesen werden, beschränkt auf die angegebenen Elemente und Felder, für die das Auftragsdatum vor dem heutigen Tag liegt.

GET-URL:

api/getTableViewData?tableViewId=1&filterCondition=@Auftragsdatum<TODAY&elementIdsFilter=23,24,25,28&entryIdsFilter=25

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"tableViewId": 1,
	"filterCondition": "@Auftragsdatum<TODAY", 
	"elementIdsFilter": [23,24,25,28],
	"entryIdsFilter": [25],
	"tableViewData": {
		"tableViewId": 1,
		"columns": [
			{
				"name": "Name",
				"columnType": "NAME",
				"entry": null
			},
			{
				"name": "Betrag",
				"columnType": "ENTRY",
				"entry": {
					"id": 25,
					"title": "Betrag",
					"type": "Number",
					"isTableColumn": false
				}
			}
		],
		"rows": [
			{
				"elementId": 2,
				"values": [
					{
						"entryId": -1,
						"value": "Auftrag 3452",
						"state": "VALID",
						"isFormula": false,
						"timestamp": "2018-03-19T14:57:15.938Z"
					},
					{
						"entryId": 25,
						"value": {
							"unit": "",
							"value": 26.99
						},
						"state": "VALID",
						"isFormula": false,
						"timestamp": "2018-03-19T14:57:15.938Z"
					}
				]
			},
			{
				"elementId": 8,
				"values": [
					{
						"entryId": -1,
						"value": "Auftrag 2893",
						"state": "VALID",
						"isFormula": false,
						"timestamp": "2018-03-19T09:14:18.674Z"
					},
					{
						"entryId": 25,
						"value": {
							"unit": "",
							"value": 53.49
						},
						"state": "VALID",
						"isFormula": false,
						"timestamp": "2018-03-18T09:14:18.674Z"
					}
				]
			}
		]
	}
}

Werte ändern

Werte mit einer ETL-Beschreibung ändern

Anfrage
Ein ETL-Import kann mit folgender API-URL angestoßen werden:
api/performETL?etl=[String]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format, die als einzigen Wert ein Flag success enthält, ob die Anfrage erfolgreich bearbeitet wurde.
Beispiel

Es soll ein neues Projekt 125 als Prozess angelegt werden. Zur besseren Lesbarkeit wurde die URL nicht escaped.

GET-URL:

api/performETL?etl="15";"3";"1";"0";"myCRM";"Projekt 125";"";"Projekt";"Projekt 125";""

JSON-Rückgabe:

{
	"success": true
}

Datenblattwerte schreiben

Anfrage
Neben dem ETL-Import können neue Werte für ein einzelnes Datenblatt auch über die folgende API-URL geschrieben werden.
api/writeDatasheet?elementId=[Id]&values=[JSON-Array](&layoutId=[Id])
Für diese Anfrage benötigt man Schreibrechte für die zu schreibenden Felder auf dem Element unter dem (optional) angebenen Layout. Wird keine Layout-Id übergeben, so wird versucht, die Werte unter dem Standard-Element-Layout zu schreiben.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format, die ein Flag success enthält, ob die Anfrage erfolgreich bearbeitet wurde. Zudem werden die übergebenen Parameter elementId und layoutId wieder zurückgegeben. Im Falle, dass keine Layout-Id vom Aufrufer angegeben wurde, wird die Id des als Fallback verwendeten Standardlayouts zurückgegeben.
Beispiel
Der Wert "30,50 €" soll in das Zahlen-Feld "Betrag" (REWOO Scope interne Id 42) für den Auftrag "Auftrag 12440" (REWOO Scope interne Id 1020) geschrieben werden. Als Layout soll das Standard-Layout des Elements zum Einsatz kommen (dieses hat die REWOO Scope interne Id 99).

GET-URL:

api/writeDatasheet?elementId=1020&values=[{"entryId":42,"value":{"value":30.50,"unit":"€"},"state":"VALID","isFormula":false,"timestamp":null}]"

JSON-Rückgabe:

{
	"success": true,
	"elementId": 1020,
	"layoutId": 99
}
Anmerkungen zum Beispiel
Dem Wert wird im Beispiel mit Absicht kein Zeitstempel (Attribut "timestamp"), sondern null zugewiesen, da dieser ohnehin beim Schreiben der Werte von der aktuellen Server-Zeit überschrieben würde.

CopyButton-Druck auslösen

Anfrage
Der Druck auf einen CopyButton kann durch folgende Methode ausgelöst werden:
api/copyByButton?elementId=[Id]&buttonId=[Id](&actorId=[Id])(&sourceElementId=[Id])(&targetIds=[Id])*&copyName=[String]&values=[JSON-Array]&connectionButtonExecutions=[JSON-Array]
Für diese Anfrage benötigt man Zugriffsrechte auf den entsprechenden Copy-Button. Um die Operation im Namen eines anderen "Actors" auszuführen, benötigt man administrative Rechte auf das System. Die sourceElementId kann entfallen, sofern der Copy-Button nur mit einer einzigen möglichen Quelle konfiguriert ist.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format, die ein Flag success enthält, ob die Anfrage erfolgreich bearbeitet wurde und eine Liste der Element-Ids, die beim Kopieren angelegt wurden.
Beispiel

Auf dem Knoten 23 soll für den Anwender 2 der CopyButton 45 gedrückt werden. Dabei soll das Template 8 unter die Knoten 12 und 14 kopiert werden.

GET-URL:

api/copyByButton?elementId=23&buttonId=45&actorId=2&sourceElementId=8&targetIds=12&targetIds=14&copyName=Test&values=[{"Name":"Antrag", "Datum": "2018-03-18T09:14:18.674Z"}]&connectionButtonExecutions=[]

JSON-Rückgabe:

{
	"success": true,
	"copies": [25,26]
}

ActionButton-Druck auslösen

Anfrage
Der Druck auf einen ActionButton kann durch folgende Methode ausgelöst werden:
api/executeActionButton?elementId=[Id]&buttonId=[Id](&actorId=[Id])?(&layoutId=[Id])?(&buttonData=[JSON])?
Für diese Anfrage sind keine besonderen Rechte notwendig, sofern keine Actor-Id angegeben wird. Nur mit administrativen Rechten kann stellvertretend für andere Anwender ein Button gedrückt werden.
Button-Daten
Bei manchen Buttons ist zur Ausführung die Eingabe von Daten notwendig. Diese können in buttonData übergeben werden.
  • Bericht erstellen:
    {
        "params": [
            {
                "name": String,
                "type": ["BOOLEAN" | "CHOICE" | "DATE" | "MULTIPLE_CHOICE" | "NUMBER" | "STRING"],
                "editable": [ true | false ],
                "value": Primitive
            }
        ]
    }
  • Auswahloptionen ändern:
    [
        {
            "choiceOptionsPropagation": ["CHANGE" | "RENAME" | "REORDER"],
            "choiceOptions": Comma Separated String
        }
    ]
  • ETL ausführen:
    {
        "etlData": CSV String,
        "locale": ["en_US" | "en_GB" | "de_DE"]
    }
Rückgabe
Das Ergebnis ist eine Map im JSON-Format, die ein Flag success enthält, ob die Anfrage erfolgreich bearbeitet wurde und eine Task-Id der gestarteten Anfrage.
Beispiel

Auf dem Knoten 23 soll für den Anwender 2 der ActionButton 45 auf Layout 24 gedrückt werden.

GET-URL:

api/executeActionButton?elementId=23&buttonId=45&actorId=2&layoutId=24

JSON-Rückgabe:

{
	"success": true,
	"elementId": 23,
	"buttonId": 45,
	"layoutId": 24,
	"buttonData": null,
	"actorId": 2,
	"taskId": 1284
}

Elemente

Elemente eines Typs auflisten

Anfrage
Die Liste aller Elemente eines Typs kann mit der Methode getElementIdsForType ausgelesen werden. Ist der Typname nicht global eindeutig, kann zusätzlich der Element-Typ angegeben werden (OBJECT, PROCESS, ASPECT, NODE oder CONNECTION). Als Element-Status sind folgende Werte erlaubt: IN_PLANNING, ACTIVE, ON_HOLD, CLOSED, REJECTED oder ARCHIVED. Ist kein Status angegeben, werden nur Elemente mit dem Status IN_PLANNING, ACTIVE oder ON_HOLD aufgelistet.
api/getElementIdsForType?typeName=[String](&elementType=[String])?(&states=[String])*
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. elementIds ist eine Id-Liste der gefundenen Elemente.
Beispiel

Es werden alle aktiven Knoten vom Typ Rechnung gesucht.

GET-URL:

api/getElementIdsForType?typeName=Rechnung&elementType=NODE&states=ACTIVE

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"elementIds": [3,5,8]
}

Knoten abfragen (Deprecated)

Anfrage
Ein einzelner Knoten eines bestimmten Typs kann mit folgender API-URL ausgelesen werden:
api/findNode?nodeName=[String]&aspectTypeName=[String]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. node ist eine Map, die den gefundenen Knoten beschreibt.
Beispiel

Es soll der Mitarbeiter-Knoten Homer Simpson ausgelesen werden.

GET-URL:

api/findNode?nodeName=Homer%20Simpson&aspectTypeName=Mitarbeiter

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"node": {
		"id": 5,
		"name": "Homer Simpson",
		"aspectId": 2,
		"aspectName": "Mitarbeiter",
		"topLevelId": 1,
		"topLevelName": "REWOO Technologies AG",
		"topLevelIsProcess": false,
		"parentNodeIds": [3],
		"parentNodeNames": []
	}
}

Beziehungen auflisten

Anfrage
Alle Beziehungen eines bestimmten Typs können mit folgender API-URL aufgelistet werden:
api/getConnectionsForType?typeName=[String]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. connections ist eine Liste der gefundenen Beziehungen.
Beispiel

Es sollen alle Beziehungen vom Typ Mitarbeiter2Auftrag aufgelistet werden.

GET-URL:

api/getConnectionsForType?typeName=Mitarbeiter2Auftrag

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"connections": [
		{
			"id": 43,
			"name": "Mitarbeiter2Auftrag",
			"source": {
				"id": 5,
				"name": "Homer Simpson",
				"aspectId": 2,
				"aspectName": "Mitarbeiter",
				"topLevelId": 1,
				"topLevelName": "REWOO Technologies AG",
				"topLevelIsProcess": false,
				"parentNodeIds": [3],
				"parentNodeNames": []
			},
			"target": {
				"id": 28,
				"name": "Sachbearbeiter",
				"aspectId": 27,
				"aspectName": "Sachbearbeiter",
				"topLevelId": 16,
				"topLevelName": "Auftrag 10213",
				"topLevelIsProcess": true,
				"parentNodeIds": [],
				"parentNodeNames": []
			}
		}
	]
}
Anfrage
Eine Suchanfrage über alle Formulare und Dateien startet man mit folgender URL:
api/search?term=[String]&page=[Number]&pageSize=[Number]
Für diese Anfrage sind keine besonderen Rechte notwendig.
Die Suchanfrage ist ein beliebiger Text. Die Seitennummern beginnen bei 0. Das Ergebnis enthält maximal der Seitengröße entsprechend Treffer für die Suchanfrage.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. In term steht die bearbeitete Suchanfrage, in der Liste results die gefundenen Ergebnisse. Das einzelne Ergebnis ist eine Map mit elementId (Scope-ID des gefundenen Elements), name (Elementname), datasheetVersion (Zeitstempel des Werts, der den Suchtreffer enthält), breadcrumb (Liste der Elternelemente als Maps mit elementId und name).
Beispiel

Es soll nach dem Text REWOO gesucht werden. Erwartet wird die zweite Seite mit maximal 2 Einträgen.

GET-URL:

api/search?term=rewoo;page=1;pageSize=2

JSON-Rückgabe:

{
	"term": "rewoo",
	"results": [
		{
			"elementId": 3,
			"name": "Max Mustermann",
			"datasheetVersion": 1497950642278,
			"breadcrumb": [
				{
					"elementId": 1,
					"name": "REWOO Technologies AG"
				},
				{
					"elementId": 2,
					"name": "Mitarbeiter"
				}
			]
		},
		{
			"elementId": 4,
			"name": "Frida Musterfrau",
			"datasheetVersion": ,
			"breadcrumb": [
				{
					"elementId": 1,
					"name": "REWOO Technologies AG"
				},
				{
					"elementId": 2,
					"name": "Mitarbeiter"
				}
			]
		}
	]
}

Knotentypen abfragen

Anfrage
Die Liste aller Knotentypen kann mit folgender API-URL abfragt werden:
api/getNodeTypes
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. nodeTypes enthält die Liste der Knotentypen.
Beispiel

GET-URL:

api/getNodeTypes

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"nodeTypes": [
		{
			"id": 1,
			"name": "Mitarbeiter",
			"type": "NODE"
		},
		{
			"id": 2,
			"name": "Rechnung",
			"type": "NODE"
		}
	]
}

Id eines Formularfelds abfragen

Anfrage
Für Formularfelder kann die Scope-ID mit folgender API-URL abfragt werden:
api/getEntryForTitle?entryTitle=[String]&typeName=[String](&elementType=[String])?
Für diese Anfrage benötigt man administrative Rechte.
Als Element-Typ sind folgende Werte erlaubt: OBJECT, PROCESS, ASPECT oder CONNECTION.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. entry ist eine Map, die das Formularfeld beschreibt.
Beispiel

Es soll vom Aspekttyp Abrechnung das Feld Rechnungsnummer abgefragt werden.

GET-URL:

api/getEntryForTitle?entryTitle=Rechnungsnummer&typeName=Abrechnungen&elementType=ASPECT

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"entry": {
		"id": 427,
		"title": "Rechnungsnummer"		
	}
}

Formularfeld abfragen

Anfrage
Die vollständige Beschreibung von Formularfeldern kann mit folgender API-URL abfragt werden:
api/getDatasheetEntries?entryIds=[Id](&entryIds=[Id])*
Für diese Anfrage sind keine besonderen Rechte notwendig.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. entryIds Liste der abgefragten Feld-Ids und entries eine Liste von Feld-Beschreibungen.
Beispiel

Es sollen die Felder 2 und 3 abgefragt werden.

GET-URL:

api/getDatasheetEntries?entryIds=2&entryIds=3

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"entryIds": [2,3],
	"entries": [
		{
		    "serverId": 2,
		    "title": "Rechnungs-ID",
		    "type": "String",
		    "defaultValue": "={R-}+COUNTER(Rechnung)",
		    "format": "",
		    "choiceOptions": "",
		    "comment", "Bitte immer im Format R-XXXX angeben"
		    "commentAsTooltip": true,
		    "requiredAccessRight": "R"
		    "buttonDefinition": null,
		    "defaultValuePropagation": "SAME",
		    "choiceOptionsPropagation": "CHANGE",
		    "obsolete": false
		},
		{
		    "serverId": 3,
		    "title": "Rechnungsbetrag",
		    "type": "Number",
		    "defaultValue": "",
		    "format": "{"valueSuffix":" €","fontWeight":"normal","textAlign":"right","format":"currency"}",
		    "choiceOptions": "",
		    "comment", ""
		    "commentAsTooltip": false,
		    "requiredAccessRight": "R"
		    "buttonDefinition": null,
		    "defaultValuePropagation": "SAME",
		    "choiceOptionsPropagation": "CHANGE",
		    "obsolete": false
		}
	]
}

Namen zu einer Id auslesen

Anfrage
Der Anzeige-Name zu einer Id kann mit folgender URL abgefragt werden:
api/resolveIdToName?entityId=[Id]&entityType=[ ELEMENT | TYPE | ENTRY | ATTACHMENT ]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. entityName enthält den gesuchten Namen.
Beispiel

Es soll der Name eines Elements abgefragt werden.

GET-URL:

api/resolveIdToName?entityId=17&entityType=ELEMENT

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"entityId": 17,
	"entityType": "ELEMENT",
	"entityName": "Mitarbeiter"
}

Layout für einen Layout-Namen auslesen

Mit folgendem Aufruf kann das Layout ermittelt werden, welches den angegebenen Namen trägt und dem (ebenfalls per Namen angegebenen) Element-Typ angehört.
api/getLayoutForName?layoutName=[String]&typeName=[String]&elementType=[String]
Für diese Anfrage benötigt man administrative Rechte.
Als Element-Typ sind folgende Werte erlaubt: OBJECT, PROCESS, ASPECT oder CONNECTION.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. layout enthält die Informationen über das gesuchte Layout. Unter layoutName, typeName und elementType sind die Werte zu finden, welche der Funktion beim Aufruf übergeben wurden.
Beispiel

Es soll das Layout "Kundenansicht" (interne REWOO Scope Id 7) des Objekt-Typs "Auftrag" (interne REWOO Scope Id 10) ausgelesen werden.

GET-URL:

api/getLayoutForName?layoutName=Kundenansicht&typeName=Auftrag&entityType=OBJECT

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"layoutName": "Kundenansicht",
	"typeName": "Auftrag",
	"elementType": "OBJECT",
	"layout": {
		"id": 7,
		"typeId": 10,
		"name": "Kundenansicht"
	}
}

Dateien

Datei lesen

Anfrage
Beim Auslesen von Formularen enthalten Felder mit Dateien Listen von Ids. Um auf diese Dateien zugreifen zu können, wandelt man die Ids mit folgender Anfrage in URLs um:
api/getFileUrl?attachmentId=[Id]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. url ist die URL, mit der auf die Datei zugegriffen werden kann und in originalFilename steht der Dateiname, den die Datei beim Speichern hatte.
Beispiel

Es soll die Datei mit der Id 42 ausgelesen werden.

GET-URL:

api/getFileUrl?attachmentId=42

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"attachmentId": 42,
	"url": "//home/rewoo/files/42.docx",
	"originalFilename": "test.docx"
}

Datei speichern

Anfrage
Eine Datei kann mit folgender URL in Scope gespeichert werden:
api/saveFileByUrl?elementId=[Id]&entryId=[Id]&url=[String]&(filename=[String])?(&overwriteAll=[Boolean])?
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. attachmentId enthält die Id der gespeicherten Datei.
Beispiel

Es soll eine Datei gespeichert werden. Zur besseren Lesbarkeit wurde die URL nicht escaped.

GET-URL:

api/getFileUrl?elementId=17&entryId=48&url=//home/rewoo/test.docx

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"attachmentId": 42
}

Externe Jobs

Fortschritt eines externen Jobs melden

Anfrage
Der Fortschritt von externen Jobs kann über folgende URL an Scope weitergegeben werden:
api/updateTaskProgress?taskId=[Id]&progressIncrement=[Number]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. taskId enthält die verwendete TaskId.
Beispiel

Der Task mit der Id 17 ist bei 35%.

GET-URL:

api/updateTaskProgress?taskId=17&progressIncrement=0.35

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"taskId": 17
}

Daten für einen externen Job abfragen

Anfrage
Die für einen externen Job notwendigen Daten können über folgende URL abgefragt werden:
api/getTaskPayload?taskId=[Id]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. taskId enthält die TaskId, payload die Daten.
Beispiel

Lese die Daten für Task 17.

GET-URL:

api/updateTaskProgress?taskId=17

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"taskId": 17,
	"payload": 
}

Scope als Proxy benutzen

Anfrage
Scope kann als Proxy für andere Webanwendungen benutzt werden. In Scope müssen diese Dienste mit Namen und URL hinterlegt werden. Dann können diese Dienste über folgende API-URL indirekt angesprochen werden. Scope fügt dem Aufruf noch folgende Parameter hinzu
  • scopeUserId - Id des aktuell angemeldeten Anwenders
  • scopeUserHomeId - Id des Home-Knotens des aktuell angemeldeten Anwenders
  • scopeAccountType - Account-Art des Anwenders
  • scopeTimestamp - Zeitpunkt des Aufrufs
api/proxy?method=[String]&(param=[String])*
Für diese Anfrage sind keine besonderen Rechte notwendig.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über mögliche Probleme gibt. result enthält das Ergebnis des externen Service.
Beispiel

Finde ein Meeting-Raum für 10 Personen.

GET-URL:

api/proxy?method=findRoom&size=10

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"result": "Raum 1.10,Raum 2.01"
}

Accounts

Accounts auflisten

Anfrage
Mit folgender API-URL können alle Accounts vom Typ Admin, Power, Standard und Concurrent ausgelesen werden:
api/getScopeUsers?filter=[String]
Dabei steht [String] für eine Map in Form eines JSON-Strings, der die zu findenden Benutzer nach ihrem Gültigkeitsdatum und ob sie deaktiviert bzw. nicht deaktiviert sind, filtert. Wichtig ist bei der Angabe des Zeitstempels, die Anzahl der Millisekunden nach "Epoch" (01.01.1970, 00:00:00 GMT) anzugeben. Der Filter ist optional: wird er weggelassen, werden ausschließlich noch ungelöschte, nicht-deaktivierte Benutzer zurückgegeben.
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. scopeUsers ist die Liste der Ergebnisse. Unter filter ist der ursprünglich angegebene Filter zu sehen, der für die Benutzersuche verwendet wurde. Das einzelne Ergebnis ist eine Map mit den Attributen des jeweiligen Scope-Accounts.
Beispiel

GET-URL:

api/getScopeUsers?filter={"validUntil":1511790000000,"deactivated":true}
Liefert alle Benutzer zurück, die ein Gültigkeitsdatum kleiner oder gleich dem 27.11.2017, 13:40 UTC haben und deaktiviert wurden.

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"filter": { \"validUntil\":1511790000000, \"deactivated\":true },
	"scopeUsers": [
		{
			"id": 1,
			"userName": "h.simpson",		
			"realName": "Simpson, Homer",		
			"email": "homer.simpson@rewoo.com",		
			"loginNode": {
				"id": 4,
				"name": "Homer Simpson",
				"aspectId": 2,
				"aspectName": "Mitarbeiter",
				"topLevelId": 1,
				"topLevelName": "REWOO Technologies AG",
				"topLevelIsProcess": false,
				"parentNodeIds": [2],
				"parentNodeNames": ["Mitarbeiter"]
			}		
		},
		{
			"id": 2,
			"userName": "m.simpson",		
			"realName": "Simpson, Marge",		
			"email": "marge.simpson@rewoo.com",		
			"loginNode": {
				"id": 5,
				"name": "Marge Simpson",
				"aspectId": 2,
				"aspectName": "Mitarbeiter",
				"topLevelId": 1,
				"topLevelName": "REWOO Technologies AG",
				"topLevelIsProcess": false,
				"parentNodeIds": [2],
				"parentNodeNames": ["Mitarbeiter"]
			}		
		}
	]
}

Account anlegen

Anfrage
Mit folgender API-URL kann ein neuer Account basierend auf einem Account-Template von Scope angelegt werden:
api/createUserByTemplate?templateName=[String]&realName=[String]&email=[String]&targetName=[String]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. newUser ist eine Map mit den Attributen des neuen Scope-Accounts.
Beispiel

GET-URL:

api/createUserByTemplate?templateName=Springfield&realName=Simpson%2C%20Lisa&email=lisa.simpson@rewoo.com&targetName=Lisa%20Simpson

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"newUser": {
		"id": 3,
		"userName": "l.simpson",		
		"realName": "Simpson, Lisa",		
		"email": "lisa.simpson@rewoo.com",		
		"loginNode": {
			"id": 6,
			"name": "Lisa Simpson",
			"aspectId": 2,
			"aspectName": "Mitarbeiter",
			"topLevelId": 1,
			"topLevelName": "REWOO Technologies AG",
			"topLevelIsProcess": false,
			"parentNodeIds": [2],
			"parentNodeNames": ["Mitarbeiter"]
		}		
	}
}

Account aktualisieren

Anfrage
Mit folgender API-URL kann ein bestehender Account aktualisiert werden:
api/updateUserInfo?userId=[Id]&realName=[String]&email=[String]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. updatedUser ist eine Map mit den Attributen des aktualisierten Scope-Accounts.
Beispiel

GET-URL:

api/updateUserInfo?userId=3&realName=Flanders%2C%20Lisa&email=lisa.flanders@rewoo.com

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"updatedUser": {
		"id": 3,
		"userName": "l.simpson",		
		"realName": "Flanders, Lisa",		
		"email": "lisa.flanders@rewoo.com",		
		"loginNode": {
			"id": 6,
			"name": "Lisa Flanders",
			"aspectId": 2,
			"aspectName": "Mitarbeiter",
			"topLevelId": 1,
			"topLevelName": "REWOO Technologies AG",
			"topLevelIsProcess": false,
			"parentNodeIds": [2],
			"parentNodeNames": ["Mitarbeiter"]
		}		
	}
}

LDAP abfragen

Anfrage
Über den Scope-Server können beliebige LDAP-Anfragen mit folgender API-URL gestartet werden:
api/performLdapQuery?(attributeFilter=[String])+(&searchBase=[String])?(&searchFilter=[String])?
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. ldapQueryResult ist die Liste der Ergebnisse. Das einzelne Ergebnis ist eine Map mit den angeforderten Attributen.
Beispiel

Gesucht sind alle Rewoo-Nutzer, die unterhalb der Search-Base ou=people,dc=rewoo,dc=lan aufgehängt sind. Als Rückgabe-Werte werden displayName und uid erwartet.

GET-URL:

api/performLdapQuery?attributeFilter=displayName&attributeFilter=uid&searchBase=ou%3Dpeople%2Cdc%3Drewoo%2Cdc%3Dlan&searchFilter=(&(objectclass%3DinetOrgPerson)(objectclass%3DRewooUser))

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"ldapQueryResult": [
		{
			"displayName": "Simpson, Homer",
			"uid": "h.simpson"		
		},
		{
			"displayName": "Simpson, Marge",
			"uid": "m.simpson"		
		}
	]
}

LDAP-Account anlegen

Anfrage
Mit folgender API-URL kann ein neuer Account basierend auf einem existierenden LDAP-Eintrag und einem Account-Template von Scope angelegt werden:
api/createLdapUserByTemplate?templateName=[String]&userName=[String]&realName=[String]&email=[String]&targetName=[String]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. newUser ist eine Map mit den Attributen des neuen Scope-Accounts.
Beispiel

GET-URL:

api/createLdapUserByTemplate?templateName=Springfield&userName=l.simpson&realName=Simpson%2C%20Lisa&email=lisa.simpson@rewoo.com&targetName=Lisa%20Simpson

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"newUser": {
		"id": 3,
		"userName": "l.simpson",		
		"realName": "Simpson, Lisa",		
		"email": "lisa.simpson@rewoo.com",		
		"loginNode": {
			"id": 6,
			"name": "Lisa Simpson",
			"aspectId": 2,
			"aspectName": "Mitarbeiter",
			"topLevelId": 1,
			"topLevelName": "REWOO Technologies AG",
			"topLevelIsProcess": false,
			"parentNodeIds": [2],
			"parentNodeNames": ["Mitarbeiter"]
		}		
	}
}

LDAP-Konfiguration auslesen

Anfrage
Die LDAP-Konfiguration des Scope-Servers kann mit folgender API-URL ausgelesen werden:
api/getLdapUserConfig
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. ldapUserConfig ist eine Liste der Konfigurationsparameter.
Beispiel

GET-URL:

api/getLdapUserConfig

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"ldapUserConfig": [
		"usernameAttribute": "uid",
		"realnameAttribute": "displayName",
		"emailAttribute": "mail"
	]
}

Key-Value-Store

Key-Value-Store: mit einzelnem Schlüssel abfragen

Anfrage
Mit folgender API-URL kann ein Wert aus dem Key-Value-Store von Scope für externe Anwendungen ausgelesen werden:
api/getExternalAppValue?appId=[String]&key=[String]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. value enthält den nachgefragten Wert.
Beispiel

GET-URL:

api/getExternalAppValue?appId=myApp&key=country

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"key": "country",
	"value": "Germany"		
}

Key-Value-Store: mit Schlüssel-Präfix abfragen

Anfrage
Mit folgender API-URL können Werte mit einem Schlüssel-Präfix aus dem Key-Value-Store von Scope für externe Anwendungen ausgelesen werden:
api/getExternalAppValuesByPrefix?appId=[String]&keyPrefix=[String]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. keyValues enthält eine Map mit Key-Value-Paaren.
Beispiel

GET-URL:

api/getExternalAppValuesByPrefix?appId=myApp&keyPrefix=color

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"keyPrefix": "color",
	"keyValues": {
		"color green": "0x53ba50",
		"color yellow": "0xffc400",
		"color red": "0xcc2828",
	}
}

Key-Value-Store: Wert schreiben

Anfrage
Mit folgender API-URL kann ein Wert in den Key-Value-Store von Scope für externe Anwendungen geschrieben werden:
api/writeExternalAppValue?appId=[String]&key=[String]&value=[String]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt.
Beispiel

GET-URL:

api/writeExternalAppValue?appId=myApp&key=country&value=Germany

JSON-Rückgabe:

{
	"success": true,
	"message": "",
	"key": "country",
	"value": "Germany"		
}

Key-Value-Store: alle Werte löschen

Anfrage
Mit folgender API-URL können alle Werte im Key-Value-Store von Scope für eine bestimmte externe Anwendungen gelöscht werden:
api/clearExternalAppValues?appId=[String]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt.
Beispiel

GET-URL:

api/clearExternalAppValues?appId=myApp

JSON-Rückgabe:

{
	"success": true,
	"message": ""		
}

Webhooks

Webhook anmelden

Anfrage
Ein Webhook ist eine URL, die bei Auftreten eines Events aufgerufen wird. Momentan werden zwei Events unterstützt:
  • cron - der Scheduler hat den Job mit dem angegebenen Namen erfolgreich ausgeführt
  • value_change - Werte von Formularen des angegebenen Typs wurden geändert
api/addWebhook?event=[ cron | value_change ]&name=[String]&url=[String]&login=[String]&password=[String]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt.
Beispiel

GET-URL:

api/addWebhook?event=value_change&name=Rechnungen&url=https://rewoo.de/test&login=test&password=test

JSON-Rückgabe:

{
	"success": true,
	"event": "VALUE_CHANGE",
	"name": "Rechnungen" 		
}
Payload des Events CRON
Wenn der Scheduler einen Job erfolgreich ausgeführt hat, schickt er an alle für dieses Event registrierten Webhooks folgenden Payload im JSON-Format:
{
	"event": "CRON",
	"jobName": "UpdateTODAYDependenciesJob"
}
Payload des Events VALUE_CHANGE
Wenn Werte von Formularen geändert wurden, schickt Scope an alle für dieses Event registrierten Webhooks folgenden Payload im JSON-Format:
{
	"event": "VALUE_CHANGE",
	"elementType": "Rechnungen",
	"elements": [3,8,12]
}

Webhook abmelden

Anfrage
Mit folgendem Aufruf können Webhooks wieder abgemeldet werden.
api/removeWebhook?event=[ cron | value_change ]&name=[String]&url=[String]
Für diese Anfrage benötigt man administrative Rechte.
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt.
Beispiel

GET-URL:

api/removeWebhook?event=value_change&name=Rechnungen&url=https://rewoo.de/test

JSON-Rückgabe:

{
	"success": true
}

Mehrere Operationen

Mehrere Operationen in einer Transaktion ausführen

Anfrage
Mit folgender API-URL können mehrere der oben aufgelisteten Operationen in einer Transaktion ausgeführt werden, damit sichergestellt ist, dass entweder alle Operationen oder keine durchgeführt wurde:
api/executeAtomic?appId=[String]
Rückgabe
Das Ergebnis ist eine Map im JSON-Format. success ist ein Flag, ob die Anfrage erfolgreich bearbeitet wurde. In message steht im Fehlerfall eine Nachricht, die Aufschluss über das Problem gibt. results ist eine Map mit dem Namen der Operation und dem Ergebnis.
Beispiel

Es soll ein neuer Account angelegt werden und zusätzlich die vom Active Directory vergebene global eindeutige Id im Key-Value Store der Scope-internen Account-ID zugeordnet werden, damit der Account im Active Directory zugeordnet werden kann. Die im ersten Schritt erzeugte Scope-ID kann über den Platzhalter %<Operationsname>.<Ergebnisparameter>% referenziert werden.

GET-URL:

api/executeAtomic?actions=[{"actionName"="createUserByTemplate","staticParams"={"templateName"="Springfield","realName"="Simpson, Lisa","email"="lisa.simpson@rewoo.com","targetName"="Lisa Simpson"},"dynamicParams"={}},{"actionName"="writeExternalAppValue","staticParams"={"appId"="myRestTool","key"="GUID-5ca3e4d3-8b6a-469a-8ff3-9eb61b9f7265"},"dynamicParams"={"value"="%createUserByTemplate.newUser.id%"}}]

JSON-Rückgabe:

{
	"success": true,
	"results": {
		"createUserByTemplate": {
			"success": true,
			"message": "",
			"newUser": {
				"id": 73,
				"userName": "l.simpson",		
				"realName": "Simpson, Lisa",		
				"email": "lisa.simpson@rewoo.com",		
				"loginNode": {
					"id": 6,
					"name": "Lisa Simpson",
					"aspectId": 2,
					"aspectName": "Mitarbeiter",
					"topLevelId": 1,
					"topLevelName": "REWOO Technologies AG",
					"topLevelIsProcess": false,
					"parentNodeIds": [2],
					"parentNodeNames": ["Mitarbeiter"]
				}		
			}
		},
		"writeExternalAppValue": {
			"success": true,
			"message": "",
			"key": "GUID-5ca3e4d3-8b6a-469a-8ff3-9eb61b9f7265",
			"value": "73"		
		}
	},
	"message": ""		
}