Konfiguration der Format-Erkennung für JSON Nachrichten über die B3P_FORMAT_RECOGNITION_JSON_PATHS Extension

Übersicht

In der B2B Verarbeitung von Nachrichten findet initial immer eine sogenannte Format-Erkennung statt um Meta-Informationen über die Nachricht zu sammeln, anhand dieser die weitere Verarbeitung zu definieren und im Nachrichtenmonitor darzustellen.

Eine der Standard Format-Erkennungen ist hierbei die Json-Erkennung. Mit der Extension B3P_FORMAT_RECOGNITION_JSON_PATHS kann die Format-Erkennung auch für spezifische JSON-Nachrichtentypen konfiguriert werden.

Einrichtung

Damit die B2B Format-Erkennung für JSON-Nachrichten durchgeführt wird, muss die Extension B3P_FORMAT_RECOGNITION_JSON_PATHS angelegt und konfiguriert werden. In dieser Extension werden die spezifischen JSON-Formate definiert und die Informationen, die aus den Nachrichten extrahiert werden sollen.

Zunächst wird eine Liste der spezifischen JSON-Formate definiert, die (in konfigurierter Reihenfolge) erkannt werden können. Anschließend wird für jedes spezifische JSON-Format ein JsonPath-Ausdruck definiert, der in allen Nachrichten dieses Formats vorkommt und dieses durch einen Match identifiziert.

Zu jedem spezifischen JSON-Format werden dann die Informationen definiert, die aus den Nachrichten extrahiert werden und an der entsprechenden Stelle im Format-Objekt abgelegt werden sollen.

Beispiel der Extension B3P_FORMAT_RECOGNITION_JSON_PATHS:

# Liste aller bekannten spezifischern Json-Formate, mit Komma getrennt
specificPresentations=InboundApiRequest,OutboundApiRequest,myJson,stammdatenJson
# Idenfikation des spezifischen Json-Formats über JsonPath Ausdrücke
InboundApiRequest.specificPresentation=['id']
OutboundApiRequest.specificPresentation=['apiId']
myJson.specificPresentation=['myJson']
stammdatenJson.specificPresentation=['stammdaten']


InboundApiRequest.type=['apiId']
InboundApiRequest.version=['majorVersion']
InboundApiRequest.referenceId=['headers']['transactionId']
# consider system partner switch for inbound messages according to system=sender
InboundApiRequest.system=['partnerMpId']
InboundApiRequest.systemCode=['partnerMpId']
InboundApiRequest.partner=['tenantMpId']
InboundApiRequest.partnerCode=['tenantMpId']
InboundApiRequest.correlationId=['parameters']['referenceId']
InboundApiRequest.additional.requestType=['endpointPath']

OutboundApiRequest.type=['apiId']
OutboundApiRequest.version=['majorVersion']
OutboundApiRequest.referenceId=['headers']['transactionId']
OutboundApiRequest.partner=['partnerMpId']
OutboundApiRequest.partnerCode=['partnerMpId']
OutboundApiRequest.system=['tenantMpId']
OutboundApiRequest.systemCode=['tenantMpId']
OutboundApiRequest.correlationId=['parameters']['referenceId']
OutboundApiRequest.additional.requestType=['endpointPath']

myJson.type=['myJson']['myType']
myJson.version=['myJson']['myVersion']
myJson.referenceId=['myJson']['messageIdentifier']
myJson.partner=['myJson']['partner']
myJson.partnerCode=['myJson']['partner']
myJson.system=['myJson']['system']
myJson.systemCode=['myJson']['system']

stammdatenJson.type=['transaktionsdaten']['pruefidentifikator']
# Pfad zur version im JSON: Greift auf das erste Element im Array "stammdaten"
stammdatenJson.version=['stammdaten'][0]['versionStruktur']
stammdatenJson.referenceId=['transaktionsdaten']['nachrichtenReferenznummer']
# Pfad zur Partner im JSON: Greift auf das zweite Element im Array "stammdaten"
stammdatenJson.partner=['stammdaten'][1]['rollencodenummer']
stammdatenJson.partnerCode=['stammdaten'][1]['rollencodenummer']
# Pfad zur system im JSON: Greift auf das erste Element im Array "stammdaten"
stammdatenJson.system=['stammdaten'][0]['rollencodenummer']
stammdatenJson.systemCode=['stammdaten'][0]['rollencodenummer']
Du könntest im JSONPath-Filter auch andere Bedingungen verwenden, z.B.:

Nach einem anderen Wert filtern: ?(@.boTyp=='MARKTTEILNEHMER')
Nach mehreren Bedingungen filtern: ?(@.boTyp=='MARKTTEILNEHMER' && @.rollencodenummer=='9900134000002')
?(@.rollencodenummer=='9900134000002' || @.rollencodenummer=='9903008000009')
Nach Teilstring suchen: ?(@.rollencodenummer =~ /9900.*/)
Nach Index: [1] für das zweite Element
Eine Liste auswerten: ['stammdaten'][*]['rollencodenummer']
Welche Bedingung sinnvoll ist, hängt davon ab, welches Element du aus dem Array extrahieren möchtest.

Beispiel für stammdaten:
{
  "stammdaten": [
    {
      "boTyp": "MARKTTEILNEHMER",
      "versionStruktur": "1",
      "gewerbekennzeichnung": true,
      "rollencodenummer": "9903008000009",
      "rollencodetyp": "BDEW"
    },
    {
      "boTyp": "MARKTTEILNEHMER",
      "versionStruktur": "1",
      "gewerbekennzeichnung": true,
      "rollencodenummer": "9900134000002",
      "rollencodetyp": "BDEW"
    },
    {
      "boTyp": "GESCHAEFTSPARTNER",
      "versionStruktur": "1",
      "name1": "MusterName1",
      "name2": "MusterName2",
      "gewerbekennzeichnung": false,
      "partneradresse": {
        "postleitzahl": "xxx",
        "ort": "MusterOrt",
      },
      "grundlageZurVerringerungDerUmlagenNachEnfg": "KEINE_ANGABE"
    }
  ],
  "links": {},
  "transaktionsdaten": {
    "pruefidentifikator": "55001",
    "nachrichtenReferenznummer": "9275441751634781966",
  }
}
View Me   Edit Me