Design und Umsetzung von Prozessen im Energiehandel
mit SAP CPS Erfahrungen und Best Practices
Florian Nafz, Johannes Demmelhuber, Michael Henninger
29.04.2015
SWM intern
Vertraulich
Öffentlich
Streng
vertraulich
SAP CPS im Energiehandel
1. Energiehandel bei den Stadtwerken München
2. Architektur, Design
4. Erfahrungen & Best Practices
5. Ausblick
Agenda
/ SAP CPS im Energiehandel 29.04.2015 2
Energiehandel bei den Stadtwerken München
3 / SAP CPS im Energiehandel 29.04.2015
Handel von verschiedensten Energieprodukten
Strom
Gas
Kohle
Öl
Verschiedene Handelsplätze
EEX (European Energy Exchange)
ICE (Intercontinental Commodity Exchange)
OTC
…
Emissionshandel
Risikohedging
Energiehandel bei den Stadtwerken München
4 / SAP CPS im Energiehandel 29.04.2015
SAP CPS im Energiehandel
Energiehandel bei den Stadtwerken München
End-of-day (EOD) ist der nächtliche Prozess zur Berechnung eines finalen
Tagesstandes im Energiehandel:
Import von Settlementpreisen der Börsen
Import von weiteren handelsrelevanten Daten (Wechselkurse, Vermarktungsdaten)
Durchführen von Vertrags- und Marginberechnungen
Durchführen von Bewertungen
Erstellen des Handelsreportings
Regulatorisches Reporting
Laufzeit:
Täglich
Beginn: 20:00 Uhr
Ende: ca. 06:00 Uhr
Der End-of-day Prozess
5 / SAP CPS im Energiehandel 29.04.2015
Energiehandel bei den Stadtwerken München
Anwender soll
... Gesamtprozesses starten können.
… Fachlich zusammenhängende Teilprozesse starten können.
Fachadministration
Schneller Überblick über den Ausführungszustand (auch für nicht SAP CPS Experten)
Eigenständiges Einplanen und Ausführen von Jobs und JobChains
Schnelle Anpassbarkeit und Erweiterbarkeit
neue Prozessschritte
weitere Prozesse
Wichtige Anforderungen
6 / SAP CPS im Energiehandel 29.04.2015
Energiehandel bei den Stadtwerken München
Robustheit und Fehlertoleranz
„Event getrieben“ statt „zeitlich getrieben“
Umgang mit Problemen an Schnittstellen
Interne/externe Quellen liefern Daten nicht immer rechtzeitig oder gar nicht.
FTP Server vorübergehend nicht erreichbar
Berechnung im Handelssystem dauern unterschiedlich lange und können auf Fehler laufen
Graceful Degregation
Fehler sollen nur zu teilweisem Abbruch der Kette führen.
Logging und Monitoring
Detailliertes Logging
Automatisches Fehlerreporting
Wichtige Qualitätsanforderungen
7 / SAP CPS im Energiehandel 29.04.2015
Architektur & Design
/ Präsentationstitel / Unternehmensbereich Datum 8
Architektur & Design
Architektur
9
SAP CPS (aktuell M33.98)
Datenquellen Handelssystem Reporting
Berechnungen
Handel
Regulatorisch
Controlling
FT
P, s
FT
P,
HT
TP
S
Berechnungen Berechnungen
SO
AP
Webserv
ice
Webserv
ice
Externe DB JDBC
/ SAP CPS im Energiehandel 29.04.2015
Architektur & Design
Hierarchische Modellierung als
UML Aktivitätsdiagramm
BPMN (Business Process Modelling Notation)
Modellierung des Prozessschritte
10 / SAP CPS im Energiehandel 29.04.2015
Vertragsberechnung
EEXIndexbewertung EEX Import ICE Währungskurse holen
und Importieren
Import EEX
Start
Architektur & Design
Hierarchische Modellierung als
UML Aktivitätsdiagramm
BPMN (Business Process Modelling Notation)
Modellierung des Prozessschritte
11 / SAP CPS im Energiehandel 29.04.2015
Vertragsberechnung
EEXIndexbewertung EEX Import ICE Währungskurse holen
und Importieren
Import EEX
Start
Import Strom Future
ins Handelssystem
Import Strom Spot ins
Handelssystem
Import Gas Future ins
Handelssystem
Hole Preise Strom
Future von EEX
Hole Preise Strom
Spot von EEX
Hole Preise Gas
Future von EEX
Architektur & Design
Job Bausteine
12 / SAP CPS im Energiehandel 29.04.2015
Generische Jobs für wiederkehrende Aufgaben
Dateitransfer
FTP, sFTP, HTTP - Download
Copy, Rename, Delete
(Remote) File Check
Dateimanipulation
Ansteuerung & Überwachung von Schnittstellensystemen
parametrisierte Jobs (Webservice)
Spezielle Jobs
Datenbank
Reporting
Mailversand
Architektur & Design
Beispiel: Schnittstellen
13
Initial
checkBatchJobStatus FinalrunBatchJob
[finalState]
[! finalState]
/ SAP CPS im Energiehandel 29.04.2015
Beispiel: Ansteuerung & Überwachung Schnittstellensystem
Aktivität 1: Ansteuerung
Aktivität 2: Überwachung
Architektur & Design
Verfeinerung
14
* vereinfachte Darstellung (z.B. keine decision nodes)
checkBatchJobStatus
runBatchJob
prüfe Vorbedingung
Starte PSI Bach
(runBatchJob)
prüfe Nachbedingung
Fehlerbehandlung
Jobkette erfolgreich
ausgeführt
Job wird von JobChain
aufgerufen
prüfe Nachbedingung
Überwache PSI Batch
(checkBatchJobStatus)
prüfe Vorbedingung
Fehlerbehandlung
[! erfüllt]
[! erfüllt]
Active
[erfüllt]
[erfüllt]
[erfüllt]
erfüllt
[! erfüllt]
[! erfüllt]
In Precondition wird geprüft , ob die
Vorbedingungen für die Ausführung
erfüllt sind.
Beispiel: „Preise vorhanden“
In Postcondition wir geprüft, ob der
Job korrekt ausgeführt wurde.
Beispiel: „Rechnungen erzeugt“
Zyklische Überwachung des extern
ausgeführten Tasks
Fehlerhandling
/ SAP CPS im Energiehandel 29.04.2015
Architektur & Design
Implementierung in SAP CPS
15
Umsetzung in CPS erfolgt analog zur Modellierung
/ SAP CPS im Energiehandel 29.04.2015
Architektur & Design
Modellierung als eine Jobkette auf Top-Level.
Fachlich zusammengehörende Teilprozesse werden in jeweils eigene Ketten
zusammengefasst.
Vorteile:
Kompletter Lauf wird in einem Diagramm dargestellt
Klare Abhängigkeiten, keine Indirektionen
Geringere Fehleranfälligkeit, in Implementierung der Fachlogik
Nachteile:
Geringere Flexibiliät als eine event-basierte Verschaltung
Änderungen unter Umständen schwieriger (Bsp: Verschieben einzelner Jobs)
Design EOD Prozess
16 / SAP CPS im Energiehandel 29.04.2015
Architektur & Design
Fachliche Subprozesse werden
als Applikationen im CPS
modelliert.
Wiederverwendbare
Jobs/Jobketten werden in eigene
Basis Applikationen ausgelagert
Modellierung in UML
Applikationen als UML Pakete
Abhängigkeiten als UML-
Dependencies
Strukturen als verschachtelte
(„nested“) Komponenten
Applikationsstruktur
17
EOD
+ EOD_Jobs
+ EOD_SubmitFrames
+ EOD_Tools
+ EODGlobalDef
+ EODLib
EOD_Jobs
+ PK_EOD
+ PK_EOD_MANUELL
+ EOD_PSI
+ EODAdmin
+ EODSubchains
+ File
+ PSIReports
+ Reporting
(from EOD)
EOD_SubmitFrames
+ EOD_SubmitFrame
(from EOD)
EODSubchains
+ PK_Abrechnung
+ PK_Administratiion
+ PK_EOD_MAIN_SEQ
+ PK_Formelvertaege
+ PK_Indexbewertung_Rest
+ EEX
+ ELEXON
+ MESAP
+ MIP
+ UK
+ WIND_NCG
(from EOD_Jobs)
Reporting
+ EOD_Report
+ PK_EOD_Report
+ Send_EOD_Report
(from EOD)
EOD_PSI
+ EOD_PSI_checkBatchjobStatus
+ EOD_PSI_runBatchjob
+ PK_EOD_Run_PSI_Job
(from EOD)
ELEXON
+ PK_ELEXON
(from EODSubchains)
WIND_NCG
+ PK_NCG_Balance
+ PK_WIND_NCG
+ PK_Windpark_Ist-EEG
(from EODSubchains)
EEX
+ PK_EEX
+ EEX_HFC_DFC_Index
+ EEX_sFTP_DL
+ EEX_sFTP_Import
(from EODSubchains)
EEX_sFTP_Import
+ PK_EEX_Energy_Spot_hist
+ PK_EEX_Gas_Future_hist
+ PK_EEX_GAS_Import
+ PK_EEX_Gas_Spot_hist
+ PK_EEX_GAS_SPOT_Import
+ PK_EEX_GAS_Tagesrefp
+ PK_EEX_Imports
+ PK_EEX_Kohle_Import
+ PK_EEX_Phelix_hist
+ PK_EEX_STROM_Import
+ PK_EEX_STROM_SPOT_AUC
(from EEX)
EEX_HFC_DFC_Index
+ PK_EEX_Gas_GPL_NCG
+ PK_GAS_DFC
+ PK_GAS_SupportIndexWerte
+ PK_Index_Strom_Kohle
+ PK_Strom_HFC
(from EEX)
MIP
+ PK_MIP
+ PK_MIP_Fernwaerme
+ PK_MIP_Gas_Strom
+ PK_MIP_Muell_Strom
(from EODSubchains)
MESAP
+ PK_Mesap_EPMS_MORGENS
+ PK_RWE_WIND_IST_GYM
(from EODSubchains)
UK
+ PK_Bloomberg
+ PK_GAS_DFC_TTF
+ PK_ICE
+ PK_ICE_EUR
+ PK_ICE_Korrekturliste
+ PK_ICE_USD
+ PK_STROM_HFC_UK
+ ICE
(from EODSubchains)
File
+ FileCopy
+ FileCopyAndRename
+ FileCopyRemote
+ FileExists
+ FileExistsViaRedwood
+ FileExistsWithDL
(from EOD)
EEX_sFTP_DL
+ create_connection_file_PSI_EEX
+ create_connection_file_PSI_EEX_Binary
+ PK_sFTP_EEX
+ start_sFTP_EEX
(from EEX)
ICE
+ create_connection_file_PSI
+ PK_FTP_ICE
+ start_FTP_ICE
+ unzip_ICE_PSI
(from UK)
PSIReports
+ PK_BO_EMIR
+ PK_BO_Marginreport
+ PK_BO_Metadaten_Fred_DAL
+ PK_BO_USD_Kasse_Report
+ PK_BO_Vertragsstatus
+ PK_Check
+ PK_EPMS_Exporte
+ PK_EXAA_Report
+ PK_EXAA_Report_EN
+ PK_PSI_REPORTS
+ PK_Spotpruefung_Schlangenvertrag
+ PK_Systemportfolio_INI_Strom
(from EOD)
EODGlobalDef
+ EODConfigParams
+ EODConfigParams_Def
(from EOD)
EODLib
+ Custom_SWM_CPS_EOD_Util
(from EOD)
«use»
«use»«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
/ SAP CPS im Energiehandel 29.04.2015
Architektur & Design
Beispiel: EOD Lauf
18 / SAP CPS im Energiehandel 29.04.2015
Architektur & Design
Zahlen
• 21 Jobdefinitions
• 72 Jobchain definitions
• 3 Tables / 3 Tabledefinitions
Der End-of-Day in SAP CPS
19 / SAP CPS im Energiehandel 29.04.2015
• 1 Library
• 1 Submit Frame
Erfahrungen & Best Practices
/ SAP CPS im Energiehandel 29.04.2015 20
Erfahrungen & Best Practices
Erfahrungen
Library
Generische Funktionalität
Datenbank Anbindung
Logging
Mehrfach verwendete Funktonalität
Größere und komplexe Berechnungen
Job
Häufig anzupassender Code
Einfache Job spezifische Funktionen
Library Design
21 / SAP CPS im Energiehandel 29.04.2015
Erfahrungen & Best Practices
Architektur von Libraries
22
Basis Bibliotheken mit
generischer
Funktionalität
Anwendungsspezifische
Bibliotheken
/ SAP CPS im Energiehandel 29.04.2015
de.swm.cps.util
+ de.swm.cps.util.db
+ de.swm.cps.util.job
+ de.swm.cps.util.jobchain
+ de.swm.cps.util.soap
+ de.swm.cps.util.xpath
de.swm.cps.eod.report
+ EODReportDataAccess
+ EODReporter
de.swm.cps.eod.main
+ de.swm.cps.eod.main.data
+ de.swm.cps.eod.main.exchange
+ de.swm.cps.eod.main.xml
de.swm.cps.logging
+ AbstractCPSLogger
+ CPSLogger
+ JcsLogger
+ LogEntry
+ Level
Erfahrungen & Best Practices
CPS Libraries sollten Threadsafe sein
Paralleler Zugriff darf zu keinen Seiteneffekten führen
Lebenszyklus von statischen Objekten geht über Laufzeit des Jobs hinaus.
Vermeidung von statischen Objekten in Bibliotheken
Thread Safety (in „SAP CPS Worten“)
„Bibliothek darf von mehreren Jobs gleichzeitig verwendet werden, ohne dass
diese sich gegenseitig behindern.“
Library Design
23 / SAP CPS im Energiehandel 29.04.2015
Erfahrungen & Best Practices
Thread Safety
24
package de.swm.cps;
public class CPSSingleton {
private static CPSSingleton instance;
private int counter = 0;
public static CPSSingleton getInstance(){
if(CPSSingleton.instance == null) {
CPSSingleton.instance = new CPSSingleton();
}
return CPSSingleton.instance;
}
public int getCounter(){
return counter;
}
public void count(){
counter++;
}
}
Beispiel: Singleton in Library
/ SAP CPS im Energiehandel 29.04.2015
Erfahrungen & Best Practices
Beispiel: Singleton in Library
25 / SAP CPS im Energiehandel 29.04.2015
Erfahrungen & Best Practices
Beispiel: Singleton in Library
26
Paralleles ausführen
Job schreiben beide auf die selbe Variable
/ SAP CPS im Energiehandel 29.04.2015
Erfahrungen & Best Practices
Beispiel: Singleton in Library
27
Sequentielles ausführen
/ SAP CPS im Energiehandel 29.04.2015
Erfahrungen & Best Practices
Datenbankzugriff am Beispiel Logging
28 / SAP CPS im Energiehandel 29.04.2015
Ziel: Logging in jcsOut/jcsErr und externe Datenbank erfolgen
EODDBLogger
- cpsTableName :String = EODConfigParams
«abstract»
de.swm.de.logging::AbstractCPSLogger
- prop :EODCPSProperty
+ log(String) :void
+ debug(String) :void
+ info(String) :void
+ error(String) :void
+ warn(String) :void
de.swm.de.logging::JcsLogger
- jcsOut :PrintWriter
- jcsErr :PrintWriter
de.swm.de.logging::CPSLogger
- dbLoggerActive :boolean
de.swm.cps.util.db::CPSJDBCAdapter
- databaseURL :String
- user :String
- password :String
- initizialized :boolean
- connection :Connection
- init() :void
+ connect() :boolean
+ insert() :boolean
+ disconnect() :void
«constructor»
+ CPSJDBCAdapter(String, String, String) :void
Erfahrungen & Best Practices
SAP CPS
29 / SAP CPS im Energiehandel 29.04.2015
Erfahrungen & Best Practices
Job kann im Fehlerfall Event feuern
Job zur Ticket Erzeugung wird ausgeführt
Störungsticket im SWM Ticketsystem wird erzeugt.
Jobdaten im Ticket
JobFiles als Anhang
Fehlermonitoring & Alamierung
30
SWM
Ticketsystem
SAP CPS (aktuell
M33.98)
Störung
/ SAP CPS im Energiehandel 29.04.2015
Erfahrungen & Best Practices
IntelliJ
Redwoodscript Implementierung
Library Programmierung (Java)
Unit Tests
Enterprise Architekt
Modellierung
Dokumentation
Sourcecode Versionierung
Subversion
Verwendete Entwickler Tools
31 / SAP CPS im Energiehandel 29.04.2015
Erfahrungen & Best Practices
Verstärkter Einsatz von Operatormessages
Anwender kann fachliche Fehlerbehebung durch Auswahl in Operatormessage
anstoßen.
Automatische Fehleradaption
Preis-Import klappt nicht
Event wird getriggert
Jobs zum nachträglichen Import werden direkt nach EOD Lauf eingeplant und
ausgeführt.
Steigerung der Parallelisierung
Ausblick
32 / SAP CPS im Energiehandel 29.04.2015
Vielen Dank für Ihre Aufmerksamkeit.