AS4 Customizing in der B2B
Allgemeine Konfiguration
Global Properties
AS4_FEATURE
Um AS4-Nachrichten im Nachrichtenmonitor angezeigt zu bekommen, muss die Global Property AS4_FEATURE auf true gesetzt werden.
Customizing Export
Dieser Customizing Export beinhaltet die B2B-Konfiguration für AS4, die hier beschrieben ist und kann als Import genutzt werden. Dabei sollte aber darauf geachtet werden, dass die Action IDs und Channelnamen noch nicht vergeben sind oder diese zusammengeführt werden dürfen.
Ausgehende AS4-Kommunikation
Um Nachrichten mit Hilfe der AS4-Services an den Marktpartner zu verschicken, muss in der B2B ein neuer Channel angelegt werden. In diesem befindet sich unter anderem eine Action, die den entsprechenden Service anspricht, der die Nachricht an den AS4-Outbound-Market-Message-Service übergibt. Damit die zurück gemeldete AS4-ID in der Datenbank gespeichert werden kann, muss dem Channel eine neue SetPropertyAction hinzugefügt werden. Diese Action ist zwingend erforderlich, damit die AS4-Nachrichten im Nachrichtenmonitor angezeigt werden können. Ist der Marktpartner nicht in der AS4-Adress-Datenbank hinterlegt oder das AS4-System inaktiv, wird versucht, die Nachricht per AS2 oder Mail zu verschicken.
Das Routing, also der Weg, wie die Nachrichten in den neuen Channel gelangen, ist abhängig vom bereits bestehenden Routing und muss entsprechend konfiguriert werden. Zum Beispiel direkt am Service, mit dem die Nachricht in die B2B gelangt oder über das Routing der Channel Distribution.
Channel
Ausgehender AS4 Channel
ID | Richtung | Nachrichtentyp | Nachrichtenversion | Präsentationstyp |
---|---|---|---|---|
OUT_AS4 | outbound |
Actions innerhalb des Channels.
Ausgehender AS4 Channel for Contrl und Aperak
Für den Contrl- und Aperak-Versand können entweder neue Channel angelegt oder die bestehenden angepasst werden. So könnten zum Beispiel die Channel wie folgt aussehen:
Status | Aktionsname |
---|---|
active | Indizierung für die Volltextsuche |
active | Nachricht versenden per AS4 |
active | Save Outbound AS4-ID |
active | Nachricht versenden (Mail oder AS2 statt AS4) |
active | Errormail erzeugen bei Fehler |
Actions
AS4 Nachricht senden
Es muss eine PropertyAction gesetzt werden, um den RestClientService aufzurufen, der Edifact-Nachrichten an den AS4-Outbound-Market-Message-Service übergibt.
Name | Type | Klasse | Beschreibung | Urheber |
---|---|---|---|---|
Nachricten versenden per AS4 | java | org.b2bbp.runtime.actions.internal.SetPropertyAction | Ruft den Service auf, der die Edifact an den AS4-Outbound-Market-Message-Service übergibt. | b2bbp.org |
Action Properties
Eigenschaft | Typ | Wert | Name | Import/Export | Kontext überschreiben | Optionen |
---|---|---|---|---|---|---|
B3P_USED_SERVICE_ID | AS4_OUT | Name des Services | NEIN |
AS4-ID speichern
Es muss eine PropertyAction gesetzt werden, um AS4-IDs in der Datenbank speichern zu können, die dann wiederum benötigt werden, um AS4-Nachrichten im Nachrichtenmonitor anzuzeigen.
Name | Typ | Klasse | Beschreibung | Urheber |
---|---|---|---|---|
Save Outbound AS4-Id | java | org.b2bbp.runtime.actions.internal.SetPropertyAction | Speichert die AS4-Id einer ausgehenden AS4-Nachricht | b2bbp.org |
Action Properties
Eigenschaft | Typ | Wert | Name | Import/Export | Kontext überschreiben | Optionen |
---|---|---|---|---|---|---|
ACTION_DECORATORS | ConditionalExecute | NEIN | Technisch | |||
AS4_ID | ${var(as4id)} | AS4-id | NEIN | Technisch |
Wichtig ist, dass die Eigenschaft AS4_ID genau so geschrieben wird und der dynamische Ausdruck den ENTITY_KEY_RESPONSE des Services enthält.
Nachricht versenden (Mail oder AS2 statt AS4)
Kann die Nachricht nicht per AS4 verschickt werden, weil entweder das AS4-System inaktiv ist oder die AS4-Partneradresse nicht in der AS4-Adress-Datenbank gepflegt ist (zu erkennen an der leeren AS4_ID), so wird die Nachricht per AS2 oder Mail verschickt. Hierfür kann die bereits existierende Action zum Mail/AS2 Versand kopiert werden. Es müssen in der Regel lediglich B3P_MAIL_TO und B3P_USED_SERVICE_ID angepasst werden.
Name | Typ | Klasse | Beschreibung | Urheber |
---|---|---|---|---|
Nachricht versenden (Mail oder AS2 statt AS4) | java | org.b2bbp.runtime.actions.internal.OutboundMailHandler | Sammelt Informationen für den Mail- und AS2-Versand, wenn die Nachricht nicht per AS4 verschickt werden konnte. | b2bbp.org |
Action Properties
Eigenschaft | Typ | Wert | Name | Import/Export | Kontext überschreiben | Option |
---|---|---|---|---|---|---|
B3P_AS2_SUBJECT | ${template(&(this.FORMAT.type)&(this.FORMAT.attributes.UtilRef)&(this.FORMAT.senderCode)_&(this.FORMAT.partnerCode)20)}${edipath(UNB[1]+4+0)}${template(&(this.FORMAT.referenceId))} | JA | Technisch | |||
B3P_ATTACHMENT_NAME | ${template(&(this.FORMAT.type)&(this.FORMAT.attributes.UtilRef)&(this.FORMAT.senderCode)_&(this.FORMAT.partnerCode)20)}${edipath(UNB[1]+4+0)}${template(&(this.FORMAT.referenceId))}.txt | AS4-Id | JA | Technisch | ||
B3P_COMPRESS_ATTACHMENT_BYTE_SIZE | 1000000 | NEIN | ||||
B3P_MAIL_BODY_CONTENT | ${loadExtension(mail_text_outbound)} | JA | Technisch | |||
B3P_MAIL_FROM | ${loadExtensionProperty(SENDER_EMAIL,${template(FROM_&(this.FORMAT.senderCode))},true)} | JA | Technisch | |||
B3P_MAIL_SUBJECT | ${template(&(this.FORMAT.type)&(this.FORMAT.attributes.UtilRef)&(this.FORMAT.senderCode)_&(this.FORMAT.partnerCode)20)}${edipath(UNB[1]+4+0)}${template(&(this.FORMAT.referenceId))} | JA | Technisch | |||
B3P_MAIL_TO | ${if(${equals(${length(${var(as4id)})},0)},${getmpidmail(${template(&(this.FORMAT.senderCode))},${template(&(this.FORMAT.partnerCode))})}, )} | JA | Technisch | |||
B3P_SEND_ATTACHMENT_GZ | true | NEIN | ||||
B3P_SET_CONTRL_STATE | true | JA | ||||
B3P_USED_SERVICE_ID | ${if(${equals(${length(${var(as4id)})},0)},${elp(SENDER_EMAIL,${template(OUTBOUNDSERVICE_&(this.FORMAT.partnerCode))},true)}, )} | JA | Technisch |
Services
Übergabe an den AS4-Outbound-Market-Message-Service
Um eine Edifact-Nachricht (current payload) an die AS4-Services zu übergeben, kann der RestClientService genutzt werden.
Key | Value |
---|---|
ID | AS4_OUT |
Aktiv | false |
Name | Übergabe an den AS4-Outbound-Market-Message-Service |
Type | REST |
Klasse | org.b2bbp.eai.services.rs.RestClientService |
Channel | |
Richtung | outbound |
Urheber | b2bbp |
Datum |
Service Properties
Eigenschaft | Wert | Kontextüberschreiben |
---|---|---|
ENTITY_KEY_RESPONSE | as4id | NEIN |
ENTITY_KEY_SOURCE | CURRENT_PAYLOAD | NEIN |
HEADER_Content-Type | application/text | NEIN |
METHOD | POST | NEIN |
RESPONSE_CODES_FOR_STOP | 302,400,401,402,403,404,405,406,415,500,501,502,503,504,505,506,507,508,509,510,511 | NEIN |
URL | http://as4-outbound-market-message-service:8080/aep-as4-outbound-market-message-service/marketmessage?${if(${equals(${substring(${template(&(this.FORMAT.senderCode))},0,2)},98)},${elp(AS4_SENDER_EXTENSION, gas, gas, true)},${elp(AS4_SENDER_EXTENSION, electricity, electricity, true)})} | NEIN |
Wichtig ist, dass der ENTITY_KEY_RESPONSE mit dem Wert aus dem dynamischen Ausdruck aus der Action-Eigenschaft AS4_ID übereinstimmt.
Mithilfe der URL wird der AS4-Outbound-Market-Message-Service angesprochen. Wird kein Docker verwendet, muss die URL zu dem Service entsprechend angepasst werden. Für Gas und Strom gibt es unterschiedliche Parameter, die über die URL mitgegeben werden. Daher muss unterschieden werden, welche Nachrichten Gas und welche Strom sind. Dies wird momentan anhand der ILN gemacht. Alle ILNs, die mit 98 beginnen, werden GAS zugeordnet, alle anderen Strom.
Wie die unterschiedlichen Informationen für Gas und Strom genau aussehen, ist in der Extension AS4_SENDER_EXTENSION hinterlegt. Diese wird über einen dynamischen Ausdruck in der URL geladen.
Extensions
AS4_SENDER_EXTENSION
Die Extension vervollständigt die URL aus dem RestClientService.
Für Strom und Gas werden unterschiedliche Informationen mitgegeben:
Strom | Gas |
---|---|
- Sendercode (from) - Partnercode (to) - Sparte (section) - Sender-Qualifier (fromCode) - Partner-Qualifier (toCode) - Format (bdewDocumentType) - Datum/Uhrzeit der Erstellung (bdewDocumentDate) - Referenznummer (bdewDocumentNo) |
- Sendercode (from) - Partnercode (to) - Sparte (section) - BGM-Code (bgmCode) |
Inhalt der Extension:
electricity=from=${template(&(this.FORMAT.senderCode))}&to=${template(&(this.FORMAT.partnerCode))}§ion=electricity&fromCode=${edipath(UNB[1]+2+1)}&toCode=${edipath(UNB[1]+3+1)}&bdewDocumentType=${template(&(this.FORMAT.type))}&bdewDocumentDate=${edipath(UNB[1]+4+0)}${edipath(UNB[1]+4+1)}&bdewDocumentNo=${template(&(this.FORMAT.referenceId))}
gas=from=${template(&(this.FORMAT.senderCode))}&to=${template(&(this.FORMAT.partnerCode))}§ion=gas&bgmCode=${edipath(BGM[1]+1+0)}
Eingehende AS4-Kommunikation
Für die eingehende AS4-Kommunikation gibt es keinen Eingangsservice im ursprünglichen Sinne. Der B2B-Message-Service, ein eigener Microservice, schreibt einen Queue-Eintrag und die Informationen, die die B2B (der Monolith) benötigt, um diesen zu verarbeiten, in die B2B-Datenbank. Anschließend verarbeitet der normale Queue-Service den Eintrag/die Nachricht. Als Default-Eingangschannel ist der Channel INBOUND_MESSAGES hinterlegt. Ist ein anderer Eingangschannel gewünscht, so ist dieser nicht wie üblich in der B2B zu konfigurieren, sondern kann in der application.properties des Microservices AS4-Inbound-Market-Message-Service angegeben werden. Dadurch, dass der Queue-Service die Nachricht verarbeitet, findet die restliche Bearbeitung in der B2B wie üblich statt. So kann beispielsweise über die Channel Distribution das Routing geregelt werden.
Damit der Queue-Service die Nachricht aus der Queue verarbeiten kann muss lediglich eine Art “dummy”-Service angelegt werden.
Services
B2B Message Service
Wichtig ist, dass der Service genau die angegebene ID hat. Eigenschaften besitzt der Service nicht.
Key | Value |
---|---|
ID | B2B_Message_Service |
Aktiv | false |
Name | B2B Message Service (extern) |
Typ | |
Klasse | |
Channel | |
Richtung | inbound |
Urheber | |
Datum |