Clearing Codes
Die erweiterten Clearing Codes geben der B2B die Möglichkeit bestimmte Eigenschaften beim Neustart abhängig vom Clearing Code zu setzen. So ist es z.B. möglich eine Nachricht direkt einem Channel zuzuordnen oder z.B. Aperak Checks zu überspringen.
Clearing Codes definieren
Clering Codes können über Schlüssel-Werte Paare definiert:
100=Restart 200=Versand fehlerhaft. Klärung bei Fachgruppe
Der Schlüssel ist dabei eine dreistellige Zahl. Der Wert ist die Beschreibung des Clearing Codes.
Nachrichtenkontext (MessageContext) Eigenschaften setzen
Durch das direkte Setzen von Attributen im MessageContext kann die Nachrichtenverarbeitung beim Neustart geändert werden. So kann z.B. die Formaterkennung, die Channeldistribution oder die Validierung übersprungen werden. Zudem ist es möglich den Basechannel zu setzen, sodass die Nachricht direkt diesem Channel zugeordnet ist.
Angenommen wir haben den ClearingCode xxx und die MessageContext Eigenschaften P1, P2 und P3, dann sind die Zuweisungen immer wie folgt aufgebaut:
&Properties.xxx=P1,P2,P3
&Property.xxx.P1=Value1
&Property.xxx.P2=Value2
&Property.xxx.P3=Value3
Wobei der Clearing Code in der Extension definiert sein muss (also als Key-Value-Paar).
Die Werte, welche zugewiesen werden, können wie folgt gesetzt werden:
&Property.xxx.P1=[String], mit [String] eine beliebige Zeichenfolge die nicht mit $ beginnt. So wird genau dieser Wert genommen.&Property.xxx.P1=$DB, es wird der Wert genommen der zu der Property P1 persistiert wurde.&Property.xxx.P1=$NULL, die Property wird zu NULL gesetzt&Property.xxx.P1=$ClearingShort, der Kurztext, der beim Setzen des ClearingCodes gesetzt wurde.&Property.xxx.P1=$ClearingLong, der Langtext, der beim Setzen des ClearingCodes gesetzt wurde.
Typische MessageContext Eigenschaften:
| Key | Beschreibung |
|---|---|
| FORCE_POSITIVE_CONTRL | In der Validierung (ValidatorAction) wird kein Contrl-Fehler erzeugt, sondern auf CONTRL-Ebene positiv validiert. APERAK-Prüfung bei CONTRL-valider Nachricht |
| B3P_SKIP_VALIDATION | Es wird keine Validierung durchgeführt. Weder CONTRL- noch APERAK-Prüfung |
| B3P_SKIP_APERAK_CHECK | Normale CONTRL-Prüfung, keine APERAK-Prüfung |
| B3P_MAIL_SEC | Ausgehende Nachrichten werden ohne Verschlüsselung und Signierung durch FSS verschickt |
| RESTART_SEND_CONTRL | CONTRL wird nochmals verschickt auf Basis des Validierungsergebnisses |
| RESTART_SEND_APERAK | APERAK wird nochmals verschickt auf Basis des Validierungsergebnisses |
| B3P_SKIP_CHANNEL_DISTRIBUTION | Channel Distribution wird übersprungen |
| B3P_SKIP_FORMAT_RECOGNITION | Format Recognition wird übersprungen |
| B3P_BASE_CHANNEL_ID | Weißt die Nachricht diesem Channel zu |
| B3P_SKIPABLE | Ist die Eigenschaft auf “false” gesetzt, werden Services erneut ausgeführt |
| B3P_SET_VS_AND_BS_TO_MAN | “true” setzt VS und BS auf “MAN” (default). Mit “false” wird nur die Spalte “CS” geändert. |
Feste Meta Keys (veraltetes Verfahren - nicht empfohlen)
Bei den festen Meta Keys werden einer Menge von Clearing Codes eine Eigenschaft zugewiesen. Dies macht die Konfiguration unübersichtlich, deswegen sollen stattdessen direkt die MessageContext Eigenschaften, wie oben gezeigt, gesetzt werden.
In folgender Extension wird das Aussetzen des Aperak Checks Umgesetzt:
Beispielextension:
101=Restart ohne APERAK-Prüfung
&SkipAperakCheck=101
Momentan Sind folgende feste Meta Keys verfügbar:
| Key | Beschreibung | Alternative MessageContext Eigenschaft |
|---|---|---|
| &ForcePositiveContrl | In der Validierung (ValidatorAction) wird ein positives Contrl-Ergebnis erzeugt. Contrlprüfungen werden übersprungen (MPIDZ05Z06Check, DuplicateMessageCheck, WrongFormatFilterChannelDistribution, …) In der ContrlActionStandard wird eine positive Contrl erzeugt. | FORCE_POSITIVE_CONTRL = true |
| &SkipContrlCheck | dasselbe wie &ForcePositiveContrl | FORCE_POSITIVE_CONTRL = true |
| &SkipAperakCheck | Aperakprüfungen werden übersprungen. | B3P_SKIP_APERAK_CHECK = true |
| &SkipCryptoCheck | Ausgehende Nachrichten werden ohne Verschlüsselung und Signierung durch FSS verschickt | aktuell keine |
| &PositiveCodes | Nur für Easyplus | |
| &InWork | Nur für Easyplus |
Beispiel Extension
000=In Arbeit [X]
501=Ticket [NLI]
503=Ticket [NLI] Fachlich erledigt
599=Manuell ablehnen
600=Manuell bestätigt
601=Restart ohne Validierung (keine CONTRL, keine APERAK)
602=Restart ohne CONTRL-Prüfung (pos. CONTRL, evtl APERAK)
603=Restart ohne CONTRL-Prüfung mit erneutem CONTRL/APERAK Versand (pos. CONTRL, evtl APERAK)
604=Restart ohne APERAK-Prüfung (CONTRL, keine APERAK)
605=Restart ohne CONTRL-Prüfung, ohne APERAK-Prüfung mit erneutem CONTRL Versand (pos. CONTRL, keine APERAK)
606=Restart ohne CRYPTO-Prüfung (Inbound)
607=Restart ohne CRYPTO-Prüfung (Outbound)
&SkipCryptoCheck=606;607
610=Restart mit Services
611=Restart ohne Services
612=Erledigt
613=Obsolet
&Properties.599=B3P_BASE_CHANNEL_ID,B3P_MAIL_BODY_CONTENT,B3P_SKIP_FORMAT_RECOGNITION,B3P_SKIP_CHANNEL_DISTRIBUTION,RESTART_SEND_CONTRL,RESTART_SEND_APERAK
&Property.599.B3P_BASE_CHANNEL_ID=INBOUND_MANUAL_REJECTED
&Property.599.B3P_MAIL_BODY_CONTENT=Nicht näher spezifiziertes Problem. Bitte wenden Sie sich bei Rückfragen an die unten stehenden Adresse.
&Property.599.B3P_SKIP_FORMAT_RECOGNITION=$NULL
&Property.599.B3P_SKIP_CHANNEL_DISTRIBUTION=$NULL
&Property.599.RESTART_SEND_CONTRL=true
&Property.599.RESTART_SEND_APERAK=true
&Properties.600=B3P_BASE_CHANNEL_ID,B3P_MAIL_BODY_CONTENT,B3P_SKIP_FORMAT_RECOGNITION
&Property.600.B3P_BASE_CHANNEL_ID=INBOUND_MANUAL_CONFIRM
&Property.600.B3P_MAIL_BODY_CONTENT=$ClearingLong
&Property.600.B3P_SKIP_FORMAT_RECOGNITION=$NULL
&Properties.601=SKIP_VALIDATION
&Property.601.SKIP_VALIDATION=true
&Properties.602=FORCE_POSITIVE_CONTRL,RESTART_SEND_CONTRL,RESTART_SEND_APERAK
&Property.602.FORCE_POSITIVE_CONTRL=true
&Property.602.RESTART_SEND_CONTRL=true
&Property.602.RESTART_SEND_APERAK=true
&Properties.603=FORCE_POSITIVE_CONTRL
&Property.603.FORCE_POSITIVE_CONTRL=true
&Properties.604=SKIP_APERAK_CHECK
&Property.604.SKIP_APERAK_CHECK=true
&Properties.605=FORCE_POSITIVE_CONTRL,SKIP_APERAK_CHECK,RESTART_SEND_CONTRL
&Property.605.FORCE_POSITIVE_CONTRL=true
&Property.605.SKIP_APERAK_CHECK=true
&Property.605.RESTART_SEND_CONTRL=true
&Properties.606=B3P_SKIP_CHANNEL_DISTRIBUTION,B3P_SKIP_FORMAT_RECOGNITION,B3P_BASE_CHANNEL_ID
&Property.606.B3P_SKIP_CHANNEL_DISTRIBUTION=$NULL
&Property.606.B3P_SKIP_FORMAT_RECOGNITION=$NULL
&Property.606.B3P_BASE_CHANNEL_ID=$DB
&Properties.607=B3P_SKIP_CHANNEL_DISTRIBUTION,B3P_SKIP_FORMAT_RECOGNITION,B3P_BASE_CHANNEL_ID
&Property.607.B3P_SKIP_CHANNEL_DISTRIBUTION=$NULL
&Property.607.B3P_SKIP_FORMAT_RECOGNITION=$NULL
&Property.607.B3P_BASE_CHANNEL_ID=OUTBOUND_NO_CRYPTO
&Properties.610=B3P_SKIPABLE
&Property.610.B3P_SKIPABLE=false
&Properties.612=B3P_SET_VS_AND_BS_TO_MAN
&Property.612.B3P_SET_VS_AND_BS_TO_MAN=false
Nachrichten per REST neu starten
In den folgenden Beispielen steht B2B_URL für die Basis-URL der B2B einschließlich Kontextpfad, zum Beispiel http://b2b.example.com/b2bbp-engine/api.
immediateRestart muss true sein: Nur dann wird die Nachricht neu gestartet. Das Verhalten von Services beim Neustart wird über die Konfiguration des verwendeten Clearing Codes gesteuert.
Eine oder mehrere Nachrichten: clearItem
Der Endpunkt POST $B2B_URL/clearings/clearItem setzt den Clearing Code für die angegebenen Nachrichten und startet sie unmittelbar neu.
{
"immediateRestart": true,
"clearingItem": {
"messageIds": [
"MESSAGE_ID_1",
"MESSAGE_ID_2"
],
"code": "<CLEARING_CODE>",
"shorttext": "<KURZTEXT>",
"longtext": "<LANGTEXT>"
}
}
Alle Nachrichten eines Filters: clear-all-items
Der Endpunkt POST $B2B_URL/clearings/clear-all-items ermittelt die Nachrichten über messageFilter, setzt für jede den Clearing Code und startet sie unmittelbar neu. Das folgende Beispiel beschränkt den Aufruf auf Nachrichten im Verarbeitungsstatus ERR.
{
"immediateRestart": true,
"clearingItemWithoutMessageIds": {
"code": "<CLEARING_CODE>",
"shorttext": "<KURZTEXT>",
"longtext": "<LANGTEXT>"
},
"messageFilter": {
"processStates": "ERR"
}
}
Aufruf mit OAuth2
Das Access Token muss die Rolle B2B-MessageMonitor-Write enthalten. Ein Token kann für einen dazu berechtigten Keycloak-Client über den Client-Credentials-Flow bezogen werden:
ACCESS_TOKEN=$(curl --silent --show-error --fail \
--user "$CLIENT_ID:$CLIENT_SECRET" \
--data-urlencode "grant_type=client_credentials" \
"$TOKEN_URL" | jq --raw-output '.access_token')
Mit dem erhaltenen Token können beide Endpunkte aufgerufen werden:
curl --fail-with-body --request POST "$B2B_URL/clearings/clearItem" \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"immediateRestart": true,
"clearingItem": {
"messageIds": ["MESSAGE_ID_1"],
"code": "<CLEARING_CODE>",
"shorttext": "<KURZTEXT>",
"longtext": "<LANGTEXT>"
}
}'
curl --fail-with-body --request POST "$B2B_URL/clearings/clear-all-items" \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"immediateRestart": true,
"clearingItemWithoutMessageIds": {
"code": "<CLEARING_CODE>",
"shorttext": "<KURZTEXT>",
"longtext": "<LANGTEXT>"
},
"messageFilter": {
"processStates": "ERR"
}
}'
Aufruf mit Basic Auth
curl --fail-with-body --user "$B2B_USER:$B2B_PASSWORD" \
--request POST "$B2B_URL/clearings/clearItem" \
--header "Content-Type: application/json" \
--data '{
"immediateRestart": true,
"clearingItem": {
"messageIds": ["MESSAGE_ID_1"],
"code": "<CLEARING_CODE>",
"shorttext": "<KURZTEXT>",
"longtext": "<LANGTEXT>"
}
}'
curl --fail-with-body --user "$B2B_USER:$B2B_PASSWORD" \
--request POST "$B2B_URL/clearings/clear-all-items" \
--header "Content-Type: application/json" \
--data '{
"immediateRestart": true,
"clearingItemWithoutMessageIds": {
"code": "<CLEARING_CODE>",
"shorttext": "<KURZTEXT>",
"longtext": "<LANGTEXT>"
},
"messageFilter": {
"processStates": "ERR"
}
}'