Worum es geht
Geht in CRMS etwas schief, bekommst du nie einen Satz zurück, sondern einen Schlüssel. Ein Schlüssel ist ein fester Name in kebab-case, also klein geschrieben mit Bindestrichen, zum Beispiel template-not-found. Das Frontend übersetzt ihn in die Sprache der Person, die vor dem Bildschirm sitzt.
Die Form
POST /crms/templates
{ "key": "audit-report", "outputType": "DOCUMENT" }422
{
"messageKey": "validation-failed", ← der Schlüssel
"code": "422", ← der Statuscode, als Text
"layer": "crms", ← wo abgelehnt wurde
"violations": [ ← nur bei Feldfehlern
{ "field": "scope", "rule": "required" },
{ "field": "defaultLocale", "rule": "required" }
]
}| Feld | Bedeutung |
|---|---|
messageKey | der Schlüssel, Parameter hängen mit | dahinter |
code | der HTTP-Statuscode als Text, zum Beispiel "404" |
layer | bei CRMS immer crms |
violations | jedes verletzte Feld mit field und rule. Fehlt, wenn es keine gibt |
Die Form heißt ErrorAnswer und ist für alle Module gleich. CDMS und CIAS antworten genauso, siehe Das Fehlerformat.
Schlüssel mit Parametern
Manche Schlüssel tragen Parameter: zusätzliche Werte, die dein Frontend in den übersetzten Text einsetzen kann. Sie stehen hinter dem Schlüssel, getrennt durch |.
messageKey | Bedeutung |
|---|---|
request-too-large|16777216 | der Körper ist größer als 16777216 Bytes |
format-not-offered|DOCX | diese Installation bietet DOCX nicht an |
template-scope-not-admitted|user | der Scope USER ist hier nicht zugelassen |
Ein Parameter nennt ein Feld, eine Grenze oder ein Format, nie einen Wert aus deiner Anfrage.
Feldfehler: violations
Zwei Schlüssel bringen eine Liste violations mit.
- die HTTP-Schnittstelle prüft Form und Felder der Anfrage
- Regeln
required,invalid,not-allowed - Felder in Listen heißen z. B.
content.assets[0].content - Pfadvariablen heißen wie im Pfad:
edition,variant,revision
- die Payload passt nicht zu den Feldregeln der Vorlage
- Felder wie
customer.name - Regeln wie
requiredoderpayload-too-large - dieselben Regeln wie
/crms/render/validate
| Regel | Bedeutung |
|---|---|
required | das Feld fehlt oder ist null. reference ist bei FINAL Pflicht |
invalid | der Wert passt nicht, hat den falschen JSON-Typ, ist keine UUID in Langform, oder ein Grund bei Dokumenten ist kein Schlüssel |
not-allowed | ein unbekanntes Feld, oder pdfProfile bei einem anderen Format als PDF |
Die Regeln der Payload stehen unter Die Payload-Prüfung.
Wie der Statuscode entsteht
Die Module von CRMS wissen nichts von HTTP. Sie werfen nur einen Schlüssel. Die HTTP-Schnittstelle von CRMS hat eine Tabelle, die jedem Schlüssel einen Statuscode gibt.
| Fehler von CRMS? | Schlüssel in der Tabelle? | Antwort |
|---|---|---|
| ja | ja | der Schlüssel mit seinem Status aus der Tabelle |
| ja | nein | der Schlüssel mit 500 |
| nein | – | 500 internal-error, ohne Text |
Fehler, die Spring selbst meldet, etwa eine falsche HTTP-Methode oder ein anderer Content-Type als JSON beim Rendern, beantwortet Spring mit seinem eigenen Status.
Statuscodes und ihre Schlüssel
| Status | Bedeutung | Schlüssel |
|---|---|---|
| 400 | Körper ist kein JSON | malformed-json |
| 401 | niemand angemeldet | crms-authentication-required |
| 403 | Rolle fehlt | template-write-denied, approval-role-missing, approval-author-excluded, document-access-denied |
| 404 | nicht da oder nicht sichtbar | template-not-found, document-not-found, document-key-unknown |
| 409 | Zustand passt nicht | template-edition-exists, template-variant-exists, template-draft-changed, template-draft-missing, template-review-pending, template-revision-not-in-review, approval-already-given, template-rollback-target-invalid, template-not-published, template-concurrent-change, document-revisions-disabled, transient-documents-disabled, journal-concurrent-change, document-retention-active, document-legal-hold-active, document-legal-hold-inactive, document-concurrent-change, document-locked |
| 410 | gelöscht | document-erased, document-key-destroyed |
| 413 | Körper zu groß (Vorlagen, Dokumentgründe) | request-too-large |
| 415 | Kodierung nicht unterstützt | content-encoding-unsupported |
| 422 | Inhalt abgelehnt | validation-failed, payload-rejected, alle template-…-Regeln für Scope, Grund, Quelltext, Felder und Assets, template-syntax-error, template-render-failed, render-output-too-large, render-asset-unknown, format-not-offered, format-not-for-template, transient-requires-system-template, template-svg-rejected, template-svg-not-for-output-type, attachments-not-for-final, attachments-not-for-format, render-resource-refused, render-pdf-failed, render-word-invalid, render-word-failed, render-table-invalid, render-csv-single-sheet, render-mode-not-for-format |
| 500 | Fehler im Betrieb | internal-error, render-failed, timestamp-failed, timestamp-certificate-expired, document-key-unavailable, document-decryption-failed, document-integrity-failed, document-object-missing, document-seal-failed, storage-versioning-missing |
| 502 | Dateispeicher antwortet nicht richtig | storage-failed |
| 503 | gerade keine Kapazität | render-capacity-exhausted, render-interrupted |
| 504 | Rendern dauerte zu lange | render-timeout |
Ein zu großer Render-Körper ist kein 413, sondern 422 payload-rejected mit der Regel payload-too-large. Die Grenzen beim Rendern stehen unter Grenzen beim Rendern.
Die Schlüssel des Clients
Die Schlüssel von crms-client (crms-authentication-required, crms-access-denied, crms-unavailable) entstehen in der aufrufenden Anwendung, nicht im CRMS-Dienst. Sie stehen unter Der Client für den eigenen Dienst.