Backendanbindung ISU (Level 2)
 

Einleitung

Im dieser Anleitung wird beschrieben, wie eine existierende WiM Lösung auf eine Level 2 Lösung umgerüstet werden kann. Das angebundene Backendsystem ist in diesem Fall ein ISU System. Wir nehmen an, dass wir einen WiM Knoten und zwei ISU Systeme, einmal für Netz und einmal für Vertrieb, haben. Wenn nur ein System eingerichtet werden soll (z.B. die Netzseite), kann die Vertriebsseite natürlich einfach weggelassen werden.

Die aktuelle Dokumentation der Fubas.

Installation der SAP JCO Treiber

Bevor die Anbindung eingerichtet werden kann muss der SAP JCO Treiber mindestens in der Version 3.0 installiert werden. Dieser muss als Jar in den Tomcat lib Ordner gelegt werden und die zugehörige DLL muss in einen Ordner des Classpath gelegt werden. Dies könnte z.B. der bin Ordner des Tomcats sein.

JCO Besonderheiten

Aufgrund der SAP JCO Implementierung werden Änderungen an der JCO Konfiguration erst nach Neustart der WIM gültig. Gleiches gilt wenn sich die Fuba Schnittstellendefinitionen innerhalb des Fubas ändern.

Einrichtung der Absprungpunkte

Achtung: Für die Formatumstellung zum 01.12.2019 gab es Änderungen an den Absprungpunkten, insbesondere betroffen ist der Prozess Ende Messstellenbetrieb. Bitte prüfen Sie, ob und welche Änderungen Sie vornehmen müssen.

Damit das ISU Aufgerufen werden kann müssen Absprungpunkte in den WiM Prozessen hinzugefügt werden. Dies geschieht einfach dadurch, dass im WiM Schema durch ein Datenbanktool folgende SQL Statements ausgeführt werden.

-- Tabelle leeren
delete from FASTLANE_DB_BACKENDINTEGRATIO;

-- Beginn MSB
insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('End_NLI010020_ZP Check', 'com.nextlevel.bpm.level2.wim.CheckMeterpoint');
insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('Start_NLI010020_Interaktion Messstelle OK_1', 'com.nextlevel.bpm.level2.wim.LoadAddressData');
-- alternativ ab 01.04.2021:
-- insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('Start_NLI010020_Interaktion Messstelle OK_1', 'com.nextlevel.bpm.level2.wim.LoadAddresses');
insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('Start_NLI010020_Gerätedaten eingeben_1', 'com.nextlevel.bpm.level2.wim.DeviceDetails');
insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('End_NLI010050_Warte auf Stammdaten', 'com.nextlevel.bpm.level2.wim.SetDataCom');
insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('End_NLI010050_MSBN Zuordnung', 'com.nextlevel.bpm.level2.wim.MSBAssignment');

-- Ende MSB
insert into fastlane_db_backendintegratio (key_, clazz_) VALUES ('End_NLI050020_ZP Check', 'com.nextlevel.bpm.level2.wim.CheckMeterpoint');
insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('Start_NLI050020_Adressdaten eingeben', 'com.nextlevel.bpm.level2.wim.LoadAddressData');
-- alternativ ab 01.04.2021:
-- insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('Start_NLI050020_Adressdaten eingeben', 'com.nextlevel.bpm.level2.wim.LoadAddresses');
insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('Start_NLI050020_Gerätedaten eingeben_1', 'com.nextlevel.bpm.level2.wim.DeviceDetails');
insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('End_NLIVGM030_MSBN zuordnung', 'com.nextlevel.bpm.level2.wim.MSBAssignment');
insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('End_NLIVGM030_Warte auf Stammdaten', 'com.nextlevel.bpm.level2.wim.SetDataCom');

-- Anforderung von Zwischenablesewerten
INSERT INTO fastlane_db_backendintegratio (key_, clazz_) VALUES ('Start_NLIAMA020_Meldepunkt akzeptieren/ablehnen', 'com.nextlevel.bpm.level2.wim.MeterpointAcceptOrReject');

-- Störungsbehebung
INSERT INTO fastlane_db_backendintegratio (key_, clazz_) VALUES ('Start_NLI070020_Meldepunkt akzeptieren/ablehnen', 'com.nextlevel.bpm.level2.wim.MeterpointAcceptOrReject');

-- Gerätewechsel
INSERT INTO fastlane_db_backendintegratio (key_, clazz_) VALUES ('Start_NLI020020_Meldepunkt akzeptieren/ablehnen', 'com.nextlevel.bpm.level2.wim.MeterpointAcceptOrReject');

--Geräteübernahme
INSERT INTO fastlane_db_backendintegratio (key_, clazz_) VALUES ('Start_NLI100020_Meldepunkt akzeptieren/ablehnen', 'com.nextlevel.bpm.level2.wim.MeterpointAcceptOrReject');

-- Geschäftsdatenanfrage
insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('End_NLI090020_Level2 ZP Check', 'com.nextlevel.bpm.level2.wim.CheckMeterpoint');

-- Kündigung der Messstelle
insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('End_NLI040020_Level2 ZP Check', 'com.nextlevel.bpm.level2.wim.CheckMeterpoint');

-- Invoice
insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('Start_NLI110020_Suche nach Messstelle', 'com.nextlevel.bpm.level2.wim.MeterpointAcceptOrReject');

-- Automatisierungen
insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('Start_NLI010020_Manual Identification', 'com.nextlevel.bpm.level1.wim.automation.begin.messstellenbetrieb.SkipMeterpointIdentification');

insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('Start_NLI010020_Interaktion Messstelle OK_2', 'com.nextlevel.bpm.level1.wim.automation.begin.messstellenbetrieb.SkipCheckMeterpointData');

insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('Start_NLI010020_Gerätedaten eingeben_2', 'com.nextlevel.bpm.level1.wim.automation.begin.messstellenbetrieb.SkipGetMeterDevice');

insert into FASTLANE_DB_BACKENDINTEGRATIO (KEY_, CLAZZ_) values ('Start_NLI050020_Gerätedaten eingeben_2', 'com.nextlevel.bpm.level1.wim.automation.begin.messstellenbetrieb.SkipGetMeterDevice');

Bei den Backendintegrationpoints gibt es die Möglichkeit auch Bedingungen zu hinterlegen. So kann z.B. die Ausführung der BIPs nur für bestimmte System-ILNs zugelassen werden. Dies wäre mit folgendem Audruck möglich.

(ownILN = 9900000000001 OR ownILN = 9900000000001 OR ownILN = 9900000000001)

Oder für bestimmte ILNs einfach ausgeschlossen werden:

ownILN != 9900000000001

Zuordnung von ILNs zu Mandanten

Da wir die Absprünge zum ISU hinzugefügt haben muss die ILN auf einen Mandanten abgebildet werden. Dies kann in den Stammdaten unter den RemoteSystems geschehen.

Hier bilden wir also die ILN 9900NETZ00000 auf den Mandanten CLIENT_NETZ_A10 ab. Für die Vertriebsseite muss dies analog geschehen auf einen weiteren Mandanten (z.B. CLIENT_LIEF). Mehrere ILNs werden mit einem Komma getrennt. Sollte nur ein Backendsystem an das WiM Backend ange-schlossen sein, so reicht hier die Pflege eines WiM Mandanten, unabhängig von der Anzahl der Man-danten im SAP selbst.

Zugangsdaten aus dem ISU hinterlegen

Im nächsten Schritt muss dem Mandanten die Zugansdaten aus dem ISU zugewiesen werden. Dies geschieht in der Extension der WiM JCO_DESTINATION_DATA_PROVIDER.

Im Folgenden, ein Beispiel für die JCO_DESTINATION_DATA_PROVIDER. Der Nutzer muss natürlich im ISU angelegt sein und verfügt über die Entsprechenden Berechtigungen. Die Parameter können z.B. in der B2B Dokumentation nachgeschlagen werden (https://www.next-level-help.org/nlidocu/html/default/webframe.html#Statussynchronisation_-_Anbindung_an_SAP_JCO_3.0.html)

PROVIDER=CLIENT_NETZ_A10;CLIENT_NETZ_B20
CLIENT_NETZ_A10=jco.client.client=010
CLIENT_NETZ_A10=jco.destination.peak_limit=10
CLIENT_NETZ_A10=jco.client.passwd=Vlc4ZIHi7oc=
CLIENT_NETZ_A10=jco.client.user=WIM_RFC_USER
CLIENT_NETZ_A10=jco.client.lang=de
CLIENT_NETZ_A10=jco.client.sysnr=00
CLIENT_NETZ_A10=jco.destination.pool_capacity=3
CLIENT_NETZ_A10=jco.client.ashost=ISUTESTNETZA.sap.test.eu

CLIENT_NETZ_B20=jco.client.lang=de
CLIENT_NETZ_B20=jco.destination.peak_limit=10
CLIENT_NETZ_B20=jco.client.client=020
CLIENT_NETZ_B20=jco.client.passwd=Vlc4ZIHi7oc=
CLIENT_NETZ_B20=jco.client.user= WIM_RFC_USER
CLIENT_NETZ_B20=jco.client.sysnr=00
CLIENT_NETZ_B20=jco.destination.pool_capacity=3
CLIENT_NETZ_B20=jco.client.ashost=ISUTESTNETZB.sap.test.eu

Wichtig ist, dass die (WiM-) Mandanten oben in der Providerliste enthalten und absolut identisch geschrieben sind, zu den vorher eingerichteten WiM Mandanten. Zudem ist darauf zu achten, dass der Provider vor den einzelnen Properties in dieser Extension identisch ist. Mehrere Mandanten werden mit Semikolon getrennt, nicht mit Komma. Änderungen an dieser Stelle benötigen einen Neustart des Tomcats. Die RFC-User Passwörter müssen Base64 encrypted sein.

ISU Ruft WiM auf

Die folgende Konfiguration wird benötigt, um die Aufrufe in Richtung ISU zu WiM zu ermöglichen. Dazu müssen noch 2 weitere Schritte durchgeführt werden.

RFC Service

Es muss für jedes Backendsystem ein Service hinzugefügt werden. Dies erfolgt zunächst im Reiter Endpoints. Dieser wird mit folgenden Eigenschaften gepflegt:

Die Service Properties lauten

  • ID = beliebig
  • Name = beliebig
  • typ = RFC
  • Startup = “Ja”
  • Jar benutzen = “Nein”

die Detail Service Properties lauten wie folgt

  • B3P_JCO_DESTINATION_DATA_PROVIDER = CLIENT_NETZ_A10
  • B3P_JCO_SERVER_DATA_PROVIDER = SERVER_NETZ_A
  • B3P_RFC_/ASPNLI/WIM_SET_SUCCESSFUL_COM = com.nextlevel.bpm.level2.wim.RFCUpdateStatus
  • B3P_SERVER_UNICODE = 1

Es darf je Backend nur ein Service eingerichtet werden. (Im Beispiel zwei ISU Systeme, daher zwei Services) Zu berücksichtigen ist, dass der Aufruf von der arvato Systems perdata GmbH umgesetzt wurde und deshalb im FUBA-Prefix ASPNLI enthalten ist. Außerdem wurde auf eine neue Extension JCO_SERVER_DATA_PROVIDER verwiesen. Diese muss noch hinzugefügt werden.

Zugangsdaten für ISU ruft WiM

Es muss die Extension JCO_SERVER_DATA_PROVIDER hinzu gefügt werden. Auch hier muss bei der Zuordnung darauf geachtet werden, dass die (WiM-) Mandanten genau zu den RFC Service passen und dass die repository_destination genau zu dem Mandanten in der Extension JCO_DESTINATION_DATA_PROVIDER passt.

  PROVIDER= SERVER_NETZ_A;SERVER_NETZ_B
  SERVER_NETZ_A=jco.server.connection_count=2
  SERVER_NETZ_A=jco.server.gwhost=ISUTV01.sap.test.eu
  SERVER_NETZ_A=jco.server.progid=B2B_WIM
  SERVER_NETZ_A=jco.server.gwserv=sapgw00
  SERVER_NETZ_A=jco.server.repository_destination=CLIENT_NETZ_A10

  SERVER_NETZ_B=jco.server.connection_count=2
  SERVER_NETZ_B=jco.server.gwhost= ISUTN01.sap.test.eu
  SERVER_NETZ_B=jco.server.progid=B2B_WIM
  SERVER_NETZ_B=jco.server.gwserv=sapgw00
  SERVER_NETZ_B=jco.server.repository_destination=CLIENT_NETZ_B20

Bitte beachten Sie, dass der in der jco.server.repository_destination hinterlegte Client, nur einmal als führender Client eingetragen werden darf. Bei mehreren Mandanten auf demselben SAP-System, gibt es nur eine Serverkonfiguration (simultan zu den in den Endpoints eingerichteten Services). In der praktischen Umsetzung bedeutet es, dass bei Mehr-Mandantensystemen, welche sich ein Backendsystem teilen, nur ein Server in der JCO_SERVER Konfiguration eingerichtet werden darf. Anders ist es bei Mehr-Mandantensystemen die sich auf unterschiedliche Backend Systeme verteilen. Wie in unserem Beispiel werden hier in der JCO_SERVER Konfiguration die unterschiedlichen Server einzeln eingerichtet.

ISU Einrichten SM 59

Das SAP kann nur RFC-Destinationen aufrufen, die den RFC-Funktionsbausteinen mitgegeben werden. Damit die Verbindung zur Fastlane von den Funktionsbausteinen aufgebaut werden kann, muss die oben genannte Programm-ID noch einer RFC-Destination zugeordnet werden. Die Transaktion zum Erstellen und testen der RFC-Verbindung ist die SM59. Der zu wählende Typ ist „TCP/IP Verbindung“.
Die RFC-Destination kann mit einer beliebigen Bezeichnung angelegt werden ebenso wie die „ProgrammId“. Wichtig ist, dass die ProgrammId in der SM 59, im JCO_SERVER_DATA_PROVIDER und im RFC Service identisch sind.

Neu starten des Tomcats & Tests

Nach der Einrichtung muss der Tomcat neu gestartet werden. Die Anbindung kann dadurch getestet werden, dass jetzt die Prozesse in der WiM für die ILNs durchgespielt werden. Wenn es Verbindungsprobleme geben sollten können diese durch Erhöhung des JCO Trace Levels geloggt werden (https://wiki.scn.sap.com/wiki/display/SI/Java+Connectivity).

Mögliche Anpassungen der Level 2 Anbindung

Zusätzlich gibt es noch Möglichkeiten die Level 2 Anbindung anzupassen.

Global Property SET_DATA_COM_ASYNC_RESPONSE

Wird diese Property auf false gesetzt, wird nach dem Aufruf des Gerätewechsels im ISU nicht auf einen asynchronen Aufruf gewartet um den Prozess fortzusetzen. Defaultwert ist true.