REST-Service
Unter der URL https://my.living-apps.de/rest/
ist eine REST-Schnittstelle
zugänglich, die Ihnen über HTTP ermöglicht, Daten aus Ihren LivingApps abzurufen,
neue Datensätze zu erzeugen, sowie vorhandene Datensätze zu ändern, oder zu
löschen.
Autorisierung
Um die REST-Schnittstelle benutzen zu können, benötigen Sie einen Login-Token, den Sie unter
bei anlegen können.
Dieser Login-Token gewährt Ihren HTTP-Anfragen auf die REST-Schnittstelle dieselben Zugriffsrechte, die Sie als Benutzer auch haben.
In obigem Beispiel ist der Login-Token folgender Text:
6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI
Diesen Login-Token müssen Sie bei allen HTTP-Anfragen an die REST-Schnittstelle
im Authorization
-Header mitgeben und zwar folgendermaßen:
Authorization: Bearer 6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI
D.h. wenn Sie die Liste Ihrer LivingApps abrufen wollen, geht das beispielsweise
mit curl
folgendermaßen:
$ curl -s -X 'GET' \
'https://my.living-apps.de/rest/apps' \
-H 'accept: application/json' \
-H 'Authorization: Bearer 6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI'
Falls Sie requests
in Python verwenden, geht das folgendermaßen:
Python 3.13.2 (main, Feb 4 2025, 14:51:09) [Clang 16.0.0 (clang-1600.0.26.6)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
... "https://my.living-apps.de/rest/apps",
... headers={
... "Accept": "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... )
>>> response.json()
...
Verfügbare Endpoints
GET https://my.living-apps.de/rest/apps
Gibt Informationen über alle Ihre LivingApps zurück.
GET https://my.living-apps.de/rest/apps/{app_id}
Gibt Informationen über die LivingApp mit der ID
{app_id}
zurück.GET https://my.living-apps.de/rest/apps/{app_id}/records
Gibt Informationen über die Datensätze der LivingApp mit der ID
{app_id}
zurück.POST https://my.living-apps.de/rest/apps/{app_id}/records
Legt in der LivingApp mit der ID
{app_id}
einen neuen Datensatz an.GET https://my.living-apps.de/rest/apps/{app_id}/records/{record_id}
Gibt Informationen über den Datensatz mit der ID
{record_id}
in der LivingApp mit der ID{app_id}
zurück.PUT https://my.living-apps.de/rest/apps/{app_id}/records/{record_id}
Ändert den Datensatz mit der ID
{record_id}
in der LivingApp mit der ID{app_id}
. Nicht übergebene Feldwerte werden auf „leer“ gesetzt.PATCH https://my.living-apps.de/rest/apps/{app_id}/records/{record_id}
Ändert den Datensatz mit der ID
{record_id}
in der LivingApp mit der ID{app_id}
. Nicht übergebene Feldwerte werden nicht geändert.DELETE https://my.living-apps.de/rest/apps/{app_id}/records/{record_id}
Löscht den Datensatz mit der ID
{record_id}
in der LivingApp mit der ID{app_id}
.POST https://my.living-apps.de/rest/files
Löscht den Datensatz mit der ID
{record_id}
in der LivingApp mit der ID{app_id}
.
Unter https://my.living-apps.de/rest/docs
finden Sie eine Liste dieser
verfügbaren Endpoints und eine Erklärung der unterstützen Parameter.
Fehlermeldungen
Folgende Fehlermeldungen können bei der Verwendung des REST-Services auftreten:
„Bearer“-Token ungültig (bearer-token-invalid
)
Der im Authorization
-Header bei der HTTP-Abfrage übergebene Login-Token ist
ungültig.
Beispiel:
>>> import pprint, requests
>>> login_token = "falsch"
>>> response = requests.get(
... "https://my.living-apps.de/rest/apps",
... headers={
... "Accept": "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... )
>>> pprint.pprint(response.json())
{'detail': 'Bearer token is invalid.',
'status': 401,
'title': 'Unauthorized access',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-bearer-token-invalid'}
„Basic“-Autorisierung ungültig (basic-auth-invalid
)
Es ist auch möglich sich mittels „Basic“-Autorisierung (also über Benutzername und Passwort) zu autorisieren. Dieser Fehler tritt auf, wenn Benutzername oder Passwort ungültig sind.
Beispiel:
>>> import pprint, requests
>>> response = requests.get(
... "https://my.living-apps.de/rest/apps",
... headers={
... "Accept": "application/json",
... },
... auth=("user@example.org", "falsch"),
... )
>>> pprint.pprint(response.json())
{'detail': 'Basic authentication credentials are invalid.',
'status': 401,
'title': 'Unauthorized access',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-bascic-auth-ivalid'}
LivingApp unbekannt (unknown-app
)
Die bei der HTTP-Abfrage gesendete LivingApp-ID ist ungültig.
Beispiel:
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
... "https://my.living-apps.de/rest/apps/000000000000000000000000",
... headers={
... "Accept": "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... )
>>> pprint.pprint(response.json())
{'app_id': '000000000000000000000000',
'detail': 'The LivingApp specified via `app_id` does not exist.',
'status': 404,
'title': 'LivingApp not found',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-unknown-app'}
Keine Zugriffrechte auf LivingApp (no-app-permission
)
Der bei der HTTP-Abfrage übergebene Benutzer hat nicht die nötigen Zugriffrechte auf der spezifizierten LivingApp.
Beispiel:
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
... "https://my.living-apps.de/rest/apps/680a201a8f45887b855d1b99",
... headers={
... "Accept": "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... )
>>> pprint.pprint(response.json())
{'app_id': '680a201a8f45887b855d1b99',
'detail': 'You don't have permission to access the LivingApp specified via `app_id`.',
'status': 403,
'title': 'LivingApp not accessible',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-no-app-permission'}
Keine Rechte zum Erzeugen einer LivingApp (no-permission-app-creation
)
Der bei der HTTP-Abfrage übergebene Benutzer hat nicht die nötigen Rechte, um einen neue LivingApp anzulegen.
Beispiel:
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.post(
... "https://my.living-apps.de/rest/apps",
... headers={
... "Accept": "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... json={
... "name": "My App",
... "description": "My new App",
... "gramgen": "m",
... "typename_nom_sin": "Test",
... "typename_gen_sin": "Test",
... "typename_dat_sin": "Test",
... "typename_acc_sin": "Test",
... "typename_nom_plu": "Test",
... "typename_gen_plu": "Test",
... "typename_dat_plu": "Test",
... "typename_acc_plu": "Test",
... "controls": {
... "my_string": {"label": "My_string", "fulltype": "string/text", "description": "My description"},
... "my_number": {"label": "My Number", "fulltype": "number", "required": True},
... },
... }
... )
>>> pprint.pprint(response.json())
{'detail': 'You don't have permission to create a new LivingApp.',
'status': 403,
'title': 'No permission to create a new LivingApp',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la_erw_rest_service_error_no_permission_app_creation'}
Datensatz nicht gefunden (record-not-found
)
Der Datensatz mit der bei der HTTP-Abfrage übergebenen ID existiert nicht in der spezifizierten LivingApp (oder Sie haben in dieser LivingApp nur das Recht, die Ihnen zugewiesenen Datensätze zu sehen, und der spezifizierte Datensatz gehört nicht dazu).
Beispiel:
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
... "https://my.living-apps.de/rest/apps/680a23234731c68fdf429d23/records/000000000000000000000000",
... headers={
... "Accept": "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... )
>>> pprint.pprint(response.json())
{'app_id': '680a23234731c68fdf429d23',
'detail': 'The record specified via `record_id` does not exist in the '
'LivingApp specified via `app_id` (or is not accessible).',
'record_id': '000000000000000000000000',
'status': 404,
'title': 'Record not found',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-record-not-found'}
Feld nicht gefunden (field-not-found
)
Der Feld-Identifizierer, der bei der HTTP-Abfrage zum Anlegen oder Ändern von Datensätzen übergeben wurde, existiert nicht in der spezifizierten LivingApp.
Beispiel:
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.post(
... "https://my.living-apps.de/rest/apps/680a23234731c68fdf429d23/records",
... headers={
... "Accept" : "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... json={
... "fields": {
... "falsch": 42,
... },
... },
... )
>>> pprint.pprint(response.json())
{'app_id': '680a23234731c68fdf429d23',
'control_identifier': 'falsch',
'detail': 'The field with the identifier in `control_identifier` does not '
'exist in the LivingApp specified via `app_id`.',
'status': 400,
'title': 'Field identifier not found',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-field-not-found'}
Ungültiger Feld-Wert (illegal-field-value
)
Der Feld-Wert, der bei der HTTP-Abfrage zum Anlegen oder Ändern von Datensätzen übergeben wurde, ist für diesen Feld-Typ ungültig, d.h. er hat den falschen Typ oder einen ungültigen Wert.
Beispiele:
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.post(
... "https://my.living-apps.de/rest/apps/5bffc841c26a4b5902b2278c/records",
... headers={
... "Accept": "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... json={
... "fields": {
... "nachname": 42,
... },
... },
... )
>>> pprint.pprint(response.json())
{'app_id': '5bffc841c26a4b5902b2278c',
'control_identifier': 'nachname',
'control_type': 'string',
'detail': 'The given value must be `None` or of type `str`, but is of type '
'`int`.',
'field_type': 'int',
'field_value': '42',
'status': 400,
'title': 'Unsupported field value',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-illegal-field-value'}
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.post(
... "https://my.living-apps.de/rest/apps/5bffc841c26a4b5902b2278c/records",
... headers={
... "Accept": "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... json={
... "fields": {
... "geburtsdatum": "2000",
... },
... },
... )
>>> pprint.pprint(response.json())
{'app_id': '5bffc841c26a4b5902b2278c',
'control_identifier': 'geburtsdatum',
'control_type': 'date/date',
'detail': 'The given `date/date` value must conform to the format `%Y-%m-%d`, '
"but it doesn't.",
'field_type': 'str',
'field_value': "'2000'",
'status': 400,
'title': 'Unsupported field value',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-illegal-field-value'}
Ungültiger Ziel-Applikation (invalid-target-app
)
Der Wert, der bei Anlegen einer App für ein App-Lookup-Feld als Parameter
lookup_app
angegeben wurde ist ungültig.
Dies kann beispielsweise sein, wenn None
übergeben wurde:
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.post(
... "https://my.living-apps.de/rest/apps",
... headers={
... "Accept": "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... json={
... "name": "My App",
... "description": "My new App",
... "gramgen": "m",
... "typename_nom_sin": "Test",
... "typename_gen_sin": "Test",
... "typename_dat_sin": "Test",
... "typename_acc_sin": "Test",
... "typename_nom_plu": "Test",
... "typename_gen_plu": "Test",
... "typename_dat_plu": "Test",
... "typename_acc_plu": "Test",
... "controls": {
... "my_applookupselect": {"label": "my_applookupselect", "fulltype": "applookup/select", "lookup_app": None},
... },
... }
... )
>>> pprint.pprint(response.json())
{'detail': '`lookup_app` is missing or empty',
'status': 400,
'title': 'Invalid target app',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la_erw_rest_service_error_invalid_target_app'}
Oder auch wenn die URL nicht mit der Basis-URL übereinstimmt:
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.post(
... "https://my.living-apps.de/rest/apps",
... headers={
... "Accept": "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... json={
... "name": "My App",
... "description": "My new App",
... "gramgen": "m",
... "typename_nom_sin": "Test",
... "typename_gen_sin": "Test",
... "typename_dat_sin": "Test",
... "typename_acc_sin": "Test",
... "typename_nom_plu": "Test",
... "typename_gen_plu": "Test",
... "typename_dat_plu": "Test",
... "typename_acc_plu": "Test",
... "controls": {
... "my_multipleapplookupselect": {"label": "my_multipleapplookupselect", "fulltype": "multipleapplookup/select", "lookup_app": "https://www.example.com"},
... },
... }
... )
>>> pprint.pprint(response.json())
{'detail': 'The given `lookup_app` value must be a valid URL for a target LivingApp, so it must start with `https://my.living-apps.de/rest/apps/`, but it doesn't.',
'status': 400,
'title': 'Invalid target app',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la_erw_rest_service_error_invalid_target_app'}
Ungültiger vSQL-Ausdruck (invalid-vsql-expression
)
Der vSQL-Ausdruck, der bei der HTTP-Abfrage, die alle Datensätze einer LivingApp
zurückliefert, als Parameter filter
oder orderby
übergeben wurde,
ist ungültig.
Dies kann beispielsweise sein, weil eine ungültige Syntax verwendet wurde:
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
... "https://my.living-apps.de/rest/apps/5bffc841c26a4b5902b2278c/records",
... headers={
... "Accept" : "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... params={
... "filter": "now() >= ++x",
... },
... )
>>> pprint.pprint(response.json())
{'detail': 'The vSQL expression `now() >= ++x` is invalid',
'exception': 'antlr3.exceptions.NoViableAltException: '
"NoViableAltException(38!=[''])",
'expression': 'now() >= ++x',
'status': 400,
'title': 'Invalid vSQL expression',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-invalid-vsql-expression'}
oder weil ein Feld angegeben wird, das nicht existiert:
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
... "https://my.living-apps.de/rest/apps/5bffc841c26a4b5902b2278c/records",
... headers={
... "Accept" : "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... params={
... "filter": "r.v_falsch.startswith('prefix')",
... },
... )
>>> pprint.pprint(response.json())
{'cause': {'detail': 'The attribute name `v_falsch` is unknown.',
'expression': 'r.v_falsch',
'operation': 'Attribute access operation (`A.name`)'},
'context': 'where',
'detail': "The `where` vSQL expression `r.v_falsch.startswith('prefix')` is "
'invalid',
'exception': 'll.la.vsql.VSQLUnknownNameError',
'root': {'expression': "r.v_falsch.startswith('prefix')",
'operation': 'Method call (`A.name(B, ...)`)'},
'status': 400,
'title': 'Invalid vSQL expression',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-invalid-vsql-expression'}
oder weil ein nicht existierendes Attribut verwendet wird:
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
... "https://my.living-apps.de/rest/apps/5bffc841c26a4b5902b2278c/records",
... headers={
... "Accept" : "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... params={
... "filter": "r.v_geburtstag.year >= today().falsch",
... },
... )
>>> pprint.pprint(response.json())
{'cause': {'detail': 'The attribute name `falsch` is unknown.',
'expression': 'today().falsch',
'operation': 'Attribute access operation (`A.name`)'},
'context': 'where',
'detail': 'The `where` vSQL expression `r.v_geburtstag.year >= '
'today().falsch` is invalid',
'exception': 'll.la.vsql.VSQLUnknownNameError',
'root': {'expression': 'r.v_geburtstag.year >= today().falsch',
'operation': 'Greater-than or equal comparison (`A >= B`)'},
'status': 400,
'title': 'Invalid vSQL expression',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-invalid-vsql-expression'}
oder weil eine Funktion mit den falschen Argumenten aufgerufen wird:
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
... "https://my.living-apps.de/rest/apps/5bffc841c26a4b5902b2278c/records",
... headers={
... "Accept" : "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... params={
... "filter": "r.v_geburtstag >= >= date(2000, 2, False)",
... },
... )
>>> pprint.pprint(response.json())
{'cause': {'detail': 'Type combination `INT`, `INT`, `BOOL` is not supported.',
'expression': 'date(2000, 2, False)',
'operation': 'Function call (`name(A, ...)`)'},
'context': 'where',
'detail': 'The `where` vSQL expression `r.v_geburtstag >= date(2000, 2, '
'False)` is invalid',
'exception': 'll.la.vsql.VSQLSubnodeTypesError',
'root': {'expression': 'r.v_geburtstag >= date(2000, 2, False)',
'operation': 'Greater-than or equal comparison (`A >= B`)'},
'status': 400,
'title': 'Invalid vSQL expression',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-invalid-vsql-expression'}
Request-Parameter ungültig (request-validation-failed
)
Dieser Fehler tritt dann auf, wenn Parameter bei der HTTP-Abfrage ein ungültiges Format haben, also beispielsweise, wenn eine App- oder Datensatz-ID nicht dem vorgeschriebenen Format entspricht.
Beispiel:
>>> login_token = "680a032bdtUrdhiMqYLfCRtAiVLMXxmQuKdvpPSBDGuTGsDpdliRYMGaKYoBOxNYDynSxANtfGyJJwpMGtevJtqEiRwDMfZGFh"
>>> response = requests.get(
... "https://my.living-apps.de/rest/apps/falsch",
... headers={
... "Accept": "application/json",
... "Authorization": f"Bearer {login_token}",
... },
... )
>>> pprint.pprint(response.json())
{'errors': [{'ctx': {'pattern': '^[0-9a-f]{24,}$'},
'input': 'falsch',
'loc': ['path', 'app_id'],
'msg': "String should match pattern '^[0-9a-f]{24,}$'",
'type': 'string_pattern_mismatch'}],
'status': 422,
'title': 'Request validation error.',
'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-request-validation-failed'}
Interne Fehlermeldungen
Die folgenden Fehlermeldungen sind interne Fehler, die bei der normalen Verwendung des REST-Services nicht auftreten können (aber hier trotzdem der Vollständigheit halber aufgeführt werden).
Sollte einer dieser Fehler bei Ihnen auftreten, so wenden Sie sich bitte an LivingLogic.
Unbekannter Benutzer (unknown-user
)
Bei der Verwendung einer internen API konnte der Benutzer nicht bestimmt werden.
„Bearer“-Token fehlt (bearer-token-missing
)
Bei der Verwendung einer internen API konnte der „Bearer“-Token nicht gefunden werden.
Datensatz konnte nicht angelegt werden (record-not-created
)
Ein interner Datenbank-Fehler ist während das Anlegens eines Datensatzes aufgetreten.
Datensatz konnte nicht geändert werden (record-not-updated
)
Ein interner Datenbank-Fehler ist während das Ändern eines Datensatzes aufgetreten.
Datensatz konnte nicht gelöscht werden (record-not-deleted
)
Ein interner Datenbank-Fehler ist während das Löschens eines Datensatzes aufgetreten.