Dynamic External Links

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)
View Me   Edit Me