Einleitung
Dynamic External Links ist eine Modifikation des alten ExternalLinkServlet. Diese macht das anlegen der externen links wesentlich dynamischer und einfacher zu bedienen. Die komplette Einrichtung wird in der Extension „EXTERNAL_LINK_METADATA“ durchgeführt und folgende Kapitel beziehen sich auf einzelne Abschnitte der Extension.
Aktivierung der DynamicExternalLinks
Es muss folgende Zeile in die Extension hinzugefügt werden:
isDynamic=True
Template Ausdrücke
In diese Extension werden Templates ausgewertet, welche dafür sind String Werte dynamisch zur Laufzeit zu bestimmen. Es ist auf Groß- und Kleinschreibung zu achten!
String
Ein Template ist immer ein normaler String solange er nicht ein „$(„ enthält.
Message Template
Mit dem Message Template kann direkt auf eine Spalte in der Tabelle B2BBP_DATA_MESSAGES vorgenommen werden (Die Zeile wird automatisch ermittelt).
$(message.ROW) mit ROW in {messageid, referenceid, direction, … , clearingmode}
Beispiel: $(message.alternativeid)
ExtendedState Template
Mit dem ExtendedState Template kann direkt auf eine Spalte in der Tabelle B2BBP_DATA_ STATE _HISTORY zugegriffen werden (Die Zeile wird automatisch ermittelt).
$(extendedState.ROW) mit ROW in {stateid, messageid, type, … , sysidextension}
Beispiel: $(extendedState.type)
SyncDelta Template
Mit dem SyncDelta Template kann direct auf die Spalten in der Tabelle B3P_DATA_SYNCDELTA zugegriffen werden (Die Zeile wird automatisch ermittelt).
$(syncDelta.ROW) mit ROW in {messageId, logsys, status}
Beispiel: $(syncDelta.logsys)
Da das logsys als String in der Form system_client abgelegt ist, aber wir meistens an dem system oder den client interessiert sind gibt es hier die zusätzlichen shortcuts system und client.
Beispiel: $(syncDelta.system)
Mapping Template
Damit kann direkt auf Werte zugegriffen werden, welche in der Extension „EXTERNAL_LINK_METADATA“ abgelegt sind. Hierbei wird jedoch immer nach aktuellen System und Client und in der Oberfläche angemeldeten User gesucht.
$(mapping.MAPKEY) mit Eintrag in Extension MAPKEY.SYSTEM.CLIENT.B2BUSER=VALUE
Beispiel:
$(mapping.SAPUID)
SAPUID.REK.100.admin=BERN
MappingDecrypted Template
Ist analog zum Mapping Template nur dass der VALUE noch Base64 entschlüsselt wird.
Url Parameter Template
Man kann direct auf einen Parameter aus der URL zugreifen, welche das Servlet aufgerufen hat.
Beispiel:
http://....?stateId=test
$(get.stateId) = test
Extenion Template
Greift auf eine Extension zu und liest den Value zum gegebenen Key aus.
Beispiel:
$(extension, EASYPLUS_MPV_COMMUNICATION,$(message.sender)_$(message.partner)_Test)
Liest aus der Extension EASYPLUS_MPV_COMMUNICATION den Key 99000000001_99000000002_Test und gibt den Value zurück.
Substring
Es ist auch möglich von Werten nur einen Substirng zu nutzen. Das beste Beispiel ist hier, dass das Backend immer als System mit Mandant angegeben ist. Also z.B. REK100. Sollte jedoch nur der Wert REK oder nur 100 benötigt werden kann ein Substring benutzt werden.
Beispiel: $(substring, REK100, 0, 3)
Dies ergibt dann den Wert REK. Es können auch Templateausdrücke verschachtelt werden:
Attribute Tabelle
Direkten Zugriff auf die Tabelle b2bbp_data_attribute ist durch das
Template $(attribute.ATTRIBUTEID)
Wobei ATTRIBUTEID ist die Id des Attributes nach dem gesucht werden soll.
Aktivierung eines Keys
Es können mehrere Designs für Externe Nachrichten erstellt werden. Die Auswahl eines Design zur Laufzeit wird durch eine „CONDITION“ festgelegt und hat folgenden Aufbau:
CONDITION=(TEMPLATE=VALUE=KEY)+(,TEMPLATE=VALUE=KEY)*
Mit TEMPLATE ist ein Template Ausdruck aus Kapitel 3 gemeint. Value als Referenzergebnis und KEY als genutzter Key im Grobdesign. Sobald Template gleich dem Value ist wird der Key zur Generierung des Links benutzt. Hierbei wird das erst gefundene Ergebnis von links nach rechts gewählt. Also wäre am Ende eine Tautologie als Fallback möglich.
Beispiel: CONDITION=extendedState.type=PT=EXTLINK, TRUE=TRUE=EXTLINK2
Grobdesign der Externen Nachricht
Das grobdesign wird in der Extension wird durch GROUPS und ELEMENTS definiert. Es wird zur Laufzeit genau das Grobdesign benutzt, welches den Key aus Kapitel 4 enthält. Dies ist dem Aufbau einer Absprungadresse zum ISU nachempfunden. Es wird folgende Syntax benutzt:
KEY.GROUPS=G1,G2,…
KEY.ELEMENTS.G1=E11,E21,…
KEY.ELEMENTS.G2=E12,E22,…
…
KEY.G1.E11=TEMPLATE
Beispiel:
EXTLINK.GROUPS=System
EXTLINK.ELEMENTS.System=Name
EXTLINK.System.Name=$(extendedState.systemId)
Beispiel Extension mit erzeugten Absprungadresse
Extension
isDynamic=True
CONDITION=extendedState.Type=PT=EXTLINK,
TRUE=TRUE=EXTLINK2
EXTLINK.GROUPS=System,User,Function
EXTLINK.ELEMENTS.System=Name,Client
EXTLINK.ELEMENTS.User=Name,Password,Language
EXTLINK.ELEMENTS.Function=Command
EXTLINK.System.Name=$(extendedState.systemId)
EXTLINK.System.Client=$(extendedState.sysIdExtension)
EXTLINK.User.Name=$(mapping.SAPUID)
EXTLINK.User.Password=$(mappingencrypted.SAPPW)
EXTLINK.User.Language=DE
EXTLINK.Function.Command=->$(value),F2->IN,V2->$(message.alternativeId),F3->WB,V3->$(extendedState.state),F4->WI,V4->$(extendedState.type),F5->VS,V5->$(message.state),F6->BS,V6->$(message.acknowledgement),F7->CS,V7->$(message.clearingCode),F8->CH,V8->$(message.channelId)
EXTLINK2.GROUPS=System,User,Function
EXTLINK2.ELEMENTS.System=Name,Client
EXTLINK2.ELEMENTS.User=Name,Password,Language
EXTLINK2.ELEMENTS.Function=Command
EXTLINK2.System.Name=$(extendedState.systemId)
EXTLINK2.System.Client=$(extendedState.sysIdExtension)
EXTLINK2.User.Name=$(mapping.SAPUID)
EXTLINK2.User.Password=$(mappingencrypted.SAPPW)
EXTLINK2.User.Language=DE
EXTLINK2.Function.Command=->$(value),F2->IN,V2->$(message.alternativeId),F3->WB,V3->$(extendedState.state),F4->WI,V4->$(extendedState.state),F5->VS,V5->$(message.state),F6->BS,V6->$(message.acknowledgement),F7->CS,V7->$(message.clearingCode),F8->CH,V8->$(message.channelId)
\#Login
data
SAPUID.REK.100.admin=BERN
SAPPW.REK.100.admin=BROzy+YuOgU=
## Erzeugter Link
\[System\]
Name=REK
Client=100
\[User\]
Name=BERN
Password=admin
Language=DE
\[Function\]
Command=->$(08767907),F2->IN,V2->$(10008890),F3->WB,V3->$(DA),F4->WI,V4->$(DA),F5->VS,V5->$(SUC),F6->BS,V6->$(SUC),F7->CS,V7->$(800),F8->CH,V8->$(INBOUND\_LIEF)