KomA - Robotron Datenbank
Transcription
KomA - Robotron Datenbank
robotron*ecount robotron*esales robotron*ecollect Kommunikationsautomatisierung - KomA Komponentenbeschreibung Version: Stand: 8.0 19.09.2016 Seite 2 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Änderungsnachweis Änderungen Datum Version 21.05.2014 1.0 09.03.2016 7.0 19.09.2016 Geänderte Kapitel Grund der Änderung Erstellung Dokument DOCID-20-6860 Alle Überarbeitung Layout, Dokument für Auslieferung aufbereiten 13.5.6 13.10.3 14.6.1 15.1.4 7.4.1 12.20 12.6 16.3.3 7.1.2.1 16.3.4 10.1.7 10.20 5.4.2 7.1 – 7.47 5.8.3 11.12 3.3.2.1.4 13.8.10 12.22 10.14.1 11.6.4.8 14.6.2 10.11.2.5 13.8.5 13.11.1 3.3.5.5 14.2 13.8.11 Spracheinstellungen Datenbank-Fehler / Übermittlung von KENNUNG_ORIG Bausteinfehler bei getProfileValues/getProfiles Bereinigung der COM-Import-Tabellen FTPSender2 – Timeout Abschlüsse KVASY (Format KVASY) CSV_MEMI2016_RV (Format CSV_MEMIRV) Datenversand-ABO über EAU_ID identifizieren Manipulation des Betreffs Fehler beim E-Mail-Versand Zeichenkodierung in der Datei Zusammenspiel mit EDIFACT-Cockpit (MF_EDIFMON) Beispielkonfiguration für SMB-Verzeichnis Monitoring – Importkonto LPEX Auswertung der .profile unter Linux Importkonfigurator – toDate und dateCompare MMMKVASY (MEMI_SST_KVASY) Zusammenspiel mit EDIFACT-Cockpit (MF_EDIFMON) AFTER_FILE_CLOSE_TRIGGER und TRANSACTION_MODE Workaround EXCEL-Reports Formatierung Importkonfigurator-Beispiel ergänzt Export MSCONS Import von Zählerständen per CSV Einrichtung Excel-Reports-Versand-KomA Excel-Reports Zeilen-/Spaltengrenzen Importkonfigurator - Beispiel 8.0 Überarbeitung Layout, Dokument für Auslieferung aufbereiten Alle Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 3 von 384 Alle Rechte dieser Dokumentation unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung bedürfen der schriftlichen Zustimmung der Robotron Datenbank-Software GmbH. Die Robotron Datenbank-Software GmbH übernimmt keine Haftung für Fehler in diesem Dokument und behält sich das Recht vor, dieses Dokument ohne weitere Ankündigungen jederzeit zu ändern. Über Hinweise und Vorschläge zur Verbesserung bzw. Erweiterung des Dokumentes sind wir jederzeit dankbar. Bitte wenden Sie sich hierfür direkt über die E-Mail-Adresse ecount-dokumentation@robotron.de an uns. Robotron Datenbank-Software GmbH Stuttgarter Straße 29 01189 Dresden Tel.: Fax: E-Mail: Internet: +49 351 25859-0 +49 351 25859-3699 rds@robotron.de www.robotron.de Seite 4 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Inhaltsverzeichnis 1 Allgemeines/Zweck des Dokumentes ................................................................................ 22 2 Architektur ....................................................................................................................... 23 3 Installation und Konfiguration ........................................................................................... 24 3.1 3.1.1 Neuinstallation und Basis-Konfiguration ............................................................................... 24 Config. properties .................................................................................................................. 24 3.1.2 Java-Version ........................................................................................................................... 25 3.1.3 Anpassung des Arbeitsspeichers (RAM) ................................................................................ 26 3.2 3.2.1 3.2.2 Update-Installation ................................................................................................................ 26 Update einzelner Module ...................................................................................................... 26 Komplettupdate ..................................................................................................................... 26 3.3 3.3.1 Konfiguration ......................................................................................................................... 26 Allgemeine Konfigurationsparameter.................................................................................... 27 3.3.2 Einrichtung der Java-Optionen .............................................................................................. 33 3.3.3 3.3.4 3.3.5 Einrichtung der Sperr-Ports ................................................................................................... 37 Einstellung bezüglich des Speicherbedarfes der jeweiligen Prozesse ................................... 38 Parallelbetrieb KomA ............................................................................................................. 38 3.3.6 Einrichtung Automatisches Starten und Stoppen .................................................................. 42 3.3.7 Advanced Features – Wiederverwendung von LIB-Ordner, … .............................................. 45 3.4 3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.6 3.4.7 3.4.8 Verzeichnisstruktur / Skripte ................................................................................................. 45 startjob ................................................................................................................................... 47 archivierung ........................................................................................................................... 47 comimport ............................................................................................................................. 47 comimport_console ............................................................................................................... 47 comimport_stop .................................................................................................................... 47 comimport_background ........................................................................................................ 47 comimport_keytool ............................................................................................................... 47 checkVersions ........................................................................................................................ 48 3.1.1.1 3.1.1.2 3.1.2.1 3.3.1.1 3.3.1.2 3.3.1.3 3.3.1.4 3.3.1.5 3.3.1.6 3.3.2.1 3.3.2.2 3.3.5.1 3.3.5.2 3.3.5.3 3.3.5.4 3.3.5.5 3.3.6.1 3.3.6.2 Import Export 25 25 Java-Version mittels symbolischen Link einrichten 26 Einrichtung der Java-Umgebung Besonderheiten bei Windows-Rechnern Setzen der Java-Version unter Linux Zeitzonen-Informationen der Java-Runtime Allgemeine Speicherplatzoptimierungen Spracheinstellung KomA-Module 29 30 31 31 32 33 Initialisierungsskript env.(cmd|sh) Benutzerspezifisches Initialisierungsskript user_env.(cmd|sh) 33 36 Import Export Ohne SQL_Select_Next_EAU.sql Mit SQL_Select_Next_EAU.sql Beispiel eigener KomA-Server für Excel-Reports 38 39 40 40 41 Beispiel Linux (crontab) Beispiel Windows 42 42 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 3.4.9 3.4.10 3.4.11 3.4.12 3.4.13 3.4.14 3.4.15 3.4.16 3.4.17 3.4.18 3.4.19 3.4.20 3.4.21 3.4.22 4 4.1 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 Seite 5 von 384 datenimport ........................................................................................................................... 48 datenimport_convert ............................................................................................................ 48 datenimport_stop .................................................................................................................. 48 datenversand ......................................................................................................................... 48 datenversand_datei ............................................................................................................... 48 datenversand_eau_id ............................................................................................................ 48 datenversand_stop ................................................................................................................ 48 setup_xch_pwd ...................................................................................................................... 49 PasswordCoding..................................................................................................................... 49 install_updates....................................................................................................................... 50 listversions ............................................................................................................................. 50 lplspool................................................................................................................................... 50 listlicenses .............................................................................................................................. 50 Importkonfigurator ................................................................................................................ 50 Allgemeingültige Informationen ........................................................................................ 51 Allgemeine Hinweise ............................................................................................................. 51 Groß- und Kleinschreibung bei Parametern .......................................................................... 51 Parameterwert (Y/N vs. true/false) ....................................................................................... 51 Zeichenkodierung (Default Cp1252) ...................................................................................... 51 „ALIAS“-Verweis auf andere Properties-Datei....................................................................... 52 Information zu globalen Parametern .................................................................................... 52 ShutdownServer.debug=FALSE/TRUE.................................................................................... 52 Task liefert als Ergebnis der letzten Ausführung die Zeichenfolge 0xFFFFFFFF .................... 53 4.2 Allgemeine Probleme/Lösungen............................................................................................ 53 4.2.1 OutOfMemory – Fehler.......................................................................................................... 53 4.2.2 BindException: Nicht startende Jobs (Datenimport, Datenversand, …) ................................ 54 4.2.3 ClassNotFoundException: com.*XMLGregorianCalendarImpl .............................................. 56 4.2.4 Incompatible Version of libocijdbc… / no ocijdbc in java.library.path .................................. 56 4.2.5 java.lang.UnsupportedClassVersionError: Bad version number in .class file ........................ 56 4.2.6 java.lang.ClassFormatError - SetupException........................................................................ 56 4.2.7 Ungeklärte Abstürze des Servers / überfüllte Festplatte ...................................................... 57 4.2.8 javax.activation.UnsupportedDataTypeException ................................................................ 57 4.2.9 ClassNotFoundException: oracle.xml.parser.v2.XSLException .............................................. 58 4.2.10 Non supported character set: oracle-character-set-178 ....................................................... 58 4.2.11 Meldung: Provider for class javax.xml.transform.TransformerFactory cannot be created und Interner Fehler: org/apache/xerces/jaxp/SAXParserFactoryImpl: java.lang.ClassNotFoundException .... 58 4.2.12 Warnung wegen falscher Textressource ............................................................................... 61 4.2.13 ArrayIndexOutOfBoundsException: at oracle.jdbc.driver.T4CTTIoauthenticate.setSessionFields ......................................................................... 61 4.2.14 java.lang.SecurityException: sealing violation: package oracle.jdbc.internal is sealed ........ 61 5 5.1 5.1.1 5.1.2 5.1.3 5.1.4 5.1.4.1 Datenempfang (Comimport).............................................................................................. 63 Konfiguration ......................................................................................................................... 63 Allgemeine Konfigurationsparameter ................................................................................... 63 Kommunikationsverbindungen ............................................................................................. 66 Importformate ....................................................................................................................... 68 Importkonto ........................................................................................................................... 69 Verarbeitung von nicht zuordenbaren Nachrichten 69 Seite 6 von 384 5.1.4.2 5.1.4.3 5.1.4.4 5.1.4.5 5.1.4.6 5.1.4.7 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Aktionen Übersicht – Unterstützte Aktionen pro Konto ZIP-Funktionalität Dateinamen-Generierung Filter Übersicht – Unterstützte Filter je Konto 70 71 72 72 73 74 ${DATE} 77 5.1.5 5.1.6 5.1.7 Start des Comimports ............................................................................................................ 76 Wichtiger Hinweis bezüglich Performance ............................................................................ 76 Dynamische Pfadangaben...................................................................................................... 77 5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 Abarbeitungslogik der Importkonten .................................................................................... 80 Abfrage der Importkonten ..................................................................................................... 80 Abfrage der Importformate ................................................................................................... 81 Abfrage der Konten + Konteneinstellungen .......................................................................... 81 Abfrage der Aktionen für jedes Importkonto ........................................................................ 81 Überprüfung der Importkonten ............................................................................................. 82 Besonderheiten bei „read only“ Importkonten ..................................................................... 82 5.3 5.3.1 E-Mail-Konto (POP / IMAP) .................................................................................................... 82 Allgemeine Hinweise.............................................................................................................. 82 5.3.2 Konfigurationsparameter....................................................................................................... 83 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 Weiterleitung nicht zu verarbeitender E-Mails ..................................................................... 88 E-Mail-Anhänge: Beschränkungen ......................................................................................... 89 Verschiebeoperation - Zielordner .......................................................................................... 90 Abarbeitungsreihenfolge bei E-Mails..................................................................................... 90 Probleme/Lösungen ............................................................................................................... 90 5.4 5.4.1 5.4.2 5.4.3 FILE-Konto .............................................................................................................................. 97 Konfigurationsparameter....................................................................................................... 97 Beispielkonfiguration für SMB-Verzeichnis ........................................................................... 97 Probleme/Lösungen ............................................................................................................... 98 5.5 5.5.1 5.5.2 FTP-Konto ............................................................................................................................... 98 Konfigurationsparameter....................................................................................................... 99 PROXY_TYPE=FTP_ACCT ...................................................................................................... 101 5.1.7.1 5.3.1.1 5.3.2.1 5.3.7.1 5.3.7.2 5.3.7.3 5.3.7.4 5.3.7.5 5.3.7.6 5.3.7.7 5.3.7.8 5.3.7.9 5.3.7.10 5.3.7.11 5.3.7.12 5.3.7.13 5.3.7.14 5.4.3.1 5.4.3.2 Filterung von E-Mails 82 Exchange – FAQ 87 Kontinuierliche Verschlechterung der Performance Stillstand Comimport Anhänge werden als Winmail.dat gespeichert Update auf JavaMail 1.5.0 MessageRemovedException Timeout bei großen Mails (Dateianhänge ca. 10MB) Problem mit Nachrichtentext (Msg.) IMAP - Ordnername mit / Connection dropped by server? Problem beim Bestimmen des Content-Type (RFC1341) Anhänge werden als GZIP (*.gz) abgelegt obwohl diese gar nicht komprimiert sind Anhänge mit Umlauten werden nicht korrekt angezeigt Warnung bei mehr als 1000 E-Mails im Postfach ConnectionException: No login methods supported 90 91 92 92 93 93 94 95 95 95 95 95 96 96 Cannot run program "net use …“ jcifs.smb.SmbAuthException: Logon failure: account currently disabled 98 98 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 7 von 384 5.5.3 5.5.4 Dynamische Pfadangaben ................................................................................................... 102 Probleme/Lösungen............................................................................................................. 102 5.6 5.6.1 5.6.2 5.6.3 5.6.4 SFTP-Konto ........................................................................................................................... 104 Konfigurationsparameter .................................................................................................... 104 Reihenfolge der abzuholenden Dateien .............................................................................. 106 Dynamische Pfadangaben ................................................................................................... 106 ImportCommunicationKeytool ............................................................................................ 106 5.6.5 Probleme/Lösungen............................................................................................................. 108 5.7 5.7.1 5.7.2 5.7.3 5.7.4 HTTP-Konto .......................................................................................................................... 108 NTLM-Support (NT LAN Manager) ....................................................................................... 109 Dynamische Pfadangaben ................................................................................................... 109 Beispiel HTTP-/HTTPS-Verbindung einrichten ..................................................................... 110 Probleme/Lösungen............................................................................................................. 111 5.8 5.8.1 5.8.2 Probleme/Lösungen/Hinweise ............................................................................................ 113 Bereinigungsroutine (Comimport - Importtabellen) ........................................................... 113 Comimport-Importformat vs Datenimport-Format (datenimport.ini) ................................ 113 5.8.3 Monitoring – Importkonto ................................................................................................... 116 5.5.4.1 5.5.4.2 5.5.4.3 5.5.4.4 5.5.4.5 5.6.4.1 5.6.4.2 5.6.5.1 5.6.5.2 5.7.4.1 5.7.4.2 5.7.4.3 5.8.2.1 5.8.2.2 5.8.2.3 6 FTP Hardware Passives FTP FTPListParseException (eCount- 00044835) Fehler wegen falscher Dateigröße (eCount- 00044975) FTP-Fehler: 425 Unable to build data connection 102 103 103 103 104 Voraussetzungen Vorgehen 106 107 Endaktion „umbenennen“: no action value for action RENAME Endaktion „umbenennen“: Error renaming files to … no wildcard in action value 108 108 Der Downloadpfad enthält Leerzeichen No subject alternative DNS name matching x found Übertragungsfehler: java.net.ConnectException: Connection timed out: connect Beispiel Weitere Beispiele Änderung mit eCount- 00053244 111 112 112 114 115 116 Datenimport ................................................................................................................... 117 6.1 Hinweise zur Zeitzone der Import-Dateien.......................................................................... 117 6.2 6.2.1 Konfigurationsparameter .................................................................................................... 118 Benachrichtigung E-Mail für die Import-Datei..................................................................... 121 6.3 6.3.1 6.3.2 6.3.3 datenimport.ini .................................................................................................................... 123 Strukturierung der Import-Dateien (z.B. nach Kunden) ...................................................... 124 Leerzeichen in Verzeichnis-Pfaden ...................................................................................... 125 Feature Import-Datei in anderes Verzeichnis kopieren ...................................................... 125 6.4 Standard-Verzeichnis-Konventionen ................................................................................... 125 6.5 Abarbeitungsreihenfolge der Import-Dateien ..................................................................... 126 6.6 6.6.1 6.6.2 Konvertierung und Import der Daten .................................................................................. 127 Konfiguration von Import-Dateien in datenimport.ini ........................................................ 128 Konfiguration der Import-Formate ...................................................................................... 129 6.7 Verarbeitung von ZIP-Dateien ............................................................................................. 130 6.8 Verarbeitung von TMP-Dateien ........................................................................................... 131 Seite 8 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 6.9 Wiederholung abgeschlossener Importvorgänge ................................................................ 131 6.10 6.10.1 6.10.2 6.10.3 6.10.4 Probleme/Lösungen ............................................................................................................. 132 No matching data found in ZIP file ...................................................................................... 132 FileNotFoundException beim Datenimport ......................................................................... 132 Configuration error: Import filter class x not found for format y ........................................ 133 Nicht alle Dateien aus einer ZIP-Datei werden importiert .................................................. 133 7 Datenversand (ExportCom) ..............................................................................................135 7.1 7.1.1 7.1.2 Platzhalter ............................................................................................................................ 135 Dateinamen (Anhang Dateiname) ....................................................................................... 136 Betreff (bei E-Mails) ............................................................................................................. 136 7.2 Allgemeine Export-Parameter ............................................................................................. 137 7.3 7.3.1 7.3.2 7.3.3 7.3.4 7.3.5 7.3.6 Sendemodul E-Mail - MailSender (MEX).............................................................................. 142 Konfigurationsparameter..................................................................................................... 142 E-Mail-Signatur hinterlegen ................................................................................................. 149 Dateinamen als Betreff verwenden ..................................................................................... 149 Debugging ............................................................................................................................ 149 Sicherheitshinweis - CSNC-2014-001 ................................................................................... 149 Probleme/Lösungen ............................................................................................................. 150 7.4 7.4.1 7.4.2 Sendemodul FTP .................................................................................................................. 152 Konfigurationsparameter..................................................................................................... 153 FTPS / FTPES ......................................................................................................................... 154 7.4.3 Feature PROXY_TYPE=FTP_ACCT ......................................................................................... 155 7.4.4 7.4.5 7.4.6 Feature – Überschreiben ..................................................................................................... 156 Feature – „hidden-store“ ..................................................................................................... 156 Probleme/Lösungen ............................................................................................................. 157 7.5 7.5.1 7.5.2 7.5.3 Sendemodul SFTP................................................................................................................. 158 Konfigurationsparameter..................................................................................................... 158 Konfiguration – ecount (Nachrichtenadresse pflegen) ................................................... 159 Feature Überschreiben ........................................................................................................ 160 7.6 7.6.1 7.6.2 Sendemodul FILE (Dateiverzeichnis) .................................................................................... 160 Technische Vorgehensweise ................................................................................................ 161 Konfigurationsparameter..................................................................................................... 161 7.1.2.1 7.3.6.1 7.3.6.2 7.3.6.3 7.3.6.4 7.3.6.5 7.3.6.6 7.3.6.7 7.4.2.1 7.4.2.2 7.4.2.3 7.4.3.1 7.4.3.2 7.4.6.1 7.4.6.2 7.4.6.3 Manipulation des Betreffs Base64-Kodierung für E-Mail-Anhänge Message-ID (MAIL-ID) bei mehreren KomA-Instanzen Datenversand bleibt hängen NTLM-Domain (bad username or password) Sonderzeichen werden verstümmelt (z. B. kyrillisch) SMIME – NullPointerException (SMIME_EncryptionHandler:200) 5.7.1 Client does not have permissions to send as this sender 137 150 151 151 151 151 151 152 FTPES (FTP over explicit TLS/SSL) security level FTPS (FTP over implicit TLS/SSL) security level Unterschied SSL und TLS 154 155 155 Variante 1 Variante 2 155 156 Allgemein – Verbindungsprobleme Allgemein – FTP-Bibliothek Timeout bei großen Dateien 157 157 158 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 9 von 384 7.6.3 Probleme/Lösungen............................................................................................................. 161 7.7 7.7.1 7.7.2 7.7.3 7.7.4 Sendemodul SMB: Samba .................................................................................................... 162 Konfigurationsparameter .................................................................................................... 163 NTLM .................................................................................................................................... 164 Beispiel SMB-URL ................................................................................................................. 164 Features ............................................................................................................................... 165 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.8.5 Allgemeine Probleme/Lösungen.......................................................................................... 165 Erzeuger der Exportaufträge (Abo) finden .......................................................................... 166 SELECT EAU did not finish in 10000 ms, so temporarily release lock .................................. 166 Datenversand erstellt zahlreiche Dateien im E-Mail-Ordner .............................................. 166 Error: Encrypt/Sign failed (in SMIME_EncryptionHandler/MailSender) ............................. 167 Schlechte Performance bei Abfrage der Export-Aufträge ................................................... 167 7.6.3.1 7.6.3.2 7.7.4.1 7.7.4.2 8 8.1 8.1.1 9 Zielverzeichnis X existiert nicht und konnte nicht angelegt werden Fehler beim Umbenennen der temporären Datei (kurzzeitige Netzwerküberlastung) Dateien überschreiben Dateien umbenennen (wenn bereits vorhanden) 161 162 165 165 LPL-Spool (Lineare Protokolle) ......................................................................................... 168 Probleme/Lösungen............................................................................................................. 169 LOG-Datei wird nicht archiviert ........................................................................................... 169 Archivierung ................................................................................................................... 170 9.1 Konfigurationsparameter .................................................................................................... 172 9.2 Relevante Ordner für die Archivierung ................................................................................ 172 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.3.6 9.3.7 9.3.8 9.3.9 Beispiele (archive.ini) ........................................................................................................... 173 Löschen aller Daten die älter als 6 Monate sind.................................................................. 173 Verschieben aller Daten die älter als 1 Monat sind ............................................................. 173 Lösche alle Daten ohne Fehler............................................................................................. 174 Daten verschieben ............................................................................................................... 174 Alle E-Mail-XML-Dateien sofort in eine Zip-Datei packen: .................................................. 174 Alle E-Mail-Format-Dateien sofort in eine Zip-Datei packen:.............................................. 174 Alle E-Mail-Format-Dateien nach einer Woche löschen: .................................................... 174 Alle Archiv-Dateien, die älter als 1 Jahr sind, löschen: ........................................................ 174 Alle Dateien Zippen und Verschieben die älter als 10 Tage sind: ........................................ 174 10 10.1 10.1.1 10.1.2 10.1.3 10.1.4 10.1.5 10.1.6 10.1.6.1 10.1.6.2 10.1.6.3 10.1.6.4 10.1.6.5 10.1.6.6 10.1.6.7 EDIFACT .......................................................................................................................... 176 Allgemeine Hinweise ........................................................................................................... 177 Reihenfolge der Segmente .................................................................................................. 177 GZIP-Komprimierung ........................................................................................................... 177 Codenummern (ILN) ............................................................................................................ 177 Präfix für die UNB-ID ............................................................................................................ 178 UNB.0020 Datenaustauschreferenz – Generierung ............................................................ 178 BGM.1004 Dokumentennummer – Generierung ................................................................ 179 IFTSTA INVOIC INSRPT ORDERS ORDRSP REMADV REQOTE 179 179 179 180 180 180 180 Seite 10 von 384 10.1.6.8 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 QUOTES 180 10.1.7 Zeichenkodierung in der Datei ............................................................................................. 180 10.2 10.2.1 10.2.2 10.2.3 Kurzanleitung Formatwechsel ............................................................................................. 181 Anleitung zum Vorabtest des Formatwechsels ................................................................... 181 Import von „ALT“ - Versionen während der Übergangszeit (KomA) ................................... 182 Datenquelleneinstellungen (Maske Import-Dateien) .......................................................... 183 10.3 Import-Standardparameter (Config.properties) .................................................................. 184 10.4 Export-Standardparameter (Config.properties) .................................................................. 184 10.5 Import-Standardparameter (Datenquelle) .......................................................................... 184 10.6 Export-Standardparameter (Datenquelle) ........................................................................... 187 10.7 Einrichtung der EDI-Datenquelle ......................................................................................... 187 10.8 10.8.1 10.8.2 10.8.3 ALOCAT ................................................................................................................................ 188 Export-Parameter................................................................................................................. 188 Import-Parameter ................................................................................................................ 188 Probleme/Lösungen ............................................................................................................. 190 10.9 10.9.1 10.9.2 10.9.3 CONTRL ................................................................................................................................ 191 Lizenz / Datenquelle (Format).............................................................................................. 191 Parameter ............................................................................................................................ 192 CONTRL 2.0 (01.10.2014) ..................................................................................................... 195 10.9.4 Probleme/Lösungen ............................................................................................................. 195 10.10 10.10.1 IMBNOT (Imbalance Mitteilung) .......................................................................................... 198 Import-Parameter ................................................................................................................ 198 10.11 10.11.1 MSCONS ............................................................................................................................... 199 Import .................................................................................................................................. 199 10.11.2 Export ................................................................................................................................... 208 10.11.3 Probleme/Lösungen ............................................................................................................. 212 10.12 10.12.1 NOMINT ............................................................................................................................... 214 Import-Parameter ................................................................................................................ 214 10.8.3.1 10.8.3.2 10.9.3.1 10.9.3.2 10.9.4.1 10.9.4.2 10.9.4.3 10.11.1.1 10.11.1.2 10.11.1.3 10.11.1.4 10.11.2.1 10.11.2.2 10.11.2.3 10.11.2.4 10.11.2.5 10.11.3.1 10.11.3.2 10.11.3.3 10.11.3.4 NAD+ZES/NAD+ZSH fehlt Export – Splitmerkmale: Größe bei Zählpunkt nicht umgesetzt 190 191 Syntaxprüfung für Datenelemente die es laut MIG nicht gibt Besonderheit zu DE0062 im UNH-Segment 195 195 Import „Alle passenden Nachrichten sind bereits beantwortet.“ Keine Nachricht mit Referenz xyz, Absender <null> gefunden CONTRL wird mit falschem Absender generiert 195 196 197 Konfigurationsparameter MSCONS-Format spezifische Prüfungen (AHB) auf dem KomA Verwendung der MSCONS-Segment-Felder in ecount Medienart (Bestimmung im KomA) 200 207 208 208 Konfigurationsparameter Split von MSCONS beim Export Brennwert-Versand – OBIS-Kennzahl Export-Tabellen - Struktur Export Allokationslisten Gas (BGM+Z24, RFF+Z13+13013) 208 210 211 211 212 Negative Werte Unbekannte OBIS-Kennzahlen sind nicht marktkonform Import Export 212 212 213 213 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 11 von 384 10.13 10.13.1 NOMRES ............................................................................................................................... 216 Import-Parameter ................................................................................................................ 216 10.14 10.14.1 ORDRSP ................................................................................................................................ 218 Zusammenspiel mit EDIFACT-Cockpit (MF_EDIFMON) ....................................................... 218 10.15 10.15.1 PRICAT .................................................................................................................................. 219 Export ................................................................................................................................... 219 10.16 10.16.1 TRANOT ................................................................................................................................ 219 Import-Parameter ................................................................................................................ 219 10.17 10.17.1 10.17.2 UTILMD ................................................................................................................................ 220 Export-Parameter ................................................................................................................ 220 Import von gesplitteten UTILMD-Nachrichten .................................................................... 220 10.18 10.18.1 Verschlüsselung und Signatur .............................................................................................. 221 Besonderheit CONTRL.......................................................................................................... 222 10.19 10.19.1 10.19.2 10.19.3 Allgemeine EDIFACT Probleme/Lösungen ........................................................................... 222 Doppelimport in zwei Mandanten ....................................................................................... 222 Änderungen in EDIFACT_Tabellen protokollieren/nachvollziehen ..................................... 223 Probleme bei Dateinamen im Gas-Umfeld .......................................................................... 223 10.20 Zusammenspiel mit EDIFACT-Cockpit (MF_EDIFMON) ....................................................... 223 11 Importfilter ..................................................................................................................... 225 11.1 Allgemeine Einheitenkonvertierung .................................................................................... 225 11.2 Wichtige Hinweise zur Nutzung der Import-API (Nachkommastellen) ............................... 226 11.3 CSV (Universeller Importkonfigurator) ................................................................................ 226 11.4 DWD_ELE (Temperaturdaten - IST und PROGNOSE – im XML-Format) .............................. 227 11.5 11.5.1 EBIX ...................................................................................................................................... 229 GZIP-Support ........................................................................................................................ 229 11.6 11.6.1 11.6.2 11.6.3 ELDR (EcountLoader) ........................................................................................................... 229 Mandantenfähigkeit ............................................................................................................ 240 Hinweise bei der Nutzung von Excel (XLS, XLSX) ................................................................. 241 Beispielkonfigurationen ....................................................................................................... 241 11.6.4 Probleme/Lösungen............................................................................................................. 241 11.7 EEX-Daten (.xls - Dateien) .................................................................................................... 246 11.8 11.8.1 EEX_XML .............................................................................................................................. 246 Fremdkanal-ID 1(FK-ID1)...................................................................................................... 254 11.9 ESS_LG (nur Import von Daten ohne Fahrplan) ................................................................... 255 11.10 GASX (von Mummert Consulting) ........................................................................................ 255 11.6.3.1 11.6.4.1 11.6.4.2 11.6.4.3 11.6.4.4 11.6.4.5 11.6.4.6 11.6.4.7 11.6.4.8 CSV mit Komma als Trennzeichen 241 Zeichenkodierung (encoding) Zeichenproblem bei Excel-Dateien Zieltabelle xyz nicht gefunden Sequence xyz nicht gefunden Spalten mit Anführungszeichen ("SPALTE_X") Performance bei großen Datenmengen (BATCH_COUNT) Problem mit Umlauten und Sonderzeichen AFTER_FILE_CLOSE_TRIGGER und TRANSACTION_MODE 241 242 242 243 244 244 245 245 Seite 12 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 11.11 INVCC ................................................................................................................................... 258 11.12 LPEX ...................................................................................................................................... 258 11.13 11.13.1 LOADER_BCX ........................................................................................................................ 258 Beispiele ............................................................................................................................... 260 11.14 MCW (Wetterdaten in XML-Format) ................................................................................... 261 11.15 VESP_EXCEL.......................................................................................................................... 262 11.16 11.16.1 11.16.2 11.16.3 11.16.4 ZVW (Geräteverwaltung) ..................................................................................................... 262 ELS-Format (eCount- 00047331) .......................................................................................... 263 WEMAG-Format ................................................................................................................... 263 EC-Format (eCount- 00052357) ........................................................................................... 268 INTERN_EXCEL-Format (eCount- 00053633) ....................................................................... 270 11.13.1.1 11.13.1.2 11.13.1.3 11.13.1.4 12 Import einer Datei in eine XMLTYPE-Spalte Import einer Datei in BLOB Import einer Datei in XMLTYPE mit impliziter Kodierung Import einer Datei in XMLTYPE mit expliziter Kodierung 260 260 261 261 Exportfilter ......................................................................................................................271 12.1 12.1.1 Globale Export-Parameter ................................................................................................... 271 ObisMapping ........................................................................................................................ 271 12.2 Abschlüsse CSV (Format ABSCSV) ........................................................................................ 272 12.3 BELVIS (BELVIS CSV Lastgänge) ............................................................................................ 273 12.4 12.4.1 12.4.2 12.4.3 12.4.4 12.4.5 12.4.6 12.4.7 CSV/XML (Format CSV) ........................................................................................................ 273 Beispiel: Metering-Code und OBIS als Kopfspalten mit Legende ........................................ 275 Beispiel: Metering-Code und OBIS als Kopfspalten ohne Legende ..................................... 275 Beispiel: Trennzeichen_Zwischen_Datum_Zeit = Y ............................................................. 276 Beispiel: Exportiere_Kopfdaten = Y...................................................................................... 276 Beispiel: Exportiere_Kopfdaten = N ..................................................................................... 276 Beispiel: Exportiere_Header = Y........................................................................................... 277 Beispiel: Header1 bis Header5 ............................................................................................. 277 12.5 CSV2 ..................................................................................................................................... 278 12.6 CSV_MEMI2016_RV (Format CSV_MEMIRV)....................................................................... 278 12.7 CSV_MMM (CSV für Rahmenverträge) ................................................................................ 279 12.8 CSV_ROHDAT ....................................................................................................................... 280 12.9 12.9.1 12.9.2 12.9.3 CSV_ZST (CSV Zählerstandsversand).................................................................................... 280 Export-Attribute ................................................................................................................... 281 Beispiel-Konfiguration (Properties-Datei auf dem KomA) ................................................... 281 Beispiel zusätzliche Ausgabe von Schwachlast und Zählwerkskennzeichen ....................... 284 12.10 DATENREBAP........................................................................................................................ 284 12.11 EDIS_INVC ............................................................................................................................ 284 12.12 EEX (European Energy Exchange Excel) ............................................................................... 285 12.13 ESS-XML-Fahrpläne (ETSO Scheduling System) ................................................................... 286 12.14 Excel-Reports (XLS_REP) ...................................................................................................... 287 12.15 EXP/XML (Format EXP)......................................................................................................... 287 12.16 Fröschl Flat File (Format FFF) ............................................................................................... 287 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 13 von 384 12.17 GAS-XML (Format GASX)...................................................................................................... 287 12.18 INVCC ................................................................................................................................... 288 12.19 KISS....................................................................................................................................... 292 12.20 Abschlüsse KVASY (Format KVASY) ...................................................................................... 292 12.21 LPEX/XML (Format LPEX) ..................................................................................................... 293 12.22 MMMKVASY (MEMI_SST_KVASY)........................................................................................ 294 12.23 OBM_VD_CSV ...................................................................................................................... 295 12.24 Reports (Format REPORT) .................................................................................................... 295 12.25 12.25.1 SAPEDM ............................................................................................................................... 297 Zeilenumbruch ..................................................................................................................... 298 12.26 12.26.1 12.26.2 12.26.3 12.26.4 STD_XML .............................................................................................................................. 298 Zusammenspiel Abo – Export-Tabelle – XML-Output ......................................................... 298 Konfigurationsparameter .................................................................................................... 298 XSLT – Transformation ......................................................................................................... 300 XML-Elemente: .................................................................................................................... 301 12.26.4.1 12.26.4.2 12.26.4.3 12.26.4.4 12.26.4.5 13 TIMEZONE DATETIMEFORMAT NUMBERFORMAT EMISSION PERIOD 301 301 301 301 302 Importkonfigurator ......................................................................................................... 303 13.1 Mehrsprachenfähigkeit........................................................................................................ 303 13.2 Unterschied FILTER=CSV vs. FILTER=CSV2 ........................................................................... 303 13.3 Grundmodell ........................................................................................................................ 304 13.4 13.4.1 Funktionen ........................................................................................................................... 305 Datumsformat / Zeitformat ................................................................................................. 310 13.5 13.5.1 Eigenschaften....................................................................................................................... 311 Zeitzonen ............................................................................................................................. 311 13.5.2 13.5.3 13.5.4 13.5.5 13.5.6 13.5.7 13.5.8 13.5.9 13.5.10 13.5.11 13.5.12 13.5.13 Zeitstempel als Intervallbeginn............................................................................................ 313 Demultiplex (DEMUX_CHANNELS) ...................................................................................... 313 Zeitstempel rückwärts ......................................................................................................... 314 Tabulator als Trennzeichen.................................................................................................. 314 Spracheinstellung................................................................................................................. 315 Ignoriere Datensätze die älter als x Tage sind ..................................................................... 315 NVL (NULL und leere Zeichenketten)................................................................................... 315 Warnung bei Zeitumstellung (WARNING.VALUE_DISTANCE) ............................................. 316 Abbruch bei Äquidistanzproblemen .................................................................................... 317 Zeitreihen fortsetzen (CONTINUE_TIMESERIES).................................................................. 317 Gas-Tagesgrenze 06:00 ........................................................................................................ 318 Verkettung mehrere Werte ................................................................................................. 320 13.4.1.1 13.5.1.1 13.5.1.2 13.5.1.3 13.5.1.4 Datums- und Zeitformat in einer Spalte MEZ UTC Deutschland mit Sommer-/Winterzeit-Umschaltung Weitere Zeitzonen 310 311 311 311 313 Seite 14 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 13.6 Anlegen einer Konfiguration ................................................................................................ 320 13.7 Import-File- und Kanal-Detail............................................................................................... 324 13.8 13.8.1 13.8.2 13.8.3 13.8.4 13.8.5 13.8.6 13.8.7 13.8.8 13.8.9 13.8.10 13.8.11 Beispiele ............................................................................................................................... 324 Einheit extrahieren .............................................................................................................. 324 Werte multiplizieren (*1000)............................................................................................... 325 Status in Abhängigkeit zu Feldinhalt bestimmen................................................................. 325 0-Wert anhand von Codierungen ermitteln ........................................................................ 325 0-Werte mit Status N ........................................................................................................... 325 Abbruchbedingung nach x Zeilen......................................................................................... 326 Bei Zahlen mit führendem Plus (+) kommt es zum Fehler (Unparsable Number)............... 326 Stündliche Gas-Werte ohne Uhrzeit (nur Datum) mit 6-Uhr-Grenze .................................. 326 Doppelte Anführungszeichen ignorieren ............................................................................. 327 Verwendung von toDate und dateCompare........................................................................ 327 Zählvariable (1 … n) statt Uhrzeit [decode-Alternative] ...................................................... 329 13.9 13.9.1 13.9.2 Restriktion bezüglich Excel-Dokumenten ............................................................................ 330 Export und anschließender Import ...................................................................................... 330 Problem mit Datumsformaten ............................................................................................. 331 13.10 13.10.1 13.10.2 13.10.3 Probleme/Lösungen ............................................................................................................. 332 Eigentumsnummer beim Speichern der Konfiguration erforderlich ................................... 332 Anzeige im Importkonfigurator stimmt nicht mit der Anzeige im eCount überein............. 333 Datenbank-Fehler / Übermittlung von KENNUNG_ORIG .................................................... 333 13.11 13.11.1 Besondere Import-Möglichkeiten (CSV2) ............................................................................ 334 Import von Zählerständen aus CSV-Datei ............................................................................ 334 14 EXCEL Reports..................................................................................................................337 14.1 Besonderheiten.................................................................................................................... 337 14.2 Restriktionen bezüglich Spalten und Zeilen ......................................................................... 337 14.3 Versionsübersicht abfragen ................................................................................................. 338 14.4 EXCEL Reports über eCount-Oberfläche .............................................................................. 339 14.5 Logging der EXCEL-Reports in der GUI ................................................................................. 340 14.6 14.6.1 14.6.2 Probleme/Lösungen ............................................................................................................. 341 Embedded record type expected, but Export_Profile_Values received.............................. 341 Zellenformatierungen aus Template werden nicht übernommen ...................................... 344 15 15.1 15.1.1 15.1.2 15.1.3 15.1.4 16 Performance-Tuning ........................................................................................................346 Datenempfang (ComImport) ............................................................................................... 346 Hintergrundinformation ...................................................................................................... 346 Wie sieht ein korrekt definiertes E-Mail-Konto aus? ........................................................... 347 Definition anderer Importkonten (außer HTTP) .................................................................. 348 Bereinigung der COM-Import-Tabellen ............................................................................... 349 Checkliste KomA-Fehlermeldungen ..................................................................................350 16.1 Bekannte Probleme und deren Lösungen............................................................................ 350 16.2 16.2.1 Bereitstellung aller notwendigen Informationen bei Fehlern im KomA.............................. 350 Allgemeine Informationen ................................................................................................... 350 16.2.1.1 16.2.1.2 Versionsübersicht Properties-Dateien 350 351 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 15 von 384 16.2.2 16.2.3 Zentrale Konfigurationsdatei (Config.properties)................................................................ 354 LOG-Dateien......................................................................................................................... 354 16.3 16.3.1 16.3.2 16.3.3 16.3.4 Kochrezept – Datenermittlung bei Exportfehlern ............................................................... 355 Beispiel ................................................................................................................................. 356 Ermittlung der Export-Auftrag-ID bei EDIFACT-Dateien ...................................................... 358 Datenversand-ABO über EAU_ID identifizieren .................................................................. 360 Fehler beim E-Mail-Versand ................................................................................................ 360 16.4 16.4.1 16.4.2 Kochrezept – Datenermittlung bei Importfehlern ............................................................... 361 Beispiel (ZIP-Datei) ............................................................................................................... 361 Beispiel (EDIFACT-Datei „ORDERS“)..................................................................................... 363 16.5 16.5.1 16.5.2 16.5.3 Informationsbeschaffung beim ComImport ........................................................................ 365 Explizites Protokollieren des Empfangs von E-Mails ........................................................... 366 Besonderheiten beim Abholen vom Mail-Server ................................................................ 366 Speichern der E-Mails vom Mail-Server .............................................................................. 366 16.6 16.6.1 16.6.2 16.6.3 Informationsbeschaffung beim Problemen im EDIFACT-Umfeld ........................................ 367 Spezialfall CONTRL ............................................................................................................... 367 Welche Daten sind zu übermitteln? .................................................................................... 367 Vom EDIFACT-Cockpit zum Diagnose-Report ...................................................................... 369 Anlage 1 Glossar ........................................................................................................................... 371 Anlage 2 Datumsformatierung....................................................................................................... 372 Anlage 3 Reguläre Ausdrücke ........................................................................................................ 374 Anlage 4 Import- und Export-Filter (XSD, DTD Beispiele)................................................................. 376 Anlage 5 Konfigurationsbeispiele für Loader-Import....................................................................... 377 Anlage 6 Beispielkonfiguration FTP-Empfang für EEX-Daten ........................................................... 382 Abbildungsverzeichnis Abbildung 2-1: Grobarchitektur ..................................................................................................................23 Abbildung 3-1 Verwendung des importcom.comserver-Parameters in ecount .........................................25 Abbildung 3-2: Anpassen der Path-Angabe ................................................................................................31 Abbildung 3-3: Aktualisierung der Zeitzoneninformation...........................................................................32 Abbildung 3-4: Maske Importkommunikation ............................................................................................39 Abbildung 3-5: Abfrage SQL_Select_Next_EAU.sql.....................................................................................40 Abbildung 3-6: Dialog Eigenschaften von KomA-Datenimport ...................................................................43 Abbildung 3-7: Dialog Trigger bearbeiten ...................................................................................................43 Abbildung 3-8: Dialog Aktion bearbeiten ....................................................................................................44 Abbildung 3-9: Dialog Aufgabe erstellen / Bedingungen ............................................................................44 Abbildung 3-10: Dialog Aufgabe erstellen / Einstellungen .........................................................................45 Abbildung 3-11: Vereinfachte Kommunikations-Verzeichnisstruktur ........................................................46 Abbildung 3-12 Definition des Datenbankpasswortes ................................................................................49 Seite 16 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 3-13: Beispiel Konsolenanwendung PasswordCoding .............................................................. 50 Abbildung 4-1: Anzeige Übergabeparameter ............................................................................................. 54 Abbildung 5-1: Beispiel – IMAP-Konto ....................................................................................................... 68 Abbildung 5-2: Beispiel – IMAP-Konto - Importformate ............................................................................ 68 Abbildung 5-3: Importkonto - Prüfintervall ................................................................................................ 69 Abbildung 5-4: Maske Importkommunikation - Feld Aktionswert ............................................................. 70 Abbildung 5-5: Maske Importkommunikation, Option ZIP ........................................................................ 72 Abbildung 5-6: Maske Importkommunikation – Dialog Filter .................................................................... 73 Abbildung 5-7: Maske Importkommunikation – Endaktion für Dateien einrichten, die nicht auf den Filter passen ......................................................................................................................................................... 77 Abbildung 5-8: Maske Importkommunikation / Dialog Filter: Anzeige vorhandener Filter....................... 77 Abbildung 5-9: Maske Importkommunikation: Angabe der Variablen ${DATE} im Verzeichnispfad ........ 79 Abbildung 5-10: Verzeichnis unter /eod/market_data/power/spot/xml/2015/20151205 ....................... 79 Abbildung 5-11: MF_RIMPORT: Einstellungen für SFTP-Kommunikation .................................................. 79 Abbildung 5-12: Verwenden der Einstellungen für SFTP-Kommunikation ................................................ 80 Abbildung 5-13: Verwenden der Einstellungen für SFTP-Kommunikation mit Filter ................................. 80 Abbildung 5-14: Beispiel: Filterung von E-Mails per Folder ....................................................................... 83 Abbildung 5-15: Beispiel: Weiterleitung nicht zu verarbeitender E-Mails ................................................. 89 Abbildung 5-16: Beispiel: Einrichtung Weiterleitung nicht zu verarbeitender E-Mails ............................. 89 Abbildung 5-17: Stillstand Comimport: Konfiguration für fehlerhafte E-Mails .......................................... 92 Abbildung 5-18: Stillstand Comimport: Verzeichnis für fehlerhafte E-Mails ............................................. 92 Abbildung 5-19: Beispielkonfiguration und Ergebnis zur Behebung Stillstand Comimport ....................... 92 Abbildung 5-20: Maske Kommunikationseinstellungen: IMAP_PARTIALFETCH=N ................................... 94 Abbildung 5-21: Maske Kommunikationseinstellungen: IMAP_FETCH_SIZE ............................................. 94 Abbildung 5-22: Maske Importkommunikation: Option Msg. ................................................................... 94 Abbildung 5-23 File-Verbindung ohne Nutzung des SMB-Protokolls......................................................... 98 Abbildung 5-24: Maske Kommunikationseinstellungen: Beispiel - Robotron-FTP-Verbindungen ............ 99 Abbildung 5-25: Maske Kommunikationseinstellungen: FTPConnection2OldDataTransferBehaviour ... 100 Abbildung 5-26: Maske Kommunikationseinstellungen: Beispiel FTP_ACC ............................................. 102 Abbildung 5-27: Maske Kommunikationseinstellungen: Beispiel SFTP ................................................... 106 Abbildung 5-28: Privater Schlüssel mit KeyStore-Explorer als OpenSSL extrahieren (Teil 1)................... 107 Abbildung 5-29: Privater Schlüssel mit KeyStore-Explorer als OpenSSL extrahieren (Teil 2)................... 107 Abbildung 5-30: Private Schlüssel für das SFTP-Konto mit der ID 7645 ................................................... 108 Abbildung 5-31: Maske Kommunikationseinstellungen > Reiter Verbindungen ..................................... 110 Abbildung 5-32: Maske Kommunikationseinstellungen > Reiter Importformate .................................... 110 Abbildung 5-33: Maske Importkommunikaton ........................................................................................ 111 Abbildung 5-34: Importformat - EDI_X..................................................................................................... 114 Abbildung 5-35: Importkonto mit aktivierter ZIP-Funktionalität ............................................................. 114 Abbildung 5-36: Datenablage im KomA ................................................................................................... 114 Abbildung 6-1: Datenfluss Import ............................................................................................................ 117 Abbildung 6-2: Beispiel einer Fehler-Antwort-Konfiguration................................................................... 123 Abbildung 6-3: Beispiel für die Import-Konfigurationsdatei datenimport.ini .......................................... 129 Abbildung 7-1: Datenfluss Export Version 2............................................................................................. 135 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 17 von 384 Abbildung 7-2: Kontrolle E-Mail-Dateien in der KomA auf Content-Transfer-Encoding: base64 .............150 Abbildung 7-3: Maske Nachrichtenadressen: FTP soll mit hidden-store arbeiten ...................................157 Abbildung 7-4: Konfiguration – Nachrichtenadresse pflegen ...................................................................159 Abbildung 7-5: Nachrichtenadressen Benutzer/Passwort ........................................................................160 Abbildung 7-6: Aktivierung der Option zum Überschreiben .....................................................................160 Abbildung 7-7: Beispiel Adresse für Samba-Zugriff durch ecount............................................................163 Abbildung 7-8: Ermittlung des Abos..........................................................................................................166 Abbildung 10-1: Beispiel Reihenfolge der Segmente in einer IFTSTA-Meldung .......................................177 Abbildung 10-2 UNB-Präfix TS für das Format TSIMSG_DEKL...................................................................179 Abbildung 10-3: Maske Lastgangabo: Definition der aktuell gültigen Versionsnummer .........................182 Abbildung 10-4: Maske Import-Dateien....................................................................................................183 Abbildung 10-5: Maske Zählpunkt-Verwaltung: Zählpunktdetail NETZKONTO_VON...............................191 Abbildung 10-6: Anzeige der CONTRL im robotron*EdifactKonverter (Ausschnitt) ...............................195 Abbildung 10-7: CONTRL-Anzeige EdifactKonverter (EDIFACT) ..............................................................196 Abbildung 10-8: CONTRL-Anzeige EdifactKonverter (Daten)..................................................................197 Abbildung 10-9: Ablesegrund PMR verschwindet beim Zählerstandsimport ...........................................213 Abbildung 10-10: Anzeige nicht erlaubter Statusangaben für Marktrollen im Abo (Reiter Umfang – Linien) ........................................................................................................................................................214 Abbildung 10-11: Import von gesplitteten UTILMD ..................................................................................221 Abbildung 11-1: Importdatei UNICODE kodiert ........................................................................................242 Abbildung 11-2: Überprüfung Encoding....................................................................................................245 Abbildung 12-1: Aufbau Format CSV/XML ................................................................................................273 Abbildung 13-1 Importkonfigurator FILTER=CSV2 ....................................................................................304 Abbildung 13-2 Importkonfigurator FILTER=CSV ......................................................................................304 Abbildung 13-3 Anzeige Importkonfigurator horizontales Lastgangdatenmodell....................................304 Abbildung 13-4 Anzeige Importkonfigurator vertikales Lastgangdatenmodell ........................................304 Abbildung 13-5: Beispiel: Datum und Zeit im Zeitformat hinterlegen ......................................................310 Abbildung 13-6: Beispiel Winter-Sommer-Umschaltmethode: Werte 2-3 Uhr ignorieren ......................312 Abbildung 13-7: Option Demultiplex von Kanälen ....................................................................................314 Abbildung 13-8: Beispiel: Rückwärtige Zeitangaben in einer zu importierenden Datei ...........................314 Abbildung 13-9 Spracheinstellungen (Monatsnamen) .............................................................................315 Abbildung 13-10: Option: Ignoriere Daten (älter als x Tage) ....................................................................315 Abbildung 13-11: Option: Wert-Dekoder - Methode decode ...................................................................316 Abbildung 13-12: Option: Warnung bei Zeitumstellung ...........................................................................316 Abbildung 13-13 Gas-Tagesgrenze aktivieren (Reiter Bedingungen)........................................................318 Abbildung 13-14 Beispiel Gastag mit separater Tag und Zeit ...................................................................319 Abbildung 13-15: Grafische Benutzeroberfläche zum Anlegen einer Konfiguration 1/3 .........................320 Abbildung 13-16: Grafische Benutzeroberfläche zum Anlegen einer Konfiguration 2/3 .........................321 Abbildung 13-17: Grafische Benutzeroberfläche zum Anlegen einer Konfiguration 3/3 .........................321 Abbildung 13-18: Beispiel: Definiertes CSV-Format mit Abbruchbedingung - Format .............................323 Abbildung 13-19: Beispiel: Definiertes CSV-Format mit Abbruchbedingung - Allgemein ........................323 Abbildung 13-20: Beispiel: Definiertes CSV-Format mit Abbruchbedingung - Bedingungen ...................324 Abbildung 13-21 Ausschnitt Importkonfigurator (Reiter Allgemein) ........................................................326 Seite 18 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 13-22 Ausschnitt Importkonfigurator (Reiter Bedingung) ...................................................... 326 Abbildung 13-23 Beispiel-Datei (Start) - Importkonfigurator................................................................... 327 Abbildung 13-24 Beispiel-Datei (Ende) – Importkonfigurator.................................................................. 327 Abbildung 13-25 eCount-Ansicht des Import mittels dateCompare ........................................................ 329 Abbildung 13-26 Beispiel: CSV-Datei mit Zählvariable ............................................................................. 329 Abbildung 13-27 Konfiguration (Ausschnitt) CSV-Datei mit Zählvariable ................................................ 330 Abbildung 13-28 Dialog Zellen formatieren ............................................................................................. 332 Abbildung 13-29 StandardImport Viewer - Unschönheit bei Periode täglich .......................................... 333 Abbildung 13-30 Anzeige der Zäherstand-CSV-Datei im StandardImport Viewer ................................... 335 Abbildung 14-1 Excel Reports: Versionsübersicht abfragen .................................................................... 339 Abbildung 14-2 Globale Einstellung EXR_NLS_LANGUAGE - Spracheinstellung für Excel Reports .......... 339 Abbildung 14-3 Excel Reports: log4j.xml .................................................................................................. 341 Abbildung 14-4 Bsp.-Verzeichnis für EXCEL_REPORTS.log ....................................................................... 341 Abbildung 14-5 ABO-Datenversand mit Excel-Report – Bausteindefinition (getProfileValues) .............. 341 Abbildung 14-6 ABO-Datenversand mit Excel-Report – Konfiguration (getProfileValues) ...................... 342 Abbildung 14-7 ABO-Datenversand mit Excel-Report – Bausteindefinition (getProfiles)........................ 343 Abbildung 14-8 ABO-Datenversand mit Excel-Report – Konfiguration (getProfiles) ............................... 343 Abbildung 14-9 Zeitskala bestimmen (getProfiles) - Bausteindefinition.................................................. 344 Abbildung 14-10 Zeitskala bestimmen (getProfiles) – Konfiguration ...................................................... 344 Abbildung 15-1: Definition von "read only" für das Importkonto ............................................................ 347 Abbildung 15-2: Kennzeichnung eines E-Mail-Kontos als read only ........................................................ 347 Abbildung 15-3: Beispiel: Falsch konfiguriertes E-Mail-Konto ................................................................. 348 Abbildung 15-4: Beispiel: Korrekt konfiguriertes E-Mail-Konto ............................................................... 348 Abbildung 15-5: Konfiguration E-Mail-Konto: Operation für abgeholte Dateien und Aktionstyp für alle übrigen...................................................................................................................................................... 349 Abbildung 15-6 Anlage COM-Import-Bereinigung ................................................................................... 349 Abbildung 15-7 COM-Import-Bereinigung - Parameter ........................................................................... 349 Abbildung 16-1 Ermittlung der Versionsübersicht ................................................................................... 351 Abbildung 16-2 Ergebnis der Ermittlung der Versionsübersicht .............................................................. 351 Abbildung 16-3 Properties-Datei (Import) ............................................................................................... 352 Abbildung 16-4 Properties-Datei finden ........................................................................................................ Abbildung 16-5 Properties-Datei Export-Auftrag (1)................................................................................ 354 Abbildung 16-6 Properties-Datei Export-Auftrag (2)................................................................................ 354 Abbildung 16-7 Maske "Export-Aufträge“ ................................................................................................ 355 Abbildung 16-8 Config.properties - Einstellung XML-Datei...................................................................... 356 Abbildung 16-9 Interne Robotron-XML-Datei finden ............................................................................... 357 Abbildung 16-10 KomA-Server ................................................................................................................. 358 Abbildung 16-11 MSCONS-Datei .............................................................................................................. 358 Abbildung 16-12 EdifactKonverter ........................................................................................................... 359 Abbildung 16-13 EDIFACT-Cockpit Suche ................................................................................................. 359 Abbildung 16-14 EDIFACT-Cockpit Export ................................................................................................ 360 Abbildung 16-15 Beispiel ZIP-Datei (1) ..................................................................................................... 362 Abbildung 16-16 Beispiel ZIP-Datei (2) ..................................................................................................... 362 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 19 von 384 Abbildung 16-17 Beispiel ZIP-Datei (3) ......................................................................................................363 Abbildung 16-18 Beispiel EDIFACT-Datei (1) .............................................................................................364 Abbildung 16-19 Beispiel EDIFACT-Datei (2) .............................................................................................364 Abbildung 16-20 : Ablage der „Problem“-E-Mails .....................................................................................367 Abbildung 16-21 Diagnose-Schaltfläche in MF_IFI ....................................................................................368 Abbildung 16-22 EDIFACT-Cockpit (MF_EDIFMON)- Interne ID des Import-Datensatzes ermitteln ........370 Abbildung 16-23 (Alternativ) Import-Dateien (MF_IFI ) Datensatz über Interne ID suchen.....................370 Abbildungsverzeichnis Anlagen Anlage Abbildung 1: Beispiel für minimale Loader-Konfiguration ............................................................378 Anlage Abbildung 2: Beispiele für Loader-Datenbank-Verbindungen ......................................................379 Anlage Abbildung 3: Beispiel für Excel-Konfiguration im Loader-Skript ...................................................379 Anlage Abbildung 4: Beispiele für Funktionen ..........................................................................................381 Anlage Abbildung 5: Beispiel FTP-Verbindung (MF_RIMPORT) ................................................................382 Anlage Abbildung 6: Verzeichnisstruktur unter dem Root-Verzeichnis von infoproducts.eex.com.........383 Anlage Abbildung 7: Importformate definieren........................................................................................383 Anlage Abbildung 8: FTP-Konto .................................................................................................................384 Anlage Abbildung 9: FTP-Verzeichnis / Filter ............................................................................................384 Tabellenverzeichnis Tabelle 3-1: Allgemeine Konfigurationsparameter .....................................................................................27 Tabelle 5-1: Comimport-Parameter ............................................................................................................64 Tabelle 5-2: Kommunikationsverbindungstypen ........................................................................................66 Tabelle 5-3: Möglichkeiten beim Umbenennen einer Datei .......................................................................71 Tabelle 5-4: Unterstützte Aktionen pro Konto ............................................................................................71 Tabelle 5-5: Unterstützte Filter je Konto.....................................................................................................74 Tabelle 5-6: Beispiele Filtereinstellungen für Filterkriterium Betreff .........................................................75 Tabelle 5-7: Beispiele Filtereinstellungen für Filterkriterium Name ...........................................................75 Tabelle 5-8: Parameter für E-Mail-Empfang ...............................................................................................83 Tabelle 5-9: Parameter für E-Mail-Empfang über Maske Kommunikationseinstellung .............................86 Tabelle 5-10: Parameter für Empfang über FTP ........................................................................................100 Tabelle 5-11: Parameter für Empfang über Maske Kommunikationseinstellung .....................................100 Tabelle 5-12 Parameter für Empfang über SFTP .......................................................................................104 Tabelle 5-13 Parameter für das HTTP-Konto.............................................................................................108 Tabelle 6-1: Parameter für Datenimport...................................................................................................118 Tabelle 6-2: Parameter für Info-E-Mail .....................................................................................................121 Tabelle 7-1: Platzhalter Dateinamen .........................................................................................................136 Seite 20 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Tabelle 7-2: Platzhalter vorwiegend für Formate EDIFACT/MSCONS, CSV, GASX ................................... 136 Tabelle 7-3: Platzhalter E-Mail-Betreff ..................................................................................................... 136 Tabelle 7-4: Parameter für Datenexport .................................................................................................. 137 Tabelle 7-5: Einstellungen für MailSender ............................................................................................... 142 Tabelle 7-6: Parameter für Versand über FTP .......................................................................................... 153 Tabelle 7-7: Konfigurationsparameter für Sendemodul SFTP .................................................................. 158 Tabelle 7-8: Parameter für Versand über FILE ......................................................................................... 161 Tabelle 7-9: Parameter für Versand über SMB ........................................................................................ 163 Tabelle 7-10: Beispiel SMB-URL................................................................................................................ 164 Tabelle 8-1: Parameter für LPL-Spool (Lineare Protokolle) ...................................................................... 168 Tabelle 9-1: Syntax für die Konfigurationen für Archivierungsaufträge................................................... 170 Tabelle 9-2: Konfigurationsparameter für die Archivierungsaufträge ..................................................... 172 Tabelle 10-1: Unterstütze Formatversionen ............................................................................................ 176 Tabelle 10-2: Zuordnung Maske MF_IFI) – Tabelle IMPORT_FILE: .......................................................... 183 Tabelle 10-3: Import-Standardparameter EDIFACT: config.properties .................................................... 184 Tabelle 10-4: Export-Standardparameter EDIFACT: config.properties .................................................... 184 Tabelle 10-5: Import-Standardparameter EDIFACT: Datenquelle EDI ..................................................... 185 Tabelle 10-6: Export-Standardparameter EDIFACT: Datenquelle EDI ...................................................... 187 Tabelle 10-7: ALOCAT Export Parameter.................................................................................................. 188 Tabelle 10-8: ALOCAT Import-Parameter ................................................................................................. 189 Tabelle 10-9: Parameter für EDI_CONTRL ................................................................................................ 192 Tabelle 10-10: Übersicht Mapping von Absender-/Empfänger-Typ ........................................................ 198 Tabelle 10-11: IMBNOT – FKID-Variablen................................................................................................. 198 Tabelle 10-12: Standardparameter EDIFACT: Datenquelle EDI: EDI.properties ...................................... 200 Tabelle 10-13: Statuscodierungen MSCONS – ecount ......................................................................... 202 Tabelle 10-14: Verwendung der MSCONS-Segment-Felder in ecount ................................................ 208 Tabelle 10-15: Konfigurationsparameter für den MSCONS-Export ......................................................... 208 Tabelle 10-16: Split von MSCONS beim Export ........................................................................................ 210 Tabelle 10-17: NOMINT – FKID-Variablen ................................................................................................ 215 Tabelle 10-18: NOMRES – FK-ID-Variablen .............................................................................................. 216 Tabelle 10-19: Parameter für NOMRES (über EDI.properties einstellbar) ............................................... 218 Tabelle 10-20: TRANOT Parameter für FK-Bestimmung .......................................................................... 219 Tabelle 10-21: UTILMD Export-Parameter ............................................................................................... 220 Tabelle 11-1: Formatspezifische Einstellungen DWD_ELE ....................................................................... 228 Tabelle 11-2: Formatspezifische Einstellungen ELDR ............................................................................... 230 Tabelle 11-3: Typen für Datenbank-Verbindungsdefinitionen am ELDR ................................................. 230 Tabelle 11-4: Attribute für Datenbank-Verbindungsdefinitionen am ELDR............................................. 231 Tabelle 11-5: Unterstützung der Attribute pro Verbindungstyp am ELDR............................................... 231 Tabelle 11-6: Attribute für Ausdruck inputFormat() ................................................................................ 232 Tabelle 11-7: Zieltabellen-Definitionen vom Typ targetTable() am ELDR ................................................ 233 Tabelle 11-8: Zieltabellen-Definitionen vom Typ column()-am ELDR ...................................................... 233 Tabelle 11-9: Zieltabellen-Definitionen vom Typ dataExpression()-am ELDR .......................................... 234 Tabelle 11-10: Formatspezifische Einstellungen für EEX_XML ................................................................ 247 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 21 von 384 Tabelle 11-11: Formatspezifische Einstellungen GASX .............................................................................256 Tabelle 11-12 Parameter für LPEX.............................................................................................................258 Tabelle 11-13: Parameter für LOADER_BCX ..............................................................................................258 Tabelle 11-14: MCW - Parameter ..............................................................................................................262 Tabelle 11-15: WEMAG-Formate ..............................................................................................................263 Tabelle 11-16: Importtabellen Zusatzgeräte .............................................................................................266 Tabelle 12-1: Parameter Abschlüsse CSV (Format ABSCSV) .....................................................................272 Tabelle 12-2: Parameter CSV/XML (Format CSV) ......................................................................................273 Tabelle 12-3: Formatspezifische Einstellungen CSV2 ................................................................................278 Tabelle 12-4 Parameter für CSV_MEMIRV ................................................................................................279 Tabelle 12-5: Parameter CSV_ROHDAT .....................................................................................................280 Tabelle 12-6: Export-Attribute für CSV_ZST (CSV Zählerstandsversand) ..................................................281 Tabelle 12-7:Parameter für DATENREBAP ................................................................................................284 Tabelle 12-8: Formatspezifische Einstellungen EEX ..................................................................................285 Tabelle 12-9: Formatspezifische Einstellungen ESS ..................................................................................286 Tabelle 12-10: Formatspezifische Einstellungen FFF ................................................................................287 Tabelle 12-11:Parameter für KISS .............................................................................................................292 Tabelle 12-12 Parameter für Exportformat KVASY ...................................................................................292 Tabelle 12-13: Formatspezifische Einstellungen LPEX ..............................................................................293 Tabelle 12-14 Formatspezifische Einstellungen MMMKVASY..................................................................294 Tabelle 12-15 Formatspezifische Einstellungen REPORT ..........................................................................295 Tabelle 12-16: Formatspezifische Einstellungen SAPEDM ........................................................................297 Tabelle 12-17: Abo – Export-Tabelle – XML-Output .................................................................................298 Tabelle 12-18: Konfigurationsparameter für STD_XML ............................................................................299 Tabelle 12-19: Elemente für DATETIMEFORMAT ......................................................................................301 Tabelle 12-20: Elemente für NUMBERFORMAT ........................................................................................301 Tabelle 12-21: Elemente für EMISSION .....................................................................................................302 Tabelle 13-1: Funktionen Importkonfigurator ..........................................................................................305 Tabelle 13-2: Import von Zählerständen aus CSV-Datei – mögliche Attribute .........................................335 Tabelle 16-1: Date and Time Patterns .......................................................................................................372 Tabelle 16-2: Beispiele für Date and Time Patterns ..................................................................................373 Tabelle 16-3: Reguläre Ausdrücke .............................................................................................................374 Seite 22 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 1 Allgemeines/Zweck des Dokumentes Die Systeme robotron*ecount, robotron*esales und robotron*ecollect basieren auf dem Kernel des Systems robotron*ecount. Das vorliegende Dokument beschreibt die Funktionalität anhand des Systems robotron*ecount. Für das System robotron*esales gilt die Beschreibung in analoger Form. Der Kommunikationsserver (KomA-Server) dient der Automatisierung der Kommunikation mit anderen Energieversorgern und ist als modular aufgebaute Standalone-Java-Komponente auf einem separaten Rechner mit einem nahezu beliebigen Betriebssystem lauffähig. Diese Architektur ermöglicht eine gute Lastverteilung, flexible Konfigurationsmöglichkeiten, schnelle Reaktion auf neue Anforderungen sowie eine große Freiheit bei der Wahl der Rechnerplattform. Die einzelnen Java-Bausteine werden in mehreren Java-Archiven ausgeliefert, die weitere externe Bibliotheken wie z. B. Datenbank-Treiber, XML-Parser und Mail-Bibliotheken von Drittanbietern verwenden. Die Komponenten können direkt in vorhandene Umgebungen integriert, aber auch mit Hilfe der mitgelieferten Skript-Umgebung verwendet werden. Das vorliegende Dokument beschreibt die Java-Komponenten des Systems robotron*ecount für den Import/Export von Daten von und nach Fremdformaten. Es wird ein Überblick über Aufbau und Funktionsweise der Komponenten vermittelt und deren Verwendung beispielhaft gezeigt. Im Anhang sind Anwendungsbeispiele sowie zusätzliche Informationen zu finden, die für den Anwender nicht direkt von Bedeutung sind, aber dem interessierten Benutzer hilfreiche Einblicke in die Funktionsweise bieten. Weiterhin sind im Anhang Beschreibungen der Import-Formate sowie Beispielkonfigurationen zu finden. Wo ist die aktuelle Version des Dokuments auffindbar? Das Dokument ist direkt im ecount aufrufbar über Hilfe > Funktionsbeschreibung > Kommunikationsautomatisierung – KomA. Bleiben Sie immer auf den neusten Stand mithilfe des KomA-RSS-Feeds! Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 23 von 384 2 Architektur Ziel ist es, dem ecount Anwender eine große Auswahl an Import- und Exportformaten zur Verfügung zu stellen und diese mit möglichst hohem Automatisierungsgrad zu empfangen und zu versenden. Um nicht für jedes einzelne Format eine spezielle Implementierung in der Datenbank vornehmen zu müssen, wird an dieser Stelle eine zweistufige Verarbeitung vorgenommen. Der Datenimport und -export von bzw. in Fremdformate(n) erfolgt über ecount-spezifische XMLZwischenformate, die sich aufgrund unterschiedlicher Anforderungen der Prozesse allerdings in ihrer Struktur unterscheiden. Mit Hilfe von Java-Komponenten, die dynamisch in das System integriert werden können, werden die speziellen Formate in das bzw. aus dem XML-Zwischenformat konvertiert. An dieser Stelle besteht die einfache Möglichkeit der Erweiterung um zusätzliche Formate. Der Datenaustausch mit der Datenbank erfolgt nur über die XML-Zwischenformate. Eine Beschreibung dieser XML-Zwischenformate befindet sich im Anhang. Abbildung 2-1: Grobarchitektur Seite 24 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 3 Installation und Konfiguration Die Auslieferung der Komponenten erfolgt in einer vorgegebenen Verzeichnisstruktur. Das Basisverzeichnis heißt üblicherweise Kommunikation und wird im Folgenden mit <BASE> bezeichnet, darunter befinden sich die mitgelieferten Start-Skripte als Unix-Shell-Skripte oder Windows-CMDSkripte, das Verzeichnis config für Konfigurationsdateien sowie das Verzeichnis für die ProgrammBibliotheken (lib-Verzeichnis). Weiterhin existiert evtl. noch ein templates-Verzeichnis, in dem Vorlagen für zu versendende E-Mails mit dem TEMPLATE-Format liegen. Beim ersten Start werden weiterhin ein log- und ein tmp-Verzeichnis für Protokoll- und temporäre Dateien angelegt. Das Basisverzeichnis mit der mitgelieferten Verzeichnisstruktur wird an beliebiger Stelle im Dateisystem des Kommunikationsrechners abgelegt. 3.1 Neuinstallation und Basis-Konfiguration Für die Neuinstallation steht ein Komplettstand zur Verfügung der in zwei Ausprägungen (Windows und Linux) verfügbar ist. Diese Können auf der Download-Seite heruntergeladen werden. Die KomA hat hierbei immer eine Datenbank-Voraussetzung an ecount die sowohl in der Zip-Datei, in der Datei ecount - Vorraussetzung.txt, sowie auf der Download-Seite aufgeführt ist. Diese Voraussetzung muss zwingend beachtet werden! Die Zip-Datei, für das gewünschte Betriebssystem, muss entpackt und konfiguriert werden. Die BasisKonfiguration ist in den Unterkapiteln beschrieben. Linux-Befehl: unzip KomA-Referenzstand-Linux.zip 3.1.1 Config. properties In der Config.properties müssen folgende Parameter kontrolliert und angepasst werden: - common.base_port Der verwendete Port muss frei sein und darf nur von 1 KomA-Instanz verwendet werden. Werden mehrere KomA-Instanzen aufgesetzt muss dieser Wert angepasst werden (+4 oder -4 wenn die anderes Ports über den base_port definiert werden) (siehe 3.3.3) database.user Der Datenbanknutzer (Standard EC_XCH) database.passwd Das Password für den Datenbankbenutzer in Klartext, Soll das Passwort sicherer abgelegt werden muss dies über die Datei setup_xch_pwd.cmd|sh (siehe 3.4.16) gepflegt werden. Hierbei ist dann der database.passwd Eintrag nicht mehr notwendig. database.conntype Entscheidung ob direkt über JDBC gegangen wird oder ob der Oracle JDBC OCI Treiber verwendet werden. Die Nutzung von JDBC (THIN) ist Standard und wird empfohlen! database.connect Übergabe der Datenbankverbindung Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 3.1.1.1 Seite 25 von 384 Import Soll die KomA für Importe (Abfrage von Mailkonten, …) verwendet werden ist noch folgende Einstellung wichtig. - importcom.comserver Der Wert muss eine positive Ganzzahl sein, diese Zahl wird anschließend bei den ImportVerbindungen verwendet (Importkommunikation [MF_COMIMPORT] in der Spalte Server), der Default-Wert ist 1. Abbildung 3-1 Verwendung des importcom.comserver-Parameters in ecount 3.1.1.2 Export Dient die KomA für Exporte, muss zusätzlich diese Einstellungen konfiguriert werden. - 3.1.2 common.smtp_server Hierbei wird der Mailserver konfiguriert über den die E-Mails versendet werden. Java-Version Der KomA setzt Java 8 mit der Version 8 Update 20 voraus! Neuere Update-Versionen von Java 8 sind kompatiblen und können verwendet werden, aus Security-Sicht wird dies auch empfohlen! Nun muss der KomA noch eine Java-Version definiert werden (siehe 3.3.1.1). Entweder wird die JavaVersion direkt in der KomA hinterlegt (dazu muss man nur ein Java 8 – Installationsordner in die KomA kopieren und nach „jdk“ bzw. „jre“ umbenennen) oder man setzt die Java-Version per user_env_pre.cmd|sh. Um nicht zu viele Java-Versionen auf einem System zu haben wird die Wiederverwendung empfohlen, daher sollte man die Java-Version über die user_env_pre.cmd|sh setzen. Es wird empfohlen auf 64-Bit-Systemen immer eine 64-Bit-Java-Version zu installieren, damit ist es möglich einen KomA-Prozess mehr als ~3,5 GB Arbeitsspeicher zur Verfügung zu stellen! Beispiel Windows (user_env_pre.cmd): SET JAVA_HOME=c:\Java\jdk1.8.0_66\ Beispiel Linux (user_env_pre.sh): export JAVA_HOME=/usr/java/jdk1.8.0_66 Seite 26 von 384 3.1.2.1 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Java-Version mittels symbolischen Link einrichten Es ist auch möglich ein symbolischen Link einzurichten, damit kann im jeweiligen KomA ein Verzeichnis „jre“ oder „jdk“ angelegt werden. Dieses Verzeichnis verlinkt dann auf einen anderen Ordner. Der Vorteil ist das man den symbolischen Link im Verzeichnis sieht und keine Konfigurationsdateien anpassen muss. Unter Linux kann dies mit dem Befehl ln –s gemacht werden. Dazu wechselt man in den gewünschten KomA (KOMMUNIKATION_BASE) und definiert den Link auf den Lib-Ordner, in unseren Fall liegt das zentrale Lib-Verzeichnis unter home/ecount/koma_basis/lib: Beispiel: ln -s /home/ecount/koma_basis/lib lib Unter Windows können seit Windows Vista symbolische Links mittels mklink eingerichtet werden. Beispiel: mklink /d lib C:\ecount\koma_basis\lib 3.1.3 Anpassung des Arbeitsspeichers (RAM) Siehe Kapitel 3.3.4 und 4.2.1. 3.2 3.2.1 Update-Installation Update einzelner Module Einzelne Updatepakete werden als upd-Dateien ausgeliefert. Die upd-Datei ist im Grunde nur eine ZIP-Datei. Beim Download einer upd-Datei wird von einigen Browsern automatisch die Dateiendung ZIP ergänzt. Vom Update-Modul werden aber nur updDateien erkannt, deswegen muss die Dateiendung ggf. manuell korrigiert werden. Die upd-Datei wird in den Ordner _updates kopiert (der Ordner befindet sich direkt im KomAVerzeichnis), anschließend muss install_updates.(cmd|sh|exe) ausgeführt werden. 3.2.2 Komplettupdate Soll eine bestehende KomA-Instanz aktualisiert werden können die Startskripte und der lib-Ordner auch manuell ausgetauscht werden. Die benötigten Dateien sind auf der Download-Seite erhältlich. 3.3 Konfiguration Die Konfiguration der einzelnen Komponenten erfolgt im Wesentlichen über eine Konfigurationsdatei, deren Name und Speicherort standardmäßig <BASE>/config/Config.properties lautet. Die Parameternamen sind baumstrukturiert in Punkt-Notation abgelegt. Zum Beispiel sind alle, nur den Import betreffenden, Einstellungen unter dem „Zweig“ import abgelegt. Weiterhin können ganze Unterbäume in externe Dateien ausgelagert werden, deren Dateiname sich aus dem Namen des Baums und der Endung .properties zusammensetzt. So können alle Konfigurationseinträge, die mit import. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 27 von 384 beginnen, in einer Datei namens import.properties im gleichen Verzeichnis wie Config.properties abgelegt werden, in der die Schlüssel dann ohne den Teil import. notiert werden. (Beispiel: statt import.debug=Y in der Config.properties kann in Datei import.properties debug=Y geschrieben werden.) Hinweise: Werden Export-Parameter über die ecount-Datenbank, beispielsweise über ein Versand-ABO, konfiguriert, haben diese immer Vorrang vor den Einstellungen in den Properties-Dateien! Parameter werden in den Konfigurationsdateien (Properties-Dateien) mit Parametername = Parameterwert angegeben, wobei einzeilige Kommentare mit Hilfe des Zeichens # am Zeilenanfang möglich sind. Bei der Angabe der Parameter-Namen ist Groß-/Kleinschreibung irrelevant. Parameter für Import- beziehungsweise Exportfilter werden in den jeweiligen Format-Dateien unter config/import/<Format>.properties beziehungsweise config/export/<Format>.properties abgelegt. Historisch bedingt können Parameter für Importfilter auch in der Config.properties hinterlegt sein. Diese Schlüssel beginnen mit ImportConvert.<Format>, wobei <Format> der Platzhalter für das zu konfigurierende Format ist. Es wird jedoch für jedes Format eine eigene Properties-Datei zu erstellen! Parametertypen: In den Parameter-Tabellen wird die Spalte TYP aufgeführt die den möglichen Wert des Parameters näher beschreibt. - 3.3.1 Bool: Der Parameter kann ein oder ausgeschaltet werden (true/false). Parameter von ecount werden immer über Y (oder y, j, J) ein- bzw. über N (oder n) ausgeschaltet. Int: Der anzugebende Wert ist eine Ganzzahl Int+: Der anzugebende Wert ist eine positive Ganzzahl String: Der anzugebende Wert ist eine Zeichenkette Dir: Der anzugebende Wert muss ein Dateiverzeichnis beinhalten (relativ zur aktuellen KomA oder absolut) Allgemeine Konfigurationsparameter Tabelle 3-1: Allgemeine Konfigurationsparameter Parameter/Beschreibung Standardwert Typ Y Bool 8785 Int+ 0 Int(0..10) common.backup Y/N: Sicherheitskopien bestehender Dateien anlegen statt Überschreiben. Die Backup-Dateien haben die Namenskonvention *.~nn.*. Es werden also max. 100 Backup-Dateien erzeugt. common.base_port TCP-Port zur Sperrbehandlung als Basis für all Jobs common.debug Debug-Informationen anzeigen (0: alle aus; 10: alle an) Seite 28 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung common.debugtime Y/N. Mit Y wird ein Zeitstempel im Protokoll mitgeschrieben. Standardwert Typ Y Bool common.debugtime.format Standard: dd.MM.yyyy HH:mm:ss.SSS; Bei Ausgabe des Datums in den dd.MM.yyyy HH:mm:ss.SSS LOG Dateien kann mit dieser Einstellung die Formatmaske definiert werden. (siehe Datumsformatierung) String common.ignore_xml_lov Y/N: Wertelisten-Prüfung bei XML-Attributen ausschalten (erforderlich, wenn unerwartete Werte durch Importe auftreten Fehlermeldungen der Art '... not in list of possible values' treten bei Importen auf) common.maint_windows_from_db Y/N. Wartungsfenster aus Datenbank abfragen N Bool N Bool N Bool resources Dir common.printMessageIds Y/N: Ausgabe der Meldungs-ID bei mehrsprachigen Meldungen, um bei unverständlichen Meldungstexten Rückschlüsse auf die ursprüngliche Meldung ziehen zu können common.resourceDir Verzeichnis für Sprachdateien. Die Angabe erfolgt relativ zum Basisverzeichnis. Liegen die Dateien also unter <KOMA>/resources/de lautet die Einstellung: common.resourceDir = resources/de common.smtp_server String Adresse des SMTP Servers für den E-Mail-Versand und ImportKommunikation common.stop_all Import-/Export-Aktivitäten aussetzen-> sofort Java-Prozesse wieder abbrechen N Bool database.connect String Datenbank-Connect-String; bei conntype =OCI -> Oracle TNS-Name, sonst <Rechner>:<Port>:<SID> database.conntype Datenbank-Verbindungstyp, OCI und THIN werden unterstützt. Wer OCI nutzt muss den aktuellen OCI-Driver "Version 12.1.0.2.0" nutzen bzw. wenn nicht vorhanden installieren! Oracle Instant Client THIN String Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Seite 29 von 384 Standardwert database.passwd Typ String Datenbank-Passwort database.timings Zeitmessungen für Datenbank-Kommunikation ausgeben (für Debug der Performance sinnvoll) database.timings.printSQL Bei Zeitmessungen auch SQL-Statements mit ausgeben N Bool N Bool database.user Datenbank-Benutzername für Datenbank-Operationen, typischerweise EC_XCH 3.3.1.1 String Einrichtung der Java-Umgebung Die KomA setzt (seit lfd. Nr. R 5.1 - 2542) eine Java-Runtime-Umgebung mindestens in der Version 8 Update 20 voraus. Da aktuell keine Probleme mit höheren Update-Versionen bekannt sind, kann die von Oracle empfohlene Java-Version (Stand 17.12.2015 8u66) problemlos verwendet werden. Die Downloads können von Oracle-Java bezogen werden. Dabei existieren jeweils 2 Versionen, einmal eine reine Laufzeit-Umgebung (JRE – Java Runtime Environment), zum anderen eine JavaEntwicklungsumgebung mit zusätzlichem Compiler und weiteren Entwicklungswerkzeugen (JDK – Java Development Kit). Die Runtime kann entweder direkt im Basisverzeichnis unter jre (bzw. jdk wenn es sich um das komplette Java Development Kit handelt) abgelegt werden. In diesem Fall muss nichts zusätzlich eingerichtet werden, es ist sogar ausreichend, ein Installationsverzeichnis von einem anderen Rechner einfach zu kopieren. In den mitgelieferten Skripten wird die Runtime dann automatisch gefunden und verwendet. Bei der automatischen Suche nach einer Java-Version wird erst nach jdk* und anschließend nach jre* gesucht. Eine Java Development Kit-Version hat also vor der reinen Runtime Vorrang. Des Weiteren kann durch die Nutzung des * der Ordner auch jre8 heißen. Die Runtime kann auch von einer beliebigen anderen Stelle im Dateisystem verwendet werden. Es sollte dann aber über die JAVA_HOME-Systemvariable der Ort bekannt gemacht werden, um sicher zu gehen, dass nicht eine falsche Java-Version verwendet wird, die sich zufällig auch im Suchpfad für Programme befindet. JAVA_HOME kann global im System definiert oder aber einfach in dem Konfigurationsskript <BASE>/config/user_env_pre.(cmd|sh) gesetzt werden (um Seiteneffekte bei anderer installierter Software zu vermeiden). Beispiel user_env_pre.cmd: SET JAVA_HOME=c:\Java\64\jdk1.8.0_51\ Seite 30 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Beispiel user_env_pre.sh: export JAVA_HOME=/usr/java/jdk1.8.0_66 Hinweise: Wenn eine Java-Version direkt im KomA-Verzeichnis hinterlegt ist (jre oder jdk-Ordner) und zusätzlich eine andere Java-Version per user_env_pre.(cmd|sh) definiert wurde, so wird die JavaVersion aus dem KomA-Verzeichnis geladen, da in der env.cmd die Java-Version aus dem KomAOrdner Vorrang hat. Die Java-Version muss nicht über den Java-Installer installiert werden. Es ist ausreichend, eine bestehende Java-Installation (also den gesamten Installationsordner, z. B. jre8) einfach zu kopieren. Wird der Java-Ordner in den KomA-Ordner kopiert, sollte dieser dennoch in jre oder jdk umbenannt werden. 3.3.1.2 Besonderheiten bei Windows-Rechnern Hinweise: Auf einem Windows-Rechner ist es empfehlenswert, den Standard-Installations-Ordner für die JavaVersionen anzupassen, damit der Pfad keine Leerzeichen enthält (z. B. c:\Java\64 oder c:\Java\32). Sollte der Java-Installationspfad Leerzeichen enthalten, sollte der Kurzname des Pfades verwendet werden (z. B. C:\Progra~1\Java\jre6) Windows 64-bit Systemen: Progra~1 = 'Program Files' Progra~2 = 'Program Files(x86)' Bei Windows-Systemen und nicht korrekter Path-Angabe (z. B. veraltete Java-Version an vorderster Stelle) muss zusätzlich die PATH-Angabe geändert werden. Das kann in der user_env_pre.(cmd|sh) wie folgt realisiert werden. set JAVA_HOME=C:\Progra~2\Java\jre6 set PATH=%JAVA_HOME%\bin;%PATH% Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 31 von 384 Alternativ kann die Path-Angabe im Windows angepasst werden. Abbildung 3-2: Anpassen der Path-Angabe Zusätzlich muss geprüft werden, ob die Path-Angabe keine Pfade zu alten Java-Versionen vor dem Eintrag %JAVA_HOME%\bin enthält! 3.3.1.3 Setzen der Java-Version unter Linux Befindet sich im KomA-Verzeichnis ein jre oder ein jdk-Verzeichnis, so wird diese Java-Version beim Start verwendet. Ansonsten kann die Java-Version auch beispielsweise über die user_env_pre.sh wie folgt gesetzt werden: export JAVA_HOME=/usr/java/jdk1.8.0_51 3.3.1.4 Zeitzonen-Informationen der Java-Runtime Zeitzonen-Informationen sind direkt in der Java-Version abgebildet, ausführliche Informationen bietet die Oracle-Seite Timezone Data Versions in the JRE Software. Werden ältere Java-Versionen verwendet und ist eine aktualisierte Zeitzoneninformation notwendig, z. B. weil in Russland am 2014-10-26 plötzlich wieder 1 Stunde subtrahiert wird und die KomA in der Zeitzone Europe/Moscow arbeitet, so muss eine manuelle Aktualisierung dieser Informationen vorgenommen werden. Das Tool und die Anleitung findet der Anwender unter Timezone Updater Tool. Die heruntergeladene Datei tzupdater.jar speichern Sie am besten direkt in das Java-Verzeichnis neben die Datei java.exe (binOrdner der Java-Version) und führen anschließend Folgendes aus: java -jar tzupdater.jar -u –f Seite 32 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Alternativ kann auch eine bat/sh-Datei erstellt und ausgeführt werden (Der Vorteil ist in diesem Fall, dass das Fenster durch den pause-Befehl sichtbar bleibt und eventuelle Fehler sichtbar werden): java -jar tzupdater.jar -u –f pause Ob die Zeitzoneninformationen aktualisiert wurden prüfen Sie wie folgt: Für Java 8 und spätere Versionen: - Prüfen Sie die Datei tzdb.dat im Pfad JAVAHOME/jre/lib. Dies ist die neue Datei. Prüfen Sie die Datei tzdb.dat.<oldtzdataversion> im gleichen Pfad JAVAHOME/jre/lib. Dies ist die ersetzte Datei. Beispiel: In Abbildung 3-3 ist ersichtlich das Java 8u20 mit der Version tzdata2014c ausgeliefert wurde und durch das manuelle Update die Version tzdata2014g heruntergeladen und nun aktiv ist. Abbildung 3-3: Aktualisierung der Zeitzoneninformation In der Vergangenheit wurden Daten (Werte und Zeitstempel) von der KomA an die Import-API immer in deutscher Winterzeit übergeben. Mit eCount- 00047114 wurde dies geändert. Grund der Änderung war ein Problem bei der deutschen Zeitumstellung, die es in anderen Ländern (z. B. Russland) nicht mehr gibt. Dadurch wurde am Umschalttag ggf. 1 Wert weniger importiert (bei Stundenwerten und der Umschaltung 2 Uhr auf 3 Uhr). Dadurch kam es zur Datenverfälschung. Die Verwendung einer Zeitzone kann je Import- und Export-Filter jedoch unterschiedlich sein. Es existieren Filter, die hart die deutsche Zeit (Zeitzone Europe/Berlin) verwenden (z. B. EDIFACTFilter). Andere Filter extrahieren die Zeitzone aus den Import-Dateien oder werden per PropertiesDateien konfiguriert. 3.3.1.5 Allgemeine Speicherplatzoptimierungen Beim Import wird jede heruntergeladene E-Mail lokal gespeichert (das Verzeichnis ergibt sich aus der Einstellung importcom.mail_dir), wird dieses Verhalten nicht benötigt kann dies über die Einstellung importcom.save_mail=N deaktiviert werden. Beim Export wird eine KomA-XML-Datei vom Exportauftrag (Verzeichnis ergibt sich aus export.xml_dir) geschrieben, dies kann mittels export.write_xml=N deaktiviert werden. Zusätzlich wird beim Export noch die erzeugte Datei (die letztendlich versendet wird) abgelegt, dieses Datei kann gelöscht werden indem export.deleteformatfile = Y gesetzt wird. Werden E-Mail-Dateien versendet wird die E-Mail, die von der KomA an den Mailserver übergeben wird, auch gespeichert. Dieses Verhalten kann mit der Einstellung export.MEX.writemailfile=N deaktiviert werden. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 33 von 384 Bei Problemen bzw. fehlerhaften Export-Aufträgen müssen dieses Feature, sollten diese deaktiviert worden sein, wieder aktiviert werden. Anschließend muss der entsprechende Export-Auftrag wiederholt werden. Insbesondere die XML-Datei (die mittels export.write_xml=Y erzeugt wird) ist von größter Wichtigkeit, da mit dieser XML-Datei die Probleme von der Entwicklungsabteilung nachvollzogen werden können. 3.3.1.6 Spracheinstellung KomA-Module Über die Einstellung common.resourceDir kann ein Verzeichnis für Sprachdateien definiert werden über das verschiedene KomA-Module ihre Texte beziehen. Damit können verschiedenste Filter internationalisiert werden. Per Default sind alle Spracheinstellungen für Deutsch ausgelegt. Das Default Verzeichnis heißt „config/resources/de“. Die Spracheinstellung von Datenbank-Fehlermeldungen und weiterer Drittmodulen ist in 3.3.2.1.2 beschrieben. 3.3.2 Einrichtung der Java-Optionen Für alle KomA-Prozesse identische Einstellungen, wie Sprachinformationen oder Zeichenkodierung, werden mit Hilfe der Datei env.(cmd|sh) gesetzt. Dieses Kapitel beschreibt die hier vorhandenen Konfigurationsmöglichkeiten. Diese Einstellungen müssen bei internationalen Kunden vorgenommen werden, da die Startskripte per Default die Sprache auf Deutsch und die Zeit auf Europe/Berlin setzen! 3.3.2.1 Initialisierungsskript env.(cmd|sh) Diese Datei wird ausgeliefert und darf nicht modifiziert werden! Nutzeränderungen sind immer über die Datei user_env zu realisieren. Jedes Startskript für die einzelnen KomA-Prozesse ist so konfiguriert, dass eine vorhandene env-Datei immer geladen wird. Die relevanten Einstellungen aus der env-Datei sind folgende: SET CONFIG_ENCODING=Cp1252 SET USER_REGION=DE SET USER_LANGUAGE=de SET USER_TIMEZONE=Europe/Berlin :: Benutzerdefinierte Variablen-Definitionen laden: :::::::::: if exist "%~dp0user_env.cmd" call "%~dp0user_env.cmd" Seite 34 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 SET JAVA_OPTIONS=%JAVA_OPTIONS% -Duser.timezone=%USER_TIMEZONE% Duser.region=%USER_REGION% -Duser.language=%USER_LANGUAGE% Dfile.encoding=%CONFIG_ENCODING% CONFIG_ENCODING, USER_REGION, USER_LANGUAGE und USER_TIMEZONE sind hierbei die möglichen Parameter für nutzerspezifische Änderungen. Die hier hinterlegten Standardwerte sind für den Betrieb in Deutschland vorgesehen. 3.3.2.1.1 CONFIG_ENCODING Über diese Einstellung wird der Default-Zeichensatz festgelegt mit denen Dateien (z.B. PropertiesDateien) gelesen werden. Default: Cp1252 Hintergrund: Die interne Repräsentierung von Zeichenketten erfolgt bei Java immer im UNICODE Zeichensatz. Werden Textdateien gelesen / geschrieben, nimmt Java an, das diese im Standard-Zeichensatz des Rechners codiert sind, auf dem das Java-Programm ausgeführt wird. Wird eine Textdatei gelesen, übersetzt Java vom Default-Zeichensatz des Rechners nach UNICODE. Wird eine Textdatei geschrieben, übersetzt Java von UNICODE in den Default-Zeichensatz des Rechners. 3.3.2.1.2 USER_LANGUAGE / USER_REGION Einstellungen für die Sprache, sind unteranderem bei folgenden Punkten relevant: - Fehlermeldungen bei Drittbibliotheken und Datenbankfehlern (z.B. Oracle-JDBC-Driver) Abfrage von Datums-Werten (z.B. Monatsname) bei Reports (Abfrage via SQL über den OracleJDBC-Driver) Der Default ist Deutschland (SET USER_REGION=DE, SET USER_LANGUAGE=de) Mögliche Werte (Ausschnitt): Land Code Belgien SET USER_REGION=BE SET USER_LANGUAGE=nl Bulgarien SET USER_REGION=BG SET USER_LANGUAGE=bg China SET USER_REGION=CN SET USER_LANGUAGE=zh Dänemark SET USER_REGION=DK SET USER_LANGUAGE=da Deutschland SET USER_REGION=DE Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Land Seite 35 von 384 Code SET USER_LANGUAGE=de Finnland SET USER_REGION=FI SET USER_LANGUAGE=fi Frankreich SET USER_REGION=FR SET USER_LANGUAGE=fr Griechenland SET USER_REGION=GR SET USER_LANGUAGE=de Italien SET USER_REGION=IT SET USER_LANGUAGE=it Kanada SET USER_REGION=CA SET USER_LANGUAGE=en Kroatien SET USER_REGION=HR SET USER_LANGUAGE=hr Niederlande SET USER_REGION=NL SET USER_LANGUAGE=nl Norwegen SET USER_REGION=NO SET USER_LANGUAGE=no Polen SET USER_REGION=PL SET USER_LANGUAGE=pl Russland SET USER_REGION=RU SET USER_LANGUAGE=ru Schweiz SET USER_REGION=CH SET USER_LANGUAGE=it Spanien SET USER_REGION=ES SET USER_LANGUAGE=es Tschechische Republik SET USER_REGION=CZ SET USER_LANGUAGE=cs Türkei SET USER_REGION=TR SET USER_LANGUAGE=tr Vereinigte Staaten von Amerika SET USER_REGION=US SET USER_LANGUAGE=en Vereinigtes Königreich SET USER_REGION=GB Seite 36 von 384 Land Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Code SET USER_LANGUAGE=en SET USER_REGION=AT SET USER_LANGUAGE=de Österreich 3.3.2.1.3 USER_TIMEZONE Die Zeitzone, mit der die KomA läuft, ist für einige Import- und Exportfilter relevant die als Zeitzone die Default-Zeitzone der KomA verwenden (also keine eigene Konfigurationsmöglichkeiten bieten bzw. nicht auf Europe/Berlin festgelegt sind). Default: Europe/Berlin Wichtiger Hinweis für internationale Kunden: In einigen Ländern ändert sich häufiger relevante Bedinungen für die Zeitzone. So wurde beispielsweise in Russland zum 26. Oktober 2014 zur Normalzeit zurückgekehrt, desweiteren wurden zwei neue Zeitzonen eingeführt. In der Türkei wurde 2015 die Umschaltstunde (Sommer zu Winter) vom 28.10 auf den 8.11 verschoben. Diese Änderungen werden regelmäßig in Java eingepflegt und in den neusten Versionen veröffentlicht. Sollen Daten in dieser Zeitzone importiert werden ist es wichtig, dass die Java-Version auf die KomA und die Datenbank mit den gleichen Zeitzoneninformationen arbeiten! Auf die KomA muss dafür meist nur die aktuellste Java-Version verwendet werden, welche Zeitzoneninformation in welcher Java-Version enthalten ist kann über folgenden Link herausgefunden werden Timezone Data Versions in Java (siehe auch 3.3.1.4). In Kapitel 6.1 ist erklärt welchen Einfluss die Zeitzone beispielsweise beim Import von Lastgangdaten hat. 3.3.2.1.4 Auswertung der .profile unter Linux Die Datei .profile ist eine Skript-Datei die beim Login aufgerufen wird, vergleichbar mit der AUTOEXEC.BAT unter Windows. Hier können Befehle und Variablendefinitionen vorgenommen werden. Seit 2016 wird in der env.sh-Datei nicht mehr die Datei .profile ausgelesen, in den alten env.shDateien war/ist der Aufruf ganz am Anfang der Datei vorhanden: [ -z "$DOTPROFILEREAD" -a -r "$HOME/.profile" ] && . "$HOME/.profile" Alle relevanten Einstellungen für die KomA müssen immer über die user_env.sh bzw. user_env_pre.sh konfiguriert werden. Hintergrund: In der .profile-Datei wurden teilweise Befehle ausgeführt, sodass die KomA-Jobs nicht mehr starteten. Diese Problemidentifizierung ist/war sehr mühsam und zeitintensiv, daher wurde entschieden die Auswertung der .profile-Datei zu unterbinden. 3.3.2.2 Benutzerspezifisches Initialisierungsskript user_env.(cmd|sh) Hier können unter anderem alle Parameter modifiziert werden, die in 3.3.2.1 beschrieben wurden. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 37 von 384 Die user_env.(cmd|sh) für einen russischen KomA könnte beispielsweise so aussehen: SET CONFIG_ENCODING=UTF8 SET USER_REGION=RU SET USER_LANGUAGE=ru SET USER_TIMEZONE=Europe/Moscow Zusätzlich können hier auch Proxy-Informationen hinterlegt werden, z. B. SET JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyHost=proxy.robotron.de SET JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyPort=80 3.3.3 Einrichtung der Sperr-Ports Eine wichtige Rolle spielen seit einiger Zeit die TCP/IP-Ports, die für die verschiedenen Jobs zur Behandlung von Sperren verwendet werden. Da die Jobs i.d.R. automatisch in regelmäßigen Abständen von einem Scheduler gestartet werden, kann es unter Umständen vorkommen, dass versucht wird, einen Job neu zu starten, während ein vorheriger Durchlauf noch aktiv ist. Da es in einem solchen Fall zu einem Konflikt kommt, muss das erneute Starten desselben Jobs verhindert werden. Eine Möglichkeit dazu besteht in der Verwendung von Sperr-Dateien, deren Vorhandensein die Aktivität eines Jobs signalisieren. Dies ist allerdings allein zu unsicher, da es vorkommen kann, dass durch Absturz des Rechners oder nur des Java-Prozesses (z. B. durch forciertes Beenden des Betriebssystem-Prozesses) die Sperr-Datei bestehen bleibt. Da der zugehörige Job nicht mehr aktiv ist, hat das zur Folge, dass ein erneuter Start verhindert wird, bis die Sperrdatei manuell gelöscht ist. Um dies zu verhindern, gibt es zusätzlich eine Kontrolle, ob der Job wirklich noch aktiv ist. Dies erfolgt über Prozess-Kommunikation mit Hilfe eines Ports, dessen Nummer in der Sperrdatei mit abgelegt ist. Es entsteht der zusätzliche Nutzen, dass über diesen Mechanismus auch ein kontrolliertes Beenden eines Jobs möglich ist, indem über diesen Port ein Stopp-Signal gesendet wird, woraufhin sich der Prozess zum nächst möglichen Zeitpunkt selbst beendet. Dies ist auch von einem anderen Rechner über Netzwerk möglich. Deshalb ist in der Sperrdatei zusätzlich die IP-Adresse des Rechners abgelegt, auf dem der Job läuft. Da jeder Port nur einmal verwendet werden kann, müssen die Ports der Jobs alle verschieden sein. Diese können in begrenztem Maße willkürlich gewählt werden. Es sind allerdings verschiedene Ports bereits von anderen Prozessen belegt. Grundsätzlich sollten die System Ports (Ports 0 - 1023) nicht benutzt werden. Eine Liste der belegten Ports lässt sich mit dem Kommando netstat ermitteln. Es sollte möglichst ein Port aus dem Bereich Dynamic Ports (Ports 49152 - 65535) verwendet werden, da diese zur freien Verfügung gedacht sind. Werden jedoch mehrere Kommunikationsumgebungen (z. B. für verschiedene Datenbanken, Test, Produktiv) auf demselben Rechner parallel betrieben, so müssen alle Ports in allen Umgebungen verschieden sein, damit sich die Jobs nicht gegenseitig behindern. In diesem Fall müssen diese Ports angepasst werden. Dies geschieht über den Parameter common.base_port, der als Basis für die Standardwerte aller anderen Ports dient, oder die Parameter archive.port, import.port, importcom.port und export.port für jeden Job einzeln. Seite 38 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Es ist ausreichend den common.base_port zu definieren, da die anderen Ports von diesen abgeleitet werden. Eine KomA-Instanz nutzt hierbei den Port unter common.base_port zuzüglich der nächsten 3 folgenden. 3.3.4 Einstellung bezüglich des Speicherbedarfes der jeweiligen Prozesse Die KomA besteht aus mehreren Prozessen (Comimport, Datenimport, Datenversand, Archivierung, …) die jeweils über eigene Startskripte (comimport.cmd|sh, datenimport.cmd|sh, datenversand.cmd|sh) gestartet werden. Alle zentralen Startskripte setzen den für den Prozess maximalen Speicher über folgende Einstellung: SET JAVA_OPTIONS=-Xmx512m %JAVA_OPTIONS%. In diesem Fall steht den Datenimportprozess also max. 512 MB Arbeitsspeicher zur Verfügung (da Java intern selbst noch Einiges an Arbeitsspeicher benötigt, steht dem KomA-Prozess jedoch immer weniger Arbeitsspeicher zur Verfügung). Werden große Datenmengen importiert und stehen ausreichend Hardwareressourcen zur Verfügung, kann dieser Wert erhöht werden, z. B. (2014 MB: -Xmx2048m, 6 GB: -Xmx6g). Siehe auch Kapitel 4.2.1. In der Auslieferung sind für den Datenimport und Datenversand sind aktuell 2 GB Speicher vorgesehen! 3.3.5 Parallelbetrieb KomA Das KomA-Design ist Single-Threading, eine Parallelverarbeitung ist nur durch die Nutzung mehrerer KomA-Instanzen möglich. In diesem Abschnitt erhält der Anwender Information über den Betrieb einer Datenbank mit mehreren KomA-Instanzen. Hinweis - Performance: Eine Bereinigung der EXPORT_AUFTRAEGE-Tabelle ist mit eCount-00038854 realisiert worden. Bei großen Datenbeständen (mehr als 1 Mio. Datensätze) in der Tabelle EXPORT_AUFTRAEGE führt eine Anpassung des Selects über die SQL_Select_Next_EAU.sql ggf. zu einem Performanceproblem (Stichwort Full table scan). Daher sollten Sie die Möglichkeiten (eCount-00038854) zur Reduzierung der Daten in der Tabelle nutzen. Globaler-Parameter: Exportaufträge löschen nach Tagen (Gruppe Datenversand) Bei der Nutzung einer spezifischen Abfrage über SQL_Select_Next_EAU.sql sollte geprüft werden, ob Indexe auf den Spalten vorhanden sind. Ist dies nicht der Fall, sollten diese angelegt werden. Wird beispielsweise über EXPORT_ECOUNT.FORMAT eine Abfrage aufgebaut, sollte auch die Spalte FORMAT der Tabelle EXPORT_ECOUNT mit einem Index versehen sein (da kundenspezifische Abfragen nicht zum Produktstandard gehören, können keine allgemeinen Indexe von Robotron ausgeliefert werden). 3.3.5.1 Import In der Maske Importkommunikaton (im ecount über den Menüpunkt Import > Kommunikationsautomatisierung zu öffnen) kann für ein angelegtes Konto im Feld Server eine ID Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 39 von 384 eingetragen werden. Über diese ID erfolgt die Zuordnung zu einem KomA-Server. Im Beispiel wurde ID 1 vergeben: Abbildung 3-4: Maske Importkommunikation In der Config.properties-Datei des KomA-Servers gibt es die Einstellung importcom.comserver. Mit dieser kann die KomA-Server auf das Importkonto verknüpft werden. Dazu wird die gleiche ID (hier 1) in der Einstellung verwendet. Sollte es die Einstellung importcom.comserver nicht geben, muss diese neu angelegt werden: ## Nummer des ImportCommunication Servers Importcom.comserver = 1 3.3.5.2 Export Beim Export kann für jeden KomA-Server über die Datei SQL_Select_Next_EAU.sql (config/SQL_Select_Next_EAU.sql) eine Abfrage hinterlegt werden, mit der die zu bearbeitenden ExportAufträge einzuschränken sind. Beim Export wird über SELECT/UPDATE eine Sperre mittels DBMS_LOCK angefordert, sodass es nicht zu Konflikten bei konkurrierenden KomA-Servern kommen sollte. Seite 40 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 3-5: Abfrage SQL_Select_Next_EAU.sql Der Status der abzuarbeitenden Export-Aufträge ist immer B (Bereit) und sollte nicht verändert werden. Für Testzwecke könnte jedoch ein anderer Status (außer F = Fehler oder V = verarbeitet oder J = Verarbeitung in JAVA) verwendet und per Einstellung export.eau_status = X in der Config.properties-Datei mitgegeben werden. 3.3.5.3 Ohne SQL_Select_Next_EAU.sql Ist keine SQL_Select_Next_EAU.sql hinterlegt, so lautet die Abfrage nach dem nächsten Export-Auftrag: SELECT ID FROM EXPORT_AUFTRAEGE WHERE STATUS = 'B' AND ROWNUM = 1 Damit wird die Verarbeitung eines in „bereit“ stehenden Exportauftrags gestartet. Da kein ORDER BY (Sortierung) enthalten ist, kann keine Vorhersage über den selektierten Exportauftrag getroffen werden. Sollen Sortierungen wie LIFO (last in first out) oder FIFO (first in first out) berücksichtigt werden, muss dies über die SQL_Select_Next_EAU.sql realisiert werden. 3.3.5.4 Mit SQL_Select_Next_EAU.sql Ein FOR UPDATE NOWAIT darf nicht verwendet werden, da das LOCK über pkg_lock.fnc_lock realisiert wird. Dabei wird die gesamte Export-Tabelle gesperrt. Beispiel: Der KomA-Server soll alle FORMATE, außer „EBIX“, „REPORT“ und „INFO“, exportieren. Die Abfrage auf STATUS = ‚B‘ muss immer enthalten sein! Wird ein Exportauftrag vom KomA-Server gefunden, wird der Status auf J (Abarbeitung findet in JAVA statt) gesetzt. SELECT id FROM (SELECT eau.id from export_auftraege eau, export_ecount ee WHERE eau.ee_id = ee.id AND eau.status = 'B' AND ee.format NOT IN ('EBIX', 'REPORT', 'INFO') ) WHERE rownum = 1 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 41 von 384 Beispiel: LAST IN FIRST OUT (LIFO) SELECT ID FROM (SELECT * FROM EXPORT_AUFTRAEGE WHERE STATUS = 'B' ORDER BY EE_ID DESC) WHERE ROWNUM = 1 Beispiel: FIRST IN FIRST OUT (FIFO) SELECT ID FROM (SELECT * FROM EXPORT_AUFTRAEGE WHERE STATUS = 'B' ORDER BY EE_ID ASC) WHERE ROWNUM = 1 3.3.5.5 Beispiel eigener KomA-Server für Excel-Reports Der Export von Excel-Reports (EXPORT_ECOUNT.FORMAT = XLS_REP) ist sehr speicherintensiv, somit bietet es sich an den Export der über eine eigeneKomAzu realisieren. Diese KomA sollte auf einer Hardware mit genügend Arbeitsspeicher laufen. Empfohlen werden mindestens 8 GB, 16 oder 20 GB sind aktuell als ideal zu bezeichnen! Die Einstellung der KomA-Prozesse bezüglich des zur Verfügung stehenden Arbeitsspeichers ist in Kapitel 3.3.4. Nehmen wir an das 16 GB Arbeitsspeicher zur Verfügung stehen, so sieht die Einstellung in der datenversand.(cmd|sh) wie folgt aus: SET JAVA_OPTIONS=-Xmx16g Damit die KomA nur Excel-Reports verarbeitet muss die SQL_Select_Next_EAU.sql angepasst werden, das zu hinterlegende SQL-Statement kann wie folgt aussehen: SELECT id FROM (SELECT eau.id from export_auftraege eau, export_ecount ee WHERE eau.ee_id = ee.id AND eau.status = 'B' AND ee.format = 'XLS_REP' and rownum = 1) Mit diesem SQL wird einfach nach einen Excel-Export-Auftrag gesucht der im Status bereit steht, eine Sortierung (z.B. nach FIFI-Prinzip) wird hier nicht beachtet. Alle anderen Export-Aufträge müssen nun über eine andere KomA bearbeitet werden. Diese KomA kann bezüglich des Datenversandes mit weniger Arbeitsspeicher ausgestattet sein. Damit jedoch kein ExcelExport-Auftrag bearbeitet wird muss dieses Format in der SQL_Select_Next_EAU.sql ausgeschlossen werden. Das zu hinterlegende Statement kann wie folgt aussehen: SELECT id FROM (SELECT eau.id from export_auftraege eau, export_ecount ee WHERE eau.ee_id = ee.id AND eau.status = 'B' Seite 42 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 AND ee.format != 'XLS_REP' and rownum = 1) 3.3.6 Einrichtung Automatisches Starten und Stoppen Im Produktivbetrieb ist das automatische Starten und Stoppen der Prozesse (Comimport, Datenimport und Datenversand, Archivierung und LPL-Spool) erforderlich. Hierbei ist zu beachten das der Comimport-Prozess der einzige Prozess ist der nach der Abarbeitung nicht beendet wird, also in einer Endlosschleife läuft. Daher müssen für den Comimport zwei Tasks angelegt werden (1x der startet und 1x der stoppt). Es wird empfohlen den Comimport 1x täglich zu stoppen! Der Datenimport und der Datenversand müssen periodisch gestartet werden, es wird empfohlen diese Prozesse in 5 oder 10 Minuten-Rhythmus zu starten. Die Archivierung und die Bereinigung der Linearen Protokolle sollte 1x wöchentlich durchgeführt werden. Sinnvoll ist es dies zu relativ ruhigen Zeiten, z.B. Samstag oder Sonntag in der Nacht, durchzuführen. 3.3.6.1 Beispiel Linux (crontab) Der Comimport wird Montag bis Samstag um 0:15 Uhr gestartet und gegen 23:45 Uhr beende 15 0 * * 1-6 ~/koma/Kommunikation_ecr5e11/comimport.sh & 45 23 * * 1-6 ~/koma/Kommunikation_ecr5e11/comimport_stop.sh Der Datenversand und der Datenimport werden Montag bis Samstag zwischen 2 und 23 Uhr aller 10 Minuten gestartet. */10 2-23 * * 1-6 ~/koma/Kommunikation_ecr5e11/datenversand.sh */10 2-23 * * 1-6 ~/koma/Kommunikation_ecr5e11/datenimport.sh Die Archivierung läuft 1x wöchentlich am Samstag gegen 22 Uhr: 0 22 * * 6 ~/koma/Kommunikation_ecr5e11/lplspool.sh Die Bereinigung der Linearen Protokolle erfolgt 1x wöchentlich am Sonntag 4 Uhr: 0 4 * * 7 ~/koma/Kommunikation_ecr5e11/archivierung.sh 3.3.6.2 Beispiel Windows Unter Windows kann die Aufgabenplanung genutzt werden. Am Beispiel wird das Einrichten des Comimport aufgezeigt, für die anderen Prozesse ist dies äquivalent durchzuführen. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 3-6: Dialog Eigenschaften von KomA-Datenimport Abbildung 3-7: Dialog Trigger bearbeiten Seite 43 von 384 Seite 44 von 384 Abbildung 3-8: Dialog Aktion bearbeiten Abbildung 3-9: Dialog Aufgabe erstellen / Bedingungen Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 45 von 384 Abbildung 3-10: Dialog Aufgabe erstellen / Einstellungen 3.3.7 Advanced Features – Wiederverwendung von LIB-Ordner, … Werden mehrere KomA-Instanzen eingesetzt empfiehlt es sich das Lib-Verzeichnis wiederzuverwenden. Dies ist durch die Nutzung von Links auf Betriebssystem-Ebene möglich (siehe auch 3.1.2.1) aber auch über die Konfiguration in cmd/sh-Dateien. Setzen mittels config/user_env_pre.cmd: Die einfachste Sache ist vermutlich die Verwendung des absoluten Pfades, z.B.: SET LIB_DIR=\\server1\ecount\Kommunikation_Base\lib 3.4 Verzeichnisstruktur / Skripte KOMMUNIKATION Basis-Verzeichnis │ archivierung.(cmd|sh) │ checkVersions.(cmd|sh) │ comimport.(cmd|sh) │ comimport_background.(cmd|sh) │ comimport_console.(cmd|sh) │ comimport_stop.(cmd|sh) │ datenimport.(cmd|sh) │ datenimport_convert.(cmd|sh) │ datenimport_stop.(cmd|sh) Seite 46 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 │ datenversand.(cmd|sh) │ datenversand_datei.(cmd|sh) │ datenversand_stop.(cmd|sh) │ install_updates.(cmd|sh) │ … │ _updates Installationsordner ├───config Konfigurationsverzeichnnis │ │ archive.ini Archivierung Konfigurationsdatei für Standard- │ │ Config.properties Zentrale Konfigurationsdatei │ │ datenimport.ini Konfigurationsdatei für Datenimport │ │ env.(cmd|sh) Initialisierungsskript für alle Jobs │ │ user_env.(cmd|sh) Benutzerspez. Initialisierungsskript │ │ user_env_pre.(cmd|sh) Benutzerspez. Initialisierungsskript │ ├───export │ │ CSV.properties Konfigurationsdatei für Export-Format CSV │ │ LPEX.properties Konfigurationsdatei für Export-Format LPEX │ ├───import │ │ CSV.properties Konfigurationsdatei für CSV │ │ EDI.properties Konfigurationsdatei für EDIFACT │ │ LPEX.properties Konfigurationsdatei für LPEX │ └───samples Beispiel-Konfigurationsdateien Konfigurationsdateien für Exportfilter Konfigurationsdateien für Importfilter ├───jre Java-Laufzeitumgebung (wenn JRE installiert) ├───jdk Java-Laufzeitumgebung (wenn JDK installiert) ├───log Ausgabeverzeichnis für Log-Dateien ├───templates E-Mail-Templates für Export-Format TEMPLATE └───tmp Verzeichnis für temporäre Dateien (Sperr-Dateien) Abbildung 3-11: Vereinfachte Kommunikations-Verzeichnisstruktur Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 47 von 384 Alle Skripte werden in 2 Versionen geliefert, zum einen als Windows-Command-Skript (Endung .cmd) zum anderen als Unix™-Shell-Skript (Endung .sh). Da es verschiedene Shell-Dialekte gibt, müssen die .sh-Skripte ggf. an den konkreten Shell-Interpreter angepasst werden Das Wurzelverzeichnis für den Import-Export-Prozess heißt per Standard Kommunikation. Alle Pfadangaben innerhalb dieser Verzeichnisstruktur werden relativ zu dieser Wurzel angegeben. Alle Einstellungen werden in Dateien im darunter liegenden Verzeichnis config angegeben, insbesondere auch der Ort des Basisverzeichnisses, der in der Shell-Variablen kommunikation_base in der Datei config\env.(cmd|sh) gesetzt wird. 3.4.1 startjob Das Skript startjob.(cmd|sh) liegt im Verzeichnis config des KomA. Über dieses Skript werden alle weiteren Skripte ausgeführt. 3.4.2 archivierung Dieses Skript startet die Standard-Archivierung. 3.4.3 comimport Mit diesem Skript wird die Importkommunikation gestartet. Der Importkommunikationsprozess läuft solange bis er durch das Skript comimport_stop gestoppt wird. Während der Ausführung werden zyklisch die entsprechenden Datenkanäle in den je Datenkanal konfigurierten Intervallen auf eingegangene Nachrichten überprüft. Auf einem Windows-System wird der Java-Prozess im Hintergrund gestartet, sodass keine Konsolenausgabe erscheint und das Skript sofort wieder beendet wird. Falls jedoch eine Konsolenausgabe erwünscht ist, muss das Skript comimport_console verwendet werden. 3.4.4 comimport_console Mit diesem Skript kann die Import-Kommunikation unter einem Windows-System mit Konsolen-Ausgabe gestartet werden, um die Aktivitäten live zu beobachten. 3.4.5 comimport_stop Dieses Skript beendet den ggf. zurzeit auf dem Kommunikationsverzeichnis aktiven ImportKommunikationsprozess nach der aktuell ausgeführten Aktion. 3.4.6 comimport_background Dieses Script startet die Importkommunikation im Hintergrund, ohne die Konsole zu starten. 3.4.7 comimport_keytool Mit diesem Kommandozeilen-Programm ist es möglich, Schlüssel für ComImport-Verbindungen (aktuell nur SFTP - Secure File Transfer Protocol - unterstützt) auf die KomA abzulegen. Diese Schlüssel werden dann beim Verbindungsaufbau verwendet. Seite 48 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Damit der Keystore geladen wird, muss zusätzlich in der Datei Config.properties die Einstellung: importcom.KeyStore.password=<passwort> gesetzt sein. 3.4.8 checkVersions Überprüft Abhängigkeiten aller installierten Programmbibliotheken und schreibt Konflikte in die Datei tmp/dependencies.txt 3.4.9 datenimport Dieses Skript startet den Datenimport, welcher auf Basis der datenimport.ini die Abarbeitung steuert. 3.4.10 datenimport_convert Mit diesem Skript wird der Datenversand gestartet, wobei nur Konfigurationen verarbeitet werden, bei denen ein Verzeichnis angegeben wurde (siehe Abschnitt Konfiguration von Import-Dateien in datenimport.ini). Zudem erfolgt nur Schritt 1 der Verarbeitung, die Konvertierung der Dateien ins ecount-XML-Format, wobei eine Anmeldung an die ecount-Datenbank nicht erfolgt. Dies ist zum Testen von Dateien nützlich, ohne diese dabei wirklich zu importieren und funktioniert auch ohne Datenbank. 3.4.11 datenimport_stop Dieses Skript beendet den ggf. zurzeit auf dem Kommunikationsverzeichnis aktiven Import-Prozess nach der aktuell ausgeführten Aktion. 3.4.12 datenversand Dieses Skript startet den Datenversand. Damit werden alle im Status B (Bereit) befindlichen ExportAufträge aus dem System verarbeitet und an die angegebenen Ziel-Adressen versendet. 3.4.13 datenversand_datei Mit diesem Skript kann eine bei einem vorherigen Versandprozess erzeugte XML-Datei nochmals verarbeitet werden. Dies ist z. B. dann nützlich, wenn eine zugehörige E-Mail nicht angekommen ist oder eine solche XML-Datei zu Testzwecken bearbeitet wurde. Als Parameter wird der Pfad zu der zu verarbeitenden XML-Datei angegeben. Dieser bezieht sich, falls relativ angegeben, auf das BasisKommunikationsverzeichnis. 3.4.14 datenversand_eau_id Dieses Skript startet den Datenversand für einen Export-Auftrag (unabhängig vom Status des Exportauftrages). 3.4.15 datenversand_stop Dieses Skript beendet den ggf. zurzeit auf dem Kommunikationsverzeichnis aktiven DatenversandProzess nach der aktuell ausgeführten Aktion. Es kann z. B. auch über eine Netzwerk-Freigabe von einem anderen Rechner aus gestartet werden, wenn dort die Java-Konfiguration funktioniert. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 3.4.16 Seite 49 von 384 setup_xch_pwd Über dieses Skript ist es möglich, das EC_XCH-Passwort verschlüsselt abzulegen. Dabei wird die Datei EC_XCH.passwd im Ordner config hinterlegt. Der Eintrag database.passwd aus der Datei Config.properties wird ignoriert, falls ein EC_XCH.passwd auf die KomA vorhanden ist. Beispiel: Ablage des Passwortes in der verschlüsselten Datei! Abbildung 3-12 Definition des Datenbankpasswortes 3.4.17 PasswordCoding Damit wird ein Konsolenprogramm gestartet mit dem es möglich ist, Zeichenketten (z. B. Passwörter) Base64 zu kodieren. Es findet also keine Verschlüsselung sondern nur eine Verschleierung statt. Diese Base64 kodierte Zeichenkette kann beispielsweise beim Config.properties-Parameter export.MEX.smtp-password verwendet werden wenn zusätzlich export.MEX.smtppassword.encrypted=Y eingestellt wurde. Beispielauszug der Konsolenanwendung: Seite 50 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 3-13: Beispiel Konsolenanwendung PasswordCoding 3.4.18 install_updates Dieses Skript startet die Installation verfügbarer Updates. Die Updates (UPD-Dateien) müssen im Unterordner _updates hinterlegt sein. 3.4.19 listversions Auflistung aller installierten Programmbibliotheken als Textdatei. Die Datei wird unter tmp/versions.txt abgelegt. 3.4.20 lplspool Archivierung der linearen Protokolle. Siehe Kapitel LPL-Spool (Lineare Protokolle). 3.4.21 listlicenses Über dieses Skript werden alle installierten Lizenzen aufgelistet. 3.4.22 Importkonfigurator Mit ImportConfigurator.cmd oder Importkonfigurator.exe wird die graphische Konfigurationsoberfläche (GUI) gestartet. Siehe Kapitel Importkonfigurator. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 51 von 384 4 Allgemeingültige Informationen In diesem Kapitel werden allgemeine Hinweise gegeben, die auch für die nachfolgenden Kapitel von Interesse sind. 4.1 Allgemeine Hinweise 4.1.1 Groß- und Kleinschreibung bei Parametern Bei der Abfrage der KomA-Parameter ist im Prinzip die Groß- und Kleinschreibung egal. So ist sowohl die Einstellung export.MEX.trust_all_hosts=Y als auch export.MEX.TRUST_ALL_HOSTS=Y gültig. Zum besseren Verständnis und leichteren Supporttätigkeit sollten die Parameter jedoch so wie in diesem Dokument aufgeführt, spezifiziert werden. 4.1.2 Parameterwert (Y/N vs. true/false) Boolean-Einstellungen werden meist mit N für no/nein oder Y für yes/ja angegeben. Um Probleme mit der deutschen Sprache zu umgehen, wird J auch als yes/ja interpretiert. Die Groß- und Kleinschreibung ist egal. D.h. n == N, j == J und y == Y Wenn bei den nachfolgenden Parametern von „true“ die Rede ist, ist damit die Einstellung Y/J gemeint. Als „false“ wird der Parameter N verstanden. Bei einigen Drittbibliotheken (z. B. JavaMail) wird jedoch true oder false als Zeichenkette erwartet, darauf wird in den jeweiligen Kapiteln verwiesen. 4.1.3 Zeichenkodierung (Default Cp1252) Per Default nutzt die KomA in den Auslieferungsskripten das Encoding „Cp1252“ (Windows-1252 Westeuropäisch). Dies wird in der env.cmd gesetzt und als Startargument an Java übergeben (file.encoding). SET CONFIG_ENCODING=Cp1252 … SET JAVA_OPTIONS=%JAVA_OPTIONS% … -Dfile.encoding=%CONFIG_ENCODING% Hinweise: Auf Kundenseite kann das Encoding mit Hilfe der user_env.cmd übersteuert werden. Die env.cmd sollte auf Kundenseite nicht modifiziert werden. Seite 52 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Die user_env.cmd wird im gleichen Verzeichnis wie die env.cmd (also unter *KomA*/config) erwartet. Soll z. B. UTF-8 als Encoding verwendet werden, kann dies in der user_env.cmd wie folgt überschrieben werden: SET CONFIG_ENCODING=UTF8 4.1.4 „ALIAS“-Verweis auf andere Properties-Datei Bei Import- und Export-Filtern kann über den Parameter ALIAS auf ein anderes Format verwiesen werden. Beispiel: Unter config/import gibt es eine EDI.properties mit allgemeinen Einstellungen. Eine neue Datenquelle z. B. EDI_NEU kann nun über alias=EDI (in der EDI_NEU.properties) auf die EDI.properties verweisen. Dabei werden alle Einstellungen, die in EDI.properties vorhanden aber nicht in der EDI_NEU.properties definiert sind, übernommen. EDI. properties Send_CONTRL=N status = W EDI_NEU.properties alias=EDI Send_CONTRL=A Erfolgt der Import nun über die EDI_NEU-Datenquelle, werden Send_CONTRL=A und status=W als Parameter verwendet. Erfolgt der Import über EDI-Datenquelle wird Send_CONTRL=N und status=W verwendet. 4.1.5 Information zu globalen Parametern Parameter, die direkt beim Starten der jeweiligen Prozesse (Datenempfang, Datenimport, Datenverssand, …) über die Start-Skripte (env.cmd/sh oder datenimport.cmd/sh, …. Dateien) übergeben werden, müssen mit „-D“ beginnen. Beispiel (z. B. datenimport.cmd): Alt: SET JAVA_OPTIONS=… %JAVA_OPTIONS% Neu: SET JAVA_OPTIONS=… %JAVA_OPTIONS% 4.1.6 -DShutdownServer.debug=TRUE ShutdownServer.debug=FALSE/TRUE Default: FALSE Dieser Parameter schreibt LOG-Dateien auf die Standardausgabe, die das Starten eines Jobs (Datenimport, Export-Kommunikation, Import-Kommunikation) betreffen. Der Parameter ist sinnvoll, wenn Jobs nicht mehr starten. Denn ggf. blockiert ein vorhergehender Job, der nicht richtig beendet Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 53 von 384 wurde, den in der Config.properties angegeben Sperr-Port. Dieser Parameter muss per VM-Argument angegeben werden. 4.1.7 Task liefert als Ergebnis der letzten Ausführung die Zeichenfolge 0xFFFFFFFF Dieser Hinweis bedeutet, dass der Prozess mit einen Fehler System.exit(-1), d.h. nicht regulär, beendet wurde. 4.2 Allgemeine Probleme/Lösungen Dieses Kapitel beinhaltet eine Sammlung von allgemeinen Problemen und möglichen Lösungen, die nicht zwingend einem Prozess eindeutig zuzuordnen sind. 4.2.1 OutOfMemory – Fehler Bei einem OutOfMemory-Fehler reicht der Speicher, der dem Java-Prozess maximal zur Verfügung steht, für die Abarbeitung des jeweiligen Prozesses nicht aus. Dieses Verhalten kann oft bei umfangreichen Exporten aber auch beim Import größerer CSV- oder Excel-Dateien beobachtet werden. Der maximal zur Verfügung stehende Speicher wird über das jeweilige Startskript (z. B. Datenimport über datenimport.cmd/sh) mitgegeben. Da die Startskripte vor einigen Jahren definiert wurden, sind die aktuellen Default-Werte für heutige Prozesse ggf. nicht ausreichend. Bei einem OutOfMemory-Fehler sollte also für den jeweiligen Prozess (Comimport, Datenimport, Datenversand, …) das zuständige Startskript analysiert werden. Der Speicher wird dabei in der Zeile SET JAVA_OPTIONS definiert: Beispiel: SET JAVA_OPTIONS=-Xmx512m %JAVA_OPTIONS% -Xmx gibt den maximal zur Verfügung stehenden Speicher an. Im Beispiel wird der Prozess auf 512 Megabyte begrenzt. Um dem Prozess 2 Gigabyte max. Speicher zur Verfügung zu stellen, muss der Wert wie folgt geändert werden: -Xmx2048m oder -Xmx2g Bei einer 32-Bit Java-Version können max. ~3,5 Gigabyte Speicher adressiert werden. Größere Speichermengen können nur bei einer 64-Bit Java-Version angegeben werden (z. B. –Xmx6g). Dies setzt jedoch immer auch ausreichend Hardware-Ressourcen (physischer Speicher) voraus. Sinnvolle Vorgaben: Für den Datenimport- und den Datenversand-Prozess sollte jeweils 1 Gigabyte Speicher verwendet werden: SET JAVA_OPTIONS=-Xmx1g %JAVA_OPTIONS% Xms und –Xmx: Mit -Xms und -Xmx (bzw. -XX:InitialHeapSize und -XX:MaxHeapSize) kann die anfängliche bzw. die maximale Heap-Größe angegeben werden. Beide Flags akzeptieren eine Angabe der Größe in Bytes, wobei die Größeneinheit durch einen nachgestellten Buchstaben (k bzw. K für Kilo, m bzw. M für Mega oder g bzw. G für Giga) angegeben werden kann. Analysemöglichkeit: Die VM-Übergabe-Parameter (z. B. –Xmx) können über die Java-Einstellung XX:+PrintCommandLineFlags angezeigt werden: Seite 54 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Beispiel: SET JAVA_OPTIONS=-Xmx1024m -XX:+PrintCommandLineFlags %JAVA_OPTIONS% Anschließend werden beim Start des Prozesses alle Übergabe-Parameter angezeigt: Abbildung 4-1: Anzeige Übergabeparameter -XX:MaxHeapSize= 132268864 deutet hier auf einen -Xmx1024mParameter hin. Auf einem System wurde diese Speichermenge (256m) ausgegeben, obwohl im Skript 1024m definiert war: SET JAVA_OPTIONS=-Xmx1024m %JAVA_OPTIONS% Als Lösung stellte sich heraus, dass der Speicherparameter hinter %JAVA_OPTIONS% angegeben werden musste. SET JAVA_OPTIONS=%JAVA_OPTIONS% -Xmx1024m Dieses Verhalten ist jedoch aktuell nicht reproduzierbar, so dass der dafür zuständige Fehler (Hardware, Java-Version, …?) unbekannt ist. 4.2.2 BindException: Nicht startende Jobs (Datenimport, Datenversand, …) Fehler: BindException - Address already in use: JVM_BIN Die Sperrbehandlung wird bei der KomA über TCP-Sperrports realisiert. Konfiguriert werden diese in der Config.properties-Datei des jeweiligen KomA-Servers, dabei ist mindestens die Angabe von common.base_port notwendig. ## TCP-Port zur Sperrbehandlung als Basis fuer alle Jobs common.base_port = 8785 ## TCP-Port zur Sperrbehandlung bei Archivierung ## Standard: <common.base_port> #archive.port = 8785 ## TCP-Port zur Sperrbehandlung beim Datenimport ## Standard: <common.base_port>+1 #import.port = 8786 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 55 von 384 ## TCP-Port zur Sperrbehandlung bei Export-Kommunikation ## Standard: <common.base_port>+2 #export.port = 8787 ## TCP-Port zur Sperrbehandlung bei Import-Kommunikation ## Standard: <common.base_port>+3 #importcom.port = 8788 Wird nun der Datenversand-Job gestartet, wird dieser auf den Port 8787 registriert. Bei einem weiteren Start des Jobs auf den gleichen Port, käme es zur Fehlermeldung: „XYZ bereits aktiv“. Unter Umständen muss der Prozess manuell gekillt werden (z. B. wenn er sich aufgehangen hat und nicht mehr gestoppt werden kann). Dazu sucht der Anwender mit Hilfe der Port-Angaben in der Config.properties nach den laufenden Prozessen. Unter Windows kann dies über netstat und taskkill auf der Konsole realisiert werden. Beispiel: Prozess-ID für den Datenversand-Job finden netstat -a -b | find "8787" Findet der Anwender eine Prozess-ID kann diese über taskkill /PID „ID“ gekillt werden. Mittels netstat können auch weitere Informationen angezeigt werden, z. B. netstat –ano a - Zeigt alle Verbindungen und abhörenden Ports an. n - Zeigt Adressen und Portnummern numerisch an. o - Zeigt die mit jeder Verbindung verknüpfte, übergeordnete Prozesskennung an. Die Suche nach dem Prozess kann auch über die LOCK-Dateien der KomA realisiert werden. Diese werden direkt in der ausführenden KomA im Unterverzeichnis tmp abgelegt und enthalten auch die PID des Prozesses. Beispiel tmp/Import-Kommunikation.lock: Seite 56 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Import-Kommunikation …. Host: … Port: ….. Process-ID: 9376@..... Description: …. 4.2.3 ClassNotFoundException: com.*XMLGregorianCalendarImpl ClassNotFoundException: com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarI mpl Diese Klasse wurde mit Java 6 Update 4 in das JDK integriert. Vermutlich wird eine ältere Java-Version verwendet. Update der Java Version Sollte ein Update nicht möglich sein, muss unter lib\3rd\xml\ geprüft werden, ob die Datei xercesImpl.jar vorhanden ist. 4.2.4 Incompatible Version of libocijdbc… / no ocijdbc in java.library.path Die KomA unterstützt die Datenbank-Verbindungstypen OCI (Oracle Call Interface) und THIN. Falls OCI in der Datei Config.properties aktiviert wurde (database.conntype = OCI), muss ein zum in der KomA (Oracle-JDBC-Treiber) passender Oracle-Client installiert sein. OCI ist beispielsweise bei Dataguard zwingend erforderlich das dies nicht durch THIN abgedeckt werden kann. Aktuell kann der Oracle Instant Client über folgenden Downloadlink bezogen werden. THIN arbeitet mit purem Java und benötigt nur den Oracle-JDBC-Treiber. Der OCI-Treiber dagegen braucht native Bibliotheken, also einen korrekt installierten Oracle-Client, und wie schon erwähnt, muss die Version des installierten JDBC-Treibers (3rd/oracle/ojdbc14.jar) genau zum installierten Oracle-Client passen. Daher ist der THIN-Verbindungstyp zu bevorzugen, da für diesen nur der richtige VerbindungsParameter (database.connect) benötigt wird. Config.properties - Beispiel: database.conntype = THIN database.connect = rdslinux25.robotron.de:1521:ecr5e11 4.2.5 java.lang.UnsupportedClassVersionError: Bad version number in .class file Ähnlich wie 4.2.6, es wird eine nicht mehr unterstützte Java-Version verwendet. Konfigurationsanleitung und Hinweise siehe Kapitel 3.3.1.1. 4.2.6 java.lang.ClassFormatError - SetupException Folgender Fehler wird beim Datenimport ausgegeben: Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 57 von 384 java.lang.ClassFormatError: Class de.robotron.ecount.dataimport.filter.SetupException in ecount_import_ifc.jar, 725 bytes at de.robotron.util.JarClassLoader.findClassLocal(JarClassLoader.java:345 ) at de.robotron.util.JarClassLoader.findClass(JarClassLoader.java:368) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) … Es wird eine nicht mehr unterstützte Java Version verwendet (siehe Plattform-Support-Dokument). Sollte ein Java 8 (aktuelle Minimalanforderung) im KomA-Basisverzeichnis installiert sein, könnte die Ursache im Setzen einer älteren Java-Version in der user_env.(cmd|sh) bzw. user_env_pre.(cmd|sh) sein (beide Dateien liegen im Unterverzeichnis config auf dem KomA). 4.2.7 Ungeklärte Abstürze des Servers / überfüllte Festplatte Von einem Kundensystem wurden gravierende Abstürze (der gesamte Server, ein Windows Server, stürzte ab) gemeldet. In den LOG-Dateien war kein sprechender Hinweis auf ein Problem erkennbar. Nach langer Suche konnte der „ImportOrdner“ (per Standardeinstellung importmail, welcher ggf. über importcom.mail_dir=xyz gesteuert wird) und die darin enthaltene Menge an Dateien (ca. 2 Milliarden Dateien) als Ursache identifiziert werden. Nachdem der aktuelle Ordner umbenannt und ein neuer, leerer Ordner hinterlegt wurde, gab es keine ungeklärten Abstürze mehr. Der Ordner importmail sollte periodisch gelöscht/aufgeräumt werden! Per Standardeinstellung wird jede E-Mail abgespeichert, dies kann auf großen Systemen über längere Zeit sehr viel Festplattenplatz verbrauchen. 4.2.8 javax.activation.UnsupportedDataTypeException Der folgende Fehler erscheint, wenn das activation.jar nicht im root-classloader gefunden wird no object DCH for MIME type multipart/mixed; boundary="----=_Part_0_9328154.1338798774463": javax.activation.UnsupportedDataTypeException at javax.activation.ObjectDataContentHandler.writeTo(Unknown Source) at javax.activation.DataHandler.writeTo(Unknown Source) Dieser Fehler ist vermutlich auf das Fehlen der Datei activation.jar zurückzuführen. Die Ursache liegt in der Nutzung von R3-Skripten. Lösung: R4-Skripte verwenden: - Haupt-Skripte für Windows(tm) http://support.robotron.de/ecount-com-server/skripts/cmd-scripts_main.zip Seite 58 von 384 - 4.2.9 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Zusatz-Skripte für Windows(tm) http://support.robotron.de/ecount-com-server/skripts/cmd-scripts_opt.zip ClassNotFoundException: oracle.xml.parser.v2.XSLException Beim Auftreten dieser Fehlermeldung fehlen im Ordner lib\3rd\oracle die benötigten JAR-Dateien: - 4.2.10 xmlparserv2.jar - diese enthält die Klasse und xsu12.dependencies, welche den App_Loader anweist die entsprechende Klasse zu laden. Non supported character set: oracle-character-set-178 Diese Fehlermeldung deutet auf eine Unstimmigkeit bezüglich der verwendeten Oracle Datenbank und den verwendeten Oracle Datenbank Driver (JDBC-Client) hin. Im konkreten Fall konnte das Problem über die env.(cmd|sh) und der Versionsübersicht identifiziert werden. In der Versionsübersicht waren unter anderem folgende beiden lib vorhanden: oracle/classes12.zip;06.04.2004 01:03;Revision Oracle JDBC Driver version - 9.0.2.0.0 oracle/xsu12.jar;25.03.2002 19:51 Diese wurden per env.sh vor die eigentlichen, korrekten Bibliotheken geschaltet: export PATCH_CLASSPATH=$LIB_DIR/patch:$LIB_DIR/oracle/classes12.zip:$LIB_DIR/ oracle/classes12.jar for f in $(ls "$LIB_DIR"/patch/*.jar 2>/dev/null ); do export PATCH_CLASSPATH="$f:$PATCH_CLASSPATH" done Lösung: Ordner lib/oracle löschen und Eintrag aus der env.sh entfernen. 4.2.11 Meldung: Provider for class javax.xml.transform.TransformerFactory cannot be created und Interner Fehler: org/apache/xerces/jaxp/SAXParserFactoryImpl: java.lang.ClassNotFoundException Die folgenden Fehler tauchten auf internen KomA-Instanzen auf und sollten durch eine Anpassung der env.cmd (eCount- 00057536) für Windows-Systeme gelöst werden. Ursache ist hier die Umstellung auf Java-8 und der bestehenden env.(cmd|sh), die nicht kompatibel dazu ist. Linux-Systeme müssen manuell angepasst werden da hier oft Rechte das Überschreiben der env.sh unterbinden! Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 59 von 384 Die Fehler treten meist im Zusammenhang mit der Verarbeitung von EXCEL im XLSX-Format auf. Dieses Format ist intern als XML-Format abgebildet und wird über APACHE POI verarbeitet. POI wiederrum nutzt zum Einlesen dieser XML-Struktur JAVA-Standards (JAXP). Hintergrund: Mit eCount- 00054226 wurden neue ORACLE-Bibliotheken ausgeliefert, u.a. xmlparserv2.jar. Diese Bibliothek wird vom ORACLE-JDCB-Driver benötigt und ist damit zentraler Bestandteil vom KomA. Diese Bibliothek setzt jedoch einige JAXP-Standards auf ORACLE-Klassen (oracle.xml.jaxp.JXSAXTransformerFactory, oracle.xml.jaxp.JXDocumentBuilderFactory, oracle.xml.jaxp.JXSAXParserFactory). Bei der Verarbeitung einer Datei, z. B. einer Excel-Datei beim Importkonfigurator oder beim Import über den Import-Filter-CSV die auf JAXP-Standards setzt, kann es zu diesem Fehler kommen, da hier Klassen als Standard gesetzt wurden, die zur Laufzeit nicht zur Verfügung stehen. Lösung: Die JAXP-Standards werden explizit in der env.(cmd|sh) gesetzt, um das Überschreiben durch die OracleBibliothek zu verhindern. Dies geschieht über die 3 Variablen (XML_PARSER_FACTORY, XML_DOCUMENTBUILDER_FACTORY und XML_TRANSFORMER_FACTORY). Die env.cmd muss wie folgt angepasst werden: Die folgende Zeile suchen: SET XML_PARSER_FACTORY=org.apache.xerces.jaxp.SAXParserFactoryImpl und durch folgenden Code ersetzen: :: XML-PARSER (vorher org.apache.xerces.jaxp.SAXParserFactoryImpl aus xercesImpl.jar) SET XML_PARSER_FACTORY=com.sun.org.apache.xerces.internal.jaxp.SAXParserFa ctoryImpl SET XML_DOCUMENTBUILDER_FACTORY=com.sun.org.apache.xerces.internal.jaxp.Do cumentBuilderFactoryImpl SET XML_TRANSFORMER_FACTORY=com.sun.org.apache.xalan.internal.xsltc.trax.T ransformerFactoryImpl Anschließend noch diese Zeile: if defined XML_PARSER_FACTORY SET JAVA_OPTIONS=%JAVA_OPTIONS% Djavax.xml.parsers.SAXParserFactory=%XML_PARSER_FACTORY% durch diesen Code ersetzen: Seite 60 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 :: Oracle mit xmlparserv2.jar überschreib die Defaults, was zu Konflikten mit Apache POI führt if defined XML_PARSER_FACTORY SET JAVA_OPTIONS=%JAVA_OPTIONS% Djavax.xml.parsers.SAXParserFactory=%XML_PARSER_FACTORY% if defined XML_DOCUMENTBUILDER_FACTORY SET JAVA_OPTIONS=%JAVA_OPTIONS% Djavax.xml.parsers.DocumentBuilderFactory=%XML_DOCUMENTBUILDER_FACTORY % if defined XML_TRANSFORMER_FACTORY SET JAVA_OPTIONS=%JAVA_OPTIONS% Djavax.xml.transform.TransformerFactory=%XML_TRANSFORMER_FACTORY% Die env.sh muss wie folgt modifiziert werden: Die Zeile: export XML_PARSER_FACTORY=org.apache.xerces.jaxp.SAXParserFactoryImpl durch diesen Code ersetzen: export XML_PARSER_FACTORY=com.sun.org.apache.xerces.internal.jaxp.SAXParserFa ctoryImpl export XML_DOCUMENTBUILDER_FACTORY=com.sun.org.apache.xerces.internal.jaxp.Do cumentBuilderFactoryImpl export XML_TRANSFORMER_FACTORY=com.sun.org.apache.xalan.internal.xsltc.trax.T ransformerFactoryImpl Sowie diese Zeile: [ -z $XML_PARSER_FACTORY ] || export JAVA_OPTIONS="$JAVA_OPTIONS Djavax.xml.parsers.SAXParserFactory=$XML_PARSER_FACTORY" durch diesen Code ersetzen: [ -z $XML_PARSER_FACTORY ] || export JAVA_OPTIONS="$JAVA_OPTIONS Djavax.xml.parsers.SAXParserFactory=$XML_PARSER_FACTORY" [ -z $XML_DOCUMENTBUILDER_FACTORY ] || export JAVA_OPTIONS="$JAVA_OPTIONS Djavax.xml.parsers.DocumentBuilderFactory=$XML_DOCUMENTBUILDER_FACTORY " [ -z $XML_TRANSFORMER_FACTORY ] || export JAVA_OPTIONS="$JAVA_OPTIONS -Djavax.xml.transform.TransformerFactory=$XML_TRANSFORMER_FACTORY" Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 4.2.12 Seite 61 von 384 Warnung wegen falscher Textressource Beispielsweise: WARN TextResources:225 load() not a valid group-separator: 100,1:Y/N; Dateien werden als LPEX2 behandelt, auch wenn kein LPEX2-Header vorhanden ist. Die Warnung ist nicht schlimm, irritiert aber. Hintergrund ist hier die Umstellung von Konsolenausgabe auf Ausgabe in LOG-Datei. Dabei ist aufgefallen, dass die Datei ImportConvert.LPEXHandler.res mit einem fehlerhaften Text auf der KomA existiert. Die Datei sollte gelöscht werden! Zu finden ist diese Datei im Standard unter config.resources.german, abweichender Pfad kann via Config.properties definiert sein! 4.2.13 ArrayIndexOutOfBoundsException: at oracle.jdbc.driver.T4CTTIoauthenticate.setSessionFields Der Start einer KomA-Instanz scheiterte mit folgender Fehlermeldung: -1: java.lang.ArrayIndexOutOfBoundsException at oracle.jdbc.driver.T4CTTIoauthenticate.setSessionFields(T4CTTIoauthent icate.java:1195) at oracle.jdbc.driver.T4CTTIoauthenticate.<init>(T4CTTIoauthenticate.java :261) Als Ursache konnte letztendlich der Dateiname identifiziert werden der mit einer Raute (#) begann. Da es aktuell keine eindeutige Erklärung für diesen Fehler gibt und dieser in einem kleinen Testfall auch nicht reproduzierbar war, damit dieser von Oracle ggf. behoben werden kann, muss sichergestellt werden, dass der KomA-Verzeichnisname nicht mit einer Raute (#) beginnt. 4.2.14 java.lang.SecurityException: sealing violation: package oracle.jdbc.internal is sealed Dieser Fehler wird vom Oracle JDBC-Driver erzeugt wenn mehrere JDBC-JAR-Dateien im Verzeichnispfad liegen. Diese Informationen können über die Versionsübersicht abgefragt werden, sind dort mehrere Einträge von ojdbc*vorhanden, ist das die Ursache des Problems. Beispiel: 3rd/oracle/ojdbc.jar;30.06.2014 11:54;Revision 12.1.0.2.0 3rd/oracle/ojdbc14.jar;03.07.2014 18:18;Revision 11.2.0.4.0 Bei der KomA muss die Datei ojdbc14.jar vorhanden sein, bei einen robotron*ComCenter hingegen muss die Datei ojdbc.jar installiert sein. Je nach System muss die andere ojdbc*.jar gelöscht werden! Seite 62 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Beschreibung von Oracle: Starting with JDBC 10.2 drivers, having more than one JDBC jar file in the CLASSPATH may result in a java.lang.SecurityException: Sealing violation exception. Detailed explanation from Oracle is documented in the following Oracle Document ID: Note:405446.1 Subject: JDBC Driver 10.2 Uses Sealed JAR files and May Cause SecurityException Sealing Violation Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 63 von 384 5 Datenempfang (Comimport) Der Import besteht im Wesentlichen aus 2 wichtigen Prozessen: • • Empfang der Daten aus verschiedenen Kanälen (E-Mail, FTP, SFTP, File etc.) – Kommunikationsautomatisierung (Import-Kommunikation), auch als Comimport oder Datenempfang bezeichnet. Konvertierung und Import der Daten nach ecount (Importzwischentabellen) In diesem Kapitel wird der Datenempfang näher beschrieben. Dieses Modul ermöglicht die zyklische Überprüfung von verschiedenen Datenkanälen auf neu eingegangene Nachrichten, die in das EDM System importiert werden sollen. Standardmäßig können Nachrichten von E-Mail-Konten, FTP-Servern und Netz-Laufwerken (sofern diese vom Kommunikationsserver aus erreichbar sind) abgeholt werden. Beim Abholen der Nachrichten werden die vorgefundenen Daten in lokalen Verzeichnissen abgelegt und somit für die Konvertierung und den Import bereitgestellt. Der Empfang einer jeden Nachricht wird in der Datenbank protokolliert. Nach der erfolgreichen Übertragung der Nachrichten können diese anhand von einstellbaren Aktionen gelöscht, umbenannt oder verschoben werden. Zur Ausführung der Kommunikationsautomatisierung (KomA) wird die Komponente ImportKommunikation mit dem Skript comimport (comimport.cmd, comimport.sh) einmalig gestartet. Die Abfrage der Datenkanäle für den Empfang wird zyklisch mit dem in der Config.properties (importcom.mail_checkinterval) eingestellten Intervall durchgeführt. Um die Kommunikationsautomatisierung zu stoppen, muss das Skript comimport_stop (comimport_stop.cmd, comimport_stop.sh) ausgeführt werden. Dadurch wird der Kommunikationsautomatisierung signalisiert, sich so bald wie möglich zu beenden. Dies kann unter Umständen einige Minuten in Anspruch nehmen, denn erst nach dem vollständigen Abschluss der Lesevorgänge wird der Prozess beendet. 5.1 Konfiguration Die Konfiguration dieser Komponente erfolgt mit Hilfe der Maske Importkommunikation im Menü Import > Kommunikationsautomatisierung. Grundlegende Einstellungen zu Kommunikationsverbindungen und zu empfangenden Datenformaten müssen in der Maske Kommunikationseinstellungen im Menü Import administriert werden. Jedes Konto eines Kommunikationskanals basiert auf einer Kommunikationsverbindung, einem oder mehreren Datenformaten mit je einer zugeordneten Aktion und je einem oder mehreren Mustern zur Auswahl der Nachrichten zu einem Datenformat und einer oder keiner Aktion, die auf alle nicht zu verarbeitenden Nachrichten der Kommunikationsverbindung angewendet wird. 5.1.1 Allgemeine Konfigurationsparameter Die Importparameter werden über die Datei Config.properties gepflegt. Seite 64 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Tabelle 5-1: Comimport-Parameter Parameter/Beschreibung Standardwert common.validatefilename Y/N. Mit aktivierter Einstellung werden die Dateinamen beim Comimport und Datenimport geprüft, d.h. alle Zeichen, die nicht auf das Muster: [^a-zA-Z0-9ÄÖÜäöüß$\\(\\)\\]\\[\\-{}@~#.,; ] passen, werden gegen einen Unterstrich getauscht. Bei kyrillischen Dateinamen werden mit der Standardeinstellung meist alle Y Zeichen gegen einen Unterstrich geändert. Um das zu verhindern muss common.validatefilename=N gesetzt werden. Zusätzlich muss zwingend die Systemvariable ZIP_CHARSET auf UTF-8 gesetzt werden (sonst wird als Standardwert Cp850 verwendet, welcher bei nicht bereinigten Dateinamen unter Umständen nicht ausreicht und Fehler wirft). Dies geschieht in der user_env.cmd/sh über: SET ZIP_CHARSET=UTF8 (siehe 3.3.2.1.1) importcom.compress_mail Y/N. Eingehenden E-Mail-Nachrichten ZIP komprimiert ablegen (wenn importcom.save_mail=Y) Y importcom.comserver Nummer des Servers – relevant für die Nutzung mehrerer KomA-Instanzen beim Comimport (Angabe als positive Ganzzahl). importcom.connectionTimeout Verbindungstimeout in Sekunden (-1 steht für kein Timeout) Beispiel: 5 Minuten: importcom.connectionTimeout=300 (mindestens ecount_importcom.jar 4.0.2.19 erforderlich). -1 importcom.debug Aktiviert das Debug beim Import über E-Mail (IMAP und POP). Damit werden von der zugrundeliegenden JavaMail-API weitere Daten für die Analyse bereitgestellt (entspricht mail.debug) N importcom.exactFilter Y/N. Importkonfigurationsfilter nutzen per Default eine „enthält“-Suche d.h. bei Einschränkung auf MSCONS_% wird immer mit %MSCONS% gesucht. Soll eine exakte Suche vorgenommen werden, muss diese Einstellung aktiviert (Y) werden. importcom.importfilefilter N Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Seite 65 von 384 Standardwert Die mit dieser Einstellung angegebenen Zeichenfolgen werden als Dateiendungen von Dateien interpretiert, die NICHT weiterverarbeitet werden sollen. Die Angabe der Dateiendungen erfolgt ohne Punkt durch Komma (,) separiert. (z. B. bmp,jpg,vcf,tif,exe,com) importcom.logfile Name der LOG-Datei, die für den Comimport-Prozess angelegt wird comimport.log importcom.logfile.maxSize Maximale Größe der LOG-Datei in bytes. Hierbei wird zyklisch geprüft, ob 500000 die LOG-Datei den Schwellenwert überschritten hat, die Dateigröße ist also niemals exakt der eingestellte Wert. importcom.mail_checkinterval int Positive Ganzzahl. Zeitintervall in Sekunden, in dem auf auszulesende Datenkanäle geprüft wird. 60 importcom.mail_dir Ordner innerhalb des KomA-Servers in dem die E-Mail-Dateien archiviert werden. Somit ist die Funktion nur bei POP/IMAP relevant. importmail importcom.port TCP-Port zur Sperrbehandlung bei Import-Kommunikation. Auf diesen Port common.base_port+3 warten die Import-Kommunikation auch auf das Stopp Signal zum Beenden. importcom.process_inline Y/N. Mit Y werden auch Inline-Attachments in E-Mails verarbeitet (also wenn eine CSV-Datei beispielsweise direkt im Nachrichtentext abgelegt wurde). Y importcom.save_mail Y/N. Eingehende E-Mail-Nachrichten in einem Verzeichnis (siehe importcom.mail_dir) abspeichern. Y importcom.save_unknown Y/N. Alle E-Mail-Nachrichten, die mit Filtern keinem Format zugeordnet werden können, werden auf dem Kommunikationsserver in ZIP-Archiven gespeichert. Y importcom.save_unknown_dir Verzeichnis, in dem die ZIP-Archive mit den unbekannten Daten abgelegt werden sollen. Standard <Kommunikationsverzeichnis>\importmail\unbekannt importcom.shutdown_command SHUTDOWN Seite 66 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Standardwert Kommando, auf das die Import-Kommunikation zum Beenden des Servers warten soll (einfache Zeichenkette) importcom.smtp_server SMTP-Server zum Senden von E-Mails common.smtp_server import.zip_name_encoding Dies ist dieselbe Einstellung wie beim Datenimport (daher ist „import“ und nicht „importcom“ richtig)! UTF-8 Die Einstellung für den Zeichensatz der Zip-Dateien (vorwiegend in internationalen Projekten relevant). Die Einstellung wird nun auch bei der Erstellung der KomA-Dateien in den zip-done/zip-error-Ordnern verwendet. 5.1.2 Kommunikationsverbindungen Tabelle 5-2: Kommunikationsverbindungstypen ftp Zur Verbindung mit FTP Servern Hostname: IP-Adresse bzw. DNS-Name des FTP Servers, Benutzername, Passwort des FTP-Nutzers, Verzeichnis auf dem FTP Server, Port-Angabe eines speziellen Serverports, falls der FTP Server einen nicht standardisierten Port benutzt. Die Angabe von -1 steht für den Standard (Standard-Port: 21). Ist ein Proxy-Server zu überwinden, müssen die Felder auf spezielle Weise befüllt werden: Hostname: Name oder IP-Adresse des Proxy-Servers Benutzername: <Benutzername>@<FTP-Server> imap Zum Abfragen von E-Mail mit dem IMAP Protokoll Hostname: IP-Adresse bzw. DNS-Name des IMAP-Servers, Benutzername, Passwort des IMAP-Nutzers, Verzeichnis auf dem IMAP-Server, in dem nach Nachrichten gesucht werden soll – keine Angabe sucht alle Nachrichten im Ordner INBOX, Port - Angabe eines speziellen Serverports, falls der IMAP-Server einen nicht standardisierten Port benutzt. Die Angabe von -1 steht für den Standard (Standard-Port: 143). pop3 Zum Abfragen von E-Mail mit dem pop3-Protokoll Hostname: IP-Adresse bzw. DNS-Name des POP3-Servers, Benutzername, Passwort des POP3-Nutzers, Verzeichnis kann für POP3 nicht angegeben werden, da POP3 nur einen Ordner verwaltet, Port - Angabe eines speziellen Serverports, falls der POP3-Server einen nicht standardisierten Port benutzt. Die Angabe von -1 steht für den Standard (Standard-Port: 110). Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 file Seite 67 von 384 Zur Übertragung von Daten von Verzeichnissen, die vom Kommunikationsserver erreichbar sind Hostname: IP-Adresse bzw. DNS-Name des Servers, auf dem das freigegebene Verzeichnis verfügbar ist, wenn kein absoluter Pfad spezifiziert ist (nur Windows), Nutzername und Passwort kann zum Anmelden an einem Verzeichnis verwendet werden, wenn der Nutzer, unter dem die Import-Kommunikation läuft, keine Leserechte auf dem zu verbindenden Verzeichnis besitzt (nur Windows). Verzeichnis spezifiziert das zu durchsuchende Verzeichnis – Angabe eines absoluten Verzeichnisses auf einem WindowsComputer muss den Laufwerksbuchstaben enthalten – andernfalls wird nach einer Netzwerkfreigabe auf dem jeweiligen Computer gesucht. Mit diesem Verbindungstyp können einzelne Dateien von einem Web-Server heruntergeladen werden. Aufgrund von Einschränkungen im HTTP-Protokoll können hiermit allerdings keine Verzeichnisse überprüft werden, sondern nur einzelne Dateien. Dies wird für den Download der aktuellen EEX-Daten aus dem Web-Portal benötigt (z. B. https:// www.eex.de/.../energy_spot_historie_2005.xls und https:// www.eex.de/ energy_phelix_power_futures_historie_2005.xls ) http/https Hostname: IP-Adresse bzw. Name des Web-Servers (z. B. www.eex.de) Benutzername: Name des Nutzerkontos auf dem Web-Server Passwort: Passwort des Nutzerkontos Folder: Pfad der Datei auf dem Server, z. B. info_center/downloads/dl_authent/energy_spot_historie_2005.xls Port: Port des Servers, 80 für HTTP, 443 für HTTPS, -1 für Standardwert sftp Das SSH File Transfer Protocol oder Secure File Transfer Protocol (SFTP) ist eine für die Secure Shell (SSH) entworfene Alternative zum File Transfer Protocol (FTP), die Verschlüsselung ermöglicht. Es kann konfiguriert werden, bereits empfangene Nachrichten nicht wiederholt zu übertragen. Diese Funktion ist nützlich, wenn bereits abgeholte Nachrichten im Datenkanal (auf dem Server) nicht gelöscht oder verschoben bzw. umbenannt werden können oder sollen. Die Informationen über zu ladende Nachrichten werden in der Datenbank abgefragt. Konten der Kommunikationsautomatisierung auf FTP-Servern sollten, wenn möglich, einen Schreibzugriff erlauben, um bereits gelesene Dateien umzubenennen oder zu löschen und deren wiederholten Download und Import zu vermeiden. Dies erhöht auch signifikant die Performance beim Abholen, da die Prüfung entfallen. Falls keine Schreibrechte für ein FTP-Konto vorhanden sind, kann anhand der Einträge von bereits geladenen Dateien in der Datenbank entschieden werden, ob die jeweilige auf dem Server gefundene Datei vom Server geladen werden soll. Dazu werden der Dateiname, die Dateigröße und das Dateierstellungsdatum benutzt. Diese Information können von den meisten FTP-Servern bedingt abgefragt werden. In der FTP Spezifikation RFC 959 ist kein einheitlicher Standard zur Übertragung für diese Information festgelegt. Das größte Problem stellt bei der Abfrage das Dateidatum dar. Die meisten Server liefern das Datum in 2 Varianten: Seite 68 von 384 - Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Tag, Monat oder umgekehrt und Stunde und Minute, wenn Dateidatum weniger als 6 Monate zeitlichen Abstand zum aktuellen Systemdatum des Servers hat Tag, Monat oder umgekehrt und Jahr, wenn Dateidatum mehr als 6 Monate zeitlichen Abstand zum aktuellen Systemdatum des Servers hat Da das Systemdatum des FTP-Servers nicht abgefragt werden kann, wird davon ausgegangen, dass die Systemzeit auf dem Kommunikationsrechner mit der Systemzeit des FTP-Servers übereinstimmt. Wenn Dateien auf dem FTP-Server gefunden werden, die mehr als 6 Monate zeitliche Differenz zur Systemzeit haben, kann für diese Dateien keine Uhrzeit gelesen werden. Es wird 0:00 Uhr angenommen. Falls eine solche Datei bereits mit einer geringeren zeitlichen Differenz als 6 Monate zur Systemzeit geladen wurde, dann wird diese Datei nochmals geladen, da der Zeitstempel nicht übereinstimmt und die Datei somit als noch nicht vorhanden erkannt wird. Bei FTP-Servern mit nicht auswertbaren Informationen für Dateidatum und Größe kann nur der Dateiname zum Vergleich verwendet werden. Beispiel: Abbildung 5-1: Beispiel – IMAP-Konto 5.1.3 Importformate Importformate (auch als Datenformate bezeichnet) werden aktuell in der Maske Kommunikationseinstellungen (MF_RIMPORT) gepflegt. Jedes Format wird anhand einer Kurzbezeichnung identifiziert. Zu jedem Format muss ein Verzeichnis auf der KomA angegeben werden, in dem die unter diesem Datenformat von den Kommunikationskonten geladenen Dateien abgelegt werden. Die Angabe der Verzeichnisse kann relativ zum Basisverzeichnis der Komponente ImportKommunikation oder auch absolut auf dem Kommunikationsserver erfolgen. Beispiel: Abbildung 5-2: Beispiel – IMAP-Konto - Importformate Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 69 von 384 Hinweise: Die Kurzbezeichnung des Importformats sollte identisch zum Format-Kürzel in der datenimport.ini sein (siehe auch 5.8.2 und 6.2.1)! Mit eCount- 00049560 wurde eine Prüfung ausgebaut, die auf Eindeutigkeit der Kurzbezeichnung prüfte. Erst mit der Änderung aus diesem Ticket ist es also möglich, EDI als Kurzbezeichnung für mehrere Importformate zu verwenden. 5.1.4 Importkonto Grundlage eines Kommunikationskontos ist eine Kommunikationsverbindung. Alle für das Konto festgelegten Einstellungen beziehen sich auf das Verarbeiten von Nachrichten, die in der gewählten Kommunikationsverbindung gefunden werden. Die Parameter Überprüfungszeiten bestimmen die Zeitpunkte, an denen über die Kommunikationsverbindung nach Nachrichten gesucht wird. Dabei muss mit Datum und Uhrzeit angegeben werden, ab wann das Konto aktiv ist und in welchem Intervall nach neuen Nachrichten gesucht werden soll. Eine Angabe des letztmaligen Überprüfungszeitpunktes ist nicht notwendig. Prüfintervall: Für die Angabe des Intervalls stehen die Eingabefelder Tagen, Stunden und Minuten zur Verfügung. Es können Eingaben in allen 3 Feldern vorgenommen werden. Ratsam ist es allerdings, das Intervall möglichst einfach zu halten (Beispiel stündlich, oder aller 15 Minuten). Abbildung 5-3: Importkonto - Prüfintervall Eine Angabe von 2 Tagen, 12 Stunden und 25 Minuten ist zulässig, kann jedoch u.a. bei der Zeitumstellung zu Problemen führen. Für jedes Konto können Nachrichten für einen bestimmten Kommunikationspartner (Vertragspartner) von jedem definierten Datenformat geladen werden. Dazu wird dem Konto das gewünschte Datenformat, mit einer Aktion und einem Vertragspartner verknüpft, zugeordnet. Zu jeder dieser Kombinationen können Nachrichtenfilter zur Identifikation der jeweiligen Nachrichten definiert werden. Die zugehörige Aktion bezieht sich auf alle mit diesem Filter gefundenen Nachrichten dieses Kontos. Zu jedem Vertragspartner kann pro Konto und Datenformat eine einzige Aktion definiert werden, die nach der Abholung der Nachrichten mit den Nachrichten auf dem Server ausgeführt wird (siehe auch 5.1.4.3). Eine Beispielkonfiguration für ein FTP-Konto ist in Anlage 6 enthalten. 5.1.4.1 Verarbeitung von nicht zuordenbaren Nachrichten Nachdem alle Nachrichten, auf die die Filterkriterien passten, mit den spezifizierten Aktionen abgearbeitet wurden, können alle in der Kommunikationsverbindung verbliebenen Nachrichten mit einer Operation nach dem Abholen verarbeitet werden. Diese Funktion ist nur sinnvoll wenn bei der Seite 70 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Schaltfläche Filter spezifische Filterkriterien definiert wurden, anderenfalls werden immer alle Nachrichten verarbeitet. Dazu kann für jedes Konto eine spezielle Aktion definiert werden. Standardmäßig werden alle restlichen E-Mail-Nachrichten bei gewünschter Verarbeitung (Verschieben oder Löschen) auf dem Kommunikationsserver (d.h. im Filesystem) archiviert. Es wird für jede dieser E-Mails ein ZIP-Archiv angelegt, in dem sich alle Dateien aus dem Anhang abzüglich der auszuschließenden Dateitypen und der Quelltext der E-Mail als Textdatei befinden. Die Deaktivierung der Speicherung der E-Mail-Nachrichten in einem ZIP-Archiv und das Verzeichnis erfolgt in der Datei Config.properties. 5.1.4.2 Aktionen Sämtliche hier definierten Aktionen beziehen sich auf Nachrichten, deren Inhalt vom System erfolgreich in die durch die Datenformate spezifizierten Verzeichnisse geladen wurde. Eine Aktion wird erst nach dem erfolgreichen Laden ausgeführt. Bei allen Kontotypen (außer E-Mail) kann nur eine Aktion pro Datei ausgeführt werden. Mit der Einstellung importcom.mex.MANY_ACTIONS_PER_MAIL = Y kann festgelegt werden, dass alle Aktionen abgearbeitet werden, die auf eine E-Mail passen. Ansonsten wird die Verarbeitung einer EMail nach der ersten passenden Aktion abgebrochen. Die Aktionen werden erst nach der Verarbeitung aller Aktionen und E-Mails in einem Durchlauf ausgeführt. Wenn mehrere Filter auf eine E-Mail passen, sollte darauf geachtet werden, dass sich die Aktionen (z. B. Verschieben / Löschen) nicht widersprechen. Es wird ansonsten dennoch versucht, alle Aktionen auszuführen. Verschieben: Verschieben der Nachrichten in ein Unterverzeichnis auf dem Server, Name des Verzeichnisses muss in der Maske Importkommunikation im Feld Aktionswert eingetragen werden. Hinweise: Speziell bei FTP/SFTP muss der Nutzer, mit dem der Prozess läuft, auch die notwendigen Rechte (Anlegen / Löschen) für die jeweiligen Verzeichnisse besitzen. Bei einem E-Mail-Konto kann die Nachricht nur innerhalb des Postfaches, also der definierten Verbindung, verschoben werden. Hierbei wird jedoch keine Prüfung auf Absender- oder Empfängeradresse durchgeführt (beim E-Mail-Konto ist die Filterung auf die From-Adresse zwar möglich, das betrifft dann aber die Verarbeitung in dem Format und nicht nur die Option Verschieben). Abbildung 5-4: Maske Importkommunikation - Feld Aktionswert Umbenennen: Umbenennen der gefundenen Nachricht auf dem Server, Namenserweiterung für den neuen Dateinamen muss in der Maske Importkommunikation im Feld Aktionswert eingetragen sein. Diese Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 71 von 384 Option ist sinnvoll, um die Dateierweiterung zu verändern, um diese Daten beim nächsten Importlauf ignorieren zu können (per Filtereinstellung auf Dateierweiterung). Zusätzlich ist es möglich, das aktuelle Datum in den Dateinamen zu integrieren. Datumsformate können im Format {DATE:Format} angegeben werden (nähere Informationen über Datumsformate siehe 13.8.6). Beispiel: Inputdatei „ABC.txt“ Tabelle 5-3: Möglichkeiten beim Umbenennen einer Datei Aktionswert Resultat NeuerName.* NeuerName.txt .csv ABC.csv csv csv *.csv ABC.csv *_{DATE:yyMMdd_HHmmss}.tmp ABC_140603_092043.tmp *_{DATE:yyMMdd}.old ABC_140603.old Löschen: Die betroffenen Nachrichten werden gelöscht. Der Nutzer muss die Rechte zum Löschen der Dateien haben, speziell bei FTP, SFTP können Löschrechte entzogen sein, dann läuft diese Aktion auf einen Fehler der im Protokoll zu erkennen ist. Keine: Es wird keine Aktion ausgeführt. 5.1.4.3 Übersicht – Unterstützte Aktionen pro Konto Tabelle 5-4: Unterstützte Aktionen pro Konto Konto Verschieben Umbenennen Löschen keine file x x x x ftp x1 x x x http - - - x https - - - x imap x - x3 x pop3 - - x x sftp x4 x2 x x (-) = nicht unterstützt Seite 72 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 (x) = unterstützt 1 – Umsetzung, die bereits heruntergeladene Datei wird in das Zielverzeichnis wieder hochgeladen und anschließend von der alten Position gelöscht. Dabei enthält diese einen neuen Zeitstempel und Übertragungsfehler können nur an Hand der Dateigröße erkannt und behandelt werden. 2 – bei Aktionswert muss mit Wildcard (*) gearbeitet werden. Es darf weiterhin keine Pfadangabe / oder \\ erfolgen. Es sind daher nur Aktionswerte wie *.xyz erlaubt, d.h. es kann bei SFTP aktuell nur die Dateierweiterung umbenannt werden. 3 – Wird nicht ausgeführt wenn das Konto readonly deklariert wurde. 4 - Unterstützung mit eCount- 00046563 / eCount- 00047361: Die Angabe des Pfades zum Verschieben muss absolut erfolgen: z. B. /IN/Directory/MoveDirecotry/ Bei Windows-Systemen ist es aus Performancegründen sinnvoll, das beginnende und endende / anzugeben. Anderenfalls wird extra versucht, den absoluten Pfad auf dem Server zu ermitteln. Restriktionen: - 5.1.4.4 Nutzer muss die Rechte zum Verschieben besitzen (Delete/Create) Es kann nur in ein Verzeichnis auf genau diesen SFTP-Server verschoben werden Ist das Verzeichnis nicht vorhanden, wird versucht dieses anzulegen (Create-Recht) Das Verzeichnis darf nicht auf eine andere Partition gemountet sein! Existiert eine Datei mit dem gleichen Dateinamen in den zu verschiebenden Ordner, so wird diese nicht überschrieben. Die originale Datei bleibt im aktuellen Ordner liegen. ZIP-Funktionalität Es besteht die Möglichkeit, Daten für den Datenimport in ZIP-Dateien aufzubereiten. Dazu muss für das jeweilige Format in der Maske Importkommunikation (MF_COMIMPORT) die Option ZIP aktiviert werden. Abbildung 5-5: Maske Importkommunikation, Option ZIP Dies hat unter anderem den Vorteil, dass ggf. komprimierte Dateien (in ZIP, GZIP-Format) vorher entpackt und für den Datenimport brauchbar aufbereitet werden (der Datenimport kann z. B. keine GZIP-komprimierten Dateien entpacken nur ZIP-Dateien!). Des Weiteren werden in der ZIP-Datei weitere Informationen, wie die COM_MESSAGE.ID, über die im späteren Verlauf z. B. die OriginaleAbsender-Adresse (bei E-MAIL) abgefragt werden kann, hinterlegt. 5.1.4.5 Dateinamen-Generierung Die Dateiablage erfolgt immer mit einem eindeutigen Namen. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 73 von 384 Ablage nicht komprimiert (ZIP deaktiviert) Ist die Datei bereits vorhanden, wird an den Dateinamen automatisch die Zeit nach folgendem Muster angelegt <Dateiname>[yyyyMMddHHmmssSSS].<Dateierweiterung> (Jahr, Monat, Tag, Stunde, Minute, Sekunde, Millisekunde) Beispiel: Die Datei BLABLAX_TEST_ROBOTRON.csv wird 2x importiert: 1. BLABLAX_TEST_ROBOTRON.csv 2. BLABLAX_TEST_ROBOTRON[20140507102016385].csv Ablage komprimiert (ZIP aktiviert) Hierbei wird die Datei in einer ZIP-Datei abgelegt, die mit IA_ beginnt (import account), anschließend folgt die ID des Importkontos (hier 7615) und die Kurzbezeichnung des Formats (hier EDI_MK), abgeschlossen wird der Dateiname wieder vom aktuellen Zeitstempel (yyyyMMddHHmmssSSS) Beispiel: IA_7615_EDI_MK_20140507103149899.zip 5.1.4.6 Filter Über die Schaltfläche Filter (in der Maske Importkommunikation) können Sie Kriterien definieren, welche Nachrichten in der angegebenen Art und Weise behandelt werden sollen. Abbildung 5-6: Maske Importkommunikation – Dialog Filter Folgende Kriterien sind möglich: Alles Alle gefundenen Nachrichten werden ausgewählt Adresse Alle E-Mail-Nachrichten, deren Absenderadresse mit der in der Spezifikation des Musters angegebenen E-Mail-Adresse übereinstimmen, werden ausgewählt. Betreff Seite 74 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Alle E-Mail-Nachrichten, deren Betreff mit dem in der Spezifikation des Musters angegebenen Text mindestens teilweise übereinstimmen, werden ausgewählt. Inhalt Alle E-Mail-Nachrichten, deren Nachrichtentext mit dem in der Spezifikation des Musters angegebenen Text mindestens teilweise übereinstimmen, werden ausgewählt (IMAP, POP3). Name Alle Dateien mit dem in der Spezifikation angegebenen Dateinamen werden ausgewählt. Erweiterung Alle Dateien mit der in der Spezifikation angegebenen Dateinamenserweiterung im Dateinamen werden ausgewählt. (FTP, FILE, ab 3.38 auch IMAP und POP3). 5.1.4.7 Übersicht – Unterstützte Filter je Konto Tabelle 5-5: Unterstützte Filter je Konto Konto Alles Adresse Betreff Inhalt Name Erweiterung file x - - - x x ftp x - - - x x http - - - - - - https - - - - - - imap x x x x1 x1 x1 pop3 x x x x1 x1 x1 sftp x - - - x x (-) = nicht unterstützt (x) = unterstützt 1 – Die Filterung kann nur bei unverschlüsselten Mails durchgeführt werden. Bei verschlüsselten Mails scheitern etwaige Prüfungen. ACHTUNG bei Verschlüsselung: Bei Verwendung der Filter auf Inhalt, Name und Erweiterung für E-Mail-Konten ist zu beachten, dass zur Überprüfung dieser Filter alle im Posteingang vorhandenen E-Mails heruntergeladen werden müssen. Dies hat zur Folge, dass das Abholen deutlich länger dauern kann und mehr Netzwerklast erzeugt, wenn Mails im Posteingang liegen, die nicht verarbeitet werden sollen, da auch diese jedes Mal mit überprüft werden müssen. Dies hat insbesondere bei POP3-Konten Auswirkungen, wenn diese im Nur-Lese-Modus abgefragt werden und die Mails auf dem Server belassen werden sollen. Für diese Filter sollte also die Anbindung an den E-Mail-Server hinreichend schnell sein und die Mails nach der Abarbeitung nach Möglichkeit gelöscht oder verschoben werden. Die Groß-/Kleinschreibung wird bei den Mustern ignoriert. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 75 von 384 Ab Version 3.37 der Server-Import-Kommunikationskomponente können im Filtertext zusätzlich Wildcards *, % (für beliebig viele Zeichen) und ? (für genau ein Zeichen) verwendet werden. Per Default wird die Suche für die Filterkriterien Betreff, Inhalt und Adresse immer als „ENTHÄLT“-Suche durchgeführt. Die Suche nach Name oder Erweiterung wird als „GLEICH“-Suche durchgeführt. Wenn also nach dem Vorhandensein des Betreffs „MSCONS“ gefiltert werden soll, braucht nicht %MSCONS% sondern nur MSCONS angegeben werden. Soll die Suche nach allen Zeichenketten die mit MSCONS beginnen oder enden durchgeführt werden, muss dies in der KomA zusätzlich über die Datei Config.properties aktiviert werden. In der Datei Config.properties kann die Filtersuche über den Parameter importcom.exactFilter = Y/ N (Standardwert N) beeinflusst werden. Mit importcom.exactFilter=Y ist eine exakte Suche nach beginnenden oder endenden Zeichenketten möglich. Diese Einstellung exactFilter gilt nur für die Filterkriterien Betreff, Inhalt und Adresse nicht für Name und Erweiterung. Beispiele Ausgangsbasis für die Suche: 1. „MSCONS_1234567.txt“ 2. "FWD:MSCONS_1234567.txt" 3. "CSV_123.txt" 4. "MSCONS_123456_AT_GMX_DE.txt" 5. „ABC_MSCONS_123“ Tabelle 5-6: Beispiele Filtereinstellungen für Filterkriterium Betreff importcom.exactFilter=N Positives Ergebnis (true) für folgende Ausgangsbasis importcom.exactFilter=Y Positives Ergebnis (true) für folgende Ausgangsbasis Betreff MSCONS_123 (1), (2), (3), (5) (1), (2), (3), (5) Betreff %MSCONS_123 (1), (2), (3) ,(5) (5) Betreff MSCONS_123% (1), (2), (3) ,(5) (1), (3) Filter Kriterium Betreff %MSCONS_123% (1), (2), (3) ,(5) (1), (2), (3), (5) Tabelle 5-7: Beispiele Filtereinstellungen für Filterkriterium Name Filter Kriterium Name MSCONS_123 Positives Ergebnis (true) für folgende Ausgangsbasis (importcom.exactFilter=N) Seite 76 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Filter Kriterium Positives Ergebnis (true) für folgende Ausgangsbasis (importcom.exactFilter=N) Name %MSCONS_123 (5) Name MSCONS_123% (1), (4) Name %MSCONS_123% (1), (2), (3) ,(5) Als Wildcard-Zeichen sind % und * gleichbedeutend. Weiterhin kann für jedes Konto spezifiziert werden, wie viele Nachrichten bei einer Verbindung über dieses Konto abgerufen werden sollen. Diese Einstellung dient zur gleichmäßigen Lastverteilung bei Vorhandensein vieler Nachrichten in einer Kommunikationsverbindung. Ein Kommunikationskonto wird erst auf zu verarbeitende Nachrichten überprüft, wenn es aktiviert wurde. Mit dieser Option kann die Überprüfung eines Kontos manuell ausgesetzt werden, ohne die Einstellungen des Kontos zu verändern. 5.1.5 Start des Comimports Gestartet wird über das Skript comimport.(cmd|sh). Wird der Comimport gestartet, läuft das Programm anschließend permanent im Hintergrund und fragt zyklisch (im Intervall von 1 Minute) die Importkonten ab. Es wird empfohlen, den Comimport 1x täglich neu zu starten [Aufruf via comimport_stop.(cmd|sh)]. Dabei wird unter anderem auch die Datei lastrun.log freigegeben. Diese Datei wird geschrieben, wenn im Startskript (SET CONSOLE_LOG=%KOMM_LOG%/comimport.lastrun.log) definiert ist, was standardmäßig der Fall ist. 5.1.6 Wichtiger Hinweis bezüglich Performance Dieser Hinweis gilt für alle Konten (FTP, E-Mail, SFTP, FTP)! Die Datenmenge in den abzufragenden Verzeichnissen sollte möglichst konstant niedrig gehalten werden. Steigt die Datenmenge in den Verzeichnissen kontinuierlich an, verringert sich die Abfragegeschwindigkeit. Im schlimmsten Fall schafft es der Comimport in seiner vorgegeben Zeit nicht mehr, die Verzeichnisse abzufragen (z. B. wenn der Comimport-Job per Task nach 1 Stunde gestoppt und wieder gestartet wird). Es wird daher immer empfohlen, die Daten aus dem jeweiligen Import-Ordner zu löschen oder in ein anderes Verzeichnis, welches nicht periodisch abgefragt wird, zu verschieben! Dafür stehen im ecount die Aktionen löschen und verschieben für die jeweiligen Formate zur Verfügung. Wird in den jeweiligen Formaten (die im Reiter edit aufgeführt sind) mit Filtern gearbeitet, z. B. Filterung auf Dateiendung XML) so ist es sinnvoll, eine Endaktion für alle anderen Dateien, die nicht auf den Filter passen, zu definieren. Dies kann in der Maske Importkommunikation über die Einstellung Operation nach dem Abholen vorgenommen werden. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 77 von 384 Beispiel: Im Format TEST_K_1 wird mit einen Filter gearbeitet, daher ist es notwendig, eine Endaktion für alle anderen Dateien in diesem Ordner einzurichten. Dateien die nicht auf den Filter passen werden hier in den Ordner „xyz/spam“ verschoben. Die anderen Dateien werden in den Ordner „/IN/DATA/DONE/“ verschoben. Abbildung 5-7: Maske Importkommunikation – Endaktion für Dateien einrichten, die nicht auf den Filter passen Abbildung 5-8: Maske Importkommunikation / Dialog Filter: Anzeige vorhandener Filter Wenn die notwendigen Rechte für das Verschieben oder Löschen von Dateien nicht vorhanden sind, z. B. weil ein Fremd-SFTP-Server abgefragt wird auf den nur mit Leserechten zugegriffen werden kann, muss dieser Sachverhalt ggf. mit den jeweiligen Betreiber geklärt werden. Sprich der Betreiber muss absichern, dass die Datenmenge in den abzufragenden Verzeichnissen nicht zu groß wird. 5.1.7 Dynamische Pfadangaben Dynamische Pfadangaben sind seit eCount- 00056607 nun für HTTP, SFTP und FTP möglich. Damit kann der Verzeichnispfad dynamisch zur Laufzeit bestimmt werden. Aktuell wird die dynamische Verzeichnisgenerierung nur anhand des Datums, über die ${DATE}-Variable, unterstützt. Definiert werden diese Variablen in der Spalte „Verzeichnispfad“ in Importkommunikation (MF_COMIMPORT). 5.1.7.1 ${DATE} Platzhalter für Datumsangaben, die in Abhängigkeit zu einem Datum erstellt werden können. (Die Zeitzone ist aktuell fest auf Europe/Berlin eingestellt, dies ist z. B. bei der Berechnung vom Wochenende relevant). Die Angabe der Variablen ${DATE} erfolgt in der Maske Importkommunikation (MF_COMIMPORT) beim Verzeichnispfad (siehe Abbildung 5-9). Die ${DATE}-Variable besitzt insgesamt 5 Parameter: ${DATE(datumsformat, start-offset, end-offset, schrittweite, flag, referenzdatum)} Seite 78 von 384 - Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Datumsformat in Java-Syntax (siehe Anlage 2 Datumsformatierung) – Default dd.MM.yyyy Start-Offset in Tagen (-1 gestern, 0 heute, 1 morgen, ...) – Default 0 End-Offset in Tagen (-1 gestern, 0 heute, 1 morgen, ...) – Default 0 Schrittweite in Tagen – Default 1 Flags: W = nur Montag bis Freitag; w = wie W, aber Wochenenden bei Berechnung von Start-und End-Index weglassen Referenzdatum (Standard: aktuelles Datum), muss mit dem korrekten Datumsformat angegeben werden – Default dd.MM.yyyy 5.1.7.1.1 Beispiel: Das aktuelle Jahr mit 4 Stellen bestimmen ${DATE(yyyy)} liefert z. B. 2015 Da das Default-Datumsformat dd.MM.yyyy ist, muss dies überschrieben werden. Alle anderen Parameter werden nicht benötigt (die Defaults sind ausreichend). 5.1.7.1.2 Beispiel: Generiere 4 Verzeichnise für heute und die kommenden 3 Tage ${DATE(yyyyMMdd,0,3)} Wenn heute der 28.05.2015 ist werden folgende 4 Pfade generiert: 20150528, 20150529, 20150530, 20150531 Obwohl der Default für das Start-Offset 0 ist muss dieser Parameter hier nochmal spezifiziert werden um den Parameter für das End-Offset korrekt angeben zu können. 5.1.7.1.3 Beispiel: letzter Werktag bis heute, Wochenende bei Zählung überspringen ${DATE(yyyyMMdd,-5,0,1,w)} Wenn heute der 28.05.2015 ist werden folgende Verzeichnisse generiert: 20150521, 20150522, 20150525, 20150526, 20150527, 20150528 Der 23.05 (Samstag) und 24.05 (Sonntag) werden ignoriert und übersprungen. 5.1.7.1.4 Beispiel: letzter Werktag bis heute, Wochenende bei Zählung nicht überspringen ${DATE(yyyyMMdd,-5,0,1,W)} Wenn heute der 28.05.2015 ist werden folgende Verzeichnisse generiert: 20150525, 20150526, 20150527, 20150528 5.1.7.1.5 Beispiel: Aktuelles Jahr als Pfad und Dateinamen Soll beispielsweise dynamisch pro Jahr folgende Datei abgerufen werden: /power/xls/spot_market/<aktuelles Jahr>/energy_spot_historie<aktuelles Jahr>.xls kann im Verzeichnispfad mit folgender Angabe gearbeitet werden: /power/xls/spot_market/${DATE(yyyy)}/energy_spot_historie_${DATE(yyyy)}.xls Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 79 von 384 Abbildung 5-9: Maske Importkommunikation: Angabe der Variablen ${DATE} im Verzeichnispfad 5.1.7.1.6 Beispiel: SFTP-EEX PowerSpotMarketAuctionResults Auf den EEX-SFTP-Server mis.eex.com liegen unter dem Ordner /eod/market_data/power/spot/xml/2015/20151205 folgende Dateien. Dabei sollen alle XML-Dateien importiert werden die mit „PowerSpotMarketAuctionResults“ beginnen. Abbildung 5-10: Verzeichnis unter /eod/market_data/power/spot/xml/2015/20151205 In MF_RIMPORT wird die SFTP-Kommunikationseinstellung hinterlegt. Abbildung 5-11: MF_RIMPORT: Einstellungen für SFTP-Kommunikation Diese Kommunikationseinstellung wird anschließend bei der Importkommunikation verwendet. Es wird ein neues Format mit dem entsprechenden Verzeichnispfad angelegt: Seite 80 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 5-12: Verwenden der Einstellungen für SFTP-Kommunikation Verzeichnispfad: eod/market_data/power/spot/xml/${DATE(yyyy,0)}/${DATE(yyyyMMdd)} Zusätzlich wird ein Filter eingerichtet um nur die gewünschten Dateien zu importieren. Abbildung 5-13: Verwenden der Einstellungen für SFTP-Kommunikation mit Filter 5.2 Abarbeitungslogik der Importkonten In diesem Kapitel ist die interne Abarbeitungslogik beschrieben, diese Informationen sollen als Grundlage für folgende Entscheidungen dienen: - 5.2.1 Parallelbetrieb (ja/nein) Definition von Endaktionen je Importkonto (ja/nein) Anzahl an abzuarbeitenden Accounts je KomA-Instanz Konfigurationseinstellung in der Config.properties Abfrage der Importkonten SELECT CON.ID, LOWER(CON.CONNECTION_TYPE), CON.HOSTNAME, CON.PORT, CON.USERNAME, CON.PASSWORD, CON.FOLDER, UPPER(CON.READONLY), CON.PROPERTIES FROM COM_CONNECTION CON, COM_ACCOUNT ACC WHERE CON.ID = ACC.CCON_ID AND ACC.COM_SERVER = ? Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 81 von 384 AND ACC.ACTIVE = 'J' ORDER BY HOSTNAME, USERNAME, FOLDER Wobei bei ACC.COM_SERVER = ? der Wert der Einstellung importcom.comserver aus der Datei Config.properties verwendet wird. Mit dieser Abfrage werden alle Importkonten abgefragt, die von der entsprechenden KomA abgearbeitet werden sollen. 5.2.2 Abfrage der Importformate Als nächstes werden die Importformate ermittelt. SELECT CFOR.ID, CFOR.NAME, UPPER(CFOR.SHORTNAME), CFOR.DIR FROM COM_FORMAT CFOR, COM_ACTION CACT, COM_ACCOUNT CACC WHERE CFOR.ID = CACT.CFOR_ID AND CACT.CACC_ID = CACC.ID AND CACC.ACTIVE IN ('Y', 'J') AND CACC.COM_SERVER = ? Wert in CACC.COM_SERVER ist wieder der Wert der Einstellung importcom.comserver aus der Datei Config.properties. 5.2.3 Abfrage der Konten + Konteneinstellungen Jetzt werden alle zentralen Einstellungen der Importkonten geladen. SELECT ID, NAME, CCON_ID, MAXCOUNT, UPPER(ACTION_TYPE), ACTION_VALUE, ACTIVE_FROM, ACTIVE_UNTIL, CHECK_INTERVAL, LAST_CHECKED, ERROR_COUNT, COM_SERVER FROM COM_ACCOUNT WHERE UPPER(ACTIVE) IN ('Y', 'J') AND COM_SERVER = ? ORDER BY ID 5.2.4 Abfrage der Aktionen für jedes Importkonto SELECT CFOR_ID, SYSDATE AS SYSTIME, UPPER(ACTION_TYPE), ACTION_VALUE, ID, VTP_ID, ACTIVE_FROM, ACTIVE_UNTIL, UPPER(ACTIVE), STORE_MSG_TEXT, SAVE_AS_ZIP, OPERATION, PATH FROM COM_ACTION Seite 82 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 WHERE CACC_ID = ? ORDER BY ID CACC_ID ist der Wert aus COM_ACCOUNT.ID, diese Werte wurden mit der vorhergehenden Abfrage ermittelt. Mit der Abfrage werden letztendlich die auszuführenden Aktionen für dieses Importkonto gefunden. Zusätzlich werden hier auch die Filterkriterien (falls vorhanden) ausgelesen. 5.2.5 Überprüfung der Importkonten Erst jetzt erfolgt die eigentliche Prüfung, ob die Importkonten überhaupt abgearbeitet werden müssen. Diese Prüfung verwendet eine etwas komplizierte Berechnung, die nicht immer 100% funktionierte. D.h. wenn viele Importkonten von einem KomA-Server abgearbeitet werden, kann unter Umständen ein Importkonto ignoriert werden. Das Problem wurde in eCount- 00048991 „Comimport Abrufalgorithmus ändern“ gelöst. 5.2.6 Besonderheiten bei „read only“ Importkonten Ein Importkonto hat die Eigenschaft „read only“, wenn die Option in der Maske Kommunikationseinstellung (MR_RIMPORT) gesetzt ist. Diese Eigenschaft ist primär für E-Mail-Konten relevant! Ist diese Eigenschaft aktiviert, wird für jede Nachricht, die importiert werden soll, eine Abfrage in der Datenbank realisiert um zu prüfen, ob die Nachricht nicht bereits importiert wurde. Als Suchkriterium dienen hier die Nachrichten-ID, der Zeitstempel und die Größe der Nachricht. Wird eine passende Nachricht in der Datenbank gefunden, wird diese beim Importprozess ignoriert. Die Eigenschaft „read only“ sollte nur verwendet werden wenn die Postfächer von anderen Prozessen periodisch gesäubert/geleert werden. Anderenfalls besteht die Gefahr, dass die Postfächer mit der Zeit überfüllt werden und keine Daten mehr importiert werden können, da der Comimport-Prozess die gesamte, ihm zur Verfügung stehende, Zeit mit Überprüfung auf mögliche Duplikate verbringt. 5.3 E-Mail-Konto (POP / IMAP) Der E-Mail-Empfang basiert auf JavaMail (JavaMail ist eine Java-Programmierschnittstelle zum Plattform- und Protokoll-unabhängigen Senden und Empfangen von E-Mails. JavaMail unterstützt dabei die Standards SMTP, POP3 und IMAP). Weitere Informationen zu Javamail sind auf der Homepage und im FAQ vorhanden. Der Aufbau einer E-Mail richtet sich nach dem RFC822 und dem MIME Standard (MIME RFC: RFC2045, RFC2046, RFC2047) 5.3.1 Allgemeine Hinweise 5.3.1.1 Filterung von E-Mails Es besteht die Möglichkeit, im ecount und über die KomA, gezielt nach E-Mails zu filtern z. B. Betreff beginnt mit MSCONS und Absender ist X. Bei umfangreicheren Filterungen ist es gegebenenfalls besser, die Filterung schon auf dem E-Mail-Server vorzunehmen. Dieser bietet deutlich mehr Filtermöglichkeiten und eine bessere Überwachung und komfortablere Einstellmöglichkeiten. Bei Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 83 von 384 erfolgreicher Filterung sollten die E-Mails anschließend in Unterordner verschoben werden. Die jeweiligen Konten für den Datenempfang können anschließend gezielt auf die Unterordner verbunden werden, eine komplizierte Filterung im ecount entfällt. Beispiel: Werden in einem Postfach MSCONS-Dateien in den Unterordner MSCONS verschoben, kann das Konto für die Abholung der MSCONS-Dateien direkt auf den Unterordner konfiguriert werden (INBOX/MSCONS) Abbildung 5-14: Beispiel: Filterung von E-Mails per Folder 5.3.2 Konfigurationsparameter Parameter können global (d.h. in der Config.properties) und andere Parameter nur für das jeweilige Konto (d.h. über die Maske Import > Kommunikationseinstellung) definiert werden. Tabelle 5-8 stellt eine Übersicht der globalen Parameter für den E-Mail-Empfang, die in der Config.properties definiert werden können, dar. Tabelle 5-8: Parameter für E-Mail-Empfang Parameter/Beschreibung importcom.CHECK_PROCESSED_MAILS Y/N (Standardwert N) Mittels Y kann aktiviert werden, dass für jede E-Mail geprüft wird, ob diese bereits durch die KomA abgeholt wurde. Damit ist es also möglich, Doppelimport schon beim Comimport zu verhindern. Als Kriterien für die Doppelimportprüfung werden die Größe, das Sendedatum und die Message-Id (Wert aus dem Header "Message-ID") der E-Mail verwendet. Der Parameter sollte nur bei Bedarf eingeschaltet werden, da die Prüfung, je nach Datenmenge in den Tabelle COM_MESSAGE, recht zeitintensiv sein kann. Der Parameter ist per Standardwert jedoch aktiv, falls das E-Mail-Konto auf „read only“ steht oder für ein definiertes Format kein Aktionstyp (Aktionstyp = keine) ausgewählt wurde. importcom.mex.MANY_ACTIONS_PER_MAIL Y/N (Standardwert N) Mit Y können E-Mails mit mehreren Aktionen verarbeitet werden (deren Filter auf die jeweilige E-Mail passt). importcom.from_adress From-Adresse, die für weitergeleitete Import-E-Mails genutzt wird, wenn importcom.use_from_adress aktiviert ist (die From-Adresse der eingehenden E-Mails, die weitergeleitet werden, wird gegen eine andere ausgetauscht). Seit eCount- 00049606 wird die Einstellung auch bei der Erstellung der Admin-E-Mail verwendet (siehe 5.3.7.2). Seite 84 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung importcom.mex.fetchBeforeProcess Y/N (Standardwert N) E-Mails werden vor Verarbeitung komplett heruntergeladen, um Bugs in E-Mail-Servern wie z. B. MS Exchange zu umgehen, die beim Nachladen von Daten einer E-Mail unter verschiedenen Konstellationen korrupte Datenblöcke liefern ("Unable to load BODYSTRUCTURE“). Unter Umständen ist dieser Bug inzwischen gefixt und die Einstellung kann mittels importcom.mex.fetchBeforeProcess=N deaktiviert werden. Technische Information: Mit aktiviertem Parameter, wird vor der Verarbeitung der E-Mail diese vollständig vom E-Mail-Server geladen. importcom.mex.IGNORE_SIGNED_MAILS Y/N (Standardwert N) Signierte E-Mails lassen sich ohne SMIME-Funktionalität bearbeiten. Dies bedeutet, dass keine Prüfung der Signatur stattfindet, der Nachrichteninhalt wird extrahiert und weiterverarbeitet. Dies betrifft nur signierte E-Mails, sollte die E-Mail signiert und anschließend verschlüsselt sein, so wird das SMIME-Modul zwingend zur Entschlüsselung der Nachricht benötigt. Diese Einstellung funktioniert derzeit nur für E-Mail-Konten, (Kommunikationseinstellungen der Typen „imap“ und „pop3“). Der Parameter funktioniert für das Modul KOMA_IMPORTCOM_EMAIL ab Version 4.0.2.41 importcom.mex.IMAP.timeout mail.imap.connectiontimeout Verbindungstimeout beim Abholen von E-Mail von IMAP-Servern in ms. UND mail.imap.timeout Default: Bis Version 4.0.2.48 von connection_email.jar 30 Sekunden. Ab 4.0.2.49 gibt es keinen expliziten Standardwert mehr. Angabe als positive Ganzzahl. Beispiel: Timeout von 120 Sekunden. importcom.MEX.IMAP.timeout=120000 importcom.subject Betreff, der für die weitergeleiteten E-Mails genutzt werden soll. (wenn importcom.use_from_adress = Y). Der Originalbetreff wird anschließend automatisch übernommen: <importcom.subject> : <Originalbetreff> Der Standardtext sollte unbedingt angepasst werden: „Betreff, der für weitergeleitete Importmails genutzt werden soll“ importcom.use_from_adress Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 85 von 384 Parameter/Beschreibung Y/N (Standardwert N) Die From-Adresse soll bei eingehenden E-Mails, die weitergeleitet werden sollen, gegen eine andere (wird durch importcom.from_address bestimmt) ausgetauscht werden. Y = Austausch mit importcom.from_adress N = Übernahme der From-Adresse des Absenders importcom.mex.CLEAN_CORRUPT_MAIL Y/N (Standardwert N) Ist die Einstellung aktiviert, wird bei einem schwerwiegenden Fehler versucht, die E-Mail zu verschieben (innerhalb des E-Mail-Servers oder auf das Filesystem) und anschließend aus dem Postfach zu löschen (siehe 5.3.7.2). importcom.mex.ERROR_MAIL_FOLDER Wenn importcom.mex.CLEAN_CORRUPT_MAIL aktiviert ist, kann hier ein Ordner auf dem EMail-Server angegeben werden, in den die fehlerhafte E-Mail verschoben wird. Die Angabe kann absolut erfolgen, z. B. FEHLER_MAILS oder relativ zum aktuellen Ordner z. B. ./FEHLER_MAILS (hierbei wird unter dem aktuellen Ordner ein Ordner FEHLER_MAILS erwartet). Ist der Ordner nicht vorhanden, wird dieser angelegt (wenn möglich). Ist der Parameter nicht spezifiziert oder gibt es andere Probleme (z. B. kann der Ordner nicht angelegt werden), so wird die E-Mail im Filesystem abgelegt. importcom.mex.SEND_ADMIN_MAIL Y/N (Standardwert N) Bei einem schwerwiegenden Fehler kann eine E-Mail von der KomA verschickt werden. Dabei wird die fehlerhafte E-Mail identifiziert (Message-ID, Subject, From, ReceivedDate, SentDate), der Fehler ausgegeben und der Ordner mitgeteilt, in dem die E-Mail abgelegt wurde. Die verwendete FromAdresse ergibt sich aus dem Wert der Einstellung importcom.from_adress. importcom.mex.ADMIN_MAIL_ADRESS Die Adresse, an welche die Admin-E-Mail verschickt werden soll. importcom.mex.SEND_ADMIN_MAIL_TEXT Der Nachrichtentext der Admin-E-Mail. Default: Es ist ein schwerwiegender Fehler beim Abholen der Mail aufgetreten. importcom.mex.SEND_ADMIN_MAIL_SUBJECT Der Betreff der Admin-E-Mail. Default: Schwerwiegender Fehler beim Comimport Tabelle 5-9 zeigt die Parameter, die über die ecount-Maske: Import > Kommunikationseinstellung definiert werden. Seite 86 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Es ist jedoch auch möglich diese Einstellungen global via Config.properties zu hinterlegen! Tabelle 5-9: Parameter für E-Mail-Empfang über Maske Kommunikationseinstellung Parameter/Beschreibung DISABLE_GSSAPI_AUTHENTICATION Y/N (Standardwert N) Deaktivierung der GSSAPI-Authentifizierung mittels Y (IMAP) DISABLE_NTLM_AUTHENTICATION Y/N (Standardwert N) Deaktivierung der NTLM-Authentifizierung mittels Y (IMAP) IMAP_FETCH_SIZE Default (16) Positive Ganzzahl, Angabe erfolgt in KB, bei Performance-Problemen sollte die fetch size (mail.imap.fetchsize) erhöht werden. Beispiel: Erhöhung der Datenabfrage auf 1 MB pro Roundtrip: IMAP_FETCH_SIZE=1024 Der Parameter IMAP_FETCH_SIZE wird bei IMAP_PARTIALFETCH=N nicht berücksichtigt. IMAP_PARTIALFETCH Y/N (Standardwert N) Deaktivierung von mail.imap.partialfetch mittels N. Bei großen Dateianhängen (~10 MB) kam es zu Timeout-Fehlern beim Abholen von E-Mails vom Microsoft Exchange IMAP Server kommen, dies kann mit der Einstellung N umgangen werden. PLAIN_AUTHENTICATION Y/N (Standardwert N) Mit N kann die Plain-Authentifizierung deaktiviert werden (IMAP, POP3) SSL Y/N (Standardwert N) Aktivierung von SSL mittels Y (IMAP, POP3) STARTTLS Y/N (Standardwert N) Aktivierung von STARTTLS mittels Y (IMAP, POP3) TRUSTING_HOSTS Y/N (Standardwert N) Mit Y wird allen Hosts (Zertifikaten) vertraut (IMAP, POP3) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 87 von 384 Diese Einstellungen können für das jeweilige E-Mail-Protokoll (IMAP oder POP3) auch global für alle Konten über die Config.properties vorgenommen werden! Eine zusätzliche Einstellung in einen Konto übersteuert hierbei die Einstellung aus der Config.properties. Syntax: importcom.<E-Mail-Protokoll>.<Einstellung>=<Wert> Beispiel: STARTTLS global aktivieren für alle IMAP-Verbindungen: importcom.IMAP.STARTTLS=Y Beispiel: STARTTLS global für alle POP3-Verbindungen aktivieren: importcom.POP3.STARTTLS=Y Beispiel: PLAIN_AUTHENTICATION für alle IMAP-Verbindungen deaktivieren importcom.IMAP.PLAIN_AUTHENTICATION=N 5.3.2.1 5.3.2.1.1 Exchange – FAQ PLAIN Authentifizierung (Login FAILED Error) Exchange-Server haben einen Bug, der 3rd-Software mitteilt, dass als Authentifizierung AUTH=PLAIN unterstützt wird, obwohl dies laut den Exchange Dokumentation offiziell nicht unterstützt wird. Das führt dazu, dass JavaMail die PLAIN-Authentifizierung nutzt, die anschließend auf Fehler läuft. Als Workaround muss PLAIN_AUTHENTICATION=N (Kommunikationseinstellungen bei Properties) eingestellt werden. 5.3.2.1.2 PLAIN und NTLM Authentifizierung (Login FAILED Error) Exchange 2010 hat ein ähnliches Problem mit PLAIN und NTLM Authentifizierung für shared E-MailAccounts (z. B. user1@domain.com/sharedMB). Bei normalen E-Mail-Konten auf dem gleichen E-MailServer, gibt es hingegen keine Probleme. Als Workaround wurden die Authentifizierungsmethoden deaktiviert, der damit verbundene „normale“ IMAP LOGIN funktionierte anschließend. Die relevanten Einstellungen sind (Kommunikationseinstellungen bei Properties): DISABLE_NTLM_AUTHENTICATION=Y PLAIN_AUTHENTICATION=N 5.3.2.1.3 Zugriff auf Shared Mailbox Der Zugriff auf ein shared mailbox (freigegebenes Postfach) erfolgt im Exchange meist mit Hilfe eines Alias-Namens und dem Passwort für das freigegebene Postfach, das Sie von Ihrem Exchange ServerAdministrator bekommen können. Bei einigen E-Mail-Servern kann der Zugriff (anscheinend) auch in dieser Form konfiguriert sein: user1@domain.com/SHAREDACCOUNT DOMAIN\\USER\\SHAREDACCOUNT Seite 88 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Sollte es wiederum zu einem Login FAILED Error kommen und führen auch die oberen Hinweise nicht zum Erfolg, sollte die Konfiguration auf Grundlage des Office-Forum Eintrages, geprüft werden: Tausug <Forage>: I trying to access shared mailbox running on our Exchange 2010 SP1. I found out that in Exchange 2007 since SP1 RU4 was a solution to use DomainName\Username\Alias as loginname (see Microsoft-Support-Page). So I tried this type of loginname on Exchange 2010 but IMAP server always returns Login FAILED Error. <Antwort>: In exchange 2010, you can also to the format DomainName\Username\Alias to log into the shared mailbox. The error "logon failed" can be caused by the incorrect authentication settings or the IMAP service is stopped. Please follow these steps: 5.3.2.1.4 Press windows logo key+R to open Run. Type: services.msc. Make sure that Microsoft Exchange IMAP4 service is starting and the startup type is set to "Automatic". Open EMC, expand to Server Configuration->Client Access. In the middle panel, click your exchange CAS server, click POP3 and IMAP4 tab, right click IMAP4 and choose properties. In Authentication tab, select "Plain test logon (Basic authentication)", then click OK. Open services.msc, restart Microsoft Exchange Transport services. Zugriff mit STARTTLS Dazu muss in der Oberfläche (Maske Kommunikationseinstellungen bei Properties) Folgendes hinterlegt werden: STARTTLS=Y. Alternativ kann dies auch global über die Config.properties erfolgen: importcom.IMAP.STARTTLS=Y (bei IMAP) importcom.POP3.STARTTLS=Y (bei POP3) 5.3.2.1.5 SSL/TLS vs. STARTTLS Bei SSL/TLS wird (auf einem anderen Port) von Anfang an eine TLS-Verschlüsselung aufgebaut. Bei IMAP auf Port 993 (anstelle von 143) und bei POP3 auf 995 (anstelle von 110). Im Gegensatz dazu beginnt eine Verbindung bei dem STARTTLS-Verfahren immer unverschlüsselt auf dem für Klartext vorgesehenen Port. Nach Eingabe des STARTTLS-Befehls wird eine Verschlüsselung ausgehandelt. Diese Verschlüsselung findet dann in der gleichen Verbindung statt, es wird keine neue Verbindung aufgebaut. 5.3.3 Weiterleitung nicht zu verarbeitender E-Mails Es besteht die Möglichkeit, alle Nachrichten, die nicht verarbeitet werden, an eine Adresse weiterzuleiten. Die Nachrichten, die nicht verarbeitet werden, ergeben sich aus den definierten Filtereinstellungen der Importformate. Im Beispiel gibt es das Import-Format TEST_K_1 welches auf die Dateierweiterung csv filtert. Damit werden nur CSV-Dateien verarbeitet. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 89 von 384 Abbildung 5-15: Beispiel: Weiterleitung nicht zu verarbeitender E-Mails In der Maske Importkommunikation (MF_COMIMPORT) kann unter dem Punkt Operation nach dem Abholen definiert werden, was für nicht verarbeitete Nachrichten stattfinden soll. Im Beispiel wird eine Weiterleitung an die E-Mail-Adresse max.mustermann@robotron.de eingerichtet. Abbildung 5-16: Beispiel: Einrichtung Weiterleitung nicht zu verarbeitender E-Mails 5.3.4 E-Mail-Anhänge: Beschränkungen Um Dateianhänge zu extrahieren, muss aus der E-Mail der Dateiname einwandfrei extrahierbar sein. Dies wird über den Header Content-Typ und den Header Content-Disposition realisiert. Dabei gibt der Content-Typ Aufschluss über den Dateninhalt (z. B. EDIFACT-Datei oder PDF-Datei oder Bild) und im Content-Disposition wird über attachment der eigentliche Dateiname übergeben. Wird der Dateiname nicht erkannt, wird dieser auch nicht abgehangen und damit auch nicht für die Datenimport-Prozesse zur Verfügung gestellt. Gültiger E-Mail-Anhang: Content-Type: application/octet-stream; name="ALOCAT_X6G_vom 20140201 bis 20140301.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ALOCAT_X6G_vom 20140201 bis 20140301.txt" Nicht gültiger E-Mail-Anhang: Content-Type: text/plain; charset="ISO-8859-1" Content-Disposition: inline Content-Description: "Erdgas_Lastgang_Vin_3Tage.csv" Seite 90 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 In diesem Beispiel ist ein Dateiname zwar angegeben, aber dieser steht nur als Beschreibung da, die auch gefälscht sein könnte (oder zur eigentlichen Dateierweiterung gar nicht passt). Damit in den weiteren Prozessen keine Fehler auftreten, wird die Beschreibung hier nicht ausgewertet. 5.3.5 Verschiebeoperation - Zielordner Der Zielordner für Verschiebeoperationen bei IMAP-Verbindungen kann mit Präfix ./ relativ zum Quellordner angegeben werden. 5.3.6 Abarbeitungsreihenfolge bei E-Mails E-Mails werden in der Reihenfolge verarbeitet, in der sie vom E-Mail-Server geliefert werden. Wenn dabei die chronologische Reihenfolge verletzt wird, sollte geprüft werden, an welcher Stelle dies passiert. Das kann durchaus auch schon vor dem empfangenen E-Mail-Server passieren, sogar schon im sendenden System. Das Verhalten kann bei E-Mail-Servern ggf. unterschiedlich sein und auch unterschiedlich konfiguriert werden. Dies ist Aufgabe der IT-Mitarbeiter, die den Server administrieren. Eine Sortierung beim Abholen wäre grundsätzlich möglich (ist aktuell jedoch nicht implementiert), bringt aber Risiken mit sich, wenn bspw. der Posteingang extrem voll ist. Außerdem würde dies vor allem auch den Abholprozess unter ungünstigen Umständen merklich verlangsamen. 5.3.7 Probleme/Lösungen 5.3.7.1 Kontinuierliche Verschlechterung der Performance Symptom: Das Abholen einer E-Mail benötigt immer mehr Zeit. Prüfung: - ob der Parameter importcom.CHECK_PROCESSED_MAILS in der Config.properties mit dem Wert Y gesetzt ist ob das E-Mail-Konto als „read only“ konfiguriert wurde ob alle Formate (Maske Importkommunikation [MF_COMIMPORT] > Reiter edit) mit einen Aktionstyp versehen sind (Aktionstyp ungleich keine) Es wird empfohlen, den Parameter importcom.CHECK_PROCESSED_MAILS nur zu aktivieren, wenn zwingend der Bedarf der Doppeltimportprüfung beim Comimport besteht. Des Weiteren sollte das Konto möglichst nicht als „read only“-Konto (Maske Kommunikationseinstellungen [MF_RIMPORT]) konfiguriert sein und alle Formate müssen über einen Aktionstyp (= die Endaktion) verfügen. Anderenfalls wird eine Doppeltimportprüfung für jede zu importierende E-Mail ausgeführt. Technisch: Es wird geprüft, ob in der Tabelle COM_MESSAGE bereits eine E-Mail mit der ID, dem Sendedatum und der Größe existiert. Die Geschwindigkeit der Prüfung ist u.a. abhängig vom Datenumfang in der Tabelle. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 5.3.7.2 Seite 91 von 384 Stillstand Comimport Der Comimport hängt sich bei verschlüsselter E-Mail auf, wenn kein SMIME-Modul installiert ist (eCount- 00049606). Des Weiteren kommt es zum Stillstand bei E-Mails mit korrupten Dateianhängen (eCount- 00039377). Hintergrund: Der Comimport ist so gestrickt, dass alles verarbeitet wird was im Posteingang gefunden und noch nicht verarbeitet ist, d.h. es werden alle Elemente verarbeitet, die in der Tabelle COM_MESSAGE keinen Eintrag haben. Wenn die Verarbeitung einer E-Mail fehlschlägt bevor der Eintrag in der Tabelle COM_MESSAGE erstellt werden kann, wird immer wieder versucht, diese zu importieren (was dann zum „Stillstand“ führt). Mit eCount- 00049606 wurde der Comimport um folgende Funktionalität erweitert: Es ist möglich, bei schwerwiegenden Fehlern, die E-Mail aus dem Postfach zu verwerfen. Zusätzlich kann die E-Mail entweder auf dem E-Mail-Server in einen separaten Ordner verschoben werden oder die E-Mail wird als EML-Datei auf dem Filesystem abgelegt. Als weitere Option kann eine Admin-E-Mail verschickt werden, die auf den Fehler hinweist. Folgende Einstellungen sind für das Feature relevant: - importcom.mex.CLEAN_CORRUPT_MAIL importcom.mex.ERROR_MAIL_FOLDER importcom.mex.SEND_ADMIN_MAIL importcom.mex.ADMIN_MAIL_ADRESS importcom.mex.SEND_ADMIN_MAIL_TEXT importcom.mex.SEND_ADMIN_MAIL_SUBJECT importcom.from_adress Per Default ist das Feature aktiviert (importcom.mex.CLEAN_CORRUPT_MAIL=Y). Wird kein Verzeichnis auf den E-Mail-Server angegeben, in welches die fehlerhaften E-Mails verschoben werden sollen (importcom.mex.ERROR_MAIL_FOLDER), wird die E-Mail im Filesystem abgelegt. Das Verzeichnis ergibt sich aus importcom.mail_dir (Standardwert importmail), es wird für jedes Konto ein Ordner angelegt welcher mit IA beginnt, gefolgt von der ID der Kommunikationseinstellung. In diesem Ordner werden die Unterordner ERROR und SMIME_MAILS angelegt, in denen die E-Mails, in ZIP-Dateien gepackt, abgelegt werden. Der Ordner SMIME_MAILS signalisiert E-Mails, die signiert oder verschlüsselt sind, jedoch wird der KomA-Server ohne SMIME-Modul betrieben. Im Ordner ERROR landen alle anderen fehlerhaften E-Mails. Beispielkonfiguration: importcom.mex.CLEAN_CORRUPT_MAIL=Y importcom.mex.SEND_ADMIN_MAIL=Y importcom.mex.ADMIN_MAIL_ADRESS=max.mustermann@robotron.de Hierbei werden fehlerhafte E-Mails im Filesystem abgelegt. Die Kommunikationseinstellung trägt die ID 7485. Zusätzlich wird eine Admin-E-Mail erzeugt. Seite 92 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 5-17: Stillstand Comimport: Konfiguration für fehlerhafte E-Mails Abbildung 5-18: Stillstand Comimport: Verzeichnis für fehlerhafte E-Mails Abbildung 5-19: Beispielkonfiguration und Ergebnis zur Behebung Stillstand Comimport 5.3.7.3 Anhänge werden als Winmail.dat gespeichert Symptom: Der Import von Dateien über ein E-Mail-Konto funktioniert nicht, da alle Anhänge als winmail.dat abgespeichert werden. Eine Weiterverarbeitung mit dem KomA-Server ist anschließend nicht möglich. Lösung: Dieses Problem lässt sich nur auf der Seite des E-Mail-Servers (Exchange-Server) beheben. Microsofts proprietäres Format TNEF (Transport Neutral Encapsulation Format) ist primär für den Fehler zuständig. TNEF muss vom Administrator deaktiviert werden, siehe z. B. http://support.microsoft.com/kb/241538. 5.3.7.4 Update auf JavaMail 1.5.0 Auf einigen Systemen kommt es nach dem Update zu Problemen, u. U. hilft folgende Einstellung in der Importkommunikation: PLAIN_AUTHENTICATION=N DISABLE_NTLM_AUTHENTICATION=Y Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 93 von 384 Dafür muss Addon 716a installiert sein: http://support.robotron.de/ecount-com-server/#716a_AO_JavaMail%20API%201.5.0%20Release. 5.3.7.5 MessageRemovedException Mit Version 4.0.2.47 von importcom/connection_email.jar wird bei einer MessageRemovedException der Importprozess nicht mehr beendet. Die E-Mail wird verworfen und es wird mit der Abarbeitung der weiteren E-Mails fortgefahren. Zusätzlich wird im KomA-Log eine sprechende Meldung generiert. Zu einer MessageRemovedException kommt es, wenn eine E-Mail von einer externen Quelle (externen Nutzer) während der Abarbeitung in der KomA gelöscht wurde. 5.3.7.6 Timeout bei großen Mails (Dateianhänge ca. 10MB) Ein Workaround wurde mit Version 4.0.2.49 der importcom/connection_email.jar implementiert. Der Import von E-Mails mit größeren Dateianhängen bricht mit einem Timeout ab. Bei kleineren E-Mails gibt es keine Probleme. Auszug aus einer Kunden-LOG-Datei: 07.03.2014 09:41:55 DEBUG MailImportMessage:401 processApplication() ProcessContent - application: application/octet-stream; name=MSCONS_TL_xxxx_20140307_01153706901.txt 07.03.14 09:48:02 Error: Timeout checking account 1736 Javamail-NOTES: 4. Due to a problem in the Microsoft Exchange IMAP server, insufficient number of bytes may be retrieved when reading big messages. There are two ways to workaround this Exchange bug: (a) The Exchange IMAP server provides a configuration option called "fast message retrieval" to the UI. Simply go to the site, server or recipient, click on the "IMAP4" tab, and one of the check boxes is "enable fast message retrieval". Turn it off and the octet counts will be exact. This is fully described at http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q191504 (b) Set the "mail.imap.partialfetch" property to false. You'll have to set this property in the Properties object that you provide to your Session. Die Einstellung mail.imap.partialfetch kann über die Maske Kommunikationseinstellungen mittels IMAP_PARTIALFETCH=N deaktiviert werden. Per Standard ist diese Einstellung aktiviert (Y). Seite 94 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 5-20: Maske Kommunikationseinstellungen: IMAP_PARTIALFETCH=N Sollte diese Einstellung nicht möglich sein oder nicht zum gewünschten Ergebnis führen, kann über IMAP_FETCH_SIZE=x (x = positive Ganzzahl) die Größe der abgefragten Daten pro Roundtrip erhöht werden. Die Angabe erfolgt in KB (Default: 16). Beispiel: Erhöhung der Datenabfrage auf 1 MB pro Roundtrip: IMAP_FETCH_SIZE=1024. Der Parameter IMAP_FETCH_SIZE wird bei IMAP_PARTIALFETCH=N von Javamail nicht berücksichtigt. Abbildung 5-21: Maske Kommunikationseinstellungen: IMAP_FETCH_SIZE 5.3.7.7 Problem mit Nachrichtentext (Msg.) Im Importkonto kann mit der Option Msg. das Speichern des Nachrichtentextes aktiviert werden. Ist diese Option gesetzt, wird der Nachrichtentext per Default in eine Textdatei gespeichert. Der Name dieser Textdatei ergibt sich hierbei aus dem Dateinamen der in der E-Mail enthaltenen Nachricht zuzüglich .txt. In Kombination mit der Option ZIP kann dies zu unerwarteten Fehlern führen, wenn in der datenimport.ini (auf der KomA im config-Verzeichnis) ein Importeintrag aller *.txt FORMAT Verzeichnisse definiert ist. Dann wird nämlich auch versucht, die Nachrichtentextdatei zu importieren, was bei den meisten Formaten zu Fehlern führt (z. B. bei EDI zum Fehler „is not an EDIFACT file“). Treten solche Fehler auf, muss das Speichern des Nachrichtentextes deaktiviert werden (s. Abbildung 5-22). Abbildung 5-22: Maske Importkommunikation: Option Msg. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 5.3.7.8 Seite 95 von 384 IMAP - Ordnername mit / Mit dem IMAP-Protokoll sind keine / in Ordnernamen möglich, da dies das Trennzeichen für die Ordnernamen ist. Mit neueren Outlook-Versionen, in Verbindung mit dem Exchange, ist dies jedoch möglich, da diese über Exchange Server Protocols kommunizieren und nicht an die Restriktionen des IMAP-Protokolls gebunden sind. 5.3.7.9 Connection dropped by server? Bei einem E-Mail-Konto bei outlook.office365 kam es zu dieser Fehlermeldung. Das Konto war mit der Einstellung STARTTLS=Y versehen. Die Einstellung STARTTLS=Y wurde gegen SSL=Y ausgetauscht, anschließend funktionierte die Verbindung wieder fehlerfrei. 5.3.7.10 Problem beim Bestimmen des Content-Type (RFC1341) In den E-Mails wird über den Header Content-Type die Information übergeben, ob der Nachrichteninhalt beispielsweise signiert oder verschlüsselt ist. Der Aufbau ist unter anderem in RFC1341 spezifiziert und sieht vor, dass / nur gequoted verwendet werden kann. D.h. Content-Type: multipart/signed; …protocol=application/pkcs7-signature; micalg=sha1 ist falsch, da hier / ohne Quotes verwendet wird, richtig: Content-Type: multipart/signed; …protocol="application/pkcs7signature"; micalg=sha1 5.3.7.11 Anhänge werden als GZIP (*.gz) abgelegt obwohl diese gar nicht komprimiert sind Mit eCount- 00055495 wurde eine Problematik entschärft, bei der E-Mail-Anhänge, die nicht komprimiert jedoch als solche gekennzeichnet sind, nicht importiert beziehungsweise unter falschem Dateinamen abgelegt wurden. Die Ursache des Problems lag an einer Middleware, welche die E-Mail bereits vorverarbeitet hat. Dabei wurde der Anhang entpackt und eine neue E-Mail mit dem originalen E-Mail-Header zusammengebaut. So wurde fälschlicherweise signalisiert, dass der E-Mail-Anhang komprimiert ist, was auf der Empfangsseite zum Fehler führte. Der Header für die E-Mail mit nicht komprimiertem Dateianhang sah beispielsweise so aus: Content-Type: application/x-gzip; name=MSCONS_TL_XXX.txt.gz Content-Disposition: attachment; filename=MSCONS_TL_XXX.txt.gz Mit dem Update aus dem oben genannten KM erfolgt nun eine Prüfung, ob der Anhang wirklich GZIP komprimiert ist. Sollte dies nicht der Fall sein, wird die Datei umbenannt sofern im E-Mail-Header noch eine zweite Dateierweiterung extrahiert werden kann. In diesen Fall würde die Datei also als MSCONS_TL_XXX.txt abgelegt werden (.gz wird entfernt). 5.3.7.12 Anhänge mit Umlauten werden nicht korrekt angezeigt Falls Datei-Anhänge mit Umlauten im Namen nicht korrekt angezeigt werden, kann in user_env.(cmd/sh) mit der Java-Option -Dmail.mime.encodefilename=true eine Kodierung der Dateinamen erzwungen werden. Seite 96 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Auszug aus der Java-Mail-Dokumentation: mail.mime.encodefilename If set to "true", the setFileName method uses the MimeUtility method encodeText to encode any non-ASCII characters in the filename. Note that this encoding violates the MIME specification, but is useful for interoperating with some mail clients that use this convention. The default is false. 5.3.7.13 Warnung bei mehr als 1000 E-Mails im Postfach Realisiert in eCount- 00059632. Die Fehlermeldung lautete: Es befinden sich X E-Mails im Postfach! Gegebenenfalls sind fehlende Endaktionen (z. B. Löschen oder Verschieben der E-Mails) in der Maske Importkommunikation (MF_COMIMPORT) für dieses Konto Ursache für die große Anzahl an E-Mails. Dies kann die Performance des Comimports stark negativ beeinflussen, da für jede E-Mail eine Prüfung stattfindet ob die E-Mail bereits importiert wurde! Bitte prüfen Sie die Endaktionen für das Konto (ID: Y, Postfach: Z)! Hinweise: Hintergrund: Es tauchen immer wieder Meldungen nach dem Motto „Comimport geht nicht!“ oder „Comimport geht viel zu langsam!“ auf. Ursache sind hier meist Fehlkonfigurationen, die jedoch nur über Debug-Ausgaben sauber verifiziert werden können. Beispielsweise wenn bei einem E-MailKonto keine Endaktionen definiert wurden (z. B. Verschiebe die E-Mails in Unterordner oder lösche diese vom Postfach). Bei so einer Konfiguration wird für jede E-Mail eine Prüfung vorgenommen ob die E-Mail bereits importiert wurde. Im Laufe der Zeit, mit wachsender Anzahl an E-Mails im Postfach, dauern diese Prüfungen immer länger! Dies ist meist die Ursache der Meldungen „Comimport geht viel zu langsam!“. Wird der Datenversand-Job periodisch gestartet (z. B. über Task Scheduler) und ist dieser so konfiguriert, dass ein Neustart nach einer gewissen Zeit auftritt (z. B. Aufgabe beenden falls diese länger ausgeführt wird als x Stunden) kann dies die Ursache für die Meldungen „Comimport geht nicht!“ sein. Hier beschäftigt sich die KomA also mit den Prüfungen ob die E-Mails bereits importiert wurden und wird vor dem Ende der Prüfung durch den Task Scheduler beendet (was anschließend in Endlosschleife weitergeht). Siehe auch 15.1. 5.3.7.14 ConnectionException: No login methods supported Die Fehlermeldung deutet auf eine Änderung der Verbindung zum Mailserver hin. Über das Debuggen der Mailverbindung kann unter Umständen folgende Information zu Tage kommen: * CAPABILITY IMAP4 IMAP4rev1 LOGINDISABLED STARTTLS UIDPLUS ID… Die LOGINDISABLED-Einstellung bedeutet, dass kein LOGIN möglich ist bevor das STARTTLS-Kommando ausgeführt wurde. Das bedeutet also, dass der Server Plaintext Authentication über unsichere Verbindungen verhindert. Das STARTTLS-Kommando kann für alle Verbindungen global über die Config.properties konfiguriert werden (importcom.IMAP.STARTTLS=Y) oder für jede Einstellung separat (STARTTLS). Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 5.4 Seite 97 von 384 FILE-Konto 5.4.1 Konfigurationsparameter Parameter/Beschreibung Default importcom.file.JCIFS N Y/N. In Netzlaufwerken wird die Open-Source-Bibliothek von http://jcifs.samba.org/ verwendet, die auch mit spezielleren Netzwerkkonfigurationen (Nutzer und Passwort) zurechtkommt (SMB Kommunikationsprotokoll). Diese Einstellung kann auch für eine einzelne Verbindung im ecount gepflegt werden. Dafür muss in der Kommunikationseinstellung (MF_RIMPORT) im Feld „Properties“ die Anweisung: JCIFS=Y hinterlegt werden. 5.4.2 Beispielkonfiguration für SMB-Verzeichnis Eine Verbindung auf eine geschützte Netzwerkfreigabe über das SMB-Protokoll kann wie folgt definiert werden. Als Typ wird „file“ gewählt, bei Hostname wird der entsprechende Rechner angegeben. Benutzername und Passwort und das Zielverzeichnis werden definiert. In Properties wird JCIFS=Y hinterlegt um die Nutzung der richtigen Bibliothek zu aktivieren. Seite 98 von 384 5.4.3 Probleme/Lösungen 5.4.3.1 Cannot run program "net use …“ Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Es wird über eine File-Verbindung auf eine Ressource im Netzwerk zugegriffen. Auf Windows-Systemen wird diese Verbindung über das net use-Kommando durchgeführt. Ausgehend von der Fehlermeldung ist der Nutzer, mit dem die KomA ausgeführt wird, jedoch nicht in der Lage diesen Befehl zu nutzen. Mögliche Lösungen: - Gegebenenfalls liegt ein Rechteproblem vor. Der Nutzer, mit dem die KomA ausgeführt wird, muss das Recht haben, das net use-Kommando auszuführen. Eventuell liegt eine fehlerhafte Version von importcom/connection_file.jar vor Prüfung, ob die Version kleiner 4.0.2.12 ist! Bei Netzwerkfreigaben sollte das SMB-Protokoll verwendet werden, dies wird über die Config.properties mit folgender Einstellung aktiviert: importcom.file.JCIFS = Y Die Einstellung importcom.file.JCIFS = Y wirkt global für alle File-Verbindungen. Wenn für eine File-Verbindung ein Nutzer (siehe Maske Kommunikationseinstellungen (MF_RIMPORT) in der Spalte Benutzername) definiert wurde, wird die SMB-Bibliothek verwendet. Soll dies für eine Verbindung nicht geschehen, muss dies explizit in der Oberfläche für diese Verbindung mittels JCIFS=N deaktiviert werden. Es ist außerdem zu prüfen, ob die Angabe des Nutzers überhaupt notwendig ist, denn normale Dateiverzeichnisse benötigen keine Benutzerauthentifizierung. Abbildung 5-23 File-Verbindung ohne Nutzung des SMB-Protokolls 5.4.3.2 jcifs.smb.SmbAuthException: Logon failure: account currently disabled Die Fehlermeldung kann auftreten, wenn der JCIFS-Modus aktiviert und der Benutzer gesperrt ist. 5.5 FTP-Konto Die zentralen Verbindungsparameter werden über ecount-Masken (MF_RIMPORT, MF_COMIMPORT) konfiguriert. Dabei ist das Feld Properties für die Angabe aller weiteren Parameter zuständig. Maske: Kommunikationseinstellungen Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 99 von 384 Abbildung 5-24: Maske Kommunikationseinstellungen: Beispiel - Robotron-FTP-Verbindungen Auf dem KomA-Server existieren 2 FTP-Ausprägungen, die über die Config.properties und den Parameter importcom.FTP.HandlerClass gesteuert werden. Aktuell gültige Parameterwerte sind: - de.robotron.ecount.importcom.ftp.ImportFTPConnection oder - de.robotron.ecount.importcom.ftp.ImportFTPConnection2 Hinter ImportFTPConnection verbirgt sich die ältere gnu.inet.ftp-FTP-Bibliothek. ImportFTPConnection2 nutzt als Basis die modernere FTP4J-Bibliothek. Es wird die Nutzung der ImportFTPConnection2 empfohlen, d.h. folgender Eintrag ist in der Datei Config.properties zu hinterlegen: importcom.FTP.HandlerClass=de.robotron.ecount.importcom.ftp.ImportFTPC onnection2 Eine Beispiel-Konfiguration ist in Anlage 6 (Beispielkonfiguration FTP-Empfang für EEX-Daten) hinterlegt. 5.5.1 Konfigurationsparameter Tabelle 5-10 zeigt die Parameter für den Empfang über FTP, die in der Config.properties unter importcom.FTP.<Parameter> definiert werden. Seite 100 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Tabelle 5-10: Parameter für Empfang über FTP Parameter/Beschreibung Standardwert FTPConnection2OldDataTransferBehaviour N Y/N. Setzt das Verhalten des passiven Datentransfers der FTP4j-Bibliothek (Version > 1.5) auf den Zustand einer Version 1.5 Tabelle 5-11 zeigt die Parameter, die über die ecount-Maske: Import > Kommunikationseinstellungen definiert werden. Die speziellen Einstellungen müssen im Feld Properties mit der Kombination <parameter>=<wert> hinterlegt werden. Beispiel: Abbildung 5-25: Maske Kommunikationseinstellungen: FTPConnection2OldDataTransferBehaviour Tabelle 5-11: Parameter für Empfang über Maske Kommunikationseinstellung Parameter/Beschreibung Standardwert CHECK_FILE_SIZE Y/N. Über den Parameter CHECK_FILE_SIZE=N kann die Dateigrößenprüfung zwischen FTP und KomA deaktiviert werden. Y COMPRESS* Y/N. Datenkomprimierung (MODE Z) kann damit aktiviert werden. Bandbreite kann damit auf Kosten von CPU eingespart werden. Beispiel:COMPRESS=Y passive Y/N, passive=N steht für aktives FTP N N Bei security=FTPS oder FTPES wird die Einstellung automatisch aktiviert = Y (true) security* FTPS - FTP over implicit TLS/SSL, anders als bei FTPES kann hier nicht über FTP die Verbindung „verhandelt“ werden. Der Client muss eine verschlüsselte Verbindung aufbauen, anderenfalls kann der Server die Verbindung sofort unterbrechen. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Seite 101 von 384 Standardwert FTPES - FTP over explicit TLS/SSL, hierbei muss der Client beim Server die verschlüsselte Verbindung anfragen. Wird dies nicht gemacht, kann der Server die Verbindung ablehnen, limitieren oder ohne Security fortführen (Einstellungssache beim Server) FTP - basic FTP security Beispiel: Security=FTPS timeout Timeout, bevor der FTP-Import bei (möglicher) Inaktivität abgebrochen wird. Angabe erfolgt in Sekunden 35 * Einstellung nur bei ImportFTPConnection2 möglich, d.h. wenn in der Datei Config.properties Folgendes definiert ist: importcom.FTP.HandlerClass=de.robotron.ecount.importcom.ftp.ImportFTPC onnection2 5.5.2 PROXY_TYPE=FTP_ACCT Umsetzung in eCount- 00041087 (lfd. Nr. 4516). Eine FTP-Verbindung wird über folgende Syntax aufgebaut: username@hostname proxyusername, Password, AccountPassword Gleichzeitig erfolgt die Verbindung über einen FTP-Proxy, der jedoch direkt angesprochen wird. Die Implementierung ist nur für ImportFTPConnection2 gültig d.h. auf der KomA muss in der Datei Config.properties Folgendes hinterlegt sein: importcom.FTP.HandlerClass=de.robotron.ecount.importcom.ftp.ImportFT PConnection2 Angabe in der Maske Kommunikationseinstellungen (MR_RIMPORT), es werden zwei Varianten unterstützt: Variante 1 - Im Feld Hostname wird die Adresse zum Proxy angegeben z. B. robotron-gate.robotron.de Im Feld Benutzername muss Nutzer@Host angegeben werden z. B. user123@ftp1.meteomedia.ch Im Feld Passwort wird das Passwort für den Nutzer (user123) angegeben bei Properties: PROXY_TYPE=FTP_ACCT PROXY_PASS=xyz PROXY_USER=123 Seite 102 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 5-26: Maske Kommunikationseinstellungen: Beispiel FTP_ACC Variante 2 - Im Feld Hostname wird die Adresse zum FTP-Host angegeben z. B. ftp1.meteomedia.ch Im Feld Benutzername wird der Nutzer eingetragen z. B. user123 Im Feld Passwort wird das Passwort für den Nutzer (user123) angegeben bei Properties: PROXY_TYPE=FTP_ACCT PROXY_PASS=xyz PROXY_USER=123 PROXY_HOST=rds-gate.rds.com PROXY_USER wird auch als Firewall user name bezeichnet [proxyusername], PROXY_PASS ist das Passwort von PROXY_USER [AccountPasswort]. 5.5.3 Dynamische Pfadangaben Mit eCount- 00056607 sind dynamische Pfandangaben möglich, siehe 5.1.7. 5.5.4 Probleme/Lösungen Zu allgemeinen Verbindungsproblemen siehe 7.4.6.1. 5.5.4.1 FTP Hardware Aufgrund unterschiedlichster Hardwarekonfigurationen kann keine exakte Aussage getroffen werden, welche Bibliothek auf welchem System am besten funktioniert. Durch Änderungen an Hardware oder neuen Einstellungen kann jedoch der Austausch der FTPConnection (Einstellung importcom.FTP.HandlerClass) Probleme beseitigen. Daher sollte geprüft werden, welche Einstellung in der Config.properties vorhanden ist und testweise die andere (aktuell gibt es nur zwei) verwendet werden. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 103 von 384 Variante 1: importcom.FTP.HandlerClass=de.robotron.ecount.importcom.ftp.ImportFTPC onnection2 Variante 2: importcom.FTP.HandlerClass=de.robotron.ecount.importcom.ftp.ImportFTPC onnection 5.5.4.2 Passives FTP Beim passiven FTP (auch „Passive Mode“) sendet der Client ein PASV- oder ein EPSV-Kommando, der Server öffnet einen Port und übermittelt diesen mitsamt IP-Adresse an den Client. Diese Technik wird eingesetzt, wenn der Server keine Verbindung zum Client aufbauen kann. Dies ist beispielsweise der Fall, wenn der Client sich hinter einem Router befindet, der die Adresse des Clients mittels NAT umschreibt oder wenn eine Firewall das Netzwerk des Clients vor Zugriffen von außen abschirmt. Die Einstellung wird für beide Varianten unter Import > Kommunikationseinstellungen > Feld Properties mit passive=Y (=Passives FTP) oder passive=N (= Aktives FTP) angegeben. ImportFTPConnection nutzt per Default immer aktives FTP. ImportFTPConnection2 nutzt aktives FTP für alle Verbindungen für die die security-Einstellung nicht angegeben oder auf FTP steht. Bei fehlerhaftem Verbindungsaufbau z. B. bei SocketTimeoutException: Read time out sollte ein Verbindungsaufbau mit modifizierter passive-Einstellung vorgenommen werden. 5.5.4.3 FTPListParseException (eCount- 00044835) Wenn beim FTP-Import eine FTPListParseException kommt, verwendet der FTP-Server eine, für die FTPBibliothek unbekannte, Antwortsyntax beim LIST-Befehl. FTP4J (ImportFTPConnection2) unterstützt aktuell (Version 1.7.2) folgende Antwortformate. - UNIX style and variants (i.e. MAC style) - DOS style - NetWare styles - EPLF - MLSD Als Workaround kann die Einstellung„USE_LIST_NAMES=Y in der Kommunikationseinstellung (MF_RIMPORT) aktiviert werden. Damit wird ein alternatives Vorgehen zur Ermittlung der Daten auf dem Server aktiviert. Dieses Verfahren ist aber weniger effizient und steht nur für die ImportFTPConnection2 zur Verfügung! 5.5.4.4 Fehler wegen falscher Dateigröße (eCount- 00044975) Der FTP-Server liefert falsche Dateigrößen. Damit wird der Import mit folgendem Fehler abgebrochen: Fehler beim Uebertragen der Datei Y 1 soll (2) Seite 104 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Über den Parameter CHECK_FILE_SIZE=N (Standard Y) in der Maske Kommunikationseinstellungen > Feld Properties kann die Dateigrößenprüfung zwischen FTP und KomA deaktiviert werden. Damit konnten auf dem betreffenden Kundensystem die Dateien geladen werden. (Es kann sich hierbei jedoch nur um einen Workaround handeln! Der Fehler ist primär beim FTP-Server angesiedelt.) Dieser Schalter ist nur bei der folgenden Einstellung in der Config.properties gültig: importcom.FTP.HandlerClass=de.robotron.ecount.importcom.ftp.ImportFT PConnection2 (nicht für ImportFTPConnection)! 5.5.4.5 FTP-Fehler: 425 Unable to build data connection Mit hoher Wahrscheinlichkeit ist zwischen KomA und Ziel-FTP eine Firewall-/Router Konfiguration eingestellt. Ob die Firewall- und Router-Regeln korrekt eingestellt sind, ist bspw. mit einem FTPProgramm überprüfbar, welches auf dem KomA-Server mit dem gleichen Nutzer wie die KomA ausgeführt wird und die FTP-Verbindung aufbauen kann. Ist dies der Fall, sollte überprüft werden ob das Verbindungskonto im Passiv-Modus betrieben wird (Standardeinstellung ist der aktive Modus). Dies kann global in der Config.properties via importcom.FTP.passive=Y vorgenommen werden oder direkt am Konto mit der Einstellung passive=Y. 5.6 SFTP-Konto Das SSH File Transfer Protocol oder Secure File Transfer Protocol (SFTP) ist eine für die Secure Shell (SSH) entworfene Alternative zum File Transfer Protocol (FTP), die Verschlüsselung ermöglicht. SFTP läuft standardmäßig auf den Port 22. 5.6.1 Konfigurationsparameter Neben den Standardeinstellungen (Nutzer, Passwort, Verzeichnis, Port, Host) können noch folgende weitere Einstellungen im Feld Properties vorgenommen werden. Tabelle 5-12 Parameter für Empfang über SFTP Parameter/Beschreibung PROXY_TYPE Konfiguration des Typs des Proxy, mögliche Werte sind HTTP, SOCKS4, SOCKS5 Global via Config.properties: importcom.sftp.PROXY_TYPE PROXY_HOST Host des Proxyservers Global via Config.properties: importcom.sftp.PROXY_HOST PROXY_PORT Port des Proxyservers Global via Config.properties: importcom.sftp.PROXY_PORT Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 105 von 384 Parameter/Beschreibung PROXY_USER Nutzer zur Anmeldung am Proxy Global via Config.properties: importcom.sftp.PROXY_USER PROXY_PASS Passwort zur Anmeldung am Proxy Global via Config.properties: importcom.sftp.PROXY_PASS SORT_ORDER Die Reihenfolge der zu importierenden Dateien kann über die Einstellung modifiziert werden, dabei stehen folgende Modi zur Verfügung: TIMESTAMP und TIMESTAMP_DESC TIMESTAMP Es wird aufsteigend nach dem geändert Zeitstempel (lastModifiedTime) sortiert First-In-First-Out (FIFO). TIMESTAMP_DESC Es wird absteigend nach dem geändert Zeitstempel (lastModifiedTime) sortiert Last-In-First-Out (LIFO) Default: Sortierung über den Dateinamen (Wird durch die SFTP-Bibliothek vorgegeben). Beispiel FIFO (per Properties in der Maske Kommunikationseinstellungen - MF_RIMPORT) SORT_ORDER=TIMESTAMP Beispiel LIFO (per Properties in der Maske Kommunikationseinstellungen - MF_RIMPORT) SORT_ORDER=TIMESTAMP_DESC Diese Einstellung kann auch global für alle SFTP-Konten über die Config.properties-Datei vorgenommen werden. Sollen alle Import-SFTP-Konten nach den FIFO Prinzip arbeiten, reicht folgende Einstellung in der Config.properties: importcom.sftp.SORT_ORDER=TIMESTAMP Wird die Einstellung sowohl global (Config.properties) als auch für das SFTP-Konto FIFO (per Properties in der Maske Kommunikationseinstellungen - MF_RIMPORT) eingestellt, so hat die Einstellung am Konto Vorrang. CONNECTION_TIMEOUT Ganzzahl zwischen -1 und 900 (Default 60), mit -1 wird das Feature deaktiviert. Gibt die Anzahl an Sekunden an die der Verbindungsaufbau dauern kann. Diese Funktion ist notwendig, da es bei Problemen beim SFTP-Verbindungsaufbau zum Stillstand des gesamten KomAs (Comimport) kam. Global via Config.properties: importcom.sftp.CONNECTION_TIMEOUT Beispielkonfiguration: Seite 106 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 5-27: Maske Kommunikationseinstellungen: Beispiel SFTP 5.6.2 Reihenfolge der abzuholenden Dateien Mit eCount- 00058770 wurde die Möglichkeit geschaffen, den Import in Reihenfolge nach chronologischer Zeit abzuarbeiten, siehe dazu die Einstellung SORT_ORDER in 5.6.1. 5.6.3 Dynamische Pfadangaben Mit eCount- 00056607 sind dynamische Pfandangaben möglich, siehe 5.1.7. 5.6.4 ImportCommunicationKeytool Ist eine einfache Kommandozeilen-Anwendung, die mit comimport_keytool.(cmd|sh) gestartet wird. Damit können die privaten Schlüssel, die ggf. für eine SFTP-Verbindung benötigt werden, auf der KomA hinterlegt werden. Die Implementierung basiert auf Drittbibliotheken, die seit einigen Jahren nicht mehr frei verfügbar sind. Aktuell sind keine Probleme bei der Nutzung dieser Bibliotheken bekannt. Die Bedienung der Kommandozeilen-Anwendung ist nicht mehr zeitgemäß. 5.6.4.1 Voraussetzungen Benötigte JAR-Dateien unter lib\3rd\j2ssh\ - putty-pk-1.1.0.jar openssh-pk-1.1.0.jar j2ssh-core.jar j2ssh-common.jar Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 107 von 384 Zusätzlich muss ein Passwort in der Config.properties für die Einstellung importcom.KeyStore.password hinterlegt werden. z. B. importcom.KeyStore.password=myUltraPasswort Das Skript comimport_keytool.cmd|sh kann von hier bezogen werden (Linux oder Windows). 5.6.4.2 Vorgehen Der private Schlüssel muss unverschlüsselt über die Kommandozeilenanwendung comimport_keytool.(cmd|sh) importiert werden. Über das Tool wird der private Schlüssel anschließend verschlüsselt abgelegt. Diese Verschlüsselung bietet definitiv keinen 100% Schutz! Daher sollten auf die KomA nur ausgewählte und berechtigte Personen Zugriff haben! Falls der Schlüssel in einem Keystore liegt, kann dieser z. B. mit dem Tool KeyStore-Explorer extrahiert werden. Beispiel: Abbildung 5-28: Privater Schlüssel mit KeyStore-Explorer als OpenSSL extrahieren (Teil 1) Abbildung 5-29: Privater Schlüssel mit KeyStore-Explorer als OpenSSL extrahieren (Teil 2) Anschließend muss die SFTP-Verbindung im robotron*ecount (MF_COMIMPORT) eingerichtet und „aktiv“ (Konto aktiviert) sein. Nun das Skript (comimport_keytool) starten: - l (über den Befehl List [l] werden die Verbindungen aufgelistet, ID des SFTP-Kontos suchen) i (über den Befehl Insert [i] wird der Schlüssel eingefügt) Die Datei wird anschließend standardmäßig in der KomA unter *KeyStore\ImportCom\ abgelegt, der Name der Datei beinhaltet dabei die ID des Kontos. Seite 108 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 5-30: Private Schlüssel für das SFTP-Konto mit der ID 7645 5.6.5 Probleme/Lösungen 5.6.5.1 Endaktion „umbenennen“: no action value for action RENAME In der Maske Importkommunikation (MF_COMIMPORT) ist im Reiter edit für ein Format der Aktionstyp umbenennen ausgewählt worden, jedoch wurde keine Angabe in der Spalte Aktionswert vorgenommen. 5.6.5.2 Endaktion „umbenennen“: Error renaming files to … no wildcard in action value In der Maske Importkommunikation (MF_COMIMPORT) ist im Reiter edit für ein Format der Aktionstyp umbenennen ausgewählt worden. In der Spalte Aktionswert steht eine Zeichenkette ohne Wildcard (*) (z. B. „done“). Aktuell wird jedoch nur die Umbenennung der Dateierweiterung unterstützt. Es ist also nicht möglich, alle importierten Dateien nach „done“ umzubenennen. Folglich muss der Aktionswert also ein führendes Wildcard (* aufweisen), z. B. „*.done“. 5.7 HTTP-Konto Die für das HTTP-Konto relevanten Einstellungen werden global über die user_env.cmd im KomA-Server eingestellt *KomA*\config. Die folgenden Parameter werden unterstützt: Tabelle 5-13 Parameter für das HTTP-Konto Parametername Beschreibung http.proxyHost The host name of the proxy server http.proxyPort The port number, default value is 80 A list of hosts that should be reached directly, bypassing the proxy. This is a list of patterns separated by |. The patterns may start or end with a * for http.nonProxyHosts wildcards. Any host matching one of these patterns will be reached through a direct connection instead of through a proxy. http.proxyUser Proxy-User (optional) http.proxyPassword Password for the Proxy-User (optional) Hinweise: Sollte https statt http genutzt werden, müssen alle Parameter mit https beginnen. Ist https als Protokoll ausgewählt und wurden die http-Parameter (http.proxyHost, http.proxyPort, ..) definiert, so werden die http-Parameter automatisch auf die https-Parameter übertragen. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 109 von 384 Beispiel: user_env.cmd: SET JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyHost=proxy.robotron.de SET JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyPort=80 SET JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.nonProxyHosts=*.robotron.de SET JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyUser=<user> SET JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyPassword=<password> Mit diesen Einstellungen werden HTTP- und HTTPS-Verbindungen über den Proxy-Server (proxy.robotron.de mit Port 80) aufgebaut. Alle Verbindungen zu *.robotron.de nutzen den Proxy-Server nicht. 5.7.1 NTLM-Support (NT LAN Manager) Die Unterstützung für NTLM ist in Java (ab Version 6) integriert. Soll neben dem Nutzer noch eine NTDomain übergeben werden, kann dies (ab eCount- 00052993) auch über folgende Config.propertiesEinstellungen realisiert werden. importcom.http.proxy_user=<user> importcom.http.proxy_password=<password> importcom.http.nt_domain=<domain> Sind diese Einstellungen spezifiziert, werden die Einstellungen aus der user_env ignoriert! Bezüglich der Nutzung von Proxies existieren aktuell jedoch einige Einschränkungen. So ist es beispielsweise nicht möglich eine eigene Nutzer/Passwort-Kombination mitzuteilen, wenn ein WindowsRechner genutzt wird und mit einem Domain-Nutzer gearbeitet wird. Auszug aus der Java-Dokumentation: In fact, if you are running on a Windows machine as a domain user, or, you are running on a Linux or Solaris machine that has already issued the kinit command and got the credential cache. The class MyAuthenticator will be completely ignored Eine Lösung kann hier nur auf Kundenseite umgesetzt werden, bspw.: - Proxy und Firewall lassen die jeweilige URL oder den jeweiligen Domain-User zu, ggf. kann auch anstelle der HTTP-Verbindung auf eine FTP-Adresse oder ähnliches gewechselt werden. Es gibt zahlreiche Bug-Meldungen bei Oracle (Java) bezüglich NTLM. Getestet wurde mit Java 6, ggf. treten diese Probleme in Java 8 (oder später in Java 9) nicht mehr auf. 5.7.2 Dynamische Pfadangaben Mit eCount- 00056607 sind dynamische Pfandangaben möglich, siehe 5.1.7. Seite 110 von 384 5.7.3 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Beispiel HTTP-/HTTPS-Verbindung einrichten Das Beispiel basiert auf einer HTTP-Adresse für die EEX-Börse. Definition der HTTPS-Verbindung Maske MF_RIMPORT (Import > Kommunikationseinstellungen). Es wird eine Verbindung vom Typ https mit Hostname, Benutzername, Passwort, Port und Festlegung, ob nur gelesen werden soll, erstellt. Abbildung 5-31: Maske Kommunikationseinstellungen > Reiter Verbindungen Der Rest der URL wird anschließend in MF_COMIMPORT für das jeweilige Format definiert! Festlegung der Importformate Über den Reiter Importformate wird das Zielverzeichnis, also der Ablageort der abzuholenden Dateien auf dem KomA-Server, definiert. Bei EEX ist die Kurzbezeichnung EEX und die Daten sollen im Ordner import/EEX (auf dem KomA-Server) abgelegt werden. Als Name kann ein beliebiger, sprechender Text ausgewählt werden. Die Kurzbezeichnung ist immer der Name, der auch in der KomA verwendet wird (datenimport.ini). So kann z. B. für EEX in der KomA Folgendes hinterlegt sein: #EEX – Nur SPOT-Historien aus dem Jahr 20** Energy_spot_historie_20??.xls EEX import/EEX Abbildung 5-32: Maske Kommunikationseinstellungen > Reiter Importformate Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 111 von 384 Konfiguration der automatischen Datenabfrage Maske MF_COMIMPORT (Import > Kommunikationsautomatik) Abbildung 5-33: Maske Importkommunikaton Hierbei wird bei Verbindung die soeben angelegte ausgewählt. Des Weiteren werden die jeweiligen Formate bestimmt, die über die Verbindung abgearbeitet werden sollen. Im Beispiel werden mehrere EEX-Dateien abgefragt, die auch unter verschiedenen Adressen (URL) anzusprechen sind. Die Angabe der korrekten URL erfolgt hierbei im Feld Verzeichnispfad. Die Einstellung Server ist in Bezug zum KomA-Server wichtig. Über die anzugebende Server-ID kann ein KomA-Server direkt an die Importverbindung gekoppelt werden. Dies geschieht über die Datei Config.properties im KomA-Server bei der Einstellung importcom.comserver. Beispiel: Importcom.server = 1 5.7.4 Probleme/Lösungen 5.7.4.1 Der Downloadpfad enthält Leerzeichen Leerzeichen im Pfad führen zu Problemen bei der Abfrage der Datei. Leerzeichen werden in aller Regel als Ende der URL interpretiert, nachfolgende Zeichen würden ignoriert bzw. führen zu einem Fehler. Mit der URL-Kodierung kann ein Leerzeichen durch die Zeichenfolge %20 übergeben werden. Sollten Pfade also Leerzeichen aufweisen, sollten diese immer kodiert werden. falsch: /files/Current Rates/big_excel_file.xlsx richtig: /files/Current%20Rates/big_excel_file.xlsx Seite 112 von 384 5.7.4.2 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 No subject alternative DNS name matching x found Im konkreten Fall trat das Problem bei der automatisierten Abfrage des EEX-HTTPS-Servers auf und die Fehlermeldung lautete: java.security.cert.CertificateException: No subject alternative DNS name matching mis.eex.com found Beim HTTPS-Verbindungs-Aufbau zu einem Server wird geprüft, dass der Hostname im Zertifikat den Hostnamen des Servers übereinstimmt. Es ist nicht ausreichend, nur dem Zertifikat zu vertrauen. Die Überprüfung wird wie folgt durchgeführt: - Das Zertifikat enthält den DNS-Namen (dies ist eine Standarderweiterung) für den Hostnamen Schlägt diese Prüfung auf den DNS-Namen fehl, wird die CN (vom Antragssteller) mit dem Hostnamen verglichen. Werden beide Prüfungen negativ abgeschlossen, wird die Fehlermeldung vom Java erzeugt. Im konkreten Beispiel wurde festgestellt, dass der DNS (https://mis.eex.com) funktioniert, der Zugriff via IP (https://85.239.110.71/) jedoch ein falsches Serverzertifikat lieferte. Dies erzeugt den Fehler. Lösung: Mit der Kommunikationseinstellung (in MF_RIMPORT): DISABLE_HOSTNAME_VERIFIER=Y beziehungsweise global für alle HTTPS-Verbindungen per Config.properties: importcom.https.DISABLE_HOSTNAME_VERIFIER=Y kann die Prüfung deaktiviert werden. 5.7.4.3 Übertragungsfehler: java.net.ConnectException: Connection timed out: connect Der Fehler sagt nur aus, das die KomA keine Verbindung aufbauen konnte. Mögliche Ursachen: - Nicht gesetzter Proxy-Server o Die Proxy-Einstellungen sind in der KomA zu prüfen, dies wird unter */config/user_env.(cmd|sh) definiert und sieht bspw. so aus: SET JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyHost=<proxy-Host> SET JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyPort=<proxy-Port> SET JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyUser=<user> SET JAVA_OPTIONS=%JAVA_OPTIONS% -Dhttp.proxyPassword=<password> - Wird ein Proxy verwendet ist mindestens die Angabe von proxyHost und proxyPort erforderlich! Ist der Betriebssystemnutzer, der den Import startet, berechtigt eine HTTP-Verbindung aufzubauen oder wird das durch Sicherheitsrichtlinien oder Firewall-Einstellungen verhindert? Ist die aufgerufene HTTP-Adresse korrekt und erreichbar oder ggf. temporär offline? Lösung: Auf dem KomA-Server, bei dem die Fehlermeldung auftrat, muss der Nutzer überprüft werden mit dem der Datenversand (datenversand.cmd oder datenversand.sh) gestartet wird. Mit der jeweiligen IT-Abteilung muss dann geklärt werden, ob dieser Nutzer auf das Internet zugreifen darf. Wenn nicht Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 113 von 384 müssen die entsprechenden Berechtigungen von der IT-Abteilung gegeben werden. Des Weiteren sollte die IT-Abteilung einen Hinweis auf die Verwendung eines Proxy-Servers sowie eines Proxy-Nutzers inklusives Passwortest geben können. 5.8 Probleme/Lösungen/Hinweise 5.8.1 Bereinigungsroutine (Comimport - Importtabellen) Mit eCount-00041787 besteht die Möglichkeit, über den Job COM_IMPORT-Tab. bereinigen (in der Gruppe Import und mit ID 002735) folgende Tabellen automatisch zu bereinigen. Der Job sollte unbedingt eingerichtet werden, um den Tabellenumfang zu reduzieren und somit die Performance zu verbessern. - COM_ERROR COM_MESSAGE COM_MESSAGE_ATTACH COM_MESSAGE_DETAIL Auszug aus den Release-Notes (eCount-00041787): Datensätze der Tabelle COM_ERROR werden gelöscht, wenn deren ERROR_TIME < SYSDATE - die in der globalen Einstellung LIFESPAN_ERRORS angegebene Anzahl an Monaten ist. Datensätze der Tabelle COM_MESSAGE werden gelöscht, wenn deren MESSAGE_RECEIVED < SYSDATE - die in der globalen Einstellung LIFESPAN_MESSAGES angegebene Anzahl an Monaten ist. Detail-Datensätze in COM_MESSAGE_DETAIL und COM_MESSAGE_ATTACH werden entfernt. Sind die globalen Einstellungen nicht gesetzt, wird nicht gelöscht. Das Protokoll "COM_IMPORT - Bereinigungsroutine" wird geschrieben. Globale(r) Parameter: LIFESPAN_ERRORS (max. 60) LIFESPAN_MESSAGES (max. 60) 5.8.2 Comimport-Importformat vs Datenimport-Format (datenimport.ini) Bei der Nutzung des Comimports und des Datenimports existiert ein Feature, welches zu einer potentiellen Fehlerquelle führen kann. Das Feature dient dazu, dass mehrere Dateien von unterschiedlichen Formaten in einem einzigen Ordner abgelegt werden können und beim Datenimport anschließend über unterschiedliche Filter oder/und Konfigurationen importiert werden können. Kurz: Der Formatname, der vom Comimport kommt, gilt stärker als der Name, den der Nutzeraus der datenimport.ini ermittelt. Ist im Importkonto die ZIP-Funktionalität aktiviert (siehe 5.1.4.4), werden die abgeholten Daten in der Zip-Datei mit zusätzlichen Kommentaren versehen, die anschließend vom Datenimport ausgewertet werden. Zu diesen Informationen zählt unter anderem das im ecount definierte Importformat (siehe 5.1.3). Dieses Importformat wird anschließend vom Datenimport als erstes ausgewertet und falls vorhanden angewandt! Dies kann zu einem ungewünschten Verhalten führen, wenn das Format im Comimport vom Format im Datenimport (datenimport.ini) abweicht, da hier oft erwartet wird, dass die datenimport.ini den vorgebenden Charakter besitzt. Seite 114 von 384 5.8.2.1 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Beispiel Als Importformat ist „EDI_X“ mit dem Zielverzeichnis import\EDI definiert. Im entsprechenden Importkonto ist die ZIP-Funktionalität aktiviert. Dies hat zur Folge, dass alle Dateien als ZIP-Kommentar unter anderem den Eintrag FORMAT=EDI_X enthalten. Abbildung 5-34: Importformat - EDI_X Dieses Importformat wird anschließend verwendet, es wird auch die ZIP-Funktionalität aktiviert! Abbildung 5-35: Importkonto mit aktivierter ZIP-Funktionalität Abgeholte Daten werden nun als ZIP-Dateien (mit erweiterten Kommentaren) in der verwendeten KomA unter import\EDI abgelegt. Im nachfolgenden Bild wurde eine ZIP-Datei geöffnet. Abbildung 5-36: Datenablage im KomA Im Datenimport (datenimport.ini) ist Folgendes konfiguriert: *.txt EDI import/EDI Alle Text-Dateien aus dem Ordner import/EDI sollen also über die Datenquelle EDI importiert werden! Eine weitere wichtige Bedingung ist das Vorhandensein nur einer Datei EDI_X.properties und EDI.properties unter config/import! Wird der Datenimport gestartet, wird die ZIP-Datei automatisch eingelesen. Anschließend werden die Dateien, die auf den Dateifilter (*.txt) passen (außer die IMPORT_DATA.TXT, diese wird standardmäßig immer ignoriert), importiert. Dabei wird der ZIP-Kommentar gelesen und das FORMAT extrahiert. Anschließend wird nach einer Properties-Datei, die auf das extrahierte Format passt, gesucht und diese, falls vorhanden, verwendet. Dabei ergeben sich nun folgende Varianten: Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 115 von 384 1. EDI_X.properties nicht vorhanden: Wird keine, auf das Format passende, Properties-Datei gefunden, wird das Format des Datenimports verwendet, dies wird auch im Log protokolliert: Warning: no format EDI_X configured, using directory default EDI 2. EDI_X.properties vorhanden: Es werden alle Einstellungen der gefundenen Properties-Datei verwendet. Hierbei kann es zu folgenden Fehlern kommen: o o In der Properties-Datei ist über die Einstellung HandlerClass ein anderes Format definiert, welches nicht zu den importierenden Dateien passt. Bei Formaten, welche über den Importkonfigurator oder den EcountLoader realisiert werden, wird in einer anderen Properties-Datei auch meist eine andere Konfiguration gezogen. Um eventuellen Problemen vorzubeugen muss sichergestellt werden, dass die Formate (Comimport und Datenimport) übereinstimmen. Alternativ kann auch die ZIP-Funktionalität deaktiviert werden, wenn die Voraussetzungen, z. B. dass die Daten nicht GZ-komprimiert empfangen werden (siehe 5.1.4.4), erfüllt sind. 5.8.2.2 Weitere Beispiele Diese kurzen Beispiele sollen verdeutlichen, warum ggf. gesetzte Einstellungen nicht gezogen werden. Variante: Format Comimport ist unterschiedlich zum Format des Datenimportes. datenimport.ini: *.txt EDI import/INVOIC Importformat (Kurzbezeichnung): INVOIC config/import: keine INVOIC.properties vorhanden EDI.properties vorhanden Ergebnis: Als Importformat wird INVOIC verwendet. Es gibt keine passende Properties–Datei, die EDI.properties wird nicht verwendet, damit werden die im Quell-Code hinterlegten Default-Werte genutzt. Variante: Format Comimport ist gleich zum Format des Datenimportes, es existiert jedoch keine passende Properties-Datei. datenimport.ini: *.txt INVOIC import/INVOIC Importformat (Kurzbezeichnung): INVOIC config/import: keine INVOIC.properties vorhanden EDI.properties vorhanden Ergebnis: Format aus dem Comimport stimmt mit dem Format der datenimport.ini überein, jedoch ist keine INVOIC.properties vorhanden, somit werden die im Code hinterlegten Default-Werte genutzt. Das Format INVOIC ist jedoch auf der KomA nicht als EDI-Schnittstelle bekannt. Variante: Format Comimport ist unterschiedlich zum Format des Datenimportes, es gibt jedoch Properties-Dateien für beide Formate. datenimport.ini: *.txt EDI import/INVOIC Seite 116 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Importformat (Kurzbezeichnung): INVOIC config/import: INVOIC.properties vorhanden EDI.properties vorhanden Inhalt der INVOIC.properties: ALIAS = EDI Ergebnis: Es wird das INVOIC-Format verwendet, da dieses vom Comimport vorgegeben wurde. Gleichzeitig wird in der INVOIC.properties auf die EDI.properties verwiesen. Die EDI.properties wird eingelesen und die darin definierten Einstellungen werden ausgewertet. 5.8.2.3 Änderung mit eCount- 00053244 Mit eCount- 00053244 wurde die Funktionalität abgeändert. Wird ein Importformat vom Comimport vorgegeben so wird geprüft, ob in der Datei datenimport.ini das Format auch für das Verzeichnis definiert wurde. Es wird hierbei eine Gruppierung anhand des Quellverzeichnisses durchgeführt, beim ersten passenden Format wird dieses verwendet. Die Logik lässt sich leichter anhand eines Beispiels demonstrieren: Eine Datei wird vom Comimport als ZIP-Datei mit dem Format EDI_ABC abgelegt. Der Eintrag in der Datei datenimport.ini lautet: *.txt EDI import_edi. Vor der Änderung wurde stillschweigend EDI_ABC als Format verwendet, damit wurde auch die Datei EDI_ABC.properties geladen (falls vorhanden), was unter Umständen zu ungewünschten Effekten führte. Nach der Änderung (mit dem Update aus eCount- 00053244) wird ein Fehlertext im Protokoll geschrieben („Format EDI_ABC vom Comimport passt auf kein Format in der datenimport.ini für das Verzeichnis: import_edi“) und es wird das Format aus der datenimport.ini verwendet (hier also EDI). Sind mehrere Konfiguration im Datenimport für ein Quellverzeichnis vorhanden, werden alle durchsucht und auf ein passendes Format überprüft (die Prüfreihenfolge ergibt sich hierbei aus der Hierarchie der Einträge in der datenimport.ini).Sind beispielsweise folgende Einträge in der datenimport.ini vorhanden MSCONS*.txt EDI_ABC import_edi *.txt EDI import_edi wird EDI_ABC als Format verwendet, wenn die zu importierende Datei auf den Dateinamen-Filter passt (also mit MSCONS beginnt) anderenfalls wird EDI verwendet. 5.8.3 Monitoring – Importkonto Folgende Abfrage liefert die Konten die laut Konfiguration seit mehr als 10 Minuten „über der Zeit“ sind. SELECT * FROM (SELECT (SYSDATE - LAST_CHECKED) * 1440 SECONDS, CHECK_INTERVAL (SYSDATE - LAST_CHECKED) * 86400 SCHEDULE_SECONDS, ID, COM_SERVER, CAC.NAME FROM COM_ACCOUNT CAC WHERE CAC.ACTIVE = 'J' AND SYSDATE > CAC.ACTIVE_FROM AND (CAC.ACTIVE_UNTIL IS NULL OR SYSDATE < ACTIVE_UNTIL)) WHERE SCHEDULE_SECONDS < (-10*60) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 117 von 384 6 Datenimport Der Datenimport setzt im Normalfall den Datenempfang (Comimport) voraus. Es kann allerdings auch ohne den Datenempfang gearbeitet werden, indem die zu importierenden Dateien direkt in die Importverzeichnisse gestellt werden. Dabei muss nur darauf geachtet werden, dass die Dateien während des Schreibens in das Verzeichnis eine temporäre Datei-Endung erhalten (z. B. *.tmp), da der Datenimport-Job zu importierende Dateien z. B. anhand ihrer Datei-Endung ermittelt. Das kann dazu führen, dass versucht wird, noch in Bearbeitung befindliche Dateien zu importieren wenn diese schon den Originalnamen (z. B. UTILMD_DATEI.txt) besitzen aber noch nicht vollständig geschrieben wurden. Abbildung 6-1: Datenfluss Import 6.1 Hinweise zur Zeitzone der Import-Dateien Beim Import von Datumswerten wenden die meisten Importfilter folgende Logik an. Aus der Import-Datei wird der Datumswert extrahiert, dass kann eine Zeichenkette in einer CSV, Excel oder XML-Datei sein. Diese Zeichenkette wird in ein Date-Objekt konvertiert, dies ist ein Objekt in Java welches aus einer Zeichenkette und ggf. unter Beachtung einer Zeitzone erstellt wird. Dieses DateObjekt wird anschließend an die Import-API übergeben, hierbei findet wieder eine Konvertierung des Date-Objektes in eine Zeichenkette statt. Dabei wird das Date-Objekt mit folgendem Datumsformat behandelt (yyyyMMddHHmmssZZZ). Als Zeitzone verwenden hier die meisten Filter Europe/Berlin! Nur einige weniger Importfilter (z.B. PRICES_SKHandler oder der XML_RUSHandler) nutzen die Zeitzone der KomA, also der Wert aus der Einstellung USER_TIMEZONE der über die user_env.(cmd|sh) konfiguriert werden kann. Bei internationalen Systemen führt das zu Problemen wenn in dem Land beispielsweise keine Umschaltstunde mehr existiert (z.B. in Russland, hier kann es zu Datenverlust kommen) oder die Zeitzone im System („System timezone“, „System-Sommerzeit-Zeitzone“) anders definiert wurden (was wiederrum Probleme bei der Weiterverarbeitung und Anzeige macht – hier spielen dann wiederrum Seite 118 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 ecount Parameter wie NEUE_ZEITZONENRECHNUNG und KOMPATIBILITAET_ABLAGEZEITZONE eine Rolle). Aus diesen Grund ist bei der Entwicklung von kundenspezifischen Filtern für internationale Kunden zu prüfen, ob die interne Logik als Zeitzone Europe/Berlin verwendet oder den Wert aus der KomAEinstellung USER_TIMEZONE. Die Einbeziehung von erfahrenen Entwicklern ist hier also unbedingt erforderlich! Beispiel – Übergabe des Wertes an die Import-API: In der XML wird folgende Zeitstempel geliefert: 2015-09-12T00:00:00.000+01:00 Die Übertragung an die Import-API erfolgt wie folgt: SET USER_TIMEZONE=Europe/Berlin: 20150912013000+02 SET USER_TIMEZONE=Europe/London: 20150912003000+01 SET USER_TIMEZONE=Europe/Moscow: 20150912023000+03 Achtung: Der Importkonfigurator unterstützt die USER_TIMEZONE aus der user_env.(cmd|sh) nur wenn FILTER = CSV2 definiert wurde. Bei FILTER = CSV erfolgt die Übergabe immer mit der Zeitzone Europe/Berlin! 6.2 Konfigurationsparameter Die Datenimport-Parameter werden über die Datei Config.properties gepflegt. Tabelle 6-1: Parameter für Datenimport Parameter/Beschreibung Standardwert import.archiveZip Y/N. Vom Import verarbeitete Dateien als ZIP-Archive gemeinsam mit Protokollen archivieren. Y import.createImportDirs Y/N. Nicht existierende Import-Verzeichnisse beim Start anlegen Y import.createImportDoneDirs Y/N. Archiv-Unterverzeichnisse (done- und errVerzeichnisse) unter den Import-Verzeichnissen beim Start automatisch anlegen mittels Y. N import.daemonMode Y/N. Soll der Datenversand als permanent laufender Hintergrundprozess gestartet werden? N Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung import.daemonPollInterval Polling-Intervall in Sekunden für Daemon-Job Seite 119 von 384 Standardwert 10 import.dbErrorDir Unterverzeichnis, in dem Dateien abgelegt werden sollen, bei denen der Import aufgrund von Datenbank-Fehlern gescheitert ist dbError import.doneDir Verzeichnis, in dem fehlerfrei importierte Dateien archiviert done werden sollen (unterhalb des Import-Verzeichnisses) import.doneErrorsDir (Zeichenkette) Unterverzeichnis, in dem fehlerhaft importierte Dateien abgelegt werden sollen. done import.doneWarningsDir (Zeichenkette) Unterverzeichnis, in dem mit Warnungen importierte Dateien abgelegt werden sollen done import.errorDir Unterverzeichnis, in dem Dateien abgelegt werden sollen, bei denen der Import gescheitert ist import.logfile LOG-Datei für Datenimport import.logfile.daemon LOG-Datei für Datenimport im Daemon-Modus import.logfile.maxSize Maximale Größe der LOG-Datei in bytes err datenimport.log datenimport_daemon.log 500000 import.max_file_retries Maximale Anzahl von Versuchen, Dateien mit DatenbankFehlern zu importieren 3 import.max_import_files Maximale Anzahl zu importierender Dateien (-1 = unbegrenzt, 0 wird wie -1 interpretiert) -1 import.port Port für Sperrbehandlung - freier lokaler TCP-Port, auf dem der Datenimport die Kommunikation mit anderen common.base_port+1 Seite 120 von 384 Parameter/Beschreibung Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Standardwert laufenden Instanzen zur Behandlung von Import-Sperren durchführt (Vermeidung doppelter Instanzen) import.port.daemon Port für Sperrbehandlung im Daemon-Modus import.prtInTempDir Y/N. Protokolle im KomA-Temp-Verzeichnis anlegen common.base_port+4 N import.run_scheduler Y/N. Startet nach jedem Dateiimport den datenbankseitigen Import-Job für das entsprechende Format (ungünstig bei vielen kleinen Import-Dateien). N Technisch: Es wird ec_sys.pkg_import_alg. prc_load_all_data(?) aufgerufen. import.shutdown_command Kommando zum Beenden des Imports nach aktueller Aktion SHUTDOWN über den TCP/IP-Listener import.sort Der Datenimport importiert die Dateien standardmäßig in der Reihenfolge, die anhand des Dateinamens bestimmt wird. Seit eCount- 00052661 existiert auch die Möglichkeit, mittels import.sort=LAST_MODIFIED die Reihenfolge nach dem Geändert-Datum (aufsteigend) zu sortieren. Damit werden die Dateien in der Reihenfolge importiert, wie vom Comimport vorgegeben (die erste Datei vom Comimport wird auch als erste Datei vom Datenimport betrachtet). Dies entspricht den FIRST IN FIRST OUTVerfahren (FIFO). Auch mit Java 6 steht kein direkter Zugriff auf das Erstellt-Datum zur Verfügung. Werden die Daten jedoch per Comimport abgeholt, entspricht das Erstellt-Datum dem Geändert-Datum. import.zip_name_encoding Codepage für Dateinamen beim Schreiben in ZIP-Dateien bei ausländischen Systemen (z. B. Russland) muss diese Einstellung angepasst werden! import.zipDoneDir Cp850 zip-done Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Seite 121 von 384 Standardwert Unterverzeichnis, in das verarbeitete ZIP-Dateien verschoben werden import.zipErrorDir Unterverzeichnis, in dem fehlerhafte Dateien aus verarbeiteten ZIP-Dateien abgelegt werden zip-error import.zipInvalidDir Unterverzeichnis, in das nicht verarbeitbare ZIP-Dateien verschoben werden importcom_format_aliases Konfigurationsdatei für Format-Aliase aus ImportKommunikation zip-invalid config/ importcom_format_aliases.ini import.after_zipfile_import_procedure Nach dem Import einer ZIP-Datei besteht nun die Möglichkeit eine PL/SQL-Funktion aufzurufen. Diese Funktion muss genau 1 IN-Parameter besitzen vom Typ COM_MESSAGE.ID (NUMBER). Die Funktion wird nur aufgerufen wenn eine COM_MESSAGE.ID in der ZIP-Datei vorhanden ist. Die Funktion muss an EC_XCH gegranted sein! Beispiel: import.after_zipfile_import_procedure=PKG_TEST.test(?) 6.2.1 Benachrichtigung E-Mail für die Import-Datei Es besteht die Möglichkeit, bei verschiedenen Protokollereignissen beim Datenimport eine Info-E-Mail an den Absender der Daten oder an eine festgelegte E-Mail-Adresse zu schicken und dabei auch die Originaldatei mit anzuhängen. Dafür existiert ein Satz allgemeiner Parameter, der für alle ImportFormate gilt. Dieser Parametersatz ist unter dem Hauptparameter ERRORHANDLER zusammengefasst. Tabelle 6-2: Parameter für Info-E-Mail Parameter/Beschreibung Standardwert ERRORHANDLER Mit der Einstellung EMAIL_REPLY wird der E-Mail-Antwort-Handler aktiviert. ERRORHANDLER.attachFileAsZip Y/N. Angehängte Import-Datei mit ZIP-Format komprimieren Y Seite 122 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung ERRORHANDLER.attachOrigFile Y/N. Original-Import-Datei an Antwort-Mail anhängen Standardwert N ERRORHANDLER.defaultAddress Standard-Antwort-Adresse, falls kein Absender ermittelt werden konnte. FILE://errorReply/ Beispiel: importfehler@robotron-ecount.de ERRORHANDLER.encoding Die Codierung, die für den Dateinamen und die Datei-Kommentare verwendet werden. Cp850 ERRORHANDLER.fromAddress Absender-Adresse, wenn nicht angegeben und kein Wert in der Config.properties (exportmail.from) definiert wurde, wird datenversand@robotron-ecount.de als Default verwendet. ERRORHANDLER.orginalSubject Y/N. Mit Y wird als Betreff „RE: <BetreffDerOrginalMail>“ verwendet. ERRORHANDLER.processDebug Y/N. Debug-Meldungen in den E-Mail-Text ausgeben ERRORHANDLER.processErrors Y/N. Fehlermeldungen in den E-Mail-Text ausgeben ERRORHANDLER.processWarnings Y/N. Warnungen in den E-Mail-Text ausgeben ERRORHANDLER.replyAlways Y/N. Auch im Erfolgsfall eine Antwort-E-Mail generieren N Y Y Y Y Mit der Einstellung ERRORHANDLER = EMAIL_REPLY wird der Antwortversand zuerst einmal aktiviert. Es wird nun unter den verschiedenen einzustellenden Bedingungen eine Antwort-E-Mail erzeugt. Der Adressat wird über den Absender der evtl. zugehörigen empfangenen E-Mail ermittelt. Dies ist nur möglich, wenn die importierte Datei in einem von der Komponente Import-Kommunikation stammenden ZIP-Archiv liegt, indem eine Verknüpfung zu den Datenbankinformationen über die zugehörige empfangene E-Mail-Nachricht abgelegt ist. Kann auf diese Weise keine Ziel-Adresse ermittelt werden, wird die unter ERRORHANDLER.defaultAddress angegebene Adresse verwendet. Weiterhin kann noch entschieden werden, ob die Originaldatei mit an die Antwort-E-Mail angehängt werden soll (dies wird über die Format-Konfiguration ERRORHANDLER.attachOrigFile = Y aktiviert). Bei sehr großen Dateien, die z. B. über eine Verzeichnis-Schnittstelle in das System geholt wurden, kann dies u. U. den Versand der Antwortnachricht aufgrund von Größenüberschreitungen beim E-Mail-Server verhindern. Durch Kompression der zurückgesendeten Datei kann die Grenze hierfür zwar Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 123 von 384 verlagert werden, aber das Problem besteht dennoch. Diese Tatsache sollte dem Empfänger solcher Nachrichten dabei bewusst sein. Die Möglichkeit der Entscheidung besteht nur, wenn Import-Files nicht als ZIP-Files importiert werden. ERRORHANDLER = EMAIL_REPLY ERRORHANDLER.processErrors = Y ERRORHANDLER.processWarnings = Y ERRORHANDLER.defaultAddress = shelagin_d@tii.ru ERRORHANDLER.fromAddress = shelagin_d@tii.ru ERRORHANDLER.encoding = UTF-8 Abbildung 6-2: Beispiel einer Fehler-Antwort-Konfiguration 6.3 datenimport.ini Die datenimport.ini ist die zentrale Steuerdatei für den Datenimport-Job. Im Grunde ist dies eine normale Textdatei (Zeichenkodierung ISO-8859-1) mit einer fest definierten Syntax. So wird jeder zu importierende Ordner in einer separaten Zeile angegeben. Jede Zeile enthält mindestens 3 Konfigurationsangaben, die durch ein Leerzeichen voneinander getrennt werden. Die Parameter haben folgende Bedeutung: 1. Datei-Filter: Es werden alle Dateien verarbeitet die auf den eingestellten Filter passen. o o o o o 2. Format-Kürzel: Kürzel für das angegebene Dateiformat o 3. Der Filter kann sowohl auf den Dateinamen als auch auf die Dateierweiterung definiert werden. Es kann mit Wildcards (*) für beliebig viele Zeichen oder (?) für ein beliebiges Zeichen gearbeitet werden. Angaben sind case-insensitive(Groß/Kleinschreibung wird nicht berücksichtigt) ZIP-Dateien müssen nicht angegeben werden (ZIP-Dateien werden automatisch entpackt, jedoch keine GZIP-Dateien!) Kommen Leerzeichen in der Dateimaske vor, müssen diese in "" eingeschlossen werden. Name des KomA-Importfilters, der die Verarbeitung durchführt. Quellverzeichnis: Verzeichnis, das nach zu importierenden Dateien durchsucht wird o o Die Angabe kann relativ zum Ordner der KomA (Basisverzeichnis, in dem die KomA installiert wurde) sein oder absolut Verzeichnisse werden nicht rekursiv durchsucht. Beispiele: - Import von (ausschließlich) XML-Dateien über die Datenquelle ABC aus dem KomAUnterverzeichnis import/ABC *.xml ABC import/ABC - Dateien, die mit MSCONS beginnen (Datenquelle EDI, Verzeichnis import/EDI) Seite 124 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 MSCONS*.* EDI import/EDI - Dateien, die mit MSCONS beginnen und die Dateierweiterung txt besitzen MSCONS*.txt EDI import/EDI - Import von Excel-Dateien (XLS und XLSX) über die Datenquelle A aus dem KomAUnterverzeichnis import/A *.xls A import/A *.xlsx A import/A - EEX Excel-Datei, die mit dem Namen energy_spot_historie_20 beginnt, auf XLS endet und die max. 2 Zeichen zwischen Dateierweiterung und Anfangsdateinamen hat. energy_spot_historie_20??.xls EEX import/EEX Hinweise: Für Testzwecke kann ein weiteres Verzeichnis als 4. Parameter in der datenimort.ini angegeben werden, in dem in einem Zwischenschritt vor dem Import die entstandenen XML-Dateien abgelegt werden. Diese Option ist nur für Diagnosezwecke gedacht. Beispiel: *.xml ABC import/ABC import/ABC/diagnose Die Abarbeitungsreihenfolge ist hierarchisch von oben nach unten. Sprich die Reihenfolge in der datenimort.ini ist auch die letztendliche Reihenfolge während der Verarbeitung. Die Zeichenkodierung der Datei ist ISO-8859-1. Beim Editieren dieser Datei muss darauf geachtet werden, dass die Zeichenkodierung nicht geändert wird (z. B. auf UTF-8, einige Texteditoren machen das standardmäßig). Unter Linux werden die Pfadangaben mit / und nicht mit \ vorgenommen. Die KomA korrigiert das zur Laufzeit zwar automatisch, erzeugt dabei aber auch immer Warnungen im Log nach dem Motto „Correcting wrong path x\y“. Unter Linux spielt auch die Groß- und Kleinschreibung eine Rolle (anders als bei Windows). Wenn das Format in der datenimort.ini also SWF/SST_VNB lautet, die Properties-Datei aber sst_vnb.properties heißt, dann wird die Datei unter Windows aber nicht unter Linux gefunden und der Import bricht mit Fehlern ab. 6.3.1 Strukturierung der Import-Dateien (z.B. nach Kunden) Es ist möglich unter config/import weitere Unterordner anzulegen um die Übersicht zu erhöhen. Beispiel: Unter *KomA*\config\import\SWF wird die Datei SST_VNB.properties abgelegt. In der datenimport.ini muss anschließend der 2. Parameter (das Format) um den Ordner erweitert werden SWF\SST_VNB, die gesamte Zeile kann beispielsweise so aussehen: *.csv SWF\SST_VNB import\CSV_SWF\VNB Durch die Änderung des Formatkürzels in der datenimport.ini muss unter Umständen in der zugehörigen Properties-Datei der konkrete Filter bzw. die konkrete Handler-Klasse angegeben werden, damit das richtige KomA-Modul geladen wird. Das geschieht durch die Einstellung FILTER bzw. HandlerClass in der zugehörigen Properties-Datei. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 6.3.2 Seite 125 von 384 Leerzeichen in Verzeichnis-Pfaden Besteht der Pfad aus Leerzeichen kommt es zum Konflikt mit den Trennzeichen (Leerzeichen) für den datenimport.ini-Eintrag. Hier kann jedoch das Trennzeichen durch ein Semikolon (;) getauscht werden. Dazu müssen alle Trennzeichen (Leerzeichen) durch das Semikolon ersetzt werden. Beispiel: *.xml; DWD_XML; import/DWD XML 6.3.3 Feature Import-Datei in anderes Verzeichnis kopieren Es existiert eine Funktionalität mit der die zu importierenden Datei während des Importvorgangs in ein anderes Verzeichnis kopiert werden kann. Das ist zum Beispiel sinnvoll wenn in einer Excel-Datei mit mehreren Tabellenblättern unterschiedliche Importkonfigurationen benötigt werden. Hierbei muss als Trennzeichner das Semikolon (;) zwingend verwendet werden, die Syntax lautet: <Dateifilter>; <Format>; <Importverzeichnis>; ; <Kopierverzeichnis> Vor dem Kopierverzeichnis muss 2x das Semikolon stehen! Die Angabe des Verzeichnisses kann absolut oder relativ angegeben werden. Erfolgt die Angabe relativ so wird das Verzeichnis unterhalb des Quell-Verzeichnisses (3 Parameter) angelegt. Beispiel: *.xlsx; SHEET1; import/Sheet1; ; Sheet2 legt die Datei in dem Verzeichnis „import/Sheet1/Sheet2“ ab. Die Angabe des absoluten (des vollständigen) Pfades ist daher wohl zu bevorzugen. Die Abarbeitungsreihenfolge ergibt sich aus der Reihenfolge der datenimport.ini. der erste Ordner muss also in der datenimport.ini vor dem zweiten Ordner aufgelistet sein. Beispiel: *.xlsx; SHEET1; c:/import/Sheet1; ; c:/import/Sheet2 *.xlsx; SHEET2; c:/import/Sheet2; ; c:/import/Sheet3 *.xlsx; SHEET3; c:/import/Sheet2 6.4 Standard-Verzeichnis-Konventionen Bei Importen werden Dateien in verschiedenen Verzeichnissen abgearbeitet. Dies erfolgt skriptgesteuert für jede einzelne Datei in der Weise, dass bei Erfolg in einem Unterverzeichnis namens done eine ZIPDatei erstellt wird, die die Quelldatei sowie die Standard- und Fehler-Ausgabe in Dateien namens *.log und *.err enthalten. Im Fehlerfall wird die ZIP-Datei in einem Unterverzeichnis namens err erstellt und enthält ggf. zusätzlich die begonnene Ziel-XML-Datei. So ist auf einen Blick ersichtlich, wenn Fehler aufgetreten sind. Die entsprechenden fehlerhaften Dateien sowie die zugehörigen Protokolle liegen zur Analyse gemeinsam vor. Im Falle von Namenskonflikten beim Erstellen der ZIP-Datei wird, wenn der Parameter common.backup gesetzt ist, die vorherige Version nach *.~nn umbenannt, wobei nn eine Zahl von 01 bis 99 ist, was bedeutet, dass maximal 99 Sicherungskopien erstellt und danach die alten Dateien überschrieben werden. Es existiert kein Job, der alte Archive löscht. Deshalb liegt dies in der Verantwortung des jeweiligen Systemadministrators. Seite 126 von 384 6.5 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abarbeitungsreihenfolge der Import-Dateien Die Abarbeitung beim Datenimport wird in alphabetischer Reihenfolge durchgeführt. Dabei werden die Dateinamen verglichen (per Zeichenkettenvergleich). Mit eCount- 00052661 kann via import.sort=LAST_MODIFIED die Reihenfolge anhand des Geändert-Datums der Dateien bestimmt werden (siehe import.sort). Dabei muss berücksichtigt werden, das Zeichenketten keine numerische Order besitzen, dadurch wird ein Dateiname MyFile_100 vor dem Dateinamen MyFile_2 abgearbeitet. Um diese Probleme, beispielsweise bei einer großen Überladung, zu umgehen, sollten die „Dateizähler“ im Dateinamen mit einer festen Formatmaske formatiert werden. Im Beispiel werden 20 Dateien mit dem Namen MyFile_i generiert. Wobei i von 1 bis 20 geht. Im zweiten Beispiel wird eine Formatmaske für die Ziffern angewendet, so dass diese immer aus 2 Ziffern bestehen (01 statt 1) Beispiel ohne Formatmaske: Index 1 MyFile_1 Index 11 MyFile_19 Index 2 MyFile_10 Index 12 MyFile_2 Index 3 MyFile_11 Index 13 MyFile_20 Index 4 MyFile_12 Index 14 MyFile_3 Index 5 MyFile_13 Index 15 MyFile_4 Index 6 MyFile_14 Index 16 MyFile_5 Index 7 MyFile_15 Index 17 MyFile_6 Index 8 MyFile_16 Index 18 MyFile_7 Index 9 MyFile_17 Index 19 MyFile_8 Index 10 MyFile_18 Index 20 MyFile_9 -> Die Sortierung entspricht hier nicht dem „erwarteten“ Verhalten. Beispiel mit Formatmaske (2 stellig) Index 1 MyFile_01 Index 11 MyFile_11 Index 2 MyFile_02 Index 12 MyFile_12 Index 3 MyFile_03 Index 13 MyFile_13 Index 4 MyFile_04 Index 14 MyFile_14 Index 5 MyFile_05 Index 15 MyFile_15 Index 6 MyFile_06 Index 16 MyFile_16 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 127 von 384 Index 7 MyFile_07 Index 17 MyFile_17 Index 8 MyFile_08 Index 18 MyFile_18 Index 9 MyFile_09 Index 19 MyFile_19 Index 10 MyFile_10 Index 20 MyFile_20 -> Die Sortierung erfolgt hierbei nach dem „erwarteten“ Verhalten. 6.6 Konvertierung und Import der Daten Der eigentliche Import von Daten in die Datenbank-Zwischentabellen erfolgt in 2 Schritten. Dies sind zuerst die Konvertierung einer Datei aus einem Fremdformat in ein ecount-spezifisches XMLZwischenformat und anschließend der Import der XML-Datei in die Datenbank. Ist ein Import in die Import-Zwischentabellen erfolgreich verlaufen, sind die Daten in den Masken (MF_IFI) erreichbar. Zuerst liegen sie allerdings noch in den Zwischentabellen, von wo sie noch von einem datenbankseitigen Job endgültig importiert werden müssen. Dieses Kapitel behandelt nur die Java-Komponenten, die den Import in die Datenbank durchführen. Die Unterteilung in 2 Schritte hat den Vorteil, dass die zum Teil schwer lesbaren Daten aus den Fremdformaten in ein einheitliches, relativ streng strukturiertes und leicht lesbares Zwischenformat gebracht werden, das sich zur manuellen Überprüfung der importierten Daten eignet und zudem die formatspezifische Programmlogik auf die Konvertierung in dieses Zwischenformat beschränkt. Die nachfolgende Beschreibung bezieht sich hauptsächlich auf die mitgelieferte Kommunikationsstruktur mit den darin enthaltenen Skripten und Konfigurationsdateien. Externe Formate erhalten vom ecount-System Format-Kürzel, die i.d.R. den Einträgen in den Datenquellen entsprechen. Für die externen Formate können allerdings auch Alias-Kürzel konfiguriert werden, um verschiedene Quellen für dasselbe Format mit unterschiedlichen Parametereinstellungen zu betreiben. So ist der Import-Filter für das CSV-Format in größerem Umfang konfigurierbar, so dass damit mehrere CSV-Dialekte importiert werden können. Dazu werden einfach mehrere CSV-Formate konfiguriert, die alle den CSV-Import-Filter verwenden und als Datenquelle entweder alle gemeinsam CSV benutzen oder jedes Format eine eigene Datenquelle erhält. Es gibt also 3 verschiedene Bedeutungen für ein Format-Kürzel: - - Konkretes Format einer Datei, das in der Import-Kommunikation und in der datenimport.ini (siehe Abschnitt 6.6.1 Konfiguration von Import-Dateien in datenimport.ini) angegeben wird und in einer Konfigurationsdatei namens <BASE>/config/import/<FORMAT>.properties (siehe Abschnitt 6.6.2 Konfiguration der Import-Formate) konfiguriert wird Import-Filter für eine Format-Klasse, der in der Format-Konfiguration (siehe Abschnitt 6.6.2 Konfiguration der Import-Formate) konfiguriert wird Datenquelle in der ecount-Datenbank, die ebenfalls in der Format-Konfiguration eingerichtet wird Die von der Komponente Import-Kommunikation von verschiedenen Datenquellen abgeholten Daten werden in formatspezifischen Verzeichnissen im Dateisystem abgelegt. Diese haben per Voreinstellung als Namen das Format-Kürzel und befinden sich im Verzeichnis <BASE>/import. Diese können aber auch an beliebigen Orten im Dateisystem liegen, die von der Importkomponente erreichbar und schreibbar sind. Seite 128 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Als XML-Zwischenformat existieren 2 Versionen. Diese werden in unregelmäßigen Abständen erweitert und sind daher nicht detailliert beschrieben. In den meisten Fällen ist die genaue Beschreibung auch nur für Entwickler notwendig. Die jeweils aktuellen DTD-Dateien können über folgende Links bezogen werden: XML Import Format Version 1 und XML Export Format Version 2 6.6.1 Konfiguration von Import-Dateien in datenimport.ini Konfiguriert werden die zu importierenden Dateien für die Importkomponente über eine Konfigurationsdatei <base>/config/datenimport.ini, die von der Java-Komponente Datenimport ausgewertet wird. Darin sind die abzuarbeitenden Verzeichnisse mit den vorgegebenen Datei-Endungen bzw. Dateimasken und Formaten angegeben. Abbildung 6-3 zeigt ein Beispiel für die datenimport.ini. In der Beispiel-Datei <BASE>/config/samples/datenimport.ini befindet sich ebenfalls eine kurze Dokumentation der Einstellungen. # Import CSV test*.csv CSV import/CSV import/CSV/xml csv CSV import/CSV # Import EDIFACT (MSCONS/UTILMD) test*.msc EDI import/EDI import/EDI/xml msc EDI import/EDI # Import EXP test*.txt EXP import/EXP import/EXP/xml txt EXP import/EXP # Import Fröschl test*.dat FFF import/FFF import/FFF/xml dat FFF import/FFF # Import LPEX test*.txt LPEX import/LPEX import/LPEX/xml txt LPEX import/LPEX Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 129 von 384 # Spezielles XML-Format: xml XML "import/XML Kunde X" kundex.dtd Abbildung 6-3: Beispiel für die Import-Konfigurationsdatei datenimport.ini Einzeilige Kommentare werden, wie bereits beschrieben, mit # am Zeilenanfang eingeleitet. Alle nicht leeren Zeilen, die kein Kommentar sind, werden als Konfigurationszeilen interpretiert, die 3 oder 4 durch Leerzeichen getrennte Einträge enthalten müssen. Dies sind: - Für die zu importierenden Dateien die Datei-Endung oder eine Dateimaske mit Platzhaltern * für eine beliebige Anzahl von Zeichen und ? für genau 1 Zeichen; Groß-/Kleinschreibung ist nicht zu beachten Formatkürzel für das Dateiformat Das Quellverzeichnis, das absolut oder relativ zum Kommunikations-Basisverzeichnis angegeben wird Optional ein Zielverzeichnis für XML-Zwischendateien, ebenfalls absolut oder relativ zum Basisverzeichnis. Ist der 4. Parameter angegeben, wird der Import in 2 Schritten vorgenommen, ansonsten wird direkt in die Datenbank importiert. Dies gilt nicht für die Verarbeitung von ZIPDateien, die grundsätzlich in einem Schritt importiert werden. Beim Format XML wird hier eine Dokumenttypdefinition (DTD) angegeben, die als Standard angenommen werden soll und zur Identifizierung des zu verwendenden XML-Importers herangezogen wird. Diese muss dann angegeben werden, wenn nicht garantiert werden kann, dass die zu importierenden XML-Dateien immer eine Angabe der DTD enthalten. Es besteht die Möglichkeit, die Pfadangaben in doppelten Anführungszeichen einzuschließen, falls diese selbst Leerzeichen enthalten. Im oben angegebenen Beispiel in Abbildung 6-3 ist auch zu erkennen, dass pro Verzeichnis mehrere Einträge angegeben wurden. Diese werden so verarbeitet, dass der erste passende Eintrag verwendet wird. Wird beispielsweise im Verzeichnis import/CSV eine Datei namens Testdaten.csv gefunden, dann wird der Eintrag test*.csv CSV import/CSV import/CSV/xml verwendet, was zur Folge hat, dass diese Datei mit Ausgabe einer XML-Datei im Verzeichnis import/CSV/xml in 2 Schritten verarbeitet wird. Für eine Datei mit Namen Daten_01.01.2004.csv wird hingegen der Eintrag csv CSV import/CSV verwendet und die Datei in einem Schritt ohne XML-Datei importiert. Von der Komponente Import-Kommunikation kommen die zu importierenden Daten in Form von ZIPkomprimierten Dateien (wenn diese Option aktiviert wurde). Solche ZIP-Dateien enthalten bereits in zusätzlichen Beschreibungsfeldern zu jeder Datei ein Format-Kürzel, das beim Import verwendet wird. Weiterhin werden ZIP-Dateien automatisch geöffnet, auch wenn die Endung .zip nicht in einer Konfigurationszeile für das entsprechende Verzeichnis steht. Vielmehr werden die Datei-Endungen der Konfiguration für das Verzeichnis auf die in der ZIP-Datei enthaltenen Dateien angewendet, wobei, falls im ZIP-Kommentar bereits ein Format angegeben wurde, dieses Vorrang vor dem in der passenden Konfiguration angegebenen Format hat. 6.6.2 Konfiguration der Import-Formate Die Konfiguration der Formate erfolgt in externen Dateien unter <BASE>/config/import. Seite 130 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Ist ein Format in datenimport.ini eingerichtet, muss noch konfiguriert werden, welcher Import-Filter mit welchen Parametern zur Konvertierung verwendet werden soll und über welche Datenquelle die Daten ins ecount-System importiert werden sollen. Diese Einstellungen werden in den eben erwähnten Konfigurationsdateien vorgenommen. Es ist jedoch auch möglich, ohne separate Format-Konfiguration Dateien zu importieren solange der jeweilige Import-Filter Standardwerte vorsieht. Für alle Parameter eines Import-Filters existieren Standard-Einstellungen, die den in den Beispiel-Konfigurationsdateien angegebenen Werten entsprechen. Auch sind die Import-Filter i.d.R. bereits unter einem Kürzel im System registriert. So hat der Import-Filter für das Format FFF (Fröschl Flat File) das Kürzel FFF. Wurde als Format-Kürzel für FFF-Dateien ebenfalls das Kürzel FFF gewählt, so wird ohne Angabe eines ImportFilters automatisch der unter diesem Namen bereits registrierte Import-Filter verwendet. Als StandardDatenquelle wird ebenfalls dieses Kürzel verwendet. Es können somit FFF-Dateien, die keine Sonderbehandlung benötigen, sofort ohne zusätzliche Konfiguration importiert werden. Ist kein passender Importfilter unter dem verwendeten Formatkürzel registriert, gibt es nun mehrere Möglichkeiten, einen solchen anzugeben: 1. Angabe des vollständigen Java-Klassennamens in der Einstellung HandlerClass, z. B. HandlerClass = de.robotron.ecount.dataimport.filter.FFFHandler 2. Angabe des Filterkürzels in der Einstellung Filter, z. B. Filter = FFF 3. Importieren aller Einstellungen einer anderen Format-Konfiguration incl. Filter-Klasse und Datenquelle in der Einstellung Alias, z. B. Alias = FFF Im 3. Fall können alle Einstellungen einer anderen Konfiguration vererbt und modifiziert werden. Dieser Fall ist insbesondere dann sinnvoll, wenn die Zahl der Einstellungen groß ist gegenüber der Zahl der unterschiedlichen Einstellungen zwischen 2 Formaten. So können auf diese Weise beispielsweise mehrere CSV-Formate definiert werden, die sich in nur wenigen Eigenschaften unterscheiden. Dazu werden alle gemeinsamen Einstellungen in einer Haupt-Konfigurationsdatei beispielsweise CSV_COMMON.properties definiert und die speziellen Einstellungen für die verschiedenen CSV-Formate in konkreteren Konfigurationsdateien abgelegt. Eine solche Konfigurationsdatei könnte dann wie folgt aussehen: ALIAS = CSV_COMMON DATENQUELLE = CSV1 FIELDS.EINHEIT={0,0};kW 6.7 Verarbeitung von ZIP-Dateien Die Verarbeitung von ZIP-Dateien, die über den Comimport mit aktivierter ZIP-Funktionalität erstellt werden, ist deshalb sinnvoll, weil die wiederholte Verarbeitung bereits importierter Dateien vereinfacht wird. Zudem ist diese Ablagemöglichkeit platzsparender und ermöglicht die Gruppierung von Dateien. Desweitern werden Zusatzinformationen, wie Nachrichten-ID und Format-Kürzel, für jede Datei abgelegt (als ZIP-Kommentar). Allerdings werden die Einzeldateien bei dieser Verarbeitungsart nicht direkt gemeinsam mit den Protokollinformationen abgelegt, da dazu die Ausgangs-ZIP-Datei verloren ginge, die aber unangetastet archiviert werden soll. Stattdessen wird eine neue ZIP-Datei nur für ProtokollInformationen angelegt, die dann neben der Original-Datei archiviert wird und den gleichen Dateinamenstamm sowie den Zusatz .log besitzt wie diese. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 131 von 384 Weiterhin werden ZIP-Dateien gemeinsam mit den Log-Archiven grundsätzlich im Unterverzeichnis zipdone abgelegt, ob die Verarbeitung fehlerhaft war oder nicht. Das hat die Ursache, dass in einer ZIPDatei mehrere Eingabe-Dateien enthalten sein können, deren Fehlerstatus sich durchaus unterscheiden können, so dass die gesamte Gruppe keiner Statusklasse zugeordnet werden kann. Beim Import einer Zip-Datei werden standardmäßig folgende Dateien ignoriert - 6.8 import_data.txt smime.p7s Dateien mit dem Zip-Kommentar "prt" Verarbeitung von TMP-Dateien Wird in der datenimport.ini für die Dateierweiterung mit Wildcards (*) gearbeitet, so kann es zu Datenimport-Fehlern kommen wenn gleichzeitig ein Comimport- und der Datenimport-Job aktiv sind. Hintergrund: Der Comimport legt eine *.tmp-Datei im Verzeichnis an und schreibt anschließend die empfangenen Daten hinein. Greift gleichzeitig der Datenimport auf die Datei zu, kann diese nicht verarbeitet werden. Als Ergebnis werden zahlreiche Fehlermeldungen (Fehlermeldung kann hier je nach verwendeten Importfiltern unterschiedlich lauten) im Protokoll erzeugt und die TMP-Datei wird nicht verarbeitet. Wird die TMP-Datei anschließend vom Comimport umbenannt (nach Abschluss des Dateitransfers), so kann die umbenannte Datei anschließend problemlos (vorausgesetzt die Datei ist korrekt) importiert werden. Mit eCount- 00052272 (ecount_import_ifc.jar - Version: 4.0.2.56) wurde die Logik geändert, sodass per Default nun Dateien, die auf .tmp enden, vom Datenimport ignoriert werden. 6.9 Wiederholung abgeschlossener Importvorgänge Die zu importierenden Dateien werden aus vorgegebenen Verzeichnissen geladen und anschließend in speziellen Unterverzeichnissen archiviert. Im Erfolgsfall ist dies das Verzeichnis done, im Fehlerfall werden die Daten im Verzeichnis err bzw. dbError abgelegt. Allen Fällen gemeinsam ist, dass die Ausgangsdatei gemeinsam mit den zugehörigen Fehlerprotokollen in einer ZIP-Datei abgelegt wird. Einen Sonderfall stellt hier die Verarbeitung von ZIP-Dateien auf Eingangsseite dar, der im Abschnitt 6.7 Verarbeitung von ZIP-Dateien beschrieben wird. Die erzeugten ZIP-Dateien enthalten in Kommentaren Zusatzinformationen zu jeder Datei, die eine erneute automatisierte Verarbeitung ermöglichen. Diese Kommentare enthalten Informationen wie den Dateityp (Protokoll, Formatkürzel für die Datei), Verarbeitungsstatus (Fehler) sowie eine Nachrichten-ID, die in der Komponente Import-Kommunikation zugewiesen wurde und eine nachträgliche Zuordnung der Daten zu einer Quelle ermöglicht. Enthält die ZIP-Datei nur eine einzige zu importierende Datei, kann ein erneuter Import durch Verschieben der ganzen ZIP-Datei zurück in das Import-Verzeichnis angestoßen werden. Dann erfolgt die Verarbeitung wie in Abschnitt Verarbeitung von ZIP-Dateien beschrieben, wobei die enthaltenen Protokoll-Informationen nicht berücksichtigt werden. Wenn aber nur eine einzige Datei von mehreren vorhandenen Dateien aus der ZIP-Datei importiert werden soll, muss diese mit einem geeigneten Werkzeug extrahiert und ebenfalls wieder im Import-Verzeichnis abgelegt werden. Seite 132 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Im Falle einer wiederholten Verarbeitung einer Datei kann es natürlich vorkommen, dass Dateinamenskonflikte im Archivierungsverzeichnis entstehen. Dann wird, sofern der Parameter common.backup gesetzt ist, die alte Datei umbenannt und enthält eine Nummer mit einem vorangestellten Zeichen ~ vor der Dateiendung. 6.10 Probleme/Lösungen 6.10.1 No matching data found in ZIP file Die Meldung „No matching data found in ZIP file“ bedeutet, dass in der zu verarbeitenden ZIP-Datei keine passenden Dateien für die Weiterverarbeitung gefunden wurden. Im einfachsten Fall ist in der ZIPDatei einfach nichts Sinnvolles enthalten oder die Dateimaske (datenimport.ini) passt nicht zu den zu importierenden Dateien (z. B. *.txt als Dateimaske, die Dateien enden aber auf *.edi). Die Meldung kann aber auch auf eine unsachgemäße Konfiguration, doppelten Einträgen in der datenimport.ini, zurückzuführen sein. In Verbindung mit dem Comimport und der Ablage der Daten als ZIP-Datei kann dies dazu führen, dass Daten nicht importiert werden. Beispiel: # MC-Wetter TM_*.csv MCW import/CSV/ # DWD TagesMittel_*.csv DWD import/CSV/ Grund: MSC und DWD schauen (mit unterschiedlichen Formatmasken) auf den gleichen Ordner. Jedoch wird in Verbindung mit ZIP-Dateien vom ersten Importformat (hier MCW) die ZIP-Datei entpackt und nach einer gültigen Datei (Datei entspricht Formatmaske) gesucht. Wenn keine Datei gefunden wurde, wird eine Meldung „No matching data found in ZIP file“ im KomA-Log ausgegeben und, da keine Fehler auftraten, die ZIP-Datei in den zip-done-Ordner verschoben! Dies ist zwingend notwendig, da sonst die Importordner mit ZIP-Dateien, die nicht auf den Filter passen, überfüllt würden (dies würde zu gegebener Zeit den Import von richtigen Dateien verhindern). Daten, die nun für den nächsten Importfilter DWD bestimmt sind, werden damit nicht importiert! Jedes Importformat muss auf unterschiedliche Importordner schauen. Die Daten müssen demzufolge im Comimport schon in zwei Verzeichnisse abgelegt werden (z. B. CSV_MCW und CSV_DWD). 6.10.2 FileNotFoundException beim Datenimport Beim Datenimport von älteren Daten (Erstellungsdatum der Dateien älter als 1 Monat) kam es während des Datenimportes zur FileNotFoundException. Als Ursache konnte letztendlich ein parallel laufender Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 133 von 384 Archivierungsjob identifiziert werden, der alle Dateien, die älter als 1 Monat sind, in ein anderes Verzeichnis verschiebt. Der Archivierungsjob sollte daher in einer Zeit laufen (meist nachts am Wochenende), in der keine weiteren Prozesse, wie beispielweise der Datenimport, aktiv sind (siehe auch Abschnitt 9). 6.10.3 Configuration error: Import filter class x not found for format y Tritt beim Datenimport z. B. folgender Fehler auf: Warning: Configuration error: Import filter class de.robotron.ecount.dataimport.filter.KonfigurationHandler not found for format Konfiguration liegt eine technische Fehlkonfiguration vor. Der Eintrag in der datenimport.ini zu der obigen Warnung könnte Beispielsweise wie folgt lauten: *.csv Konfiguration import/Konfiguration Auf der KomA wird nun ausgehend von dem zweiten Eintrag (Konfiguration) nach der Datei Konfiguration.properties unter config/import gesucht. Existiert die Datei und hat die Einstellung HandlerClass=x, so wird der Eintrag dieser Einstellung als KomA-Klasse verwendet. Existiert die Datei nicht bzw. existiert die Einstellung HandlerClass nicht, so wird per Default nach der Klasse de.robotron.ecount.dataimport.filter.KonfigurationHandler gesucht. Es kann also folgende Gründe für den Fehler geben: 1. Es existiert keine Properties-Datei und der Filter aus der datenimport.ini existiert gar nicht. 2. Es existiert eine Properties-Datei, jedoch ist der Eintrag HandlerClass nicht vorhanden oder falsch. 3. Der Eintrag in der datenimport.ini ist komplett falsch. Lösungen: - 6.10.4 Ist der Eintrag in der datenimport.ini komplett falsch, kann/muss dieser lediglich entfernt werden. Falls die korrekte HandlerClass bekannt ist, muss diese in der Properties-Datei hinterlegt werden. Beispiel: Der Import für das Datenimport-Format Konfiguration soll über die Klasse ABCHandler laufen. Unter config/import muss damit die Konfiguration.properties mit folgendem Inhalt angelegt werden: HandlerClass = de.robotron.ecount.dataimport.filter.ABCHandler Nicht alle Dateien aus einer ZIP-Datei werden importiert Eine Lösung für Windows-Betriebssysteme wird mit eCount- 00057947 bereitgestellt. Werden in einer einzelnen ZIP-Datei mehrere Dateien für unterschiedliche Import-Konfigurationen importiert (z. B. verschiedene XML-Dateien für EEX und Excel-Dateien), erfolgt die interne Gruppierung der Konfigurationen über das Quellverzeichnis (= 3. Parameter in der datenimport.ini). Die Gruppierung beachtet dabei die Groß- und Kleinschreibung des Verzeichnisses – damit ist der Import-Ordner import/EEX nicht identisch mit den Ordner IMPORT/EEX. Dies kann besonders bei Windows-Rechnern zu Seite 134 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Irritationen führen, denn bei Windows kann es keine unterschiedlichen Ordner mit identischem Namen geben, die sich lediglich durch Groß- und Kleinschreibung im Ordnernamen unterscheiden. Beispiel: In einer ZIP-Datei befinden sich die folgenden 3 Dateien: PhelixPowerFuturesMarketResults-2015-07-08.xml PowerSpotMarketAuctionResults-2015-07-09.xml EmissionSpotMarketResults-2015-07-08.xml Die Konfiguration in der datenimport.ini ist folgende: PowerSpotMarketAuctionResults*.xml EEX_XML_PS IMPORT/CKE PhelixPowerFuturesMarketResults*.xml EEX_XML_PF IMPORT/CKE EmissionSpot*.xml EEX_XML_CS import/CKE EmissionFutures*.xml EEX_XML_CF import/CKE Laut datenimport.ini gibt es hier intern zwei Konfigurationen (1. für IMPORT/CKE und 2. für import/CKE). Wird nun die ZIP-Datei abgearbeitet, wird jede Konfiguration einzeln durchlaufen. Hier werden also die Konfigurationen EEX_XML_PS und EEX_XML_PF ausgeführt. Anschließend wird die ZIP-Datei archiviert (sprich in den zip-done-Ordner verschoben). Durch die Archivierung ist die Datei nicht mehr vorhanden und die Konfigurationen EEX_XML_CS und EEX_XML_CF werden nicht mehr beachtet. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 135 von 384 7 Datenversand (ExportCom) Der Datenversand wird über so genannte E-Mail-Abos realisiert. In den E-Mail-Abos werden die zu versendenden Daten mit den zugehörigen Versandinformationen festgelegt. Der Datenversand besteht aus 3 Prozessen: - Export der Daten aus der Datenbank in das ecount Export-XML Format Konvertierung der XML Daten in das gewünschte Format Versenden der Daten (E-Mail, FTP etc.) Die durch ein E-Mail-Abo bereitgestellten Daten werden durch das Programm Export-Kommunikation von der Datenbank aus entsprechenden Export-Zwischentabellen abgeholt. Die zu versendenden Daten können als XML Datei im ecount-XML-Exportformat zwischengespeichert werden. Der Versand der Daten per E-Mail oder über FTP erfolgt anhand der im Modul Datenversand zum EMail-Abo festgelegten Informationen. Die E-Mail wird an eine oder mehrere Adressen, die aus dem Verteiler bestimmt werden, versandt. Als Alternative dazu kann auch ein FTP-Server oder ein Verzeichnis als Ziel des Datenversandes benutzt werden. Abbildung 7-1: Datenfluss Export Version 2 Für den eigentlichen Versandprozess werden über die Versandschnittstelle die erzeugten Daten versendet. ecount beinhaltet standardmäßig ein Versandmodul für E-Mail-Versand (MEX = Message EXchange), ein FTP-Sendemodul, ein SFTP-Sendemodul sowie ein FILE-Sendemodul zur Ablage der Dateien im Dateisystem des KomA-Servers. 7.1 Platzhalter Platzhalter können im Datenversand-ABO (MF_DVSD) verwendet werden die dann zur Laufzeit von der KomA aufgelöst werden. Seite 136 von 384 7.1.1 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Dateinamen (Anhang Dateiname) Diese Platzhalter stehen bei fast allen Export-Formaten zur Verfügung: Tabelle 7-1: Platzhalter Dateinamen Platzhalter Beschreibung ${EAU_ID} EXPORT_AUFTRAEGE.ID ${FILE_NR} Dateizähler (relevant wenn mehrere Dateien bei einem Exportauftrag versendet werden). ${FILE_COUNT} Anzahl der zu exportierenden Dateien für den Exportauftrag Diese Platzhalter stehen vorwiegend bei den Formaten EDIFACT/MSCONS, CSV, GASX zur Verfügung, können bei Bedarf aber auch für andere Lastgangformate implementiert werden. Tabelle 7-2: Platzhalter vorwiegend für Formate EDIFACT/MSCONS, CSV, GASX Platzhalter Beschreibung ${Meteringcode} oder ${Zählpunkt} oder ${Zaehlpunkt} MeteringCode des Zählpunktes ${CountpointName} oder ${Zählpunktname} oder ${Zaehlpunktname} Der in ecount hinterlegte Zählpunktname ${CountpointWebName} ${Zählpunkt-Webbezeichnung} oder ${Zaehlpunkt-Webbezeichnung} Die in ecount hinterlegte ZählpunktWebbezeichnung ${Obiscode} oder ${Obis-Code} OBIS der Linie ${LineWebName} oder ${Linie-Webbezeichnung} Die in ecount hinterlegte Linienbezeichnung ${SenderID} oder ${Absender-Kennung} ID des Senders aus ecount ${ReceiverID} oder ${Empfänger-Kennung} oder ${EmpfaengerID des Empfängers aus ecount Kennung} 7.1.2 Betreff (bei E-Mails) Tabelle 7-3: Platzhalter E-Mail-Betreff Platzhalter Beschreibung Der Dateiname wird in den Betreff geschrieben. Dies ist z.B. bei der EDFIACT${FILENAME} Kommunikation nach BDEW notwendig, da hier der Betreff der E-Mail den Namen der EDIFACT-Datei beinhaltet soll. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 7.1.2.1 Seite 137 von 384 Manipulation des Betreffs Mit eCount- 00065086 wurde eine Funktionalität zur Manipulation des Betreffs (Tabelle.Spalte: EXPORT_ECOUNT.BETREFF) geschaffen. Diese Manipulation kann in Abhängigkeit zu einen Format (EXPORT_ECOUNT.FORMAT) und den Empfänger (EXPORT_ADRESSEN.WERT WHERE KLASSE = 'TO') über die Config.properties gesteuert werden. Die Manipulation ist per Default deaktiviert und muss explizit aktiviert werden über folgende Config.properties-Einstellung: export.SUBJECT_MANIPULATION=Y Es kann pro Format ein spezieller Betreff definiert werden, beispielsweise für alle UTILMD-Exporte. export.SUBJECT.UTILMD.ALL={trust smime} ${filename} Gültige Formate sind z.B.: EDI, EDI_CONTRL, ORDERS, ORDRSP, UTILMD, ALOCAT. (Die Formate können über folgendes SQL ermittelt werden: SELECT FORMAT FROM EXPORT_ECOUNT E GROUP BY FORMAT ORDER BY FORMAT). Ist ein „ALL“-Eintrag vorhanden wird keine empfängerspezifische Prüfung mehr durchgeführt. Ist kein ALL-Eintrag vorhanden kann pro Empfänger ein spezifischer Betreff definiert werden. Soll beispielsweise für den Empfänger max.mustermann@robotron der Betreff geändert werden kann dies wie folgt geschehen. export.SUBJECT.UTILMD.max.mustermann@robotron.de = XYZ ${filename} Beispielkonfiguration: # Für alle UTILMD-Exporte den Betreff ändern export.SUBJECT_MANIPULATION=Y export.SUBJECT.UTILMD.ALL={trust smime} ${filename} # Für ORDERS nur den Betreff ändern wenn der Empfänger "max.mustermann@robotron.de" ist. export.SUBJECT.ORDERS.max.mustermann@robotron.de=File: ${filename} 7.2 Allgemeine Export-Parameter Die Datenexport-Parameter werden über die Datei Config.properties gepflegt. Tabelle 7-4: Parameter für Datenexport Parameter/Beschreibung Standardwert export.archive_dir Email Exportverzeichnis, in dem die KOMA-XML-Dateien bzw. die daraus generierten Format-Dateien (z. B. CSV, UTILMD, MSCONS,…) auf der KomA abgelegt werden. Diese Daten sind für die Fehleranalyse zwingend notwendig. Auf diesem Verzeichnis müssen jedoch auch Bereinigungsroutinen (Archivjob) laufen, damit die Verzeichnisse nicht Seite 138 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Standardwert überfüllt werden (bei mehr als 2 Milliarden Dateien in einem Ordner, können ältere Server abstürzen). Es ist eine Ablage pro Mandant möglich, die Syntax ist folgende: export.archive_dir.mandant_<VTP_ID_MANDANT>=<Verzei chnis> z. B. export.archive_dir.mandant_1 = Email_Mandant1 export.compressXML Y Y/N. Die interne XML-Datei, die die KomA mitschreibt, wird bei Y in eine ZIP-Datei geschrieben. Bei N wird die XML-Datei nicht gezippt. Auf einem Produktivsystem sollte die Option nicht deaktiviert werden (=N), da die Platzersparnis ziemlich groß ist. export.deleteformatfile N Y/N. Erzeugte Formatdatei (Dateien, die unter export.format_dir abgelegt werden) am Ende des Datenversandes löschen. export.eau_status B Status abzuarbeitender Export-Aufträge export.email_dir E-Mail/E-Mail Verzeichnis, in dem die fertigen E-Mails abgelegt werden – entspricht der E-Mail, die von der KomA an den E-Mail-Server übergeben wird. Der Standardwert nutzt export.archive_dir. export.error.dir Verzeichnis, in dem XML-Dateien von fehlerhaften Exportaufträgen abgelegt werden export.FILE.counterDigits Positive Ganzzahl (sinnvoll zwischen 1 und 5). Beim Export ins Dateisystem kann eine Datei mit dem identischen Namen bereits im Verzeichnis existieren, im Normalfall bricht der Exportauftrag dann mit einer Fehlermeldung ab. Über diese Einstellung kann gesteuert werden, dass die zu exportierende Datei mit einem anderen Dateinamen abgelegt wird. In diesem Fall wird ein Zähler zwischen Dateinamen und Dateierweiterung eingefügt. Die Länge der Zahl wird über die Angabe in counterDigits festgelegt. Beispiel: Der Dateiname sei ecount.xml, ecount.xml existiert bereits im Verzeichnis export.FILE.counterDigits=4 -> ecount.0001.xml E-Mail/error Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Seite 139 von 384 Standardwert export.FILE.counterDigits=2 -> ecount.01.xml export.FILE.CreateDirectory Y Y/N. Automatisches Anlegen von Exportverzeichnisse wenn diese noch nicht existieren export.fixedSubjectPrefix Fester Text, der als Präfix vor den Betreff jeder ausgehenden Nachricht gehängt wird (bei E-Mail Versand) export.fixedToAddress Feste E-Mail-Adresse, an die alle Exportaufträge umgeleitet werden. Dabei werden alle To-, CC- und BCC-Adressen, die vom ecount-Abo übermittelt werden, gelöscht. Beispiel: export.fixedToAddress = max.muster@xyz.de export.fixedToAddress = file:C:\Daten\Export export.fixedToAddress = file:/usr/data/export export.format_dir E-Mail/format Verzeichnis, in dem die erzeugten Dateien abgelegt werden. Entspricht der Datei nach der Konvertierung, sprich nachdem der jeweilige Exportfilter seine Arbeit verrichtet hat. export.logfile comexport.log Dateiname für die LOG-Datei export.logfile.maxSize 500000 Positive Ganzzahl. Maximale Größe der LOG-Datei in Bytes (z. B. 5 MB kann mittels 5242880 definiert werden) export.max_mail_fetch_count 100 Maximale Anzahl pro Durchlauf abzuarbeitender Export-Aufträge (Parametername ist historisch und daher ggf. etwas irreführend). export.max_mails_per_eau Maximale Anzahl von E-Mails, die pro Export-Auftrag gesendet werden dürfen. Parameter ist schon älter und soll „Mailbombing“ verhindern. Als Wert wird eine positive Ganzzahl erwartet. Es gibt in der KomA keine Limitierung nach oben (Maximalwert), diese kann nur vom jeweiligen EMail-Server definiert werden. 256 Seite 140 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Standardwert export.page.ablesung Y Y/N. Auslagerung von Daten beim Generieren der Nachrichten in das TEMP-Verzeichnis an ABLESUNG-Elementen export.page.ecountadmin N Y/N. Auslagerung von Daten beim Generieren der Nachrichten in das TEMP-Verzeichnis export.page.kunde Y Y/N. Auslagerung von Daten beim Generieren der Nachrichten in das TEMP-Verzeichnis an KUNDE-Elementen export.page.linie Y Y/N. Auslagerung von Daten beim Generieren der Nachrichten in das TEMP-Verzeichnis an LINIE-Elementen export.page.tageslastprofil Y Y/N. Auslagerung von Daten beim Generieren der Nachrichten in das TEMP-Verzeichnis an TAGESLASTPROFIL-Elementen export.page.zaehlpunkt Y Y/N. Auslagerung von Daten beim Generieren der Nachrichten in das TEMP-Verzeichnis an ZAEHLPUNKT-Elementen export.port Port, auf dem der Datenversand auf das Stop Signal zum Beenden des Servers warten soll. export.rowPrefetchCount Oracle JDBC drivers include extensions that allow you to set the number of rows to prefetch into the client while a result set is being populated during a query. This feature reduces the number of round trips to the server. By default, when Oracle JDBC executes a query, it receives the result set 10 rows at a time from the database cursor. This is the default Oracle rowprefetch value. export.sender.FTP.HandlerClass Sendemodul für FTP-Adressen. Damit kann zwischen verschiedenen Implementierungen gewechselt werden. Z. B. de.robotron.ecount.exportcom.sender.FTPSender2 und de.robotron.ecount.exportcom.sender.FTPSender export.sender.MEX.HandlerClass <common.base_port >+2 10 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Seite 141 von 384 Standardwert Damit ist es möglich, eine andere HandlerClass (Logik) für den E-MailVersand anzugeben. Ist für die meisten Systeme nicht relevant. Standardwert: de.robotron.ecount.exportcom.sender.PlainMailSender export.shutdown_command SHUTDOWN Kommando, auf das der Datenversand zum Beenden des Servers warten soll export.standardadresse.typ FILE Falls keine Zieladresse im Export-Auftrag vorhanden ist. In Verbindung mit export.standardadresse.wert verwendbar. Mögliche Werte: MEX (E-Mail), FTP, FILE export.standardadresse.wert Falls keine Zieladresse im Export-Auftrag vorhanden ist. In Verbindung mit export.standardadresse.wert verwendbar. Ist dann die E-MailAdresse, das Verzeichnis, die FTP-Adresse, … export.validate_xml N Y/N. Gibt an, ob beim Verarbeiten einer einzelnen XML-Datei die Struktur gegen die DTD validiert werden soll. Sollte nur für Diagnosezwecke bei der Problemanalyse aktiviert werden! export.write_time_eau N Y/N. Laufzeit jedes Exportauftrages in dessen Protokoll (MF_EAU im Reiter Nachrichten-Protokoll) vermerken. Format: Time: <Stunde>:<Minute>:<Sekunde>.<Millisekunde> export.write_xml N Y/N. Export der internen KomA-XML aus der DB. export.xml_dir E-Mail/xml Verzeichnis für interne KomA-XML-Dateien des Versandprozesses. In diesem Verzeichnis werden die für Analysezwecke notwendigen Dateien für einen Export-Auftrag abgelegt. export.zipExtension Diese Einstellung sollte für die meisten Systeme nicht relevant sein. Wenn export.compressXML aktiviert ist, wird eine ZIP-Datei angelegt. Mit dieser Einstellung könnte die Dateierweiterung geändert werden. Zip Seite 142 von 384 7.3 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Sendemodul E-Mail - MailSender (MEX) Der MailSender nutzt den SMTP-Standard (Simple Mail Transfer Protocol), dieser ist im RFC821 spezifiziert. Der Aufbau einer E-Mail richtet sich nach dem RFC822 und dem MIME Standard. Die Codierung des E-Mail-Textes erfolgt unter der Beachtung der Parameter export.MEX.TextEncoding, und export.MEX.TextTransferEncoding. Der wichtigste Parameter beim MailSender ist export.MEX.smtphost, Nutzername und Passwort werden für ihn via export.MEX.smtp-username und export.MEX.smtp-password spezifiziert. 7.3.1 Konfigurationsparameter Parameter, die für den E-Mail-Versand zuständig sind, werden über die Datei Config.properties gepflegt. Tabelle 7-5: Einstellungen für MailSender Parameter/Beschreibung Typ* Standardwert export.ignoreAttachmentDescription String N String base64 Y/N. Mit Y können Anhangbeschreibungen aus den Abos ignoriert werden. (siehe eCount- 00036908). Zusätzlich wird bei Y der Content-DescriptionHeader nicht gesetzt. export.MEX.AttachmentEncoding Kodierung für den Transport der E-Mail-Anhänge. Der Standardwert sollte, wenn möglich, nicht geändert werden. Eine Anpassung ist nur notwendig, falls ein E-Mail-Server diesen Standard nicht bedienen kann (was inzwischen aber unwahrscheinlich ist). Nach RFC 2045 sind folgende Einstellungen möglich: 7bit, 8bit, quotedprintable, base64 und binary Beispiele: export.MEX.AttachmentEncoding = 7bit export.MEX.AttachmentEncoding = quoted-printable export.MEX.AttachmentEncoding = base64 export.MEX.bcc String Statische E-Mail-Adresse, an die jede ausgehende E-Mail Nachricht zusätzlich als BCC versendet wird. export.MEX.cc String Statische E-Mail-Adresse, an die jede ausgehende E-Mail Nachricht zusätzlich als CC versendet wird. export.MEX.compressmailfile Y/N. Ablage der E-Mail als ZIP-Datei (wenn export.MEX.writemailfile=Y aktiv) String N Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 143 von 384 Parameter/Beschreibung Typ* Standardwert export.MEX.CSV_Inline String N String N String N String N String Y String N Y/N. Mit dem Parameter kann gesteuert werden, ob CSV-Anhänge als Inline in E-Mails angehangen werden sollen. N schaltet dieses Verhalten ab und CSV-Dateien werden immer mit Disposition "attachment" angehängt. Seit eCount- 00048483 ist der Default N, vorher Y. export.MEX.custom_message_id Y/N. Eigene Implementierung der Message-ID, siehe eCount- 00045165 Die Message-ID ist bei mehreren KomA-Instanzen nicht immer eindeutig. Daher wird hier mit nanoTime gearbeitet und zusätzlich ein Hash über das Arbeitsverzeichnis der KomA verwendet. Des Weiteren wird der Server-Port (export.port aus Config.properties) mit einbezogen. export.MEX.debug Y/N. Aktiviert das JavaMail-Debug, notwendig bei Problemen mit den E-MailVersand export.MEX.default-ntlm-domain Y/N. bei Y wird die Systemvariable „USERDOMAIN“ via System.getenv("USERDOMAIN") abgefragt und als Wert für export.MEX.smtp.auth.ntlm.domain gesetzt. export.MEX.encode_filename Y/N. Mit N werden die Dateinamen nach der MIME-Spezifikation erstellt. Das Enstspricht RFC 2231, dieses Standard wird aber nicht von allen Mail-Clients unterstützt. Beispielsweise hat Outlook hier Probleme und zeigt anschließend den Dateinamen nicht korrekt an. export.MEX.encode_parameters Y/N. Mit Y werden nicht-ASCII Parameter, z.B. im Content-Type-Header, mittels RFC 2231 kodiert. export.MEX.fixed_from Konfiguration einer festen Absender-E-Mail-Adresse. Mit dieser Einstellung wird die From-Adresse überschrieben (die beispielsweise über das ecountSystem geliefert wird) String Seite 144 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Typ* export.MEX.fixed_from.[SENDER-ID] String Standardwert Konfiguration einer festen Absender-E-Mail-Adresse pro Sender-ID Syntax: export.MEX.fixed_from.[SENDER-ID] = [EMAILADRESSE] Beispiel: export.MEX.fixed_from.0815 = max.mustermann@x.de export.MEX.from String Feste FROM-Adresse für jeden E-Mail-Versand (Einstellung vorwiegend für Testsysteme). Diese Einstellung wird abgefragt, wenn weder aus dem ecount-System noch über export.MEX.fixed_from eine From-Adresse geliefert wird. export.MEX.mail.smtp.starttls.enable String N String Y SSL für den Versand von E-Mails aktivieren. Identisch zu export.MEX.smtp.starttls.enable (nur mit Y/N), aus Abwärtskompatibilitätsgründen vorhanden. export.MEX.SendMail Y/N. Über diesen Parameter kann das Senden von E-Mails an den SMTPServer deaktiviert werden (N) - für Testsystem sinnvoll. export.MEX.smtp.auth boolean false true/false. If true, attempt to authenticate the user using the AUTH command. export.MEX.smtp.auth.digest-md5.disable boolean false true/false. If true, prevents use of the AUTH DIGEST-MD5 command. export.MEX.smtp.auth.login.disable boolean false true/false. If true, prevents use of the AUTH LOGIN command. export.MEX.smtp.auth.mechanisms String If set, lists the authentication mechanisms to consider, and the order in which to consider them. Only mechanisms supported by the server and supported by the current implementation will be used. The default is LOGIN PLAIN DIGEST-MD5 NTLM, which includes all the authentication mechanisms supported by the current implementation. export.MEX.smtp.auth.ntlm.disable true/false. If true, prevents use of the AUTH NTLM command. boolean false Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 145 von 384 Parameter/Beschreibung Typ* export.MEX.smtp.auth.ntlm.domain String Standardwert Die NTLM Authentifzierungs-Domain. Kann mittels des Kommadozeilenausdrucks echo %USERDOMAIN% bestimmt werden. Alternativ kann auch der Parameter export.MEX.default-ntlmdomain verwendet werden (sinnvoll wenn sich die Domain öfters ändern kann). Wenn der Nutzer bereits als domain\user definiert wird, braucht die NTLM-Domain nicht separat spezifiziert werden. export.MEX.smtp.auth.plain.disable boolean false true/false. If true, prevents use of the AUTH PLAIN command. export.MEX.smtp.connectiontimeout int Socket connection timeout value in milliseconds. This timeout is implemented by java.net.Socket. Default is infinite timeout. export.MEX.smtp.ehlo boolean true/false. If false, do not attempt to sign on with the EHLO command. Defaults to true. Normally failure of the EHLO command will fallback to the HELO command; this property exists only for servers that don't fail EHLO properly or don't implement EHLO properly. export.MEX.smtp.sasl.authorizationid String The authorization ID to use in the SASL authentication. If not set, the authentication ID (user name) is used. export.MEX.smtp.sasl.enable boolean true/false. If set to true, attempt to use the javax.security.sasl package to choose an authentication mechanism for login. Defaults to false. export.MEX.smtp.sasl.mechanisms String A space or comma separated list of SASL mechanism names to try to use. Für SASL siehe (RFC 2222) export.MEX.smtp.sasl.realm String The realm to use with DIGEST-MD5 authentication. export.MEX.smtp.sasl.usecanonicalhostname true/false. If set to true, the canonical host name returned by {@link java.net.InetAddress#getCanonicalHostName InetAddress.getCanonicalHostName} is passed to the SASL mechanism, instead of the host name used to connect. boolean false Seite 146 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Typ* export.MEX.smtp.sendpartial Boolean Standardwert true/false. If set to true, and a message has some valid and some invalid addresses, send the message anyway, reporting the partial failure with a SendFailedException. If set to false (the default), the message is not sent to any of the recipients if there is an invalid recipient address. export.MEX.smtp.socks.host String Specifies the host name of a SOCKS5 proxy server that will be used for connections to the mail server. export.MEX.smtp.socks.port String Specifies the port number for the SOCKS5 proxy server. This should only need to be used if the proxy server is not using the standard port number of 1080. export.MEX.smtp.ssl.checkserveridentity Boolean false true/false. If set to true, check the server identity as specified by RFC 2595. These additional checks based on the content of the server's certificate are intended to prevent man-in-the-middle attacks. export.MEX.smtp.ssl.enable boolean true/false. If set to true, use SSL to connect and use the SSL port by default. Defaults to false for the "smtp" protocol and true for the "smtps" protocol. export.MEX.smtp.ssl.trust String If set, and a socket factory hasn't been specified, enables use of a {@link com.sun.mail.util.MailSSLSocketFactory MailSSLSocketFactory}. If set to *, all hosts are trusted. If set to a whitespace separated list of hosts, those hosts are trusted. Otherwise, trust depends on the certificate the server presents. export.MEX.smtp.starttls.enable boolean false true/false. If true, enables the use of the STARTTLS command (if supported by the server) to switch the connection to a TLS-protected connection before issuing any login commands. Note that an appropriate trust store must configured so that the client will trust the server's certificate. Defaults to false. Identisch mit export.MEX.mail.smtp.starttls.enable=Y oder N export.MEX.smtp.starttls.required true/false. If true, requires the use of the STARTTLS command. If the server doesn't support the STARTTLS command, or the command fails, the connect method will fail. Boolean false Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 147 von 384 Parameter/Beschreibung Typ* Standardwert export.MEX.smtp.timeout int infinite timeout Socket read timeout value in milliseconds. This timeout is implemented by java.net.Socket. export.MEX.smtp.writetimeout int Socket write timeout value in milliseconds. This timeout is implemented by using a java.util.concurrent.ScheduledExecutorService per connection that schedules a thread to close the socket if the timeout expires. Thus, the overhead of using this timeout is one thread per connection. Default is infinite timeout. export.MEX.smtphost String Adresse des SMTP Servers, der für den E-Mail-Versand zuständig ist, wenn nicht definiert, wird der Wert aus common.smtp_server verwendet export.MEX.smtp-password String Passwort für SMTP-Authentifizierung export.MEX.smtp-password.encrypted String N Y/N. falls export.MEX.smtp-password kodiert sein soll. Die Kodierung erfolgt mithilfe von PasswordCoding. export.MEX.smtpport Int Festlegung des SMTP-Ports für den Export export.MEX.smtp-username String Nutzer für SMTP-Authentifizierung export.MEX.TextEncoding Zeichenkodierung, mit welcher der Nachrichtentext kodiert wird. Der Default ISO-8859-1 ist nur in westeuropäischen Ländern sinnvoll. In Russland beispielsweise muss der Wert auf UTF-8 geändert werden: export.MEX.TextEncoding = UTF-8 STRING ISO-88591 Seite 148 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Typ* Standardwert export.MEX.TextTransferEncoding String 8bit String N String N Legt den Wert für das Content-Transfer-Encoding fest (Kodierung für die Übertragung des Textes). Die Kodierung von Nicht-7-Bit-ASCII-Zeichen erfolgt häufig mittels Quoted-Printable-Kodierung, Binärdaten hingegen werden üblicherweise Base64-kodiert. Alternativ ist für Textdaten auch 8bit möglich (die Kodierung export.MEX.TextEncoding muss dabei angegeben sein, z. B. UTF-8). Beispiele: export.MEX.TextTransferEncoding = quoted-printable export.MEX.TextTransferEncoding = 8bit export.MEX.TextTransferEncoding = 7bit export.MEX.trust_all_hosts Y/N. Bei verschlüsselter Verbindung wird allen HOSTS per Default vertraut. export.MEX.writemailfile Y/N. Bei Y werden die E-Mails zusätzlich im Verzeichnis gespeichert. Das Verzeichnis ergibt sich aus der Einstellung export.email_dir (Default Email) *Die Spalte Typ gibt Auskunft über die Art des Parameters: - Int steht für Integer und erwartet damit eine Ganzzahl, z. B. export.MEX.smtp-port=25 String steht für alphanumerische Angaben z. B. export.MEX.smtphost=myHost Bei Boolean-Parametern muss der Wert für ja mit true und für nein mit false angegeben werden, z. B. export.MEX.smtp.ehlo=true o o Boolean-Parameter der JavaMail-API werden mit true/false (Typ = boolean) angegeben Boolean-Parameter der KomA werden mit Y/N definiert (Typ = String) Beim Aktualisieren der E-Mail-Sender-Komponente (wie auch beim E-Mail-Empfang) wird auch immer die neuste Version der JavaMail-API ausgeliefert. Bei einigen Versionssprüngen (z. B. von 1.4.4 auf 1.5.0) gab es E-Mail-Server-Konstellationen, die nach dem Update ohne Anpassung einiger JavaMail-Eigenschaften nicht mehr funktionierten. Die produktseitigen Tests des Herstellers sehen nicht vor, jede JavaMail-Version gegen alle möglichen E-Mail-Server mit den unterschiedlichsten Konfigurationseinstellungen zu testen. Daher ist es zwingend notwendig das Update vorher auf dem Kunden-Testsystem zu validieren (der Test ist erfolgreich wenn mit dem neusten Update weiterhin E-Mails empfangen und versendet werden können). Aus diesem Grund werden E-Mail-Updates auch nicht global an alle Kunden ausgeliefert sondern nur auf der Download-Seite oder über Kunden-Addons bereitgestellt. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 7.3.2 Seite 149 von 384 E-Mail-Signatur hinterlegen Für den Versand per E-Mail kann eine Signatur auf der KomA hinterlegt werden. Diese muss in der TextDatei EMAIL_Signature.txt im Verzeichnis config abgelegt werden. Ist die Datei vorhanden, wird der Inhalt der Datei automatisch an jede E-Mail angehangen. Beispiel: *KomA*\config\EMAIL_Signature.txt (führende Leerzeile sinnvoll) Mit freundlichen Grüßen ihr Kommunikationsserver 7.3.3 Dateinamen als Betreff verwenden Um den Dateinamen der ersten angehängten Datei als Betreff zu verwenden, kann die Variable ${FILENAME} benutzt werden. Diese Variable muss im ecount als Betreff, beispielsweise in den Abos (MF_DVSD) im Reiter Kommunikation, angegeben werden. 7.3.4 Debugging Um das Debugging einzuschalten, muss export.MEX.debug=Y gesetzt und zusätzlich die Datei Export-Communication.log.properties unter config angelegt werden, wenn bereits vorhanden, nur modifizieren mit folgenden Inhalt: log4j.rootLogger=WARN, Ecount log4j.appender.Ecount=com.robotron.ecount.util.Log4jAdapter log4j.appender.Ecount.layout=org.apache.log4j.PatternLayout log4j.appender.Ecount.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss.SSS} %-5p %l: %m%n log4j.logger.de.robotron.ecount.exportcom.sender=DEBUG 7.3.5 Sicherheitshinweis - CSNC-2014-001 Eine Sicherheitslücke, die in CSNC-2014-001 ausführlich dokumentiert ist, wurde mit eCount- 00046742 geschlossen. Die Aussage des Herstellers der JavaMail-API lautet wie folgt: "Die Applikation ist für das Prüfen der Benutzereingaben verantwortlich. Im vorliegenden Fall heißt das: Die Applikation ist dafür verantwortlich zu überprüfen, dass die Betreffzeile keine Zeilenumbrüche beinhaltet. Der zur Demonstration verwendete Code ist kein von Oracle bereitgestelltes Beispiel. Die Meldung wird daher als "Kein Fehler" (not-a-bug) geschlossen." Kurze Problembeschreibung: In Javamail gibt es eine Sicherheitslücke, die das Einschleusen von SMTP Headern (SMTP injections) in JavaMail erlaubt, sofern folgende zwei Voraussetzungen erfüllt sind: Seite 150 von 384 - Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 das Servlet unterstützt mehrteilige POST-Nachrichten (multipart POST requests), die Applikation prüft Benutzereingaben nicht auf Wagenrücklauf (CR) und Zeilenvorschub (LF), bevor die JavaMail setSubject Methode aufgerufen wird. Kurzbeschreibung der Lösung: Zeilenumbrüche (CR LF \r\n oder CR= \r oder LF = \n) im Betreff werden nun im KomA-Modul Ecount Communication Email Sender Module (MEX) gegen Leerzeichen entfernt und erst danach an die Javamail-API übergeben. 7.3.6 Probleme/Lösungen 7.3.6.1 Base64-Kodierung für E-Mail-Anhänge Sollte es Probleme wegen nicht korrekter Formatierung von Anhängen geben (BDEW Kommunikationsrichtlinie sieht Base64 vor), kann das Problem entweder an einer Fehlkonfiguration an der KomA oder auch am E-Mail-Server liegen. Bei letzterem ist die IT-Abteilung des Kunden für das Problem zuständig. Überprüfung KomA: In der Config.properties muss nach der Einstellung export.MEX.AttachmentEncoding gesucht werden. Ist diese nicht angegeben wird per Default base64 verwendet. Bei export.MEX.AttachmentEncoding=base64 liegt keine Fehlkonfiguration vor. Zusätzlich legt die KomA jede verschickte E-Mail (als ZIP-Datei) unter *KomA*\Email\Email\ ab. In dieser ZIP-Datei ist die E-Mail-Datei enthalten (*.eml), diese kann nun mit einen Texteditor betrachtet werden. Dabei muss nach dem Text Content-Transfer-Encoding: gesucht werden, steht auch dort base64, liegt das Problem nicht am KomA. Abbildung 7-2: Kontrolle E-Mail-Dateien in der KomA auf Content-Transfer-Encoding: base64 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 7.3.6.2 Seite 151 von 384 Message-ID (MAIL-ID) bei mehreren KomA-Instanzen Bei der Generierung der E-Mail-ID bei mehreren KomA-Instanzen, wurden teilweise für mehrere E-Mails gleiche MAIL-ID generiert (Tabelle EXPORT_MAIL_STATUS.MAIL_ID). Dies kann zu Problemen beim Versand auf dem E-Mail-Server führen. Im konkreten Fall wurde nur 1 Datei exportiert und die anderen als „Duplikate“ abgewiesen. Dieses Problem wurde mit eCount- 00045165 gelöst, muss aber aktuell explizit über die Config.properties-Einstellung export.MEX.custom_message_id = Y aktiviert werden. Nun wird die Generierung der Message-ID entsprechend folgendem Aufbau durchgeführt: <Hash über das Arbeitsverzeichnis des KomA-Servers>. <ServerPort aus Config.properties „export.port“>. <aktuelle Zeit in Nanosekunden>. <Zeichenkette „Robotron“>. <aktuellen Nutzer> Damit sollte die Eindeutigkeit der Message-ID auch beim Parallelbetrieb gewährleistet sein. 7.3.6.3 Datenversand bleibt hängen Mit JavaMail 1.5.1 und KOMA-EXPORTCOM_SENDER_MEX ab Version 4.0.2.25 ist es möglich ein Timeout für das Versenden von Mails zu definieren. Über den Parameter export.MEX.smtp.writetimeout kann der Timeout (in der Config.properties) definiert werden. Beispiel für 10 Minuten = 600 Sekunden = 600000: export.MEX.smtp.writetimeout=600000 7.3.6.4 NTLM-Domain (bad username or password) Hier Prüfung, ob die NTLM-Domain spezifiziert ist, entweder in Form von „domain/user“ bei dem Nutzernamen (in ecount in der Maske Kommunikationseinstellungen MF_RIMPORT bei Benutzername) oder in Form der Config.properties-Einstellung export.MEX.smtp.auth.ntlm.domain=domain. Unter Umständen muss noch die Plain-Authentifizierung explizit deaktiviert werden: export.MEX.smtp.auth.plain.disable=true 7.3.6.5 Sonderzeichen werden verstümmelt (z. B. kyrillisch) Zeichen die nicht ISO_8859_1 entsprechen, können beispielsweise als UTF-8 übertragen werden. export.MEX.TextEncoding = UTF-8 7.3.6.6 SMIME – NullPointerException (SMIME_EncryptionHandler:200) Beim Versenden eines verschlüsselten Exportauftrages per E-Mail (und aktivierten SMIME) kommt es zum folgenden Fehler: java.lang.NullPointerException (at de.robotron.ecount.smime.SMIME_EncryptionHandler:200 Seite 152 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Im vorliegenden Fall lag das Problem an einer, per Config.properties, zusätzlich definierten BCC-Adresse (export.MEX.BCC=EDM-xxx-OUT@xyz.DE). Bei Verschlüsselung wird versucht, auch die Nachricht an den BCC zu verschlüsseln. Für diesen BCC-Eintrag ist jedoch kein Zertifikat vorhanden, was intern zum Abbruch führt. Der Fehler wurde jedoch nicht erwartet und damit nicht korrekt abgefangen. Mit eCount- 00052099 (exportcom/encryption_smime.jar Version 4.0.2.13) wurde das Problem wie folgt gelöst: Ist in der Config.properties mittels export.MEX.BCC oder export.MEX.CC eine weitere Adresse definiert und soll der Exportauftrag zusätzlich verschlüsselt werden, , so wird die Nachricht an die BCC bzw. CC Adresse unverschlüsselt verschickt, sofern für die definierte Adresse in export.MEX.BCC oder export.MEX.CC kein Zertifikat vorhanden ist. 7.3.6.7 5.7.1 Client does not have permissions to send as this sender Die Fehlermeldung: „com.sun.mail.smtp.SMTPSendFailedException: 550 5.7.1 Client does not have permissions to send as this sender“ ist unter Umständen die eigentliche Antwort vom Exchange Server (550 5.7.1 Unable to Relay). Dies bedeutet, dass der User/Server Mails nicht nach extern versenden darf. Eine Prüfung auf dem Exchange-Server kann wie folgt durchgeführt werden: Get-MessageTrackingLog -ResultSize Unlimited -Start "dd/MM/yyyy" EventID FAIL | ? {$_.RecipientStatus -match "550 5.7.1"} | fl Sollte die Vermutung stimmen, müsste die IP des Severs im ReceiveConnector (der zum weiterleiten „Relay“ gedacht ist) eingetragen werden. 7.4 Sendemodul FTP Das FTP Protokoll hat seinen Ursprung im Jahr 1971 als der erste RFC Eintrag (959) für das FTP Protokoll veröffentlicht wurde. FTP verfügt über Funktionen, Dateien auf einen anderen Computer/Server hochzuladen (Upload), herunterzuladen (Download), zu kopieren (Copy) und zu löschen (Delete). Zusätzlich können Verzeichnisse erstellt, gelöscht und gelesen werden. Für den FTP-Versand stehen in der KomA (wie beim Datenempfang) zwei unterschiedliche Implementierungen zur Verfügung. Diese können per Config.properties konfiguriert werden. Um Daten an einen FTP-Server zu senden, muss als Empfänger des Abos eine Adresse vom Typ FTP mit den notwendigen Zugangsdaten des FTP-Servers eingetragen werden. Die Adresse hat dann die Form: ftp://username:password@hostname[:port]/directory Falls bei der Kommunikation ein FTP-Proxyserver verwendet werden muss, so muss die angegebene Adresse die folgende Form haben: ftp://username*hostname[*port]:password@proxyhostname[:proxyport]/directory - username hostname port password proxyhostname proxyport Nutzername auf dem Zielserver Name bzw. IP-Adresse des Zielservers FTP-Port des Zielservers Passwort für Zugang zum Zielserver mit dem angegebenen Nutzer Name bzw. IP-Adresse des FTP-Proxyservers FTP-Port des Proxyservers Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 - directory Seite 153 von 384 Verzeichnis auf dem Zielserver Die Angabe der Ports ist optional und sollte nur erfolgen, wenn nicht der Standard-FTP-Port 21 benutzt wird. Sämtliche, beim ecount-Abo angegebenen Informationen, wie Betreff und Nachrichtentext, werden (anders als beim E-Mail-Versand) nicht ausgewertet. 7.4.1 Konfigurationsparameter Parameter für den Versand über FTP werden über die Config.properties-Datei gepflegt. Tabelle 7-6: Parameter für Versand über FTP Parameter/Beschreibung Standardwert export.FTP.CONNECTION_TIMEOUT 10 Timeout in Sekunden für den Verbindungsaufbau. Als Wert wird eine positive Ganzzahl zwischen 1 und 100 erwartet. (nur FTPSender2) export.FTP.passiv Y/N. Übertragung im Passiv-Modus? Default N, bei FTPS/FTPES ist der Modus automatisch aktiviert (Y). export.FTP.PROXY_HOST Host des Proxy-Servers (äquivalent zu export.FTP.proxyhost) (nur FTPSender2) export.FTP.PROXY_PASS Passwort des Proxy-Nutzers (nur FTPSender2) export.FTP.PROXY_PORT Port des Proxy-Servers (äquivalent zu export.FTP.proxyport) (nur FTPSender2) export.FTP.PROXY_TYPE Ausprägungen: HTTP, FTP, FTP_ACCT, SOCKS4, SOCKS5 (nur FTPSender2) export.FTP.PROXY_USER Proxy-Nutzer (nur FTPSender2) export.FTP.proxyhost Host des Proxy-Servers export.FTP.proxyport Seite 154 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Standardwert Port des Proxy-Servers export.FTP.READ_TIMEOUT 10 Timeout in Sekunden für Lese-Operationen. Als Wert wird eine postivie Ganzzahl zwischen 1 und 100 erwartet. (nur FTPSender2) export.FTP.security FTP Definition seit eCount- 00035779 nicht mehr notwendig. Mögliche Ausprägung: FTP, FTPS, FTPES. (nur FTPSender2) export.FTP.ssl_trust_all N Y/N. Mit Y kann allen Zertifikaten vertraut werden, obwohl das Zertifikat noch nicht im Java-Keystore hinterlegt ist (nur FTPSender2) export.FTP.tmp_extension .TMP Der Transfer einer Datei wird immer über eine temporäre Datei realisiert. Damit kein anderes Programm bereits auf die Datei zugreift, während diese noch geschrieben wird. (nur FTPSender2) Beispiel: .dat: export.FTP.tmp_extension = .dat export.sender.FTP.HandlerClass FTPSender Es existieren zwei FTP-Implementierungen, diese können über de.robotron.ecount.exportcom.sender.FTPSender oder *.FTPSender2 erfolgen. FTPSender2 basiert auf FTP4J und ist für den FTP-Versand die bessere Alternative (da neuere Bibliothek mit mehr Funktionsumfang). Aus Abwärtskompatibilitätsgründen steht der Default jedoch der älteren Bibliothek FTPSender. Bei der Nutzung von FTPS oder FTPES muss der Schlüssel FTP gegen FTPS oder FTPES getauscht werden. D.h. der Proxy-User „user1“ wird mit export.FTPS.PROXY_USER=user1 bzw. export.FTPES.PROXY_USER=user1 spezifiziert. 7.4.2 FTPS / FTPES Um eine gewisse Sicherheit zu gewährleisten, wurde in den folgenden Jahren nach RFC 2228 ein Sicherheitsstandard für FTP erstellt, um den Datenkanal durch den Einsatz von SSL (Secure Socket Layer) oder TLS (Transport Layer Security) zu verschlüsseln. Mit eCount- 00035779 wurde die direkte Unterstützung für FTPS / FTPES in ecount implementiert. 7.4.2.1 FTPES (FTP over explicit TLS/SSL) security level Wird über de.robotron.ecount.exportcom.sender.FTPSender2 realisiert. Es wird immer passives FTP (export.FTP.passiv=Y) bei FTPES genutzt. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 155 von 384 Bei der expliziten Methode muss der Client (KomA) die Sicherheit der Verbindung explizit beim Server anfordern. Das heißt es wird eine normale FTP Verbindung (über Port 21) hergestellt, die dann über das Kommando AUTH SSL (RFC 2228) in den verschlüsselten Modus umgeschaltet wird. 7.4.2.2 FTPS (FTP over implicit TLS/SSL) security level Wird über de.robotron.ecount.exportcom.sender.FTPSender2 realisiert. Es wird immer passives FTP (export.FTP.passiv=Y) bei FTPS genutzt. Im Impliziten Modus ist das Aushandeln einer Verbindung nicht erlaubt. Hier wird von Beginn an eine SSL verschlüsselte Verbindung erwartet, d.h. schon bei der Serveranmeldung wird die SSL Verbindung ausgehandelt. Um sich von anderen Verbindungsmöglichkeiten abzugrenzen, wird dies über Anschluss 990 durchgeführt. 7.4.2.3 Unterschied SSL und TLS TLS (Transport Layer Security) ist der Nachfolger von SSL (Secure Sockets Layer). Die letzte Version von SSL war 3.0, weshalb TLS 1.0 teilweise auch als SSL 3.1 bezeichnet wird. TLS verbessert den Sicherheitsaspekt, so gibt es u. a. bessere Pseudozufallsfunktionen, mit denen das Abhören von übermittelten Daten erschwert wird. 7.4.3 Feature PROXY_TYPE=FTP_ACCT Eine FTP-Verbindung wird über folgende Syntax aufgebaut: username@hostname proxyusername, Password, AccountPassword Aktiviert wird das Verfahren über die Config.properties-Einstellung: export.FTP.PROXY_TYPE=FTP_ACCT, dabei werden 2 Varianten unterstützt. Diese Feature existiert nur beim FTPSender2 sprich wenn folgender Config.properties-Eintrag vorhanden ist export.sender.FTP.HandlerClass=de.robotron.ecount.exportcom.sender.FTPSender2 7.4.3.1 Variante 1 Hostname = ProxyHost; Benutzername = user@ftphost (keine Nutzung von Proxy) Folgende Config.properties-Einstellungen sind erforderlich: - export.FTP.PROXY_TYPE=FTP_ACCT export.FTP.PROXY_HOST=<host des proxy über den die Verbindung aufgebaut wird> export.FTP.PROXY_PORT=<proxy port> export.FTP.PROXY_USER=<proxyusername> export.FTP.PROXY_PASS=<AccountPassword> Zusätzlich müssen über die Nachrichtenadresse (aus ecount) noch folgende Informationen übermittelt werden (FTP-Host und Password [+ implizit noch ein Benutzer]). Bei Variante 1 wird kein FTP-Proxy verwendet sondern der Proxy wird direkt angesprochen! Seite 156 von 384 7.4.3.2 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Variante 2 Hostname = FTPhost, Benutzername = user (Nutzung von Proxy) Die Angabe von Username+Hostname erfolgt über die Nachrichtenadresse nach der Syntax user@hostname im Feld für den Benutzernamen. Folgende Config.properties-Einstellungen sind weiterhin erforderlich: - export.FTP.PROXY_TYPE=FTP_ACCT export.FTP.PROXY_USER=<proxyusername> export.FTP.PROXY_PASS=<AccountPassword> export.FTP.PROXY_HOST=<proxy host> export.FTP.PROXY_PORT=<proxy port> Bei Variante 2 wird ein FTP-Proxy verwendet! 7.4.4 Feature – Überschreiben Seit eCount- 00046550 existiert die Möglichkeit, bereits vorhandene Dateien beim Senden via FTP zu überschreiben. Bei gesetzter Funktionalität zum Überschreiben (Maske Nachrichtenadressen > Feld Ü) wird bei dem Error-Code 553 versucht, die bereits existierende Datei auf dem FTP-Server zu löschen. Der Nutzer, mit dem die KomA gegen den FTP-Server verbunden wird, muss das Recht zum Löschen von Dateien haben! 7.4.5 Feature – „hidden-store“ Falls der FTP-Server das Feature hidden-store unterstützt, wird das „Verstecken“ der Datei vom Server vorgenommen. Damit braucht die KomA kein manuelles Hochladen als TMP-Datei und anschließendes Umbenennen mehr durchführen. Diese Funktionalität ist nur für den FTPSender2 gültig, d.h. Config.properties hat folgenden Eintrag: export.sender.FTP.HandlerClass=de.robotron.ecount.exportcom.sender.FTP Sender2 Per Default wird immer ohne hidden-store gearbeitet. Aktiviert wird dies über die Config.properties und folgender Einstellung: export.FTP.HIDDEN_STORE.<ftp-url>=Y Beispiel: FTP gegen „127.0.0.1“ auf Port „21“ soll mit hidden-store arbeiten: In der Maske Nachrichtenadressen (MF_NAS) den Eintrag unter Adresse kopieren: Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 157 von 384 Abbildung 7-3: Maske Nachrichtenadressen: FTP soll mit hidden-store arbeiten Config.properties: export.FTP.HIDDEN_STORE.ftp://127.0.0.1:21=Y Bei hidden-store wird die Logik für die Option Überschreiben auch an den FTP-Server übergeben! D.h. die Einstellung zum Überschreiben (Maske Nachrichtenadressen (MF_NAS) > Feld Ü) wird nicht mehr von der KomA ausgewertet. 7.4.6 Probleme/Lösungen 7.4.6.1 Allgemein – Verbindungsprobleme Die einfachste Variante herauszufinden ob die Verbindungsprobleme an den Netzwerkeinstellungen, an Firewallregeln oder an Benutzerrechten liegen ist der Test mit einen externen FTP-Tool (z.B. FileZilla) direkt auf den KomA-Server. Dieses FTP-Tool muss mit dem gleichen Nutzer ausgeführt werden wie der KomA-Prozess um etwaige Probleme mit Benutzerrechten ausschließen zu können! Sollte die Verbindung und die Übertragung der Datei ohne Probleme funktionieren handelt es sich zu großer Wahrscheinlichkeit um ein Konfigurationsproblem mit der FTP-Verbindung oder den ProxyServer. Sollte die Verbindung und die Übertragung einer Datei auch nicht mit einen externen Tool funktionieren handelt es sich um ein Problem in den Netzwerk- und Firewall Einstellungen (Ports ggf. deaktiviert, …). Dieses Problem muss von der zuständigen die IT-Abteilung analysiert werden. 7.4.6.2 Allgemein – FTP-Bibliothek Auf der KomA existieren für die Nutzung von FTP-Servern aktuell 2 Implementierungen. Der de.robotron.ecount.exportcom.sender.FTPSender basiert auf einer sehr alten Bibliothek die aktuell nicht mehr empfehlenswert ist, da diese zahlreiche Probleme mit aktuellen FTP-Servern hat. Die neue Implementierung (de.robotron.ecount.exportcom.sender.FTPSender2) basiert auf ftp4j und ist deutlich leistungsfähiger und stabiler. Welcher FTPSender verwendet wird, wird über die Config.properties-Datei mit der Einstellung export.sender.FTP.HandlerClass gesteuert: Beispiel: Explizite Nutzung von FTPSender2 export.sender.FTP.HandlerClass=de.robotron.ecount.exportcom.sender.FTPSender2 Seite 158 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Beispiel: Explizite Nutzung von FTPSender export.sender.FTP.HandlerClass=de.robotron.ecount.exportcom.sender.FTPSender Taucht in der Fehlermeldung der FTPSender auf, ist es ratsam auf den FTPSender2 umzustellen um zu schauen ob Probleme mit der neuen Bibliothek implizit behoben sind. Bei allgemeinen Problemen (Netzwerkfehlern, fehlende Berechtigungen, Serverausfällen, …) bringt die Umstellung jedoch auch keinen Erfolg. 7.4.6.3 Timeout bei großen Dateien Werden große Dateien heruntergeladen und ist gleichzeitig die Netzwerkverbindung sehr langsam, kann dies beim Download zu einem „Connection time out“ Fehler führen. Unter Umständen hilft es schon, den Default-Timeout zu erhöhen (z. B. auf 120 Sekunden via: timeout=120) 7.5 Sendemodul SFTP Das SSH File Transfer Protocol oder Secure File Transfer Protocol (SFTP) ist eine für die Secure Shell (SSH) - UNIX Systeme - entworfene Alternative zum File Transfer Protocol (FTP), die Verschlüsselung ermöglicht. SFTP ist ein binäres Protokoll, das im RFC 4253 beschrieben wird. Die Abkürzung SFTP wird häufig falsch verwendet, um "Secure FTP" zu beschreiben, das ist jedoch falsch! Auch wird der Begriff SFTP häufig fälschlicherweise als "FTP over SSL" verwendet, was ebenfalls nicht korrekt ist -> "FTP over SSL" ist FTPS. 7.5.1 Konfigurationsparameter Die Einstellungen werden in der Config.properties vorgenommen. Tabelle 7-7: Konfigurationsparameter für Sendemodul SFTP Parameter/Beschreibung export.SFTP.PROXY_TYPE Konfiguration des Typs des Proxy, mögliche Werte sind HTTP, SOCKS4, SOCKS5 export.SFTP.PROXY_HOST Host des Proxyservers export.SFTP.PROXY_PORT Port des Proxyservers export.SFTP.SOCKET_TIMEOUT Timeout in Sekunden (Default 35). Dieses Timeout wird erst nach dem Verbindungsaufbau aktiv. export.SFTP.CONNECTION_TIMEOUT Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 159 von 384 Parameter/Beschreibung Ganzzahl zwischen -1 und 900 (Default 30), mit -1 wird das Feature deaktiviert. Gibt die Anzahl an Sekunden an die der Verbindungsaufbau dauern kann. Diese Funktion ist notwendig, da es bei Problemen beim SFTP-Verbindungsaufbau zum Stillstand des gesamten KomAs (Datenversand) kam. 7.5.2 Konfiguration – ecount (Nachrichtenadresse pflegen) Maske MF_NAS: Export > Nachrichtenadresse Dabei muss die Nachrichtenadresse immer mit sftp:// beginnen. Die Angabe des Hosts ist Pflicht, die Angabe des Ports ist optional und wird durch einen Doppelpunkt gekennzeichnet. Beispiel: Angabe nur von Host (sftp://<host>) sftp://192.168.0.1 Beispiel: Angabe von Host/Port (sftp://<host>:<port>) sftp://192.168.0.1:22 Nutzer/Passwort werden über ein Fenster gepflegt, welches durch einen Doppelklick auf die Adresse geöffnet wird: Abbildung 7-4: Konfiguration – Nachrichtenadresse pflegen Seite 160 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 7-5: Nachrichtenadressen Benutzer/Passwort 7.5.3 Feature Überschreiben Mit eCount- 00047098 wurde die Unterstützung zum Überschreiben bereits vorhandener Dateien auf dem SFTP-Server implementiert. Aktiviert wird das Feature im ecount in der Maske Nachrichtenadressen (MF_NAS) über die Eigenschaft Ü (Überschreiben). Abbildung 7-6: Aktivierung der Option zum Überschreiben Der Nutzer muss das Recht zum Löschen (Delete) von Dateien auf den SFTP-Server besitzen! 7.6 Sendemodul FILE (Dateiverzeichnis) Zum Versenden von Daten an ein Verzeichnis muss die Adresse vom Typ FILE sein. Die Angabe des Verzeichnisses kann relativ zum Kommunikationsbasisverzeichnis oder auch absolut sein. Bei der Angabe eines absoluten Pfades können auch freigegebene Verzeichnisse auf anderen Rechnern im Netzwerk spezifiziert werden. An dieser Stelle muss gewährleistet werden, dass das entsprechende Verzeichnis vom Kommunikationsrechner aus erreichbar und mit Schreibrechten versehen ist (d.h. der Nutzer, mit dem der Datenversand-JOB ausgeführt wird, muss privilegiert sein, auf das Verzeichnis zuzugreifen und zu schreiben). Die Angabe der Adresse muss URL-konform erfolgen und hat dann die Form: file://verzeichnis. Dabei ist die Spezifikation des Verzeichnisses abhängig vom Betriebssystem des Kommunikationsrechners. Bei einer Windows-Plattform kann das folgendermaßen aussehen: file://\\computername\verzeichnis\unterverzeichnis. Bei Linux sollte ein Ordner-Pfad wie file:////home/user/dir als absolut erkannt werden. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 161 von 384 Hinweise: Die für die Datenübertragung verwendeten Verzeichnisse müssen für den Nutzer, in dessen Konto die Datenversandkomponente läuft, schreibbar sein. Sämtliche beim Abo angegebenen E-Mail-spezifischen Informationen, wie Betreff und Nachrichtentext, werden nicht ausgewertet. 7.6.1 Technische Vorgehensweise Beim Kopieren einer Datei in ein Verzeichnis wird zuerst die Datei mit der Erweiterung .TMP erstellt. Anschließend werden die Daten (Byte für Byte) transferiert und erst nach dem erfolgreichen Übertragen der gesamten Datei, wird diese auf dem Zielsystem umbenannt (sprich die Endung .TMP wird wieder entfernt). Sollten andere Prozesse auf Daten in diesen Ordner zugreifen und lesen, muss also sichergestellt werden, dass Dateien mit der Endung .TMP davon ausgeschlossen werden. Anderenfalls würden unvollständige Dateien von den Nachfolgeprozessen verarbeitet. 7.6.2 Konfigurationsparameter Die Parameter werden in der Config.properties gepflegt. Tabelle 7-8: Parameter für Versand über FILE Parameter/Beschreibung Standardwert export.FILE.BufferSize Anzahl der Bytes (Byte-Buffer) die beim Kopieren der Datei auf das Verzeichnis verwendet werden. Der Standardwert sollte in den meisten Fällen ausreichen. 65536 export.File.CreateDirectory Y Y/N. Automatisches Anlegen von Verzeichnissen, wenn diese noch nicht existieren. Es wird ein Fehler erzeugt, wenn das Verzeichnis nicht existiert und diese Einstellung auf N gesetzt ist. export.FILE.RenameToNumberOfAttempts 1 Anzahl der Versuche für die Dateiumbenennung. Positive Ganzzahl (sinnvolle Werte zwischen 1 und 10). 7.6.3 Probleme/Lösungen 7.6.3.1 Zielverzeichnis X existiert nicht und konnte nicht angelegt werden Probleme beim Schreiben auf Netzlaufwerke sind in den meisten Fällen keine direkten Probleme des File-Sendemoduls auf dem KomA. Vielmehr muss beim Schreiben auf Netzlaufwerke Folgendes beachtet und bei Problemen untersucht werden: - Kann ein Rechteproblem ausgeschlossen werden? Sprich hat der Nutzer, mit dem der Datenversand-Job ausgeführt wird das Recht, auf den Ordner zuzugreifen und Daten anzulegen (und zu löschen, da mit temporären-Dateien gearbeitet wird)? Seite 162 von 384 - Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Sind Firewall-Regeln/Proxy-Einstellungen aktiviert oder angepasst worden, sodass der Zugriff vom KomA-Server auf das Netzlaufwerk blockiert wird? Allgemeine Netzwerkprobleme (z. B. aufgrund hoher Auslastung, mutierende Virenscanner) 7.6.3.2 Fehler beim Umbenennen der temporären Datei (kurzzeitige Netzwerküberlastung) Sollte es beim Umbenennen der temporären Datei zu einer Fehlermeldung kommen („Temporäre Datei *.txt.TMP konnte nicht nach *.txt umbenannt werden“) und liegt das Problem am Netzwerk oder anderen kurzzeitigen Unterbrechungen, so könnte die Einstellung export.FILE.RenameToNumberOfAttempts helfen. Mit export.FILE.RenameToNumberOfAttempts=x wird das Umbenennen der Datei x Mal versucht. Nach jedem gescheiterten Versuch wird eine halbe Sekunde (500 Millisekunden) gewartet. Sinnvolle Werte sind zwischen 1 und 10. Sollte es trotz mehrmaliger Versuche weiterhin zu der Fehlermeldung kommen, kann das Problem ggf. durch andere Softwarekomponenten verursacht worden sein (z. B. ein Virenscanner der die Datei gelockt hat oder Ähnliches). 7.7 Sendemodul SMB: Samba Der Sendertyp "SMB", der Samba unterstützt und damit auch die Übergabe von Nutzername und Passwort zulässt, basiert auf der Open Source Bibliothek Java CIFS, welches Unterstützung für das CIFS/SMB-Protokoll in Java anbietet. Der FileSender kann die Funktionalität bezüglich Nutzernamen und Passwort nicht anbieten! Die Definition der Adresse erfolgt wie gewohnt in der Maske Nachrichtenadressen (MF_NAS). SMB-URL muss nach folgendem Muster definiert werden: smb://server[:port]/[[share/[dir/]file]] Nutzername und Passwort werden separat über die Maske (z. B. per Doppelklick auf die Adresse) eingetragen. Soll neben dem Nutzer auch eine Domain angeben werden, muss die Domain zusammen mit dem Nutzer getrennt durch ein ; im Feld Benutzer eingetragen werden Domain;Nutzer. Diese Informationen werden dann in die URL eingefügt, welche folgendes Muster hat: smb://[[domain;]username[:password]@]server[:port]/[[share/[dir/]file] ]) Wichtig: SMB URL, die Workgroups, Server oder Verzeichnisse repräsentieren, müssen mit einen Slash / enden! Beispiele: smb://serverToConnect/tmp/ oder smb://storage15/public/ Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 163 von 384 Abbildung 7-7: Beispiel Adresse für Samba-Zugriff durch ecount 7.7.1 Konfigurationsparameter Die Parameter werden in der Config.properties gepflegt. Tabelle 7-9: Parameter für Versand über SMB Parameter/Beschreibung export.SMB.global_user Globaler Nutzer für SMB-Verbindungen. Wird immer in Verbindung mit export.SMB.global_pass ausgewertet. Diese Einstellung werden für jede SMB-Verbindung verwendete die keine eigene Nutzer/PasswortAngaben enthalten. Sobald eine SMB-Verbindung einen eigenen Nutzer definiert hat, wird der Parameter (und auch export.SMB.global_pass) ignoriert. export.SMB.global_pass Globales Passwort für SMB-Verbindungen export.SMB.CreateDirectory Y/N (Default N). Mit dieser Einstellung ist es möglich das automatische Anlegen von Verzeichnissen zu aktivieren falls der Pfad aktuell noch nicht existiert. Die Erstellung der Verzeichnisse ist nicht möglich für URLs wie: -smb:// -smb://workgroup/ -smb://server/ -smb://server/share/ Weil Workgroups, Servers, and Shares nicht dynamisch erstellt werden können. Seite 164 von 384 7.7.2 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 NTLM Ist der Einsatz von NTLM (Authentifizierungsverfahren für Rechnernetze) erforderlich, muss dies für die SMB-URL in der Datei Config.properties auf der KomA explizit aktiviert werden. Ist NTLM aktiviert, werden Nutzer und Passwort (definiert in der Maske MF_NAS) für die NTLM-Authentifizierung genutzt. Aktiviert wird die Eigenschaft über die Einstellung: export.SMB.NTLM.<smb_url_ohne_smb://>=Y Beispiel: Nutzer mit Domain, Passwort und URL Maske MF_NAS: Benutzer: domain;user0815 Passwort: myPass URL: smb://serverToConnect/tmp/ Config.properties export.SMB.NTLM.serverToConnect/tmp/=Y Hinweise: export.SMB.NTLM. ist immer anzugeben nun folgt die URL ohne smb:// aktiviert über den Parameter Y (der Default ist N) 7.7.3 Beispiel SMB-URL (Auszug aus Java CIFS, daher English) Tabelle 7-10: Beispiel SMB-URL SMB-URL / Decription smb://users-nyc;miallen:mypass@angus/tmp/ This URL references a share called tmp on the server angus as user miallen who's password is mypass. smb://angus/ This references only a server. The behavior of some methods is different in this context (e.g. you cannot delete a server) however as you might expect the list method will list the available shares on this server. smb://myworkgroup/ This syntactically is identical to the above example. However if myworkgroup happends to be a workgroup (which is indeed suggested by the name) the list method will return a list of servers that have registered themselves as members of myworkgroup. smb://192.168.1.15/ADMIN$/ The server name may also be an IP address. See Setting Name Resolution Properties for details. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 165 von 384 SMB-URL / Decription smb://domain;username:password@server/share/path/to/file.txt A prototypical example that uses all the fields. smb://myworkgroup/angus/ <-- ILLEGAL Despite the hierarchial relationship between workgroups, servers, and filesystems this example is not valid. smb://server/share/path/to/dir <-- ILLEGAL URLs that represent workgroups, servers, shares, or directories require a trailing slash /. smb://MYGROUP/?SERVER=192.168.10.15 SMB URLs support some query string parameters. In this example the SERVER parameter is used to override the server name service lookup to contact the server 192.168.10.15 (presumably known to be a master browser) for the server list in workgroup MYGROUP. 7.7.4 Features 7.7.4.1 Dateien überschreiben Der SMB-Sender unterstützt die Funktionalität zum Überschreiben von Dateien. Diese Funktion wird bei der Nachrichtenadresse (MF_NAS) über die Checkbox Ü gepflegt. Ist die Funktion aktiviert und existiert die Datei auf den Zielverzeichnis bereits, wird die vorhandene Datei gelöscht. 7.7.4.2 Dateien umbenennen (wenn bereits vorhanden) Existiert die zu exportierende Datei bereits auf dem Zielverzeichnis (= Datei mit den gleichen Dateinamen ist bereits vorhanden) und soll diese nicht überschreiben werden kann der Dateiname um einen Zähler erweitert werden. Dabei wird, wie bei File, die Einstellung export.FILE.counterDigits ausgewertet. Ist also Beispielsweise export.FILE.counterDigits=2 konfiguriert und existiert die Datei „ABC.txt“ auf dem Zielsystem schon, wir die Datei nach „ABC.01.txt“ umbenannt. Der Zähler wird solange hochgezählt bis die Datei nicht existiert, oder bis der Parameter export.FILE.counterDigits erschöpft ist (in dem Fall wird der Export mit Fehler beendet). Bei der Beispieleinstellung von 2 könnten also max. 99 Dateien abgelegt werden. 7.8 Allgemeine Probleme/Lösungen In diesem Kapitel werden allgemeine Hinweise zu Problemen dargestellt, die nicht direkt mit einem Sendemodul in Verbindung stehen. Seite 166 von 384 7.8.1 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Erzeuger der Exportaufträge (Abo) finden Auf Grundlage der XML-Datei kann ggf. über den Betreff das Abo gefunden werden. Abbildung 7-8: Ermittlung des Abos SELECT * from email_abos x WHERE x.betreff_esk LIKE 'Eskalation%'; oder SELECT * from email_abos x WHERE x.betreff LIKE 'Eskalation%'; 7.8.2 SELECT EAU did not finish in 10000 ms, so temporarily release lock Wenn diese Warnung in den LOG-Dateien auftaucht sollte folgendes geprüft werden: - Sind die Jobs für die Bereinigung der Export-Aufträge aktiv (eCount- 00038854). Sind die DB Indexe in Ordnung (siehe Hinweise Kapitel 3.3.1.1). Ist ggf. die eine selbstdefinierte SQL_Select_Next_EAU.sql Abfrage aktiv und mangelhaft. Das Statement zur Abfrage der Exportaufträge wird vor jedem neuen Exportauftrag ausgeführt und vom Ergebnis wird der erste Datensatz genommen und abgearbeitet. Das Statement wurde insbes. auch für den Fall entwickelt, dass mehrere KomA-Instanzen für den Export aktiv sind. Die nächste KomA bekommt dann den nächsten Datensatz aus der Ergebnisliste. 7.8.3 Datenversand erstellt zahlreiche Dateien im E-Mail-Ordner Beim Export werden im Unterordner Email (Verzeichnisname wird gesteuert über export.archive_dir) zahlreiche Dateien unter Email/Email (export.email_dir), Email/xml (export.xml_dir) und Email/format (export.format_dir) abgelegt. Die Ablage dieser Daten kann mit den folgenden Einstellungen in der Config.properties unterbunden werden. - export.write_xml = N export.MEX.writemailfile = N export.deleteformatfile = Y (Korrektur des Parameters in eCount- 00055161) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 7.8.4 Seite 167 von 384 Error: Encrypt/Sign failed (in SMIME_EncryptionHandler/MailSender) Exporte laufen auf Fehler, weil das Signieren der E-Mail fehlschlägt (ggf. weil gar kein privater Schlüssel für den Absender im SMIME-Modul gepflegt ist). Diese Exporte sollen jedoch nur verschlüsselt versendet werden (im Abo ist das Kontrollfeld Verschlüsselung, aber nicht das Kontrollfeld Signatur ausgewählt). Dieses Verhalten wird aber nur beim Format MSCONS angewendet! Mit eCount- 00055875 (lfd. Nr. R 5.1 2047) wurde folgende Änderung vorgenommen: In der Tabelle NAS_ADRESSEN wurde die Spalte SIGNIEREN hinzugefügt. Diese Spalte ist unter Export > Nachrichtenadressen als Kontrollfeld Signatur sichtbar. Hierbei wurde im KM zusätzlich eine Migration durchgeführt. Diese Spalte wurde für alle Nachrichtenadressen aktiviert, die ein Zertifikat (in der Tabelle NAS_ZERTIFIKATE) gepflegt hatten. Was hat es nun mit dieser Spalte auf sich? Beim Datenversand an eine Nachrichtenadresse wird nun geprüft, ob es sich um einen MSCONSVersand handelt. Ist dies der Fall, wird hier immer die Spalte SIGNIEREN aus NAS_ADRESSEN für den Export-Auftrag verwendet. Sprich dieser Wert wird in die Tabelle EXPORT_ECOUNT in die Spalte SIGNIEREN geschrieben. Steht in dieser Spalte der Wert J oder Y, wird die Nachricht auf der KomA signiert (bzw. es wird versucht zu signieren). Die Abo-Einstellung Signatur bleibt in dem Fall völlig außen vor. Bei anderen Abos (also bei Formaten ungleich MSCONS) wird die Abo-Einstellung weiterhin berücksichtigt. Es bestehen jetzt meist 2 Workarounds: 1. (Empfehlung): Bitte in der Maske Nachrichtenadressen (MF_NAS) prüfen, ob für die entsprechende Nachrichtenadresse das Kontrollfeld Signieren aktiviert ist. Wenn ja, bitte deaktivieren (SIGNIEREN=N). 2. Für die entsprechende Absender-E-Mail-Adresse zusätzlich die Voraussetzung (privaten Schlüssel) auf dem Tomcat schaffen, um auch die Signatur erfolgreich durchführen zu können. 7.8.5 Schlechte Performance bei Abfrage der Export-Aufträge Unter der Annahme, es bestehen keine DB- oder Netzwerkfehler, können die folgenden Ursachen der Grund für mangelnde Performance beim Datenversand sein. Unter Umständen existiert im config-Unterordner die Datei SQL_Select_Next_EAU.sql. Mit dieser Datei kann ein SQL-Statement hinterlegt werden, um den nächsten Export-Auftrag-Datensatz zu selektieren. Es ist zu prüfen, ob dieses SQL unzureichend definiert wurde oder ob notwendige Indexe auf den jeweiligen Tabellen fehlen. Die Indexe sind, je nach Ausprägung der SQL_Select_Next_EAU.sql, ggf. kundenspezifisch anzulegen. Ggf. beinhalten die Tabellen EXPORT_ECOUNT und EXPORT_AUFTRAG zu viele Datensätze, um ein performantes Arbeiten zu garantieren. Es ist zu prüfen, ob die Bereinigung der Tabelle EXPORT_AUFTRAEGE (siehe eCount-00038854) aktiviert ist. Seite 168 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 8 LPL-Spool (Lineare Protokolle) Mit dieser Anwendung kann die Archivierung der linearen Protokolle erfolgen. Die Protokolle sind in den Tabellen LINEARE_PROTOKOLLE, LINEARE_PROTOKOLLE_EXT und LINEARE_PROTOKOLLE_APP_EXT hinterlegt. LPL-Spool kann wie der Datenempfang, Datenimport, Datenversand aufgerufen werden. Das im Auslieferungszustand enthaltene Startskript heißt lplspool.cmd bzw. lplspool.sh. Es empfiehlt sich diese Startskripte per JOB mindestens 1x in der Woche (am besten in den Nachtstunden am Wochenende) auszuführen. Dabei werden die Daten aus den Tabellen in eine ZIP-Datei geschrieben und auf dem Dateiverzeichnis abgelegt. Anschließend wird der Datensatz im robotron*ecount als archiviert markiert sodass später DB-Jobs auf den Tabellen arbeiten können. Der DB-Job trägt den Namen Bereinigung Protokolle (JOB-ID: 000004) und ist an die Lizenz EC_BAS geknüpft. Hinweise: Technisch: Für den konkreten Datensatz wird das aktuelle Systemdatum in der Spalte ARCHIVIERT gesetzt: UPDATE EC_PRT.LINEARE_PROTOKOLLE SET ARCHIVIERT = SYSDATE WHERE… Hinter dem DB-Job Bereinigung Protokolle verbirgt sich pkg_lpl.prc_loeschen_protokoll, neben dem Wert in der Spalte ARCHIVIERT, wird auch der globale Parameter LOESCHEN_PROTOKOLL ausgewertet. Damit können die Protokolle auch ohne die Nutzung von LPL-Spool gelöscht werden. Folgende Parameter können in der Config.properties definiert werden. Tabelle 8-1: Parameter für LPL-Spool (Lineare Protokolle) Parameter/Beschreibung Standardwert lplSpool.targetDir lplspool Zielverzeichnis für Protokolle relativ zum Kommunikations-Basisverzeichnis oder als (im Basisverzeichnis) absolute Pfadangabe lplSpool.logfile Dateiname für die LOG-Datei lplSpool.logfile.maxSize Maximale Größe der LOG-Datei in Bytes (seit eCount- 00047558) lplspool.log 5242880 (=5MB) lplSpool.MAX_QUERY_ITERATION maximale Anzahl an Durchläufen/Abfragen für LINEARE_PROTOKOLLE pro JOB-Lauf 1000 (seit eCount- 00047558) lplSpool.folderNameFormat Verzeichnisnamenskonvention für die Zielverzeichnisse anhand des Datums (= Wert aus LINEARE_PROTOKOLLE.DATUM). Per Default werden die Protokolle yyyyMM Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Seite 169 von 384 Standardwert monatlich (yyyyMM) in Ordnern abgelegt. Mögliche Kombinationen sind z. B. yyyyMM oder yyyy/MM oder yyyy/MM/dd 8.1 8.1.1 Probleme/Lösungen LOG-Datei wird nicht archiviert Fehlerbehebung in eCount- 00047558: Die Prüfung auf logfile.maxSize (Einstellung in der Config.properties) war nicht implementiert, die LOG-Datei wurde dadurch nie archiviert. Der Default für logfile.maxSize wurde auf 5 MB (5242880 bytes) erhöht, nach Überschreitung dieses Wertes wurde die Datei in eine ZIP-Datei verpackt und neu geschrieben. Die Prüfung findet periodisch statt, daher können einzelne LOG-Dateien etwas größer als 5 MB sein. Der Dateiname der ZIP-Datei wird mit dem aktuellen Datum+Uhrzeit erstellt. Seite 170 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 9 Archivierung Die Komponente Archivierung ermöglicht einen automatisierten Aufräum-Job für alte Dateien. Sie ermöglicht eine flexible Konfiguration von zu archivierenden Dateien und den auszuführenden Archivierungsoperationen. Die Konfiguration erfolgt über eine einfache Text-Datei <BASE>/config/archive.ini, für die ein kommentiertes Beispiel unter <BASE>/config/samples mitgeliefert wird. Diese enthält auch eine vollständige Dokumentation (siehe Anlage 5 Konfigurationsbeispiele für Loader-Import). An dieser Stelle wird nur noch einmal das Wesentliche kurz erläutert. Gestartet wird das Programm über die Datei archivierung.(cmd|sh). Die Datei enthält zeilenweise Konfigurationen für Archivierungsaufträge, nach folgender Syntax: Tabelle 9-1: Syntax für die Konfigurationen für Archivierungsaufträge <Dateiendung> <Verzeichnis> <Optionen> <Min-Alter> <Aktion> [<Parameter> ...] Parameter Bedeutung Dateiendung Dateiendung für zu verarbeitende Dateien oder * für alle Dateien Verzeichnis Angabe absolut oder relativ zum KomA-Basisverzeichnis Optionen Es können mehrere Optionen angegeben werden, möglich sind: -recursive Unterverzeichnisse werden ebenfalls durchsucht -zipcontent Angabe des Alters bezieht sich auf die neueste in einer Zip-Datei enthaltene Datei. Ist eine Datei keine gültige Zip-Datei, wird diese Option ignoriert. -noerror Die Aktion wird nur dann ausgeführt, wenn die Datei eine Zip-Datei ist und eine .err-Datei enthält und diese leer ist. Befindet sich die zugehörige Datendatei in einer anderen Zip-Datei, wird die Aktion auch für diese Datei ausgeführt. -deleteEmptyDirs Möglichkeit zur Löschung von leeren Quellverzeichnissen. Prüfung wird nur auf dem direkten Oberverzeichnis der aktuellen Datei und nach jeder Datei ausgeführt. Dies kann bei sehr vollen Verzeichnissen zu Performanceproblemen führen. Minimum-Alter Angabe einer ganzen Zahl gefolgt von einer Zeiteinheit oder nur 0 für sofort. Zeiteinheiten: h=Stunde, d=Tag, w=Woche, m=Monat, y=Jahr Beispiele: 6 Monate -> 6m 2 Wochen -> 2w 1 Jahr -> 1y 7 Tage -> 7d Eine Kombination (z. B. 7 Tagen und 5 Stunden) ist nicht möglich. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 171 von 384 <Dateiendung> <Verzeichnis> <Optionen> <Min-Alter> <Aktion> [<Parameter> ...] Aktion test Testet die Bedingungen, es erscheint nur eine Ausgabe im Logfile, welche Dateien verarbeitet würden. delete Betreffende Dateien werden gelöscht. move Verschiebt Dateien in das angegebene Zielverzeichnis. Parameter backup optional Parameter Zielverzeichnis Pflicht zip Betreffende Dateien werden einzeln in Zip-Dateien verschoben. Parameter backup optional Parameter Zieldatei optional (Fehlt dieser Parameter, wird eine Zip-Datei an derselben Stelle und mit demselben Namen wie die Quell-Datei mit der zusätzlichen Endung ".zip" angelegt.) Zip-Dateien werden von der Zip-Funktion nicht erneut gepackt sondern übersprungen, somit ist es möglich als Dateierweiterung auch den Platzhalter (*) zu verwenden. (Parameter) Zielverzeichnis relativ zu Basisverzeichnis der Regel oder absolut Es können hierbei Platzhalter angegeben werden: $day$ Tag des Monats 2-stellig der Datei $week$ Kalenderwoche der Datei $month$ Monat 2-stellig der Datei $year$ Jahr 4-stellig der Datei $dir$ Verzeichnis relativ zum Basisverzeichnis der Regel incl. abschließendem Pfad-Separator ('/' oder '\') Achtung: nur entweder ohne Option "-recursive" oder mit absolutem Zielverzeichnis außerhalb des Regel-Basisverzeichnisses verwenden, sonst entsteht zeitliche Kaskadierung (Parameter) backup Dateien, die mit der Ziel-Datei in Konflikt stehen, werden umbenannt nach *.~nn.*; ohne diesen Parameter werden sie überschrieben (Parameter) Zieldatei Ziel-Zip-Datei kann mit den Platzhaltern (siehe Parameter Zielverzeichnis) angegeben werden. Zusätzlich können folgende Platzhalter verwendet werden: $filename% = originaler Dateiname ohne Endung $fileext% = originale Dateiendung ohne Punkt Hinweise: Seite 172 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Enthält irgendein Wert, wie z. B. Verzeichnisname, ein Leerzeichen, kann der gesamte Wert in Anführungszeichen ("") eingeschlossen werden. Enthält ein Wert selbst Anführungszeichen oder das Quote-Zeichen '\', kann dieses durch vorgestelltes '\' entwertet werden. Pfad-Angaben für Windows-Systeme können statt des üblichen '\' als Verzeichnis-Trennzeichen alternativ mit '/' separiert werden. Für einen reibungslosen Betrieb ist die Archivierung zwingend erforderlich! Da ansonsten die Verzeichnisse immer weiter anwachsen, was im schlimmsten Fall den Absturz des gesamten Servers zur Folge haben kann (das Limit bei Windows Server 2003 liegt z. B. bei 4.294.967.295 Dateien, dieses Limit wurde jedoch schon auf Systemen erreicht). 9.1 Konfigurationsparameter Tabelle 9-2: Konfigurationsparameter für die Archivierungsaufträge Parameter/Beschreibung Standardwert archive.ini_file archive.ini Konfigurierungsdatei für die Archivierung, absolut oder relativ zu Config.properties archive.log archive.log LOG-Datei für Archivierung archive.log.maxSize 500000 Maximale Größe für LOG-Datei in Bytes (z. B. 5 MB kann mittels 5242880 definiert werden) archive.port <common.base_port> Positive Ganzzahl. TCP-Port zur Sperrbehandlung bei Archivierung archive.shutdown_command SHUTDOWN Kommando zum Beenden der Archivierung nach aktueller Aktion über den TCP/IP-Listener archive.original_date_for_zip N Y/N. Mit Y wird bei den Zippen von Dateien das Datum der Zip-Datei auf das Datum der gepackten Daten gestellt. Das ist sinnvoll wenn beispielsweise Text-Dateien gepackt werden aber zur Recherchezwecken das Datum erhalten bleiben soll. 9.2 Relevante Ordner für die Archivierung Folgende Ordner werden standardmäßig im laufenden Betrieb zur Ablage von Daten genutzt. - Email/xml – Ablage der internen XML-Datei beim Export Email/format – Ablage der erstellten Datei Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 - Seite 173 von 384 Email/Email – Ablage der E-Mail, falls der Exportauftrag an eine E-Mail-Adresse versendet wird importmail – Ablage aller E-Mails, die vom Comimport abgeholt werden log – Alle LOG-Dateien lplspool – Falls lineare Protokolle von der KomA abgeholt werden weitere Ordner je nach Kundensystem, es ist beispielsweise denkbar, dass der Comimport alle Daten in den Unterordner import ablegt, dann sollte auch dieser Ordner bereinigt werden. Hierbei muss der Kunde entscheiden, ob die Daten im Archivordner gesichert oder einfach nur gelöscht werden sollen. 9.3 9.3.1 Beispiele (archive.ini) Löschen aller Daten die älter als 6 Monate sind * email -recursive 6m delete * importmail -recursive 6m delete * log 6m delete * lplspool -recursive 6m delete Die Verzeichnisangabe erfolgt relativ, ausgehend vom aktuellen Verzeichnis der KomA. Über den Parameter –recursive wird mitgeteilt, dass auch alle Unterordner (falls vorhanden) einbezogen werden sollen. Die Angabe der 6 Monate erfolgt über 6m, gefolgt vom Löschen-Befehl. 9.3.2 Verschieben aller Daten die älter als 1 Monat sind ## Alle Mail-Dateien, die älter als 1 Monat sind, in Unterverzeichnisse mit ## Monat und Jahr im Namen verschieben: * email -recursive 1m move backup ../archiv/email/$year$$month$/email/$dir$ * importmail -recursive 1m move backup ../archiv/importmail/$year$$month$/email/$dir$ * log 1m move backup ../archiv/log/$year$-$month$/email/$dir$ * lplspool -recursive 1m move backup ../archiv/lplspool/$year$$month$/email/$dir$ Die Verzeichnisangabe erfolgt relativ und es werden wieder alle Unterordner einbezogen. Das Datum (1 Monat) der Datei wird mittels 1m definiert. Mittels backup wird angegeben, dass bei einem Konflikt (sprich die ZIP-Datei mit dem gleichen Namen existiert bereits) die vorhandene Datei im Archivordner umbenannt wird (*.~nn.zip). Seite 174 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Die Angabe der Archivordner erfolgt relativ zum Basisverzeichnis, zusätzlich wird mit den vordefinierten Platzhaltern gearbeitet. - 9.3.3 $day$ = Tag des Monats der Datei, 2-stellig $week$ = Kalenderwoche der Datei $month$ = Monat der Datei, 2-stellig $year$ = Jahr der Datei, 4-stellig $dir$ = Verzeichnis relativ zum Basisverzeichnis der Regel incl. abschließendem PfadSeparator (/ oder \) Lösche alle Daten ohne Fehler Alle BIS-Dateien, die ohne Fehler und Warnungen importiert wurden, nach einer Woche nach der Verarbeitung löschen: zip import_BIS/done -noerror 1w delete 9.3.4 Daten verschieben Alle verarbeiteten BIS-Dateien, die älter als 1 Monat sind, in einem Unterverzeichnis von <Basis>/arc mit Monat und Jahr im Namen ablegen: zip import_BIS -recursive 1m move backup ../arc/$year$$month$/import_BIS/$dir$ 9.3.5 Alle E-Mail-XML-Dateien sofort in eine Zip-Datei packen: xml email/xml 0 zip 9.3.6 Alle E-Mail-Format-Dateien sofort in eine Zip-Datei packen: txt email/format 0 zip 9.3.7 Alle E-Mail-Format-Dateien nach einer Woche löschen: zip email/format 1w delete 9.3.8 Alle Archiv-Dateien, die älter als 1 Jahr sind, löschen: zip archive -recursive 1y delete 9.3.9 Alle Dateien Zippen und Verschieben die älter als 10 Tage sind: In der Config.properties ist folgendes gesetzt: archive.original_date_for_zip=Y Damit wird bei den Zippen das Datum der gepackten Datei in die Zip-Datei übertragen. In der archive.ini ist folgendes konfiguriert: * <Ordner> -recursive 10d zip * <Ordner> -recursive -zipcontent 10d move backup ../_Archiv/$year$-$month$/$dir$ Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 175 von 384 Die Reihenfolge in der archive.ini gibt die Reihenfolge der Verarbeitung vor. Somit werden erst alle Dateien im Ordner gezippt und anschließend archiviert. Beim Zippen werden bereits vorhandene ZipDateien ignoriert. Seite 176 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 10 EDIFACT In diesem Kapitel erhalten Sie ausgewählte Informationen zum Thema EDIFACT bezüglich BDEW (Strom und Gas) und DVGW (Gas). Folgende Versionen der Datenformate werden unterstützt (Stand 01.09.2016): Tabelle 10-1: Unterstütze Formatversionen Format Version Import Export ALOCAT 5.0 – 5.9 x x APERAK 2.1a (Import der Vorgängerversionen möglich) x x CONTRL 2.0 (Import der Vorgängerversionen möglich) x x IMBNOT 5.0 – 5.6 x - INSRPT 1.0 – 1.0b x x INVOIC 2.2 – 2.6d x x MSCONS 1.5, 1.6, 1.6b, 2.0c 2.0d, 2.1, 2.1a – 2.2g x x NOMINT 4.0 – 4.5 x x NOMRES 4.0 – 4.6 x - ORDERS 1.0 – 1.1h x x ORDRSP 1.0 – 1.1f x x PRICAT 1.0, 1.0a x x QUOTES 1.0 – 1.0f x x REMADV 2.2 – 2.7b x x REQDOC 2.0 – 2.1b x x REQOTE 1.0 – 1.1a x x SLPASP (GAS) 1.0 - x SSQNOT 5.0 – 5.6 - x TRANOT (GAS) 5.0 – 5.7 x - UTILMD 4.2 – 5.1f x x Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 177 von 384 10.1 Allgemeine Hinweise 10.1.1 Reihenfolge der Segmente Die Reihenfolge einzelner Segmente ist innerhalb einer Segmentgruppe irrelevant. Beispielsweise kann „Zeitpunkt der Statusvergabe“ auch vor dem „Betrachtungszeitintervall“ in der Datei enthalten sein (Beispiel IFTSTA MIG für Version 1.2). Abbildung 10-1: Beispiel Reihenfolge der Segmente in einer IFTSTA-Meldung Dieser Sachverhalt wurde auch vom BDEW in den Allgemeinen Festlegungen klargestellt. „Hinweis: Aufgrund der expliziten Notation werden einzelne Segmente mit unterschiedlichen Ausprägungen auf Datenelement- und Datenelementgruppenebene mehrfach aufgeführt. Die hierfür verwendete Reihenfolge ist beliebig und lediglich dem Umstand geschuldet, dass man nur seriell dokumentieren kann.“ siehe auch Forum-Datenformate "…wird ein Segment oder eine Segmentgruppe mehrfach in einer Nachricht übertragen, so spielt die Reihenfolge, in der diese übertragen werden keine Rolle. Dies ist in der sog. Impliziten Dokumentation augenscheinlich, in der von uns vorgenommenen sog. Expliziten Dokumentation könnte man meinen, dass wir durch diese eine Reihenfolge vorgeben würde, was natürlich nicht der Fall ist, sondern dem Umstand geschuldet ist, dass man die Segmente bzw. Segmentgruppen nur seriell beschreiben kann. ….“ 10.1.2 GZIP-Komprimierung Werden EDIFACT-Dateien mit GZIP-Komprimierung empfangen, so müssen diese Dateien bereits vom Comimport entpackt werden, die Einrichtung ist unter 5.1.4.4 beschrieben, da der Datenimport keinen GZIP-Support bietet (nicht notwendig, da diese Funktionalität ja vom Comimport realisiert wird). Werden die EDIFACT-Daten nicht über den Comimport abgelegt, muss diese Restriktion von dem jeweiligen Prozess beachtet werden, d.h. es dürfen nur nicht komprimierte oder ZIP-komprimierte Dateien in den Importverzeichnissen für den Datenimport abgelegt werden. 10.1.3 Codenummern (ILN) Im System robotron*ecount existiert eine stillschweigende Korrekturfunktion, die private ILNNummern als Code BDEW (500) oder DVGW (502) exportiert, selbst wenn im ecount der Typ ILN angegeben wurde. Nummern, die mit 99 beginnen, sind private ILN, die in Deutschland z. B. dann als BDEW-Nummern vergeben werden, aber in Frankreich einem französischen Marktteilnehmer ebenso vergeben sein können. 98* sind DVGW-Nummern. Damit wird bei einer ILN, die mit 99 beginnt, der Typ 500 und nicht, wie erwartet, 14 exportiert (selbst wenn die ILN in ecount und in der KomA-XML-Datei vorhanden sind). Seite 178 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 ILN-Nummern, die als 14 exportiert werden, beginnen in der Regel mit einer 4, siehe GS1Nummernsysteme. 10.1.4 Präfix für die UNB-ID Das Präfix für die UNB-Referenz von exportierten EDIFACT-Nachrichten kann parametriert werden. Dazu kann in Config.properties der Parameter export.UNB_ID_Prefix verwendet werden (Beispiel: export.UNB_ID_Prefix = ECE_). Für Gas-Formate, wie z. B. ALOCAT, gilt der UNOA-Zeichensatz, der nur Großbuchstaben, Ziffern und einige wenige Sonderzeichen zulässt, nicht aber z. B. _ (siehe UNOA-Zeichensatz). 10.1.5 UNB.0020 Datenaustauschreferenz – Generierung Die Datenaustauschreferenz wird erst beim Versand auf der KomA erstellt und wird wie folgt gebildet: 1. EAU-ID mit nachgestelltem E 2. Pro Export-Auftrag wird geprüft, ob für diesen mehrere EDIFACT-Dateien existieren (bei Split oder bei Versandwiederholung). Dies wird über folgendes SQL realisiert: SELECT COUNT(1) from EXPORT_EDIFACT WHERE EAU_ID=? Wenn Diese Abfrage als Ergebnis > 0 liefert, wird die Zahl angefügt. 3. Abfrage des Parameters UNB_ID_Prefix (Formatscharf z. B. in EDI.properties). Wenn dieser nicht vorhanden ist wird export.UNB_ID_Prefix abgefragt (global via Config.properties). Hinweise: export.UNB_ID_Prefix ist keine Pflichtangabe und sollte so kurz wie möglich gewählt werden (z. B. EC_) - da insgesamt nur 14 Zeichen zur Verfügung stehen. Wenn export.UNB_ID_Prefix definiert und dieser Präfix + bisherige UNB länger als 14 Zeichen, dann wird auf 14 Zeichen gekürzt, es wird hierbei der UNB_ID_Prefix abgeschnitten Beispiele: 1) EAU-ID: 313628 | Abfrage (2) liefert die Zahl: 14 |export.UNB_ID_Prefix = EC_ Ergebnis: EC_313628E14 2) EAU-ID: 313628 | Abfrage (2) liefert die Zahl: 14 | export.UNB_ID_Prefix = EC_MEINE_WELT Ergebnis: EC_ME313628E14 Beispielkonfiguration für das Format TSIMSG_DEKL: Für die Exportaufträge wird als Format TSIMSG_DEKL verwendet (Tabelle EXPORT_ECOUNT, Spalte FORMAT). Auf der KomA muss unter config/export nun die TSIMSG_DEKL.properties hinterlegt werden mit der jeweils gewünschten Einstellung. Im Beispiel setzen wir das Präfix auf TS (UNB_ID_Prefix=TS). Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 179 von 384 Abbildung 10-2 UNB-Präfix TS für das Format TSIMSG_DEKL 10.1.6 BGM.1004 Dokumentennummer – Generierung Die Dokumentennummer wird im Standardfall erst auf der KomA erzeugt. Damit ist es notwendig, dass beim Export von EDFIACT-Dateien, diese Nummer zurückgeschrieben wird (realisiert in eCount00053790). Bei der Generierung von BGM.1004 wird bei den meisten EDIFACT-Formaten die UNB.0020 (Datenaustauschreferenz) verwendet. 10.1.6.1 IFTSTA Wenn in IFTSTA_NACHRICHTEN.BGM_REF ein Wert steht, wird dieser verwendet. Sonst wird der Wert aus UNB.0020 + - + Wert aus IFTSTA_NACHRICHTEN.UNH_ID verwendet. Wenn IFTSTA_NACHRICHTEN.UNH_ID leer ist dann wird von der KomA bei 1 beginnend bis n hochgezählt (pro Nachricht wird 1 addiert). Aktuell dürfen bei IFTSTA nicht mehrere Nachrichten in einer Übertragungsdatei verschickt werden. Damit ist die generierte UNH_ID immer 1. Wenn UNH_ID leer und die UNB.0020 „EC_313628E15“ ist, dann ist die BGM_REF „EC_313628E15-1“. 10.1.6.2 INVOIC Wenn in INVOIC_NACHRICHTEN.DOC_ID ein Wert enthalten ist, wird dieser verwendet. Sonst UNB.0020 + - + Wert aus INVOIC_NACHRICHTEN.UNH_ID. Wenn INVOIC_NACHRICHTEN.UNH_ID leer ist dann wird von der KomA bei 1 beginnend bis n hochgezählt (pro Nachricht wird 1 addiert). 10.1.6.3 INSRPT Wenn in INSRPT_NACHRICHTEN.BGM_REF ein Wert enthalten ist, wird dieser verwendet. Sonst UNB.0020 + - + Wert aus INSRPT_NACHRICHTEN.UNH_REF. Wenn INSRPT_NACHRICHTEN.UNH_REF leer ist dann wird von der KomA bei 1 beginnend bis n hochgezählt (pro Nachricht wird 1 addiert). Aktuell dürfen bei INSRPT nicht mehrere Nachrichten in einer Übertragungsdatei verschickt werden, damit ist die die generierte UNH_ID immer 1. Seite 180 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 10.1.6.4 ORDERS Wenn in ORDERS_NACHRICHTEN.BGM_REF ein Wert vorhanden ist, wird dieser verwendet. Sonst wird UNB.0020 + -ORD + ORDERS_NACHRICHTEN.ID verwendet. 10.1.6.5 ORDRSP Wenn in ORDRSP_NACHRICHTEN.BGM_REF ein Wert enthalten ist, wird dieser verwendet. Sonst UNB.0020 + - + Wert aus ORDRSP_NACHRICHTEN.UNH_REF. Wenn ORDRSP_NACHRICHTEN.UNH_REF leer ist, dann wird von der KomA bei 1 beginnend bis n hochgezählt (pro Nachricht wird 1 addiert). 10.1.6.6 REMADV Wenn in REMADV_NACHRICHTEN.AVIS_NR ein Wert enthalten ist, wird dieser verwendet. Sonst UNB.0020 + - + Wert aus REMADV_NACHRICHTEN.UNH_REF. Wenn REMADV_NACHRICHTEN.UNH_REF leer ist, dann wird von der KomA bei 1 beginnend bis n hochgezählt (pro Nachricht wird 1 addiert). Aktuell dürfen bei REMADV nicht mehrere Nachrichten in einer Übertragungsdatei verschickt werden, damit ist die die generierte UNH_ID immer 1. 10.1.6.7 REQOTE Wenn in REQOTE_NACHRICHTEN.BGM_REF ein Wert enthalten ist, wird dieser verwendet. Sonst UNB.0020 + - + Wert aus REQOTE_NACHRICHTEN.UNH_REF. Wenn REQOTE_NACHRICHTEN.UNH_REF leer ist, dann wird von der KomA bei 1 beginnend bis n hochgezählt (pro Nachricht wird 1 addiert). 10.1.6.8 QUOTES Wenn in QUOTES_NACHRICHTEN. BGM_REF ein Wert enthalten ist, wird dieser verwendet. Sonst UNB.0020 + - + Wert aus QUOTES_NACHRICHTEN.UNH_REF. Wenn QUOTES_NACHRICHTEN.UNH_REF leer ist, dann wird von der KomA bei 1 beginnend bis n hochgezählt (pro Nachricht wird 1 addiert). 10.1.7 Zeichenkodierung in der Datei Der Zeichensatz wird bei dem, vom BDEW herausgegeben, Format durch die Allgemeinen Festlegungen spezifiziert und lautet aktuell UNOC UN/ECE-Zeichensatz C, was ISO 8859-1 entspricht. Diese Angabe ist im UNB-Segment im Gruppendatenelement S001.0001 hinterlegt. Der EDI-Importfilter wurde inzwischen so konzipiert, dass im Fall einer auftretenden BOM der Zeichensatz (z.B. UTF-8, UTF-16BE, UTF-16LE) automatisch erkannt und die Datei, entgegen der Marktregeln, stillschweigend korrekt eingelesen wird. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 181 von 384 10.2 Kurzanleitung Formatwechsel In diesem Kapitel werden die Besonderheiten bezüglich der Formatumstellung (01.04 bzw. 01.10) behandelt. 10.2.1 Anleitung zum Vorabtest des Formatwechsels Um den Formatwechsel bereits vor dem eigentlichen Umstellungsdatum testen zu können, kann mittels eines Referenz-Zeitstempels das Systemdatum des Kommunikationsservers geändert werden. Die Einstellung des Referenz-Zeitstempels erfolgt in der Datei Config.properties im Ordner config auf dem KomA-Server. Dazu muss eine der drei folgenden Varianten in die Datei eingetragen werden (Variante 1 ist die verständlichste und sollte bevorzugt verwendet werden). Variante 1: # konstantes Datum (Beispiel kursiv): RefDate.fixed = 01.04.2013 09:00 Das Datum muss mit dem Format dd.MM.yyyy HH.mm angegeben werden. Angaben die diesem Format nicht entsprechen werden mit der Fehlermeldung "Invalid date in parameter RefDate.fixed x" quittiert. dd = Tag im Monat MM = Monat im Jahr (z. B. 10 für Oktober) yyyy = Jahr (z. B. 2013) HH = Stunde 0-23 MM = Minute in Stunde Variante 2: # Ecount-Referenzzeit mittels EC_WFB.FNC_SYS_DATE() - diese muss dem EC_XCH gegranted sein: RefDate.fnc_sys_date = Y In diesem Fall wird der Datumswert zum Test der WPM-Komponente im globalen Parameter SYSDATE Testdatumswert (Gruppe Workflow) im Format DD.MM.YYYY eingestellt. Test der Abfrage als Nutzer EC_XCH: select ec_wfb.fnc_sys_date from dual Sollte das Grant nicht vorhanden sein: grant execute on ec_wfb.fnc_sys_date to ec_xch Variante 3: # Offset zur Systemzeit: Seite 182 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 RefDate.offsetYear = 0 RefDate.offsetMonth = 1 RefDate.offsetDay = 0 RefDate.offsetHour = 0 RefDate.offsetMinute = 0 Das eingestellte Datum wird zur Ermittlung der aktuell gültigen Versionsnummer sowie für das Nachrichtendatum verwendet, wenn die Informationen nicht schon Datenbankseitig vorgegeben wurden. Das heißt, dass die neue Version nur dann vom Kommunikationsserver vergeben wird, wenn am Datenversandabo keine Formatversion eingestellt wurde. Abbildung 10-3: Maske Lastgangabo: Definition der aktuell gültigen Versionsnummer Nachdem das Systemdatum des Kommunikationsservers geändert wurde, können Dateien mit der neuesten Formatversion importiert und vom System automatisch verarbeitet werden. Beim Export wird, sofern im Datenversandabo keine Version eingestellt wurde, automatisch die zum Systemdatum des KomA-Servers bzw. dem eingestellten Referenzdatum aktuelle Formatversion versendet. Hinweise: Die Versionsnummer muss auch aus der EDI.properties-Datei entfernt werden. In der KomA kann unter /config/export/EDI.properties auch explizit eine Version angegeben werden. Beispiel: Version=2.1d Diese Angabe muss entfernt werden damit die Version über RefDate automatisch festgelegt werden kann. 10.2.2 Import von „ALT“ - Versionen während der Übergangszeit (KomA) Der KomA-Server prüft beim Import von EDIFACT-Dateien, ob die Version in der Datei die aktuell gültige ist. Ist dies nicht der Fall wird der Import mit einer Fehlermeldung quittiert. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 183 von 384 Damit am Tag der Formatumstellung, oder kurz danach, noch EDIFACT-Dateien importiert werden können die in der alten Version erstellt worden sind, gibt es folgende Einstellungen für die Datenquelle EDI. Die Einstellungen müssen in der korrespondierenden Properties-Datei (per Default EDI.properties) vorgenommen werden. Die relevanten Einstellungen sind MK_DEFAULTS und MSG_VERSION_TOL_DAYS. Einstellung: MSG_VERSION_TOL_DAYS Erwartet eine Ganzzahl, gültige Werte sind -1 (deaktiviert) und 1 bis n. Gibt damit die Anzahl an Tagen an, an denen EDIFACT-Dateien mit alten Versionen ohne negative Versionsprüfung importiert werden können. Einstellung: MK_DEFAULTS Steht für „Marktkommunikation-Default-Einstellungen“ und setzt somit zahlreiche Einstellungen auf möglichst sinnvolle Werte. Der Default ist N (false). Mit MK_DEFAULTS=Y in der Datei EDI.properties wird automatisch die Einstellung MSG_VERSION_TOL_DAYS=3 gesetzt (falls diese nicht explizit in der Properties-Datei gesetzt wurde). D.h. bis zu 3 Tage nach dem Formatwechsel kann die Vorgängerversion noch ohne Probleme importiert werden. 10.2.3 Datenquelleneinstellungen (Maske Import-Dateien) In der Maske Import-Dateien (MF_IFI) werden die zu importierenden Daten angezeigt, diese Informationen stammen aus der Tabelle IMPORT_FILE. Abbildung 10-4: Maske Import-Dateien Tabelle 10-2: Zuordnung Maske MF_IFI) – Tabelle IMPORT_FILE: Feldbezeichnung in der Maske Import-Dateien Tabellenspalte Zeitstempel Datei IMPORT_FILE.ZEITSTEMPEL Import Zeitstempel IMPORT_FILE.IMPORT_ZEITSTEMPEL Reiter Intern – Feld Eingang IMPORT_FILE.EINGANGS_ZEITSTEMPEL Der ZEITSTEMPEL ist immer der Zeitstempel der Datei/E-Mail der vom Betriebssystem/E-Mail-Server geliefert wird, dieser Wert ist nicht manipulierbar. IMPORT_ZEITSTEMPEL wird seit eCount-00046696 (PKG_IMPORT_API in Version 05.00.15.00) automatisch mit FNC_SYS_DATE gefüllt. Für EINGANGS_ZEITSTEMPEL kann der Wert über die Datenquellen-Einstellungen BWDI.EINGANGS_ZEITSTEMPEL und BWDI:KomA.EINGANGS_ZEITSTEMPEL verändert werden. Seite 184 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Falls die Einstellungen nicht vorgenommen wurden, verhält sich das System, als wäre fnc_sys_date eingestellt. Für normale Tests zum Formatwechsel sollten die Einstellungen auf dem Testsystem (falls vorhanden) gelöscht bzw. auf fnc_sys_date gesetzt werden, sodass der E-Mail-Eingang ebenfalls mit der verschobenen Systemzeit aufgezeichnet wird. Für spezielle Tests, bei denen zwischen Eingang und Verarbeitung ein deutlicher Abstand liegen soll (sodass ein Formatwechsel-Stichtag oder eine Fristgrenze überschritten wird), bieten die Einstellungen genügend Manipulations-Möglichkeiten, siehe Hilfetext im Report zur Datenquelle. Die Anpassungen an den Datenquellen-Einstellungen müssen an allen Datenquellen vorgenommen werden, die in den Test involviert sind. 10.3 Import-Standardparameter (Config.properties) Tabelle 10-3 enthält Standardparameter, die über die Datei Config.properties angegeben und ausgewertet werden, wenn diese nicht über die Datenquelle (z. B. EDI.properties) definiert/übersteuert werden. Tabelle 10-3: Import-Standardparameter EDIFACT: config.properties Parameter/Beschreibung Standardwert common.reply_method Dieser Parameter wird ausgeführt wenn in der Datenquelle (z. B. EDI.properties) MK_DEFAULTS=N (oder nicht gesetzt/angegeben ist) und auch die Einstellung reply_method nicht definiert wurde. CD Einstellungen siehe reply_method. 10.4 Export-Standardparameter (Config.properties) Tabelle 10-4: Export-Standardparameter EDIFACT: config.properties Parameter/Beschreibung Standardwert export.UNB_ID_Prefix Das Präfix für die UNB-Referenz von exportierten EDIFACT-Nachrichten kann über diese Einstellung parametriert werden, siehe 10.1.4. 10.5 Import-Standardparameter (Datenquelle) Tabelle 10-5 enthält Parameter, die für alle EDIFACT-Formate gelten. Diese Parameter werden per Default über die Datenquelle EDI importiert. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 185 von 384 Tabelle 10-5: Import-Standardparameter EDIFACT: Datenquelle EDI Parameter/Beschreibung Standardwert MK_DEFAULTS N Y/N. Steht für „Marktkommunikations-Default-Einstellungen“ und setzt die zahlreichen Einstellungen auf die systemeigenen Standardwerte. Zu den Einstellungen gehören u.a.: - MSG_VERSION_TOL_DAYS ERROR_ON_UNB_NAD_DIFFERENCE BREAK_ON_WARNING MSG_VERSION_TOL_DAYS Beim Import von EDIFACT-Dateien wird geprüft, ob die Version in der Datei die aktuell gültige ist. Ist dies nicht der Fall, wird der Import mit einer Fehlermeldung quittiert. Damit am Tag der Formatumstellung, oder kurz danach, noch EDIFACT-Dateien importiert werden können, die in der alten Version erstellt worden sind, gibt es diese Einstellungen. Erwartet eine Ganzzahl, gültige Werte sind -1 (deaktiviert) und 1 bis n. Gibt damit die Anzahl an Tagen an, an denen EDIFACT-Dateien mit alten Versionen ohne negative Versionsprüfung importiert werden können. Ist MK_DEFAULTS=Y und diese Einstellung nicht gesetzt, so wird automatisch MSG_VERSION_TOL_DAYS=3 gesetzt. Dies bedeutet, dass die Vorgängerversion noch bis zu 3 Tage nach dem Formatwechsel ohne Probleme importiert werden kann. Test_Systembetreiber Y/N. Der Parameter ist nur sinnvoll, wenn es im System nur einen Systembetreiber gibt. Dieser wird in der Maske Vertragspartner (MF_VPR) über das Kontrollfeld Systembetreiber gekennzeichnet. Steht der Parameter auf Y, werden fehlgeleitete EDIFACT-Nachrichten mittels APERAK Z06 abgewiesen. Für den Import von EDIFACT-Nachrichten wird die Funktionalität mittels Property Test_Systembetreiber = Y in der EDI-Format-spezifischen Properties-Datei aktiviert. Manuelle Angabe der Systembetreiber-IDs (Umgehen der Datenbank-Prüfung) über Property Test_Systembetreiber.IDs = 9800000000001, 9900000000001, 4000000000001 Die Informationen dazu stammen aus SELECT k.VTP_ID_MANDANT, i.wert from ec_sys.VTP_KOMM_EINSTELLUNGEN k, ec_sys.VTP_IDENTIFIKATOREN i WHERE k.SYSTEMBETREIBER_J_N ='J' AND k.vtp_id = i.vtp_id Test_Systembetreiber = Y i.V.m. VTP_ID_MANDANT = X kann zu schwerwiegenden Problemen führen (z. B. Doppel-Import in mehrere Mandanten), wenn der Systembetreiber ein anderer Mandant ist als in der Einstellung VTP_ID_MANDANT definiert. N Seite 186 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Standardwert BREAK_ON_WARNING N Y/N. Abbruch der Datei bei "Fehlern" in der Datei, die als Warnung interpretiert werden. Z. B. führende Leerzeichen innerhalb von Datenelementen aber auch jede Menge Unstimmigkeiten in der EDI-Datei (aufgrund der Vielzahl an Prüfungen existiert keine genaue Liste). BREAK_ON_ERROR Y Y/N. Abbruch bei Fehler in der Datei. Ist nur für interne Kommunikation sinnvoll, bei der fehlerhafte Dateien ggf. ignoriert werden können! CHECK_DUPLICATE_UNB N Prüfung auf Doppelimport (Eindeutigkeit der UNB_REF und der SenderID) verwendete SQL-Abfrage: SELECT *FROM EDIFACT_FILE WHERE UNB_REF=? AND SENDER_ID=? AND IFI_ID IS NOT NULL ORDER BY ID DESC IGNORE_MISSING_DIGIT_EXCEPTION N Y/N. Seit 01.10.2014 (CONTRL 2.0) werden Zahlen mit fehlender Ziffer vor dem Dezimalzeichen (z. B. „.5“ statt „0.5“) mit dem Code 38 abgelehnt. Diese Prüfung kann mit IGNORE_MISSING_DIGIT_EXCEPTION=Y deaktiviert werden (sinnvoll bei Inhouse-Kommunikation) IGNORE_INVALID_DECIMAL_POINT_EXCEPTION Y/N. Seit 01.10.2014 (CONTRL 2.0) werden Zahlen mit falscher Dezimalbeschreibung, betrifft hier nur Komma (,) und Punkt (.), mit dem Code 19 (Ungültige Dezimalbeschreibung) abgelehnt. Intern erfolgt automatisch eine Korrektur der Dezimalbeschreibung sodass die Werte dennoch übernommen werden (u.a. sinnvoll bei Inhouse-Kommunikation). Ist dies nicht gewünscht, kann mittels IGNORE_INVALID_DECIMAL_POINT_EXCEPTION=N die automatische Korrektur deaktiviert werden. Ist der Inhalt des Datenelements für die Zahl nicht konvertierbar, wird ein Fehler mit Code 37 (Ungültige Zeichenart) erstellt. Erklärung: Im UNA könnte ; als Dezimaltrennzeichen verwendet werden, im QTY ist jedoch 1#5 enthalten. Ob die Raute nun als Dezimaltrennzeichen gedacht ist (Wert 1.5) oder ob die Raute einfach überflüssig ist (Wert 15) oder einen anderen Wert interpretieren soll (z. B. Wert 135), kann nicht erkannt werden. Beispiel: UNA: Punkt (.) – QTY: Komma (,) – „0,5“ IGNORE_INVALID_DECIMAL_POINT_EXCEPTION=N -> Fehler 19 – Datei wird abgewiesen IGNORE_INVALID_DECIMAL_POINT_EXCEPTION=Y -> Datei wird problemlos importiert Beispiel: UNA: Komma (,) – QTY: Punkt (.) – „0.5“ IGNORE_INVALID_DECIMAL_POINT_EXCEPTION=N Y Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Seite 187 von 384 Standardwert -> Fehler 19 – Datei wird abgewiesen IGNORE_INVALID_DECIMAL_POINT_EXCEPTION=Y -> Datei wird problemlos importiert Beispiel: UNA: Punkt (.) – QTY: Raute (#) – „0#5“, IGNORE_INVALID_DECIMAL_POINT_EXCEPTION=N -> Fehler 37 – Datei wird abgewiesen IGNORE_INVALID_DECIMAL_POINT_EXCEPTION=Y -> Fehler 37 – Datei wird abgewiesen 10.6 Export-Standardparameter (Datenquelle) Tabelle 10-6: Export-Standardparameter EDIFACT: Datenquelle EDI Parameter/Beschreibung Standardwert ObisMapping Siehe 12.1.1 10.7 Einrichtung der EDI-Datenquelle Alle EDIFACT-Formate werden über die Datenquelle EDI (HandlerClass=de.robotron.ecount.dataimport.filter.EDIFACTHandler) importiert. Werden die EDIFACT-Dateien ohne ZIP-Funktionalität (5.1.4.4) bzw. gänzlich ohne Comimport in den Importordner hinterlegt, so ist folgende Konfiguration in der datenimport.ini ausreichend: *.txt EDI import/EDI Werden die Dateien jedoch mittels ZIP-Funktionalität des Comimport abgelegt, so muss als Importformat (5.1.3) EDI gewählt worden sein. Ist dies nicht der Fall, muss sichergestellt werden, dass die anderen Importformate auf die EDI-Datenquelle verweisen, z. B.: Wurde ORDERS beim Comimport als Importformat gewählt, so muss es eine ORDERS.properties unter config/import geben, die entweder auf eine vorhandene EDI.properties verweist oder direkt den entsprechenden Filter definiert. config/import/ORDERS.properties alias=EDI oder HandlerClass = de.robotron.ecount.dataimport.filter.EDIFACTHandler Seite 188 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 10.8 ALOCAT Die ALOCAT dient der Übermittlung von Bilanzkreis- und /oder Netzkonto- relevanten Allokationsmengen. Der Austausch findet zwischen Netzbetreibern, Marktgebietsverantwortlichen und Bilanzkreisverantwortlichen statt. Im Einzelnen werden mit der ALOCAT folgende Mengen übertragen: - Gemessene und prognostizierte Allokationsdaten Ersatzwerte für SLP-Zeitreihen Lastgang von Netzkopplungspunkten Flüssiggaseinspeisungen Marktgebietsübergreifende Transporte 10.8.1 Export-Parameter Exportparameter werden per Default in der ALOCAT.properties im Verzeichnis *KomA*/config/export hinterlegt. Tabelle 10-7: ALOCAT Export Parameter Parameter/Beschreibung Standardwert SPLIT_DIFFERENT_DTMZ01 Y/N. Linien mit unterschiedlichen Zeitbereichen müssen in unterschiedlichen Dateien versandt werden. Dieses Verhalten kann über SPLIT_DIFFERENT_DTMZ01=N deaktiviert werden. eCount- 00039334 Y UNH_COUNTER Y/N. Mittels UNH_COUNTER=Y wird beim Splitt der Datei auch die UNH-Referenz (UNH.0062) hochgezählt. N minScale Minimale Anzahl an Nachkommastellen. Nur für Inhouse-Versand verwenden, da DVGW-Vorgaben explizit die Anzahl der Nachkommastellen begrenzen! 0 maxScale Maximale Anzahl an Nachkommastellen. Nur für Inhouse-Versand verwenden, da DVGW-Vorgaben explizit die Anzahl der Nachkommastellen begrenzen! 10.8.2 0 Import-Parameter Die Einstellmöglichkeiten bezüglich ALOCAT beziehen sich primär auf die Festlegung der FK-ID-Spalten (FK-ID1 bis FK-ID4). Folgende Parameter können zur Generierung der FK-ID verwendet werden. Die Parameter müssen in der Properties-Datei mit {} eingeschlossen werden. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 189 von 384 Tabelle 10-8: ALOCAT Import-Parameter Parameter Beschreibung ALOCAT_TYPE Wert aus BGM+C002:1001 ALOCAT_VER Aktuelle Version, Wert aus UNH.S009.0057 CLEARING_FLAG Bei vorhandenem Wert in SG1+RFF+ANX wird der Text CLEARING erstellt, ist kein Wert vorhanden, bleibt die Variable leer (null). (seit eCount- 00051360) LIN_DIR Wert aus SG37.QTY+ C186:6063 LIN_TYPE Mappingwert aus SG37.STS+C601:9015 (z. B. 09G = SLPsyn) LIN_STA Wert aus SG37.STS+C601:9015 LIN_STA2 Zweitstatus der ALOCAT (Zusatzqualifier 10G, 12G) MSG_TYPE Wert aus BGM.C002:1001. Laut aktueller eingeschränkter Codeliste für BGMC002:1001 z. B. X1G, X1G NAD:ZES.ID SG39.NAD+C082:3039 (wenn NAD+3035=ZES) NAD:ZES.TYPE SG39.NAD+C082:3055 (wenn NAD+3035=ZES) NAD:ZSH.ID SG39.NAD+C082:3039 (wenn NAD+3035=ZSH) NAD:ZSH.TYPE SG39.NAD+C082:3055 (wenn NAD+3035=ZSH) NAD:ZSO.ID SG39.NAD+C082:3039 (wenn NAD+3035=ZSO) NAD:ZSO.TYPE SG39.NAD+C082:3055 (wenn NAD+3035=ZSO) NAD1.ID SG39.NAD+C082:3039 (1. SG39-Segment) NAD1.ROLE SG39.NAD +3035 (1. SG39-Segment) NAD1.TYPE SG39.NAD+C082:3055 (1. SG39-Segment) NAD2.ID SG39.NAD+C082:3039 (2. SG39-Segment) NAD2.ROLE SG39.NAD +3035 (2. SG39-Segment) NAD2.TYPE SG39.NAD+C082:3055 (2. SG39-Segment) NAD3.ID SG39.NAD+C082:3039 (3. SG39-Segment) NAD3.ROLE SG39.NAD +3035 (3. SG39-Segment) NAD3.TYPE SG39.NAD+C082:3055 (3. SG39-Segment) Seite 190 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter Beschreibung NAD4.ID SG39.NAD+C082:3039 (4. SG39-Segment) NAD4.ROLE SG39.NAD +3035 (4. SG39-Segment) NAD4.TYPE SG39.NAD+C082:3055 (4. SG39-Segment) RECEIVER_ID Wert aus SG3.NAD.C082:3039 RECEIVER_ID_TYPE Wert aus SG3.NAD.C082:3055 RECEIVER_ROLE Wert aus SG3.NAD.3035 SENDER_ID Wert aus SG3.NAD.C082:3039 SENDER_ID_TYPE Wert aus SG3.NAD.C082:3055 SENDER_ROLE Wert aus SG3.NAD.3035 ZPT_ID Wert aus SG36.LOC+ 3227 ZPT_ID_TYPE ZPT falls der Wert „172“ in SG36.LOC+ 3227 angegeben wurde, ansonsten NKP (Netzkopplungspunkt) ZPT_TYPE Wert aus SG36.LOC+C517.3055 (mit ALOCAT 5.6 wurde das Feld gestrichen) Beispiel-Konfiguration für FK-ID: ORDRSP.ALOCAT.FK_ID1=ALOCAT{ALOCAT_TYPE};{NAD1.ROLE}={NAD1.ID},{NAD1.TYPE};{NAD2.ROLE}={NAD2.ID}, {NAD2.TYPE} ORDRSP.ALOCAT.FK_ID2={SENDER_ROLE}={SENDER_ID},{SENDER_ID_TYPE};{RECEI VER_ROLE}={RECEIVER_ID},{RECEIVER_ID_TYPE};{LIN_TYPE};{LIN_DIR} 10.8.3 Probleme/Lösungen 10.8.3.1 NAD+ZES/NAD+ZSH fehlt Über dieses Segment werden Bilanzkreis-Codes, Netzkontonummern und Netzbetreibernummern übermittelt. Der Wert muss im ecount explizit gepflegt werden. Hier muss entweder die DatensenkenEigenschaften NETZKONTO_VON und NETZKONTO_AN beim entsprechenden Abo oder eben die Zählpunktdetails NETZKONTO_VON, NETZKONTO_AN gesetzt werden. Variante 1: Über das ABO (Beispiel für NETZKONTO_VON) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 191 von 384 Export > Datenversand Im Reiter Allgemein bei Eigenschaften (neben Format) muss als dynamische Eigenschaft die Einstellung NETZKONTO_VON mit dem zu versendenden Netzkonto angegeben werden. Variante 2: Zählpunkt-Verwaltung Maske Zählpunkt-Verwaltung: Das Zählpunktdetail NETZKONTO_VON muss mit dem entsprechenden Wert für den zu exportierenden Zählpunkt angelegt werden. Abbildung 10-5: Maske Zählpunkt-Verwaltung: Zählpunktdetail NETZKONTO_VON Technisch: Der Wert ergibt sich aus dem XML-Element ZAEHLPUNKT.NB_EIC_CODE bzw. ZAEHLPUNKT.HB_EIC_CODE und wird über die Tabelle.Spalte EXPORT_ZAEHLPUNKTE.NB_EIC_CODE bzw. EXPORT_ZAEHLPUNKTE.HB_EIC_CODE bereitgestellt. 10.8.3.2 Export – Splitmerkmale: Größe bei Zählpunkt nicht umgesetzt Es ist möglich, beim ALOCAT-Versand ein Splitting (= Erzeugung einer neuen Datei) pro Netzkonto, Bilanzkreis oder Zählpunkt vorzunehmen. Beim Zählpunkt kann über das Abo zusätzlich eine Größe angegeben werden (z. B. Split nach 100 Zählpunkten). Diese Logik wurde im zugehörigen KomA-Modul mit eCount- 00054905 (Version 4.0.2.64 vom KOMA-EXPORT-FILTER ALOCAT) implementiert. 10.9 CONTRL Stand 09.09.2014: KomA sendet ab dem 01.10.2014 nur noch negative CONTRL (falls aktiviert). Positive CONTRL und APERAK werden ausschließlich von internen ecount-Prozessen (Workflows, Import-API) erstellt. 10.9.1 Lizenz / Datenquelle (Format) Das Format EDI_CONTRL wird für den CONTRL-Versand nur dann benutzt, wenn der Kunde die passende Export-Lizenz E_EDI_CONTRL aktiviert hat. Ansonsten verwendet der Importfilter (z. B. beim Import einer MSCONS-Datei) die frühere EDI-Datensenke auch für CONTRL. Seite 192 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Die Datensenke heißt EDI und nicht MSCONS, weil ursprünglich alle EDIFACT-Formate über diese versendet werden sollten, dies waren damals MSCONS, CONTRL und APERAK. Die Lizenz E_EDI_CONTRL ist nicht zwingend notwendig, sorgt aber für eine bessere Unterscheidung zwischen MSCONS und CONTRL. Diese Lizenz wird aktuell nicht ausgeliefert, kann jedoch in Projekten explizit angefordert werden. 10.9.2 Parameter Die Parameter werden in der EDI.properties gepflegt. Die Beschreibung ist gültig ab dem 01.10.2014. Tabelle 10-9: Parameter für EDI_CONTRL Parameter/Beschreibung Standardwert APERAK.FROM Angabe in CONTRL.FROM Die APERAK-Absender-Adresse kann ebenfalls aus der Ziel-Adresse bzw. den Marktteilnehmer-Identifikatoren analog zu CONTRL mittels der Einstellung APERAK.FROM = to; aperak-standardadresse@meinefirma.de eingestellt werden. CONTRL.FROM Hiermit wird die Absenderadresse der ausgehenden CONTRL definiert. Hier kann entweder eine Standardadresse (z. B. „abcde@xyz.de“) to wenn MK_DEFAULTS=Y , sonst leer oder mittels to die Funktion zur Ermittlung der From-Adresse aus der TO-Adresse der importierenden E-Mail (wenn die Datei über Import-Kommunikation geladen wurde) angegeben werden. Es ist auch möglich, bei to eine Standardadresse anzugeben, dies ist sinnvoll, wenn die Datei nicht über die Import-Kommunikation geladen wurde. Die Syntax ist folgende: CONTROL.FROM = to; default@xyz.de CONTRL.SUBJECT Der E-Mail-Betreff für die zu versendende CONTRL, der Default (${FILENAME})) wird beim Export aufgelöst. CONTRL.SUBJECT.<MP-ID> Möglichkeit zur Festlegung einer marktpartnerspezifischen Betreffzeile, nur für EMail-Versand verwendbar. (eCount- 00041023) Beispiel: CONTRL.SUBJECT.123=${FILENAME} $TRUST$ CONTRL.TO.<MP-ID> Möglichkeit zur Festlegung einer Marktpartner spezifischen Antwort-E-MailAdresse. (eCount- 00041023) Beispiel: CONTRL.TO.123=max.mustermann@abc.de ${FILENAME} Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 193 von 384 Parameter/Beschreibung Standardwert CONTRL_APERAK.SUBJECT.SOURCE S Die Quelle für die Einstellungen (CONTRL.SUBJECT.<MP-ID> und CONTRL.TO.<MP-ID>) kann zwischen SENDER und EMPFÄNGER gewechselt werden. (eCount- 00043813) CONTRL_APERAK.SUBJECT.SOURCE=S (Sender) CONTRL_APERAK.SUBJECT.SOURCE=R (Receiver) CONTRL2.TEXT E-Mail-Nachrichtentext beim Versand der negativen CONTRL. Sollte dieser Text angepasst werden, dürfen die Platzhalter (${IN_FILENAME}, ${UNB_REF}) nicht entfernt werden! Standardwert: Sehr geehrte Damen und Herren,\\ndie EDIFACT Nachricht ${IN_FILENAME} mit der Referenz ${UNB_REF} wurde empfangen, enthielt jedoch Fehler:\\n DefaultCONTRLAddress Default Adresse, an die die CONTRL-Nachrichten verschickt werden (falls keine Adresse ermittelt werden kann) FILE://cont rl/ disable_control_messages Dieser Parameter ist zum 01.10.2014 weggefallen! reply_method Mögliche Ausprägungen: V, C und D, die beliebig miteinander kombiniert werden können. Die Abarbeitung erfolgt immer von links nach rechts, wird bei einer Methode keine Adresse ermittelt, so wird die nächste Methode ausgeführt. Beispiel: Bei VD wird erst die IMPORT-API nach einer Adresse gefragt, ist keine vorhanden wird die Default-Adresse verwendet. V nutzt ecount zur Ermittlung der Adresse, diese Daten werden in der Maske Stammdaten > Marktteilnehmer gepflegt. Folgende API ist dafür zuständig: EC_SYS.pkg_import_api.fnc_get_vtp_nas_id(p_mp_id=>?,p_mp_ id_typ=>?) (Die Werte können in der DB über v_nas_adressen, nas_adressen kontrolliert werden.) C: Absender-Adresse von empfangener E-Mail benutzen (falls über ImportKommunikation abgeholt). Die Daten werden über die COM_MESSAGE.ID (diese ID steht als ZIP-Kommentar in der Datei, die der Comimport ablegt) in der Detailtabelle COM_MESSAGE_DETAIL gesucht. D: Defaultadresse, hierbei wird der Parameter DefaultCONTRLAddress (siehe entsprechenden Abschnitt) ausgewertet. Kann über keine der definierten Funktionen eine Adresse ermittelt werden, wird die Fehlermeldung: „No valid reply address found“ ausgegeben. VCD wenn MK_DEFAULTS =Y, sonst leer Seite 194 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Standardwert Sollte die EDIFACT-Datei nicht über den COMIMPORT importiert worden sein, kann die Suche über C auch nicht zum Erfolg führen, da keine E-MailInformationen extrahiert und in COM_MESSAGE_DETAIL abgelegt wurden. Auch die Nutzung von D und den Parameter CONTRL.FROM = to führt nicht zum Erfolg, da auch hier nach den Informationen, die nur der COMIMPORT ablegen kann, gesucht wird. Send_CONTRL Gültige Werte sind A und N - A (Always) = CONTRL immer senden N (Never) = CONTRL niemals senden A wenn MK_DEFAULTS =Y, sonst N Im Fehlerfall, d.h. wenn der Parameter falsch definiert wurde (z. B. Send_CONTRL=X), wird per Default keine CONTRL erzeugt. Die Parameter Y und J werden inzwischen wie A interpretiert! import.IGNORING_DUPLICATE_CONTRL N Y/N. Beim Doppel-Import einer positiven CONTRL auf eine positive CONTRL oder negative CONTRL auf eine negative CONTRL kann die CONTRL-DoppelimportWarnung nun mit der Einstellung Y deaktiviert werden. import.IGNORING_DUPLICATE_CONTRL_NEGATIVE Y/N. Beim Doppel-Import einer zweiten negativen CONTRL auf eine bereits erhaltene positive CONTRL kann die Warnung mit der Einstellung Y deaktiviert werden. Beispiel-Konfiguration - Marktkonformer EDI-Import mit CONTRL-Versand: MK_DEFAULTS=Y Send_CONTRL=A BREAK_ON_ERROR=Y BREAK_ON_WARNING=N Beispiel-Konfiguration - Inhouse-Kommunikation ohne CONTRL und EDIFACT-Regeln: MK_DEFAULTS=N Send_CONTRL=N BREAK_ON_ERROR=N BREAK_ON_WARNING=N N Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 10.9.3 Seite 195 von 384 CONTRL 2.0 (01.10.2014) 10.9.3.1 Syntaxprüfung für Datenelemente die es laut MIG nicht gibt Sobald ein Datenelement in der BDEW MIG nicht beschrieben wurde, d. h. nicht im Dokument enthalten ist, handelt es sich um einen Syntaxfehler, wenn in der Übertragungsdatei ein derartiges Datenelement enthalten ist. (siehe BDEW-Link) 10.9.3.2 Besonderheit zu DE0062 im UNH-Segment „Entsprechend der für EDI@Energy-Nachrichten geltenden Regeln müssen die Inhalte des DE0062 aller in der Übertragungsdatei enthaltenen Nachrichten lediglich bezogen auf diese Übertragungsdatei eindeutig sein. Jeder Marktteilnehmer kann innerhalb einer Übertragungsdatei jeweils mit 1 beginnen und je Nachricht (entspricht dem UNH-Segment) jeweils um eins hochzuzählen. Eine Ablehnung ist somit nur zulässig, wenn in mehreren UNH-Segmenten (einer von Ihnen empfangenen Übertragungsdatei) im DE0062 der Wert "1" stehen würde.“ (siehe BDEW-Link) 10.9.4 Probleme/Lösungen 10.9.4.1 Import „Alle passenden Nachrichten sind bereits beantwortet.“ Die Warnung sagt aus, das bereits eine CONTRL für die EDI-Datei (entspricht Datenaustauschreferenz und Absender-ID) importiert wurde. Folgendes Select wird für eine CONTRL ausgeführt: SELECT EE.ID, EE.NACHRICHTEN_ID, EE.KONVERTIERUNGSDATUM, EE.EAU_ID, EE.EMS_ID, EE.CONTRL_STATUS FROM EXPORT_EDIFACT EE, EDIFACT_FILE EF WHERE EE.EAU_ID = EF.EAU_ID AND (EE.EMS_ID IS NULL OR EE.EMS_ID = EF.EMS_ID) AND EE.DATENAUSTAUSCHREFERENZ = '2024238E' AND EF.SENDER_ID = '9904834000007' Abbildung 10-6: Anzeige der CONTRL im robotron*EdifactKonverter (Ausschnitt) Seite 196 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Die Warnung "Alle passenden Nachrichten sind bereits beantwortet." wird angezeigt, wenn - ein Datensatz gefunden wurde (EAU_ID not null) die Spalte CONTRL_STATUS schon mit einen Wert belegt ist (not null) Mit eCount- 00055809 wurden neue Parameter zur Deaktivierung der Prüfungen implementiert. Die Prüfung beziehungsweise Warnung beim doppelten Import einer CONTRL auf eine EDIFACT-Datei ist nun konfigurierbar. Beim Import einer positiven CONTRL auf eine negative CONTRL ist kein Schalter notwendig da dieses Verhalten vom BDEW standardisiert ist. Beim Import einer positiven CONTRL auf eine positive CONTRL oder negative CONTRL auf eine negative CONTRL kann die Warnung nun mit der Einstellung import.IGNORING_DUPLICATE_CONTRL=Y in der Config.properties ignoriert/deaktiviert werden. Soll die Warnung beim Import einer negativen CONTRL auf eine positive CONTRL im System auch unterbunden werden muss die Einstellung: import.IGNORING_DUPLICATE_CONTRL_NEGATIVE=Y in der Config.properties gesetzt werden. Diese Einstellung sollte jedoch mit Bedacht eingesetzt werden, da der Anwendungsfall nicht BDEW-konform ist. 10.9.4.2 Keine Nachricht mit Referenz xyz, Absender <null> gefunden Das Problem tritt mit der Modulversion import/import_contrl.jar kleiner 4.0.2.4 auf. Sollte die Modulversion aktuell sein (>4.0.2.4) dann kann mithilfe des robotron*EdifactKonverter überprüft werden ob der Sender in der Datei überhaupt angegeben wurde. Diese Information ist in der Gruppe S002 im Datenelement 0004 enthalten. Abbildung 10-7: CONTRL-Anzeige EdifactKonverter (EDIFACT) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 197 von 384 Abbildung 10-8: CONTRL-Anzeige EdifactKonverter (Daten) 10.9.4.3 CONTRL wird mit falschem Absender generiert Beispiel: MSCONS-Import + CONTRL-Generierung (MP-ID sind Erfindungen): - Import einer MSCONS mit Absender-ID 99 und Empfänger-ID 978 Export einer CONTRL mit Absender-ID 123 und Empfänger-ID 99. Dass CONTRL mit falschem Absender generiert werden, kann folgende Ursachen haben: Der Empfänger einer „Original-Nachricht“ (z. B. MSCONS) (= Absender der Rückmeldung, z. B. CONTRL) muss immer ein Systembetreiber sein (sofern keine Abschaltung oder Ausnahme definiert ist). Andernfalls wird als Absender der Rückmeldung irgendein (der „naheliegendste“ = Besitzer des 1:1Postfaches, falls bekannt) Systembetreiber aus dem Mandanten eingesetzt. Dieses Problem kann auf eine Reihe von Ursachen zurückzuführen sein. Eine Variante ist die Einstellung Test_Systembetreiber = Y in der EDI.properties. Diese Option ist nur dann sinnvoll, wenn es genau einen Systembetreiber geben kann (Aufgrund von Änderungen ist diese Konstellation jedoch nicht mehr als Standard anzusehen). Daher sollte geprüft werden, ob die Option aktiviert ist. Eine andere Variante ist eine fehlerhafte EDIFACT-Datei. In einer EDIFACT-Datei werden Absender und Empfänger inklusive des Typs der ID mind. 2x angegeben (1x im UNB-Segment und 1x im NAD-Segment). Nach den allgemeinen Festlegungen gilt aktuell (Stand 01.09.2014) Folgendes: Die im UNB- und NAD-Segment für den Absender/Empfänger verwendeten MP-ID sind identisch (und damit auch die Typen). Zwischen KomA und Datenbank (Import-API) findet eine Kommunikation, unter anderem bezüglich der Bestimmung der Absender-/Empfänger-ID, statt. Dies geschieht nach der Auswertung des UNBSegments in der EDIFACT-Datei. Dabei werden auch Absender (UNB.S002) und Empfänger (UNB.S003) übermittelt. Im konkreten Fehlerfall gab es eine Abweichung zwischen den Typen der ID im UNB- und im NAD-Segment (wobei das UNB-Segment fehlerhafte, aber gültige, Werte enthielt). UNB+UNOC:3+99:500+978:500+140804:1000+ NAD+MS+99::332'NAD+MR+978::332' Seite 198 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Dadurch wird an die Import-API der Wert VDEW als Typ übergeben. Mit diesem Parameterwert konnte jedoch keine gültige Adresse von der Import-API gefunden werden, da im robotron*ecount der richtige Typ DVGW definiert wurde. Mit Version 4.0.2.165 des KomA-Moduls (edifact_mscons.jar) gibt es eine Quer-Prüfung bezüglich UNB und NAD. Tritt ein Unterschied auf, wird dies in der Maske ImportDateien (MF_IFI) im ecount als Warnung dargestellt. Tabelle 10-10: Übersicht Mapping von Absender-/Empfänger-Typ NAD.C082.3055 UNB.S002/S003.0007 Code im ecount 9 (GS1) 14 (GS1 Germany) ILN 293 (DE, BDEW) 500 (DE, BDEW) VDEW 321 (EASEE-Gas) 501 (EASEE-gas) EDIGAS 332 (DE, DVGW) 502 (DE, DVGW) DVGW 305 (ETSO) ZZZ (ETSO) EIC 10.10 IMBNOT (Imbalance Mitteilung) 10.10.1 Import-Parameter Die Einstellmöglichkeiten beziehen sich primär auf die Festlegung der FK-ID-Spalten (FK-ID1 bis FK-ID4) und können in der EDI.properties hinterlegt werden. Folgende Parameter können zur Generierung der FK-ID verwendet werden. Die Parameter müssen in der Properties-Datei mit {} eingeschlossen werden. Tabelle 10-11: IMBNOT – FKID-Variablen Parameter Beschreibung IMBNOT_TYPE Wert aus BGM+C002:1001 IMBNOT_VER Aktuelle Version, Wert aus UNH.S009.0057 LIN_TYPE Gemappter Wert aus SG37.QTY+C186:6063 (z. B. für ZZH = BIOFLEX) LIN_TYPE_ORIG Originalwert aus SG37.QTY+C186:6063 MSG_TYPE Wert aus BGM.C002:1001. Laut aktueller eingeschränkter Codeliste für BGMC002:1001 z. B. X1G, X1G NAD:ZSH.ID SG39.NAD+C082:3039 (wenn NAD+3035=ZSH) NAD:ZSH.TYPE SG39.NAD+C082:3055 (wenn NAD+3035=ZSH) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter Beschreibung NAD:ZSO.ID SG39.NAD+C082:3039 (wenn NAD+3035=ZSO) NAD:ZSO.TYPE SG39.NAD+C082:3055 (wenn NAD+3035=ZSO) NAD1.ID SG39.NAD+C082:3039 (1. SG39-Segment) NAD1.ROLE SG39.NAD +3035 (1. SG39-Segment) NAD1.TYPE SG39.NAD+C082:3055 (1. SG39-Segment) NAD2.ID SG39.NAD+C082:3039 (2. SG39-Segment) NAD2.ROLE SG39.NAD +3035 (2. SG39-Segment) NAD2.TYPE SG39.NAD+C082:3055 (2. SG39-Segment) NAD3.ID SG39.NAD+C082:3039 (3. SG39-Segment) NAD3.ROLE SG39.NAD +3035 (3. SG39-Segment) NAD3.TYPE SG39.NAD+C082:3055 (3. SG39-Segment) NAD4.ID SG39.NAD+C082:3039 (4. SG39-Segment) NAD4.ROLE SG39.NAD +3035 (4. SG39-Segment) NAD4.TYPE SG39.NAD+C082:3055 (4. SG39-Segment) RECEIVER_ID Wert aus SG3.NAD.C082:3039 RECEIVER_ID_TYPE Wert aus SG3.NAD.C082:3055 RECEIVER_ROLE Wert aus SG3.NAD.3035 SENDER_ID Wert aus SG3.NAD.C082:3039 SENDER_ID_TYPE Wert aus SG3.NAD.C082:3055 SENDER_ROLE Wert aus SG3.NAD.3035 10.11 MSCONS 10.11.1 Import Beinhaltet Informationen bezüglich des Imports von MSCONS-Dateien Seite 199 von 384 Seite 200 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 10.11.1.1 Konfigurationsparameter Parameter werden auch über die Datenquellen-Properties (meist EDI.properties) gepflegt. Tabelle 10-12: Standardparameter EDIFACT: Datenquelle EDI: EDI.properties Parameter/Beschreibung Standardwert ALLOW_NEGATIVE_MSCONS_VALUES Y/N. Negative Werte werden per Default nur für Temperaturwerte akzeptiert. Sollen für andere Einheiten Warnungen bei negativen Werte erzeugt werden, muss die Einstellung ALLOW_NEGATIVE_MSCONS_VALUES=N gesetzt werden. Falls aufgrund anderer Einstellungen oder Defaults Warnungen geschrieben werden, aber nicht erwünscht sind, muss die Einstellung ALLOW_NEGATIVE_MSCONS_VALUES=Y gesetzt werden. Der Standardwert ergibt sich aus MK_DEFAULTS: Y wenn MK_DEFAULTS=N N wenn MK_DEFAULTS=Y IGNORE_MABIS N Y/N. MaBiS spezifische Einstellungen ignorieren. Enthält die Nachricht z. B. BGM+BK (Zeitreihen im Rahmen der Bilanzkreisabrechnung), so übergibt die KomA bei IGNORE_MABIS=Y nicht wie üblich Nachrichtentyp MSCONS#BK an die Import-API, sondern MSCONS#7 (wie bei BGM+7), die BK-Daten werden hierbei also wie normale Lastgangdaten importiert. Auch wenn die Datenquellen-Einstellung BWDI.ON_NACHRICHTENTYP auf dem Wert MaBiS steht, wird diese dann nicht nach EDI_BK verschoben, da MSCONS#7 eine normale GPKE-MSCONS ist und in EDI verbleibt. MSCONS.ALLOW_INCOMPLETE_MONTH N Y/N. Lücken in der MSCONS-Datei werden automatisch mit 0F Werten belegt. MSCONS.CHECK_UNB_NAD_SEGMENT Y/N. Ist der Parameter aktiviert, wird eine Querprüfung zwischen der Sender- und Empfängerangabe im UNB-Segment und im NAD-Segment durchgeführt. Dies ist notwendig, da Fehler im UNB-Segment Auswirkungen auf den CONTRL-Versand haben können, die nur sehr schwer zu analysieren sind. Deshalb darf der Parameter nur bei inhouse- oder nicht marktkonformer-Kommunikation deaktiviert werden! MSCONS.EM_UNB_DE0026_AS_FKID2_SUFFIX Y/N. Ist dieser Parameter aktiviert, wird bei der FK-ID2 für MSCONS-Dateien mit der Kennzeichnung EM der Suffix ;EM an die FK-ID2 angehangen (ist die FK-ID2 leer, wird nur EM hinterlegt). Damit ist es möglich EM von VL zu unterscheiden. Beispiel: statt GAS_BRENNWERT wird GAS_BRENNWERT;EM übermittelt. Y wenn MK_DEFAULTS= Y, sonst N N Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 201 von 384 Parameter/Beschreibung Standardwert MSCONS.IGNORE_DTM9_ERROR_FOR_EM Y Mit dem Parameter MSCONS.IGNORE_DTM9_ERROR_FOR_EM=Y ist es möglich, MSCONS-Dateien (in Version kleiner 2.2c) vom Typ EM mit vorhandenen DTM+9, ohne Fehler, zu importieren. Mit 2.2c (gültig ab 01.10.2014) ist DTM+9 auch bei Messwert-Energiemenge (Prüfidentifikator 13001) erlaubt/Pflicht. MSCONS.IGNORE_TO_MANY_DATA N Y/N. Laut den allgemeinen Festlegungen sind zu viele übermittelte Informationen zu ignorieren. Um dieser Vorgabe gerecht zu werden, wurde dieser Parameter eingeführt. Aktuell ist die Option nur für das SG6.DTM+157-Segment (Beginndatum einer Profilschar) aktiv. (seit eCount- 00047955, KOMA-EDIFACTMSCONS 4.0.2.160) MSCONS.OBIS_MAPPING_FK2 Y Y/N. Mit MSCONS.OBIS_MAPPING_FK2=N kann das Mapping der FK-ID2 auf GAS_BRENNWERT;GAS_ENDGUELTIG bzw. GAS_BRENNWERT;GAS_VORLAEUFIG deaktiviert werden. Dann wird als FK2 die OBIS verwendet! Die Einstellung wird nur für den Brennwert ausgewertet, wenn dieser nach vorläufig oder endgültig aufgeteilt werden muss. ORIGINAL_OBIS N Y/N. Y = Es wird die original OBIS (= OBIS in der zu importierenden Datei) an die Import-API weitergegeben (pkg_import_api.prc_add_zaehlerwechsel(…p_EDIS_KENNZ=>?. ..)), falls in der KomA ein Mapping der OBIS stattfindet. Dieses Mapping der OBIS findet statt, wenn OBIS_MAPPING_DEFAULTS=Y oder ObisMapping.<alte obis>=<neue obis> definiert wurde und dieses Mapping auf eine OBIS der Datei zutrifft. Beispiel: Die OBIS 7-19:3.0.0 würde (für den Zählerstand) trotz Aktivieren von OBIS_MAPPING_DEFAULTS nicht auf 7-1:3.0.0 geändert werden. Das betrifft die Spalte Edis Kennz in der Maske StandardImport Viewer (MF_SIEC) im Reiter Verbrauchsdaten. Es wird also die unveränderte OBIS aus der Datei in den ImportMasken angezeigt, was die Klärung von Problemen erleichtern kann. Sort_Timestamps N Y/N. Parameter wird nur für MSCONS-Versionen 1.5 bis 2.1g (gültig bis 01.04.2009) unterstützt und ist aktuell nicht mehr von Bedeutung. Über diesen Parameter konnte eine Sortierung der Zeitstempel vorgenommen werden. Dies war notwendig, da nirgends spezifiziert wurde, dass die Zeitstempel in chronologischer Reihenfolge angegeben werden müssen und es gelegentlich vorkam, dass ein Marktpartner Werte durcheinander geliefert hatte. VL_FKID2_SLP Y Seite 202 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Standardwert Y/N. Für Verbrauchs-/Verrechnungsdaten relevant. Fügt an die FKID2 folgende Zeichenkette an #SLP Beispiel die FKID2 sieht für die OBIS 7-20:99.23.17 wie folgt aus: VL_FKID2_SLP=Y 7-20:99.23.17#SLP VL_FKID2_SLP=N 7-20:99.23.17 VL_FKID2_FIX Mit Parameter kann eine konstante FKID2 für Verbrauchs-/Verrechnungsdaten benutzt werden. Dieser Parameter ersetzt dann VL_FKID2_SLP. Beispiel: VL_FKID2_FIX = 1-1:1.9.1#SLP 10.11.1.1.1Status (Statuskodierung MSCONS (QTY) zu ecount) Der Default-Status (wenn kein Statuscode in der MSCONS übermittelt wird = „“) kann über folgende Einstellung definiert werden: status=F Statusangaben für einzelne Werte können über status.<mscons_status>=<ecount_status> angegeben werden. Beispiel: status.220 = V status.86 = W status.88 = W Sind keine expliziten Status-Kodierungen definiert, werden folgende Standardkodierungen vorgenommen: Tabelle 10-13: Statuscodierungen MSCONS – ecount MSCONS-QTY ecount MSCONS-QTY ecount MSCONS-QTY ecount 220 W 46 W ZZ1 K 201 V 86 W ZZZ ? 20 F 88 W E E 68 W 69 W F F 67 E 87 W ZZ2 K 99 E 79 W G G Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 203 von 384 MSCONS-QTY ecount MSCONS-QTY ecount MSCONS-QTY ecount 262 V 187 V V V 182 S 427 K „“ W 10.11.1.1.2 Einheitenkodierung (obis2unit) Seit MSCONS 2.1d wird die Einheit direkt über die OBIS-Kennzahl mitgeteilt. Es existieren jedoch OBISKennzahlen, die im EDI@Energy OBIS-Kennzahlen-System nicht eindeutig definiert sind, beispielsweise für den Wobbeindex. Daher wurde für den Wobbeindex die Einheit none verwendet. Mit eCount00054245 (Version 4.0.2.229 von ecount_import_EDI.jar) ist es möglich, für MSCONS-Versionen ab 2.1d eine Einheit über die OBIS per Properties-Einstellung obis2unit.<obis>=<einheit>) mitzugeben. Beispiel - Einheit kWh/m³ für den Wobbeindex: obis2unit.7-1:70.10.16 = kWh/m³ Die Einstellung obis2unit ist nur für OBIS-Kennzahlen möglich, die nicht bekannt sind oder deren Einheit explizit als none definiert wurde (Wobbeindex, unterer Wobbeindex, Methanzahl). 10.11.1.1.3 Nutzung Feature ZRQ (Import-API) MSCONS.ENABLE_ZRQ_FOR_OBIS Für die Importverarbeitung der Gasbeschaffenheiten (Brennwert, CO2, H2 usw.), welche in den Perioden stündlich, täglich, monatlich geliefert werden können, ist ein konfigurierbarer Import unter Nutzung des ZRQ-Features notwendig. D. h. das ZRQ-Feature muss über die KomA für den jeweiligen Importordner deaktiviert sowie für bestimmte OBIS-Kennzahlen aktiviert bzw. der Default übersteuert werden können. Das ZRQ-Feature bewirkt, dass die zu importierenden Daten nicht als Lastgang sondern als Verbrauchsdaten an die Import-API übergeben werden. Im ecount ist das in der Maske StandardImport Viewer (MF_SIEC) über die Reiter Lastgang und Verbrauchsdaten für den Anwender sichtbar. Das ZRQ-Feature kann komplett deaktiviert werden mit der Einstellung: MSCONS.DISABLE_FEATURE_ZRQ=Y Ist dies gesetzt wird MSCONS.ENABLE_ZRQ_FOR_OBIS nicht mehr ausgewertet. Das ZRQ-Feature kann für einzelne OBIS-Kennzahlen über MSCONS.ENABLE_ZRQ_FOR_OBIS aktiviert werden, hierbei kann auch das * als Jokerzeichen verwendet werden. Beispiel: MSCONS.ENABLE_ZRQ_FOR_OBIS=7-*:70.66.*;7-0:54.0.20; 7-1:70.61.22 Die OBIS-Kennzahlen werden durch ein Semikolon (;) getrennt angegeben. Die Werte müssen in einer Zeile stehen, es darf also bei längeren Listen kein Newline-Zeichen (Enter) zur besseren Lesbarkeit eingefügt werden. Seite 204 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 10.11.1.1.4 OBIS-Mapping (ObisMapping und OBIS_Mapping) Die OBIS dient ecount als Identifikationsmerkmal und wird über die Import-API mithilfe der FremdkanalID2 (FKID2) mitgeteilt. Es kann jedoch sein, dass die importierten OBIS-Kennzahlen von dem im System hinterlegten abweichen (allein schon wegen Vorgabe im OBIS-Kennzahlen-System: Kanal (irrelevant), b = 0 ... 64). Aus diesem Grund ist ein Mapping der OBIS notwendig. Es gibt zwei Arten von OBIS-Mapping. Zum einen kann die OBIS-Kennzahl an sich detailliert manipuliert werden; z. B. kann der Kanal auf 1 gesetzt werden. Zum zweiten ist es möglich, bestimmte OBISKennzahlen auf virtuelle OBIS-Kennzahlen (z.B. GAS_NORMDICHTE oder GAS_BRENNWERT;GAS_ENDGUELTIG) zu mappen. Im System sind einige Standard-Mappings hinterlegt, die per Default aktiviert sind und mit OBIS_MAPPING_DEFAULTS=N deaktiviert werden können. 10.11.1.1.4.1 ObisMapping Über diese Einstellung können Regeln zur Manipulation der OBIS-Kennzahl vorgenommen werden. Syntax: ObisMapping.<name>=<OBIS-Suche> ; <OBIS-Ersetzung> Beispiel: Um alle Gas-OBIS-Codes auf den Kanal 1 zu zwingen, kann die Zeile ObisMapping.G1 = 7-x:x.x.x ; 7-1:*.*.* in config/import/EDI.properties konfiguriert werden (Properties-Dateiname kann anders lauten). Die Regeln werden in alphanumerischer Reihenfolge des angegebenen Namens (hier G1) ausgewertet und die erste treffende Regel gilt. Sollte es also für diese OBIS eine zweite Regel unter den Namen G2 geben, wird diese nicht mehr ausgeführt. Um zu verhindern, dass bei den OBIS-Codes 7-20:3.0.0 und 7-20:3.2.0 der Kanal auf 1 gesetzt wird, können folgende Properties gesetzt werden: ObisMapping.G00a = 7-20:3.0.0 ; *-*:*.*.* ObisMapping.G00b = 7-20:3.2.0 ; *-*:*.*.* ObisMapping.G00c = 7-20:6.0.0 ; *-*:*.*.* ObisMapping.G00d = 7-20:6.2.0 ; *-*:*.*.* Durch den Namen G00a – G00d wird sichergestellt, dass die Regel vor der Regel G1 ausgeführt wird. Platzhalter, Beispiel: ObisMapping.G1 = 7-x:x.x.x ; 7-1:*.*.* Links die Platzhalter (x) gelten als Joker-Suchkriterium, damit die Regel gefunden wird und die rechten Platzhalter (*) gelten für die Übernahme der entsprechenden Felder aus der eingehenden OBIS-Kennzahl. Basierend auf der Angabe trifft die Regel also für alle OBIS-Kennzahlen zu, die mit 7 (= Medium GAS) importiert werden. Für OBIS-Kennzahlen, auf die die Regel zutrifft, wird jeder Kanal auf 1 gesetzt, die Messgröße(n) und der Zeitbezug werden aus der eingehenden OBIS übernommen. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 205 von 384 Wenn OBIS_MAPPING_DEFAULTS=Y (oder nicht spezifiziert, da Default=Y) gelten die folgenden Standard-Mappings: - ObisMapping.g00a = 7-10:99.33.17 ; *-*:*.*.* ObisMapping.g00b = 7-10:99.36.17 ; *-*:*.*.* ObisMapping.g00c = 7-20:99.33.17 ; *-*:*.*.* ObisMapping.g00d = 7-20:99.36.17 ; *-*:*.*.* ObisMapping.g00e = 7-20:3.0.0 ; *-*:*.*.* ObisMapping.g00f = 7-20:3.2.0 ; *-*:*.*.* ObisMapping.g01a = 7-x:3.0.0 ; *-1:*.*.* ObisMapping.g01b = 7-x:13.0.0 ; *-1:*.*.* ObisMapping.g02a = 7-x:3.2.0 ; *-1:*.*.* ObisMapping.g02b = 7-x:13.2.0 ; *-1:*.*.* ObisMapping.g03 = 7-x:6.0.0 ; *-1:*.*.* ObisMapping.g04 = 7-x:6.2.0 ; *-1:*.*.* ObisMapping.g11 = 7-x:54.0.x ; *-0:*.*.* ObisMapping.g12 = 7-x:52.0.x ; *-0:*.*.* Die Standard-Mappings sollen hierbei einige OBIS-Kennzahlen explizit auf den Kanal 1 oder 0 mappen bzw. verhindern, dass einige OBIS-Kennzahlen übersteuert werden (z. B. 7-10:99.36.17). Dies ist wichtig, da bei MDL->VNB in 7-b:99.33.17 das b wirklich „beliebig“ ist, jedoch bei VNB->LIEF mit b=10/20 zwischen vorläufig und endgültig unterschieden wird! Beispiele: Um die OBIS 7-1:70.66.20 auf 7-1:71.67.22 zu ändern, kann diese Einstellung vorgenommen werden: ObisMapping.A01=7-1:70.66.20 ; 7-1:71.67.22 Soll nur der Zeitbezug aller OBIS-Kennzahlen (Medium Gas, Kanal 1) manipuliert werden, kann folgende Einstellung genutzt werden: ObisMapping.A01=7-1:x.x.x ; 7-1:*.*.22 10.11.1.1.4.2 OBIS_Mapping Dies ist der Vorgänger der Konfigurationseinstellung ObisMapping. Hier kann eine OBIS gegen eine andere OBIS getauscht werden. Diese Einstellung sollte deshalb bevorzugt verwendet werden, wenn ein Mapping auf eine Zeichenkette vorgenommen werden soll, die keine direkte OBIS ist, z. B. GAS_CO2_ANTEIL oder GAS_NORMDICHTE (auch als virtuelle OBIS bezeichnet). Dieses Mapping wird von der KomA anschließend als FKID2 an die Import-API übergeben. Bei der Einstellung gibt es keine Reihenfolge – sobald eine OBIS auf eine Einstellung passt, wird diese verwendet. Wenn OBIS_MAPPING_DEFAULTS=Y (oder nicht spezifiziert, da Default=Y) gelten die folgenden Standard-Mappings: - 7-0:52.0.16 = GAS_Z_ZAHL 7-0:52.0.20 = GAS_Z_ZAHL 7-0:52.0.22 = GAS_Z_ZAHL 7-0:54.0.16 = GAS_BRENNWERT 7-0:54.0.20 = GAS_BRENNWERT 7-0:54.0.22 = GAS_BRENNWERT 7-1:13.0.0 = GAS_BETRIEBSVOLUMEN;GAS_ZAEHLERSTAND;GAS_AUSSPEISUNG 7-1:13.2.0 = GAS_NORMVOLUMEN;GAS_ZAEHLERSTAND;GAS_AUSSPEISUNG Seite 206 von 384 - Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 7-1:3.0.0 = GAS_BETRIEBSVOLUMEN;GAS_ZAEHLERSTAND;GAS_AUSSPEISUNG 7-1:3.2.0 = GAS_NORMVOLUMEN;GAS_ZAEHLERSTAND;GAS_AUSSPEISUNG 7-1:33.2.71 = GAS_ENERGIEWERT;GAS_ENDGUELTIG 7-1:33.2.71#BRW = GAS_BRENNWERT;GAS_ENDGUELTIG 7-1:33.2.71#ZZA = GAS_Z_ZAHL 7-1:33.3.71 = GAS_ENERGIEWERT;GAS_VORLAEUFIG 7-1:33.3.71#BRW = GAS_BRENNWERT;GAS_VORLAEUFIG 7-1:33.3.71#ZZA = GAS_Z_ZAHL 7-1:36.2.71 = GAS_ENERGIEWERT;GAS_ENDGUELTIG;GAS_EINSPEISUNG 7-1:36.2.71#BRW = GAS_BRENNWERT;GAS_ENDGUELTIG 7-1:36.2.71#ZZA = GAS_Z_ZAHL 7-1:36.3.71 = GAS_ENERGIEWERT;GAS_VORLAEUFIG;GAS_EINSPEISUNG 7-1:36.3.71#BRW = GAS_BRENNWERT;GAS_VORLAEUFIG 7-1:36.3.71#ZZA = GAS_Z_ZAHL 7-1:99.33.17 = GAS_ENERGIEWERT;GAS_ENDGUELTIG;GAS_AUSSPEISUNG 7-1:99.36.17 = GAS_ENERGIEWERT;GAS_ENDGUELTIG;GAS_EINSPEISUNG 7-10:99.33.17 = GAS_ENERGIEWERT;GAS_VORLAEUFIG;GAS_AUSSPEISUNG 7-10:99.33.17#BRW = GAS_BRENNWERT;GAS_VORLAEUFIG 7-10:99.33.17#ZZA = GAS_Z_ZAHL 7-10:99.36.17 = GAS_ENERGIEWERT;GAS_VORLAEUFIG;GAS_EINSPEISUNG 7-10:99.36.17#BRW = GAS_BRENNWERT;GAS_VORLAEUFIG 7-10:99.36.17#ZZA = GAS_Z_ZAHL 7-20:3.0.0 = GAS_BETRIEBSVOLUMEN;GAS_ZAEHLERSTAND;GAS_AUSSPEISUNG 7-20:3.2.0 = GAS_NORMVOLUMEN;GAS_ZAEHLERSTAND;GAS_AUSSPEISUNG 7-20:99.33.17 = GAS_ENERGIEWERT;GAS_ENDGUELTIG;GAS_AUSSPEISUNG 7-20:99.33.17#BRW = GAS_BRENNWERT;GAS_ENDGUELTIG 7-20:99.33.17#ZZA = GAS_Z_ZAHL 7-20:99.36.17 = GAS_ENERGIEWERT;GAS_ENDGUELTIG;GAS_EINSPEISUNG 7-20:99.36.17#BRW = GAS_BRENNWERT;GAS_ENDGUELTIG 7-20:99.36.17#ZZA = GAS_Z_ZAHL Beispiele: Der Zeitbezug (Intervall) für den Brennwert soll berücksichtigt und in eine eigene FKID2 gespeichert werden, z. B.: OBIS_Mapping.7-0:54.0.16 = GAS_BRENNWERT;STUNDE OBIS_Mapping.7-0:54.0.20 = GAS_BRENNWERT;TAG OBIS_Mapping.7-0:54.0.22 = GAS_BRENNWERT;MONAT Seit eCount- 00056592 ist es möglich, mit dem Wildcard-Zeichen * zu arbeiten. Damit ist es möglich, Einstellungen wie diese vorzunehmen: OBIS_Mapping.7-*:70.66.* = GAS_CO2_ANTEIL 10.11.1.1.4.3 Achtung – Reihenfolge der OBIS-Einstellungen Umfangreiche Konfigurationen können schnell zu Seiteneffekten führen. Hierbei muss beachtet werden, dass erst die ObisMapping.<name> ausgewertet wird und dann auf der manipulierten OBIS- Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 207 von 384 Kennzahl (oder auf der originalen OBIS, falls keine ObisMapping-Regel gefunden wurde) die Einstellungen OBIS_Mapping angewendet werden. Beispiel: In der MSCONS wird die OBIS 7-1:70.66.20 übermittelt. Über ObisMapping.A01=7-1:x.x.x ; 7-1:*.*.22 wird der Zeitbezug der OBIS manipuliert, gleichzeitig soll jedoch über OBIS_Mapping.7-1:70.66.20=GAS_H2_ANTEIL die OBIS auf eine virtuelle OBIS (FKID2) gemappt werden. Es wird zuerst die OBIS 7-1:70.66.20 auf 7-1:70.66.22 geändert, anschließend wird mit 7-1:70.66.22 in OBIS_Mapping auf einen Wert geprüft. In unserem Fall ist für OBIS_Mapping kein Wert hinterlegt, sodass die FKID2 nicht auf GAS_H2_ANTEIL gesetzt wird. Mit der Einstellung OBIS_Mapping.7-1:70.66.22=GAS_H2_ANTEIL würde die FKID2 für die gemappte OBIS korrekt geschrieben werden. 10.11.1.2 MSCONS-Format spezifische Prüfungen (AHB) auf dem KomA Beschreibung gültig für Formate ab Version 2.2c. Fehlt der Prüfidentifikator (RFF+Z13), wird eine negative CONTRL erstellt (da das Segment mit R gekennzeichnet ist). Das MSCONS-Format wird primär über die KomA und der Import-API im robotron*ecount verarbeitet. Dabei werden die Werte der MSCONS vorbereitet/aggregiert und an die Import-API übergeben (Performance). Dies führt jedoch dazu, dass in der Import-API nicht mehr alle Informationen der MSCONS enthalten sind, die Erzeugung der APERAK kann also von der Import-API nicht allein bewerkstelligt werden. Aus diesem Grund werden bei MSCONS schon zahlreiche Prüfungen von der KomA durchgeführt. Treten Verstöße auf, werden diese in der DB registriert und die Import-API nutzt anschließend die aufbereiteten „Fehler“ für den weiteren APERAK-Prozess. Folgende Prüfungen sind implementiert: - - Es findet eine Querprüfung mit dem Wert aus UNB.0026 (TL, VL, EM) gegen das BGM.1001 statt. Für BGM.1001 und die Werte BK, Z06/Z20, Z15, Z16 und Z21 wird geprüft ob der Wert TL in UNB.0026 steht, ist dies nicht der Fall wird für alle MSCONS-Versionen ab 2.2c eine APERAK mit dem Fehlercode Z29 angelegt (für ältere Versionen wird, wie bisher, eine negative CONTRL erstellt) Es findet eine Querprüfung mit dem Wert aus RFF+Z13.C506.1154 (Prüfidentifikator [PI]) gegen das BGM.1001 statt. Es wird eine APERAK mit dem Fehlercode Z29 erzeugt wenn o o o o o - BGM.1001=7 und PI nicht 13001 oder 13002 oder 13006 BGM.1001= BK und PI nicht 13003 BGM.1001=Z06 oder Z20 und PI nicht 13004 BGM.1001=Z15 und PI nicht 13005 BGM.1001=Z21 und PI nicht 13007 Bei BK wird geprüft, ob bei den Mengenangaben nur 1 Monat übergeben wurde (siehe eCount00050372). Mehrere Monate müssen in mehreren UNH-Segmenten (also Nachrichten) übertragen werden. Eine Verletzung der Vorgabe wird mit APERAK Z30 behandelt. Es wird geprüft, ob gar keine Mengenangaben (SG10-Segmente) übermittelt wurden, dann wird eine APERAK Z29 erstellt. Seite 208 von 384 - - Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Es wird geprüft, ob Lücken zwischen den Mengenangaben auftauchen (SG10-Segmente), Lücken werden mit APERAK Z30 beantwortet. Es wird geprüft, ob Erzeugungs-/ Aggregationszeitpunkt/ Versionsangabe vorhanden ist (SG6.DMT+293), dies ist der Fall, wenn BGM.1001 den Wert Z06 oder Z20 hat und das Zeitintervall zwischen ersten SG10 DTM+163 und letzten SG10 DTM+164 mindestens einen Monat umfasst. Schlägt die Prüfung an, wird eine APERAK Z29 angelegt. Bei BK oder Z15 in BGM.1001 wird geprüft ob die Mengenangaben an der Monatsgrenze beginnen. Ist dies nicht der Fall, wird eine APERAK Z30 erstellt. 10.11.1.3 Verwendung der MSCONS-Segment-Felder in ecount Tabelle 10-14: Verwendung der MSCONS-Segment-Felder in ecount MSCONS-Segment Ablage in ecount / DB-Tabelle DTM+9 (Ablese-, Erfassungs-, Erzeugungszeitpunkt) IMPORT_FILE.ZEITSTEMPEL SG6.DTM+157 (Gültigkeit eines Profils bzw. Versionsnummer der Profilschar, wird in FK_ID1 einer Profilschar) verwendet (nur bei Profilscharen) 10.11.1.4 Medienart (Bestimmung im KomA) Mit eCount- 00047757 wird die Medienart über die KomA festgelegt. Die Ablage erfolgt dabei in der Tabelle MSCONS_NACHRICHTEN in der Spalte RMEA_ID. Die Medienart wird beispielsweise in der Maske EDIFACT-Cockpit zur Filterung verwendet. Für MSCONS ab Version 2.1d ist folgende Logik implementiert: Bei MSCONS und BGM mit einem Wert aus "BK, Z06, Z15, Z16, Z20" wird "Strom" (S) verwendet. Zusätzlich wird im NAD-Segment bei der Code-Stelle (C082.3055) über den Typ eine Identifizierung durchgeführt. Kann die Medienart nicht eindeutig bestimmt werden, wird X (Unbekannt) in die Spalte eingefügt. Für MSCONS bis 2.1c wurde die Logik in eCount- 00049059 nachgetragen. Dabei wird jedoch nur zwischen Strom und Gas unterschieden. 10.11.2 Export Beinhaltet Informationen bezüglich des Exports von MSCONS-Dateien 10.11.2.1 Konfigurationsparameter Tabelle 10-15: Konfigurationsparameter für den MSCONS-Export Parameter/Beschreibung Standardwert MAX_BK_FILE_SIZE 9900000 MSCONS-BK-Summen werden automatisch vor ca. 10 MB gesplittet. Dabei wird immer an Zählpunkt-Grenzen geteilt. Die Angabe erfolgt in Byte (9900000 = 9,9 MB) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 209 von 384 Parameter/Beschreibung Standardwert MSCONS_Z24_GZIP Y Y/N. Der Allokationslistenversand (BGM+Z24) wird immer mit GZIP-Komprimierung durchgeführt. Über diese Einstellung kann dies deaktiviert werden. Nachkommastellen Damit kann die Anzahl an Nachkommastellen manipuliert werden. Nur bei InhouseKommunikation verwenden, da die Anzahl an Nachkommastellen vom BDEW vorgeben wird! Diese Einstellung sollte im ecount im Abo bei der dynamischen Eigenschaft hinterlegt werden und muss nicht zentral in der EDI.properties angegeben werden (kann aber). Da die Einstellung teilweise abhängig von der Medienart, MSCONS-Version und anderen Einflussgrößen ist, kann nicht sichergestellt werden, dass diese Einstellung exakt funktioniert. NAD_RECEIVER_ID_FROM_HDL Y/N. Empfänger im Segment SG2.NAD+MR wird aus den Feldern „Händler“ befüllt. Die Daten werden aus der Tabelle EXPORT_SENDER_EMPFAENGER und den Spalten HAENDLER_ID und HAENDLER_IDTYP extrahiert. N NAD_SENDER_ID_FROM_NB Y/N. Sender im Segment SG2.NAD+MS wird aus den Feldern „Netzbetreiber“ befüllt. Die Daten werden aus der Tabelle EXPORT_SENDER_EMPFAENGER und den Spalten NETZBETREIBER_ID und NETZBETREIBER_IDTYP extrahiert. REMOVE_RUECKSTELLZIFFER_OBIS N Y Y/N. Die Übertragung der Rückstellkennziffer der OBIS ist nicht BDEW konform und wird per Default nicht exportiert. Der Export der Rückstellkennziffer kann jedoch mit der Einstellung REMOVE_RUECKSTELLZIFFER_OBIS=N unter config/export/EDI.properties aktiviert werden. Beispiel: REMOVE_RUECKSTELLZIFFER_OBIS=Y: 1-1:1.29.0 REMOVE_RUECKSTELLZIFFER_OBIS=N: 1-1:1.29.0*255 RemoveVD*Units N Y/N. Rückstellkennziffer am OBIS entfernen, falls von ecount geliefert. Beispiel: 1.6.1*12 kann mit RemoveVD*Units=Y zu 1.6.1 geändert werden. SEND_BRW_MON_AVG Y/N. Mit SEND_BRW_MON_AVG=N kann der Brennwert auch stündlich oder täglich versendet werden. Dazu muss die Periode der Linie jedoch auch stündlich oder täglich sein. Mit Y wird immer 7-0:54.0.22 (Monatsmittelwerte) versendet, bei stündlichen oder täglichen Linien wird hierbei eine Aggregation dieser Werte auf die KomA durchgeführt um den Monatsmittelwert ausgeben zu können. N Seite 210 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Standardwert SEND_ZZA_MON_AVG Y Y/N. Mit SEND_ZZA_MON_AVG=N kann die Z-Zahl als Stundenwerte verschickt werden. Als OBIS-Kennzahlen wird 7-0:52.0.22 (Mittelwert) versendet. STATUS20 Über diesen Status ist es möglich das ecount-Status ungleich N auch mit den MSCONSStatus 20 (Nicht verwendbarer Wert) exportiert werden. Mehrere ecount-Status werden durch Komma getrennt angegeben. Beispiel: ecount-Status V soll auch als MSCONS-Status 20 exportiert werden STATUS20=V unit.<alt>=<neu> Nur bis Version 2.1d relevant! Damit kann ein Einheitenmapping vorgenommen werden. Beispiel: Einheit K3 als KAH umsetzen: unit.K3 = KAH UNIT_IN_QTY N Y/N. Nur bis Version 2.1d relevant! Definiert ob in MSCONS-Versionen vor 2.1d die Einheit mit ausgeben werden soll. ZST_MON_BRW Y Y/N. Mit ZST_MON_BRW=N kann der Brennwert für Zählerstände stündlich versendet werden. Mit Y wird 7-0:54.0.22 (Monatsmittelwerte), mit N 7-0:54.0.16 (Stundenmittelwerte) als OBIS-Kennzahl versendet (Tagesmittelwerte - 7-0:54.0.20 werden aktuell nicht unterstützt). ZST_SEKUNDAERWERTE N Y/N. Mit ZST_SEKUNDAERWERTE=Y kann der Export von von Primär- auf Sekundärwerte umgeschalten werden. 10.11.2.2 Split von MSCONS beim Export Ein Splitting ist bei MSCONS für Zählpunkte, Linien oder nach Dateigröße möglich. Das Splitting wird vom ecount-Datenversand in der Tabelle EXPORT_ECOUNT in der Spalte RSPL_ID mitgegeben. Falls RSPL_ID nicht gefüllt ist, dafür aber die Spalte TEILUNG, dann wird auf Zählpunktebene gesplittet. Tabelle 10-16: Split von MSCONS beim Export Split Beschreibung (EXPORT_ECOUNT.RSPL_ID) ZPT Es wird pro Zählpunkt eine neue Datei erstellt. LIN Es wird pro Linie eine neue Datei erstellt. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 211 von 384 Split Beschreibung (EXPORT_ECOUNT.RSPL_ID) FILESIZE Bei Überschreibung der Dateigröße wird eine neue Datei erstellt. Die Angabe der Dateigröße erfolgt in KB. Damit die MSCONS-Dateien korrekt aufgebaut werden, erfolgt die Prüfung auf die Dateigröße nicht sofort sondern beispielsweise nach Abarbeitung einer Linie. Damit ist die Dateigröße der erzeugten MSCONS-Datei nie exakt. Die Prüfung der Dateigröße erfolgt auf der originalen MSCONS-Datei. Ist beim Exportauftrag zusätzlich Komprimierung (gzip) aktiviert, erfolgt die Komprimierung erst nach dem Split der Datei (die FILESIZE-Prüfung erfolgt also nicht auf die GZIP-Datei). 10.11.2.3 Brennwert-Versand – OBIS-Kennzahl Der Brennwert kann aktuell in drei Ausprägungen (stündlich = 7-0:54.0.16, täglich = 7-0:54.0.20 und monatlich 7-0:54.0.22) exportiert werden. Bis zur Anpassung in eCount- 00055853 wurde der Versand immer stündlich oder monatlich durchgeführt. Monatlich wurde versendete wenn der Parameter SEND_BRW_MON_AVG auf Y steht (was per Default der Fall war), hierbei wurde bei stündlichen oder täglichen Linien der Mittelwert auf die KomA gebildet. Bei den meisten Systemen sollte der Brennwert also immer monatlich versendet worden sein auch wenn die Linie in ecount stündlich bzw. täglich definiert war. Jetzt kann der Versand sowohl stündlich, täglich und monatlich erfolgen. Der Defaultwet für SEND_BRW_MON_AVG wurde auf N gesetzt. Dieser Parameter kann global in der EDI.properties oder im ABO über die Einstellung Brennwertlinie mit Periode monatlich versenden gesetzt werden. Alle bestehenden ABOS werden über ein Migrationsskript (siehe eCount- 00055853) mit dieser Einstellung versehen um das bestehende Verhalten nicht zu verändern. Mit dieser Änderung werden die Brennwerte dann so versendete, wie sie im ecount definiert wurden (wenn SEND_BRW_MON_AVG nicht auf Y gesetzt wird). 10.11.2.4 Export-Tabellen - Struktur Eine MSCONS-Übertragungsdatei hat einen Eintrag in der Tabelle EDIFACT_FILE. Innerhalb einer Übertragungsdatei können mehrere Nachrichten enthalten sein, da MSCONS Multi-UNH fähig ist. Dies bedeutet, dass es mehrere Einträge in MSCONS_NACHRICHTEN geben kann. In MSCONS_NACHRICHTEN wird die Beziehung zu EDIFACT_FILE über die Spalte EDIF_ID hergestellt. Innerhalb von EDIFACT_FILE ist über die Spalte EAU_ID wiederum die Beziehung zur Tabelle EXPORT_AUFTRAEGE vorhanden. Um herauszufinden, welche Daten innerhalb einer MSCONS-Nachricht überhaupt versendet wurden, kann mit der ID aus MSCONS_NACHRICHTEN in den beiden Tabellen EXPORT_TAGESLASTPROFILE (für Lastgänge) und EXPORT_VERBRAUCHSDATEN (z. B. für Zählerstände) in der Spalte MSCN_ID gesucht werden. Die Datensätze aus EXPORT_TAGESLASTPROFILE hängen über die Spalte LIN_ID und die Datensätze aus EXPORT_VERBRAUCHSDATEN über die Spalte ELI_ID direkt unter EXPORT_LINIEN. Die Seite 212 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Tabelle EXPORT_LINIEN hängt via KUN_ID an EXPORT_KUNDE und dies wiederum an EXPORT_ZAEHLPUNKTE. Über diese Struktur ist es möglich herauszufinden, welche Linie in welcher MSCONS_NACHRICHT verschickt wurde. Achtung: Solle der Versand wiederholt werden oder sollte die Linie auf mehrere MSCONS-Nachrichten aufgesplittet werden, dann wird die MSCN_ID in EXPORT_TAGESLASTPROFILE und EXPORT_VERBRAUCHSDATEN aktualisiert! Somit ist keine 100%-ige Zuordnung von Linie zu MSCONS_NACHRICHT möglich. Ein automatisches Split einer Linie wird vorgenommen wenn die Segment-Wiederholungen gesprengt werden, dies kann beispielsweise beim Versand von mehreren Linien mit kurzer Periode (kleiner/gleich Periode 15) für einen Zählpunkt über einen großen Zeitraum (z. B. 1 Jahr) stattfinden. 10.11.2.5 Export Allokationslisten Gas (BGM+Z24, RFF+Z13+13013) Diese MSCONS-Ausprägung sieht den Versand aller relevanten Zählpunkte in einer Übertragungsserie vor. Laut MIG dürfen max. 99 Dateien (ergibt sich aus S010.0070 - Übermittlungsfolgenummer) in einer Serie übermittelt werden. In ecount werden immer 14.000 Zählpunkte pro Übertragungsdatei versendet (damit sind max. 1.386.000 Zählpunkte in einer Übertragungsserie übermittelbar). Um der BDEW-Kommunikationsrichtlinie (max. 10 MB darf eine E-Mail im EDIFACT-Umfeld aktuell groß sein) gerecht zu werden, wird bei BGM-Z24 nun automatisch je Mail gesplittet, sprich jede Datei wird in einer eigenen E-Mail versendet. Zusätzlich erfolgt die Komprimierung mittels gzip. Ist die GZIPKomprimierung nicht gewünscht kann dies über den Parameter "MSCONS_Z24_GZIP=N" (z.B. in der EDI.properties) deaktiviert werden. 10.11.3 Probleme/Lösungen 10.11.3.1 Negative Werte Bis MSCONS 2.2b (Stand: 01.10.2013) war in der MIG folgender Hinweis enthalten: DE 6060: Im deutschen Energiemarkt werden positive Werte mit maximal 3 Nachkommastellen verwendet. Ab MSCONS 2.2c (Stand 01.04.2014) ist der Passus aus der MIG entfallen und in das AHB verschoben worden. Für die in Segmentgruppe 10 (QTY) ausschließlich positiv anzugebenden Energie- und Volumenwerte (incl. Null) sind max. 3 Nachkommastellen vorgesehen. … Hier steht also, dass ausschließlich „positive Werte“ versendet werden, d.h. im Umkehrschluss, dass negative Werte nicht erlaubt sind. Da es beispielsweise Temperaturen in der Marktkommunikation (lt. AHB) nicht gibt, werden diese auch über die entsprechende Datenquelle nicht unterstützt. Die EDIDatenquelle unterstützt hier also primär die Dinge, die vom BDEW/DVGW verbindlich geregelt sind. Die Lösung ist die Einrichtung einer 2. Datenquelle, welche für die nicht marktkonforme Kommunikation verwendet wird. 10.11.3.2 Unbekannte OBIS-Kennzahlen sind nicht marktkonform Frage aus dem Forum Datenformate: Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 213 von 384 Das EDI@Energy OBIS-Kennzahlen-System verweist auf seine Quellen DIN EN 62056-61:2007-06 (Strom) und DIN EN 13757-1:2003-03 (Gas) und gibt an, dass die DIN-Normen die "vollständige Zusammenstellung des gesamten Systems" darstellen. Das impliziert, dass das EDI@Energy OBISKennzahlen-System nur einen Auszug und Beispiele widerspiegelt. Die Übermittlung spezieller OBISKennzahlen per MSCONS wird von Marktpartnern teilweise mit APERAK abgelehnt. Die zu klärende Frage ist, ob nur die explizit im EDI@Energy OBIS-Kennzahlen-System dargestellten OBIS-Kennzahlen für MSCONS zulässig sind, oder ob auch andere Kennzahlen, die in den Quell-DIN beschrieben sind, verwendet werden können. Antwort: „Es sind nur die explizit gekennzeichneten OBIS (In der Marktkommunikation verwendete OBIS-Kennzahlen) für die MSCONS zulässig.“ 10.11.3.3 Import 10.11.3.3.1 6660 vor der Versionsnummer (DTM+293) Wenn 6660 vor der Version steht, wurde in der MSCONS-Datei das Segment SG6.DTM+293 übermittelt. Das Zeitintervall in SG10 erfüllt jedoch nicht die Bedingung „Zeitintervall zwischen ersten SG10 DTM+163 und letzten SG10 DTM+164 mindestens einen Monat umfasst“. 10.11.3.3.2 Ablesegrund Turnusablesung PMR verschwindet beim Zählerstandsimport Der Ablesegrund PMR wird von der KomA entfernt, das es den Code PMR im ecount nicht gibt. Turnusablesung ist intern als null deklariert (historisch gewachsen, zu hoher Migrationsaufwand, …). Aus diesem Grund ist das „verschwinden“ von PMR kein Fehler sondern zwingend notwendig, anderenfalls würden nachfolgende Prozesse den Ablesegrund nicht korrekt identifizieren können. Abbildung 10-9: Ablesegrund PMR verschwindet beim Zählerstandsimport 10.11.3.4 Export 10.11.3.4.1 Fehlerausgabe "Mehrere Energiewert-Linien gefunden unter x" Prüfung, ob ggf. vorläufige und endgültige Werte im Exportauftrag enthalten sind. Es wird versucht, innerhalb desselben Abos sowohl endgültige als auch vorläufige Liefermengen via MSCONS an den Lieferanten zu verschicken. Das ist laut GeLi nicht vorgesehen. Sofern sowohl vorläufiger als auch endgültiger Versand für die Linie notwendig sind, müssen diese in separate Abos ausgegliedert werden. 10.11.3.4.2 Nicht erlaubte Statusangaben für Marktrollen Auf dem KomA wird nicht auf Marktrollen und deren erlaubte Statuswerte geprüft. Es werden alle Daten exportiert, die in den Export-Tabellen für den jeweiligen Exportauftrag vorhanden sind. Wenn Daten verschickt werden, die laut BDEW für die Marktrolle nicht vorgesehen sind, muss die Einstellung im Seite 214 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Datenversand-Abo (Export > Datenversand > <jeweiliges Abo>) geprüft werden. Im Abo geschieht dies im Reiter Umfang - Inhalt. Beispiel: MSCONS 2.2d als NB an LF darf der Status „201“ (Vorschlagswert) nicht versendet werden Es ist zu prüfen, ob im Abo im Reiter Umfang - Linien die Lastgangqualität korrekt eingestellt ist. Es dürfen weder im Feld Geforderte Statuswerte noch im Feld Zusätzlich akzeptierte Statuswerte die Werte v oder V auftauchen (dies ist beispielsweise bei Lastgangqualität Prognose der Fall). Abbildung 10-10: Anzeige nicht erlaubter Statusangaben für Marktrollen im Abo (Reiter Umfang – Linien) 10.11.3.4.3 Beginn der Gültigkeit des Brennwertes und der Z-Zahl erforderlich bei Gas-Zählerständen Die Meldung besagt, dass der Wert „Beginn der Gültigkeit des Brennwertes und der Z-Zahl“ beim Export für den Zählerstand fehlt. Die Prüfung wird nun ausgeführt wenn der Wert des Brennwertes oder der ZZahl ungleich 0 ist! Ursprüngliche lautete die Fehlermeldung „Bezugszeitraum für Brennwert/Z-Zahl erforderlich bei GasZählerständen“, diese wurde jedoch verbessert in „Beginn der Gültigkeit des Brennwertes und der ZZahl erforderlich bei Gas-Zählerständen. [ZPT_ID: X; LINIE_ID: Y; OBIS: Z]“. Mit dieser Information kann der relevante Zählerstand ermittelt werden. Dazu eignet sich die MF_ZST (Zählerstände). Zu dieser gelangt man beispielsweise über die MF_ZPT (Zählpunkt-Verwaltung) auf der entsprechenden Linie im Reiter „Information“ über den Button „Zählerstände“. Der betroffene Wert ist im 1. Reiter „Zählerstände“ in der Spalte „Begin BWZ“ hinterlegt (bzw. in diesen Fall anscheinend nicht). Dieser Wert ist ein Pflichtfeld und wird meist durch eine ZFA geliefert (kann jedoch auch manuell hinterlegt werden). Wenn der Wert nachgetragen wird, oder inzwischen von der ZFA geliefert wurde, so muss der Export-Auftrag neu erstellt werden. Damit die neuen Daten auch für den Export in den ExportTabellen sichtbar sind. 10.12 NOMINT Übermittlung von Nominierungen. 10.12.1 Import-Parameter Die Einstellmöglichkeiten beziehen sich primär auf die Festlegung der FK-ID-Spalten (FK-ID1 bis FK-ID4) und können in der EDI.properties hinterlegt werden. Folgende Parameter können zur Generierung der FK-ID verwendet werden. Die Parameter müssen in der Properties-Datei mit {} eingeschlossen werden. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Tabelle 10-17: NOMINT – FKID-Variablen Parameter Beschreibung LIN_DIR SG39.QTY+C186:6063 NAD:ZES.ID SG39.NAD+C082:3039 (wenn NAD+3035=ZES) NAD:ZES.TYPE SG39.NAD+C082:3055 (wenn NAD+3035=ZES) NAD:ZSH.ID SG39.NAD+C082:3039 (wenn NAD+3035=ZSH) NAD:ZSH.TYPE SG39.NAD+C082:3055 (wenn NAD+3035=ZSH) NAD:ZSO.ID SG39.NAD+C082:3039 (wenn NAD+3035=ZSO) NAD:ZSO.TYPE SG39.NAD+C082:3055 (wenn NAD+3035=ZSO) NAD1.ID SG39.NAD+C082:3039 (1. SG39-Segment) NAD1.ROLE SG39.NAD +3035 (1. SG39-Segment) NAD1.TYPE SG39.NAD+C082:3055 (1. SG39-Segment) NAD2.ID SG39.NAD+C082:3039 (2. SG39-Segment) NAD2.ROLE SG39.NAD +3035 (2. SG39-Segment) NAD2.TYPE SG39.NAD+C082:3055 (2. SG39-Segment) NAD3.ID SG39.NAD+C082:3039 (3. SG39-Segment) NAD3.ROLE SG39.NAD +3035 (3. SG39-Segment) NAD3.TYPE SG39.NAD+C082:3055 (3. SG39-Segment) NAD4.ID SG39.NAD+C082:3039 (4. SG39-Segment) NAD4.ROLE SG39.NAD +3035 (4. SG39-Segment) NAD4.TYPE SG39.NAD+C082:3055 (4. SG39-Segment) NOMINT_TYPE Wert aus BGM+C002:1001 NOMINT_VER Aktuelle Version, Wert aus UNH.S009.0057 RECEIVER_ID Wert aus SG3.NAD.C082:3039 RECEIVER_ID_TYPE Wert aus SG3.NAD.C082:3055 RECEIVER_ROLE Wert aus SG3.NAD.3035 Seite 215 von 384 Seite 216 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter Beschreibung SENDER_ID Wert aus SG3.NAD.C082:3039 SENDER_ID_TYPE Wert aus SG3.NAD.C082:3055 SENDER_ROLE Wert aus SG3.NAD.3035 ZPT_ID SG38.LOC+C517:3225 ZPT_ID_TYPE Wenn SG38.LOC+3227 den Wert 172 oder Z17 dann ZPT sonst NKP ZPT_TYPE SG38.LOC+C517:3055 10.13 NOMRES Übermittlung von Nominierungsbestätigungen. 10.13.1 Import-Parameter Die Einstellmöglichkeiten beziehen sich primär auf die Festlegung der FK-ID-Spalten (FK-ID1 bis FK-ID4) und können in der EDI.properties hinterlegt werden. Folgende Parameter können zur Generierung der FK-ID verwendet werden. Die Parameter müssen in der Properties-Datei mit {} eingeschlossen werden. Tabelle 10-18: NOMRES – FK-ID-Variablen Parameter Beschreibung DATE_TIME_END DTM+Z01 (2. Datum beim Datumsformat 719) DATE_TIME_START DTM+Z01 (1. Datum beim Datumsformat 719) LIN_STATUS SG27.IMD+C273:7009 LIN_TYPE SG37.QTY+C186:6063 MSG_TYPE Wert aus BGM.C002:1001. Laut aktueller eingeschränkter Codeliste für BGMC002:1001 z. B. X1G, X1G NAD:ZSH.ID SG39.NAD+C082:3039 (wenn NAD+3035=ZSH) NAD:ZSH.TYPE SG39.NAD+C082:3055 (wenn NAD+3035=ZSH) NAD:ZSO.ID SG39.NAD+C082:3039 (wenn NAD+3035=ZSO) NAD:ZSO.TYPE SG39.NAD+C082:3055 (wenn NAD+3035=ZSO) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter Beschreibung NAD1.ID SG39.NAD+C082:3039 (1. SG39-Segment) NAD1.ROLE SG39.NAD +3035 (1. SG39-Segment) NAD1.TYPE SG39.NAD+C082:3055 (1. SG39-Segment) NAD2.ID SG39.NAD+C082:3039 (2. SG39-Segment) NAD2.ROLE SG39.NAD +3035 (2. SG39-Segment) NAD2.TYPE SG39.NAD+C082:3055 (2. SG39-Segment) NAD3.ID SG39.NAD+C082:3039 (3. SG39-Segment) NAD3.ROLE SG39.NAD +3035 (3. SG39-Segment) NAD3.TYPE SG39.NAD+C082:3055 (3. SG39-Segment) NAD4.ID SG39.NAD+C082:3039 (4. SG39-Segment) NAD4.ROLE SG39.NAD +3035 (4. SG39-Segment) NAD4.TYPE SG39.NAD+C082:3055 (4. SG39-Segment) NOMRES_TYPE Wert aus BGM+C002:1001 NOMRES_VER Aktuelle Version, Wert aus UNH.S009.0057 RECEIVER_ID Wert aus SG3.NAD.C082:3039 RECEIVER_ID_TYPE Wert aus SG3.NAD.C082:3055 RECEIVER_ROLE Wert aus SG3.NAD.3035 SENDER_ID Wert aus SG3.NAD.C082:3039 SENDER_ID_TYPE Wert aus SG3.NAD.C082:3055 SENDER_ROLE Wert aus SG3.NAD.3035 ZPT_ID SG36.LOC+C517:3225 ZPT_ID_TYPE Wenn SG36.LOC+3227 den Wert 172 hat dann ZPT, sonst NKP ZPT_TYPE SG36.LOC+C517:3055 Seite 217 von 384 Seite 218 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Tabelle 10-19: Parameter für NOMRES (über EDI.properties einstellbar) Parameter/Beschreibung Default ORDRSP.NOMRES.status.<X> Wert-Status definieren, X ist hierbei der Wert aus SG27.IMD-C273:7009 und kann z.B. die Ausprägungen 13G, 14G, 15G, 18G, …. Umfassen. ORDRSP.NOMRES.status.18G = W 10.14 ORDRSP Die ORDRSP ist die Antwort auf eine ORDERS. 10.14.1 Zusammenspiel mit EDIFACT-Cockpit (MF_EDIFMON) Import: Beim Import wurde die Unterstützung der Verknüpfung der ORDRSP auf die ORDERS eingebaut. Bei der Verknüpfung werden der Wert der Nachrichtennummer der Anfrage (Wert im SG1.RFF+ON) aus der ORDRSP, sowie die Sender- und die Empfänger-Kennung verwendet. SELECT FROM WHERE AND AND AND AND N.EDIF_ID ORDERS_NACHRICHTEN N N.BGM_REF = ? N.EE_ID IS NOT NULL EMPFAENGER_ID = ? SENDER_ID = ? ROWNUM < 2 BGM_REF ist der Wert aus SG1.RFF+ON der ORDRSP EMPFAENGER_ID (der ORDERS) ist der Sender der ORDRSP SENDER_ID (der ORDERS) ist der Empfänger der ORDRSP Es sollte immer eine 1 zu 1 Verbindung zwischen ORDERS und ORDRSP existieren, sollte die Datenmenge aber fehlerhaft sein wird mittels ROWNUM<2 die Anzahl auf 1 Datensatz beschränkt um keine ORA-Fehlermeldung beim Update zu erhalten. Export: Beim Export wird, seit dem Formatupdate zum 01.10.2016, die ORDRSP mit der ORDERS wie folgt verknüpft. Es wird der ORDRSP_NACHRICHTEN-Datensatz angelegt, die dabei erzeugte ID wird zwischengespeichert. Anschließend wird mittels der Referenz zur ORDERS (in der Spalte ORDRSP_NACHRICHTEN .AUFTR_NR abgelegt) und der Sender- und Empfänger-Kennung (Sender der ORDRSP ist dabei der Empfänger der ORDERS und umgekehrt) die EDIFACT_FILE.ID der ORDERS selektiert (diese steht in ORDERS_NACHRICHTEN.EDIF_ID). Es sollte hier immer eine 1 zu 1 Kombination geben. Sollte es jedoch, aus welchen Gründen auch immer, mehrere Datensätze geben wird die EDIFACT_FILE.ID der neusten ORDERS verwendet (deswegen ist das ORDER BY ID DESC enthalten). SELECT FROM WHERE AND AND AND AND ORD.EDIF_ID ORDRSP_NACHRICHTEN N, ORDERS_NACHRICHTEN ORD N.ID = ? N.AUFTR_NR = ORD.BGM_REF N.SENDER_ID = ORD.EMPFAENGER_ID N.EMPFAENGER_ID = ORD.SENDER_ID ORD.IFI_ID IS NOT NULL Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 219 von 384 AND ORD.EDIF_ID IS NOT NULL ORDER BY ORD.ID DESC Im SQL wird zusätzlich geprüft ob die ORDERS importiert wurde (IFI_ID ist not null) und auch ein EDIFACT_FILE-Eintrag (EDIF_ID is not null) existiert. 10.15 PRICAT 10.15.1 Export Beim Export von PRICAT-Dateien werden die relevanten Informationen in der Tabelle PRICAT_NACHRICHTEN abgespeichert. Dabei Datensatz wird im ecount angelegt und von der KomA nur noch aktualisiert, dabei werden folgende Spalten werden geupdatet: EDIF_ID, ERSTVERSAND, WIEDERHOLVERSAND, VERSION 10.16 TRANOT TRANOT ist eine Teilmenge von ORDERS. 10.16.1 Import-Parameter Die Einstellmöglichkeiten bezüglich TRANOT beziehen sich auf die Festlegung der FK-ID-Spalten (FK-ID1 bis FK-ID4). Folgende Parameter können zur Generierung der FK-ID verwendet werden. Die Parameter müssen in der Properties-Datei mit {} eingeschlossen werden. Tabelle 10-20: TRANOT Parameter für FK-Bestimmung Parameter Beschreibung QTY_TYPE Wert aus SG39.QTY.C186:6063. Beispielsweise ZPD, ZY1, ZY2, ZY6 TRANOT_VER Aktuelle Version, Wert aus UNH.S009.0057, z. B. EG4009 UNIT Wert aus SG39.QTY.C186:6411, z. B. KW1, KW2, HM1, HM2, TQH, … NAD:ZOA.ID Wert aus SG41.NAD.C082:3039 wenn ZOA in C082:3055 enthalten ist NAD:ZOA.TYPE Wert aus SG41.NAD.C082:3055 wenn ZOA in C082:3055 enthalten ist NAD:ZOB.ID Wert aus SG41.NAD.C082:3039 wenn ZOB in C082:3055 enthalten ist NAD:ZOB.TYPE Wert aus SG41.NAD.C082:3055 wenn ZOB in C082:3055 enthalten ist MSG_TYPE Wert aus BGM.C002:1001. Laut aktueller eingeschränkter Codeliste für BGMC002:1001 entweder X01 oder X02 SENDER_ROLE Wert aus SG2.NAD.3035 Seite 220 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter Beschreibung SENDER_ID Wert aus SG2.NAD.C082:3039 SENDER_ID_TYPE Wert aus SG2.NAD.C082:3055 RECEIVER_ROLE Wert aus SG2.NAD.3035 RECEIVER_ID Wert aus SG2.NAD.C082:3039 RECEIVER_ID_TYPE Wert aus SG2.NAD.C082:3055 Beispiel-Konfiguration für FK-ID: ORDERS.TRANOT.FK_ID1=TRANOT{MSG_TYPE};ZOA={NAD:ZOA.ID},ZOB={NAD:ZOB.ID},Version={TRANOT_VER},UNIT ={UNIT} ORDERS.TRANOT.FK_ID2={SENDER_ROLE}={SENDER_ID},{SENDER_ID_TYPE};{RECEI VER_ROLE}={RECEIVER_ID},{RECEIVER_ID_TYPE};{QTY_TYPE} 10.17 UTILMD 10.17.1 Export-Parameter Tabelle 10-21: UTILMD Export-Parameter Parameter/Beschreibung Default SPLIT_SEGMENT_COUNT 910000 Maximale Anzahl Segmente pro Nachricht SPLIT_RECORD_COUNT -1 Maximale Anzahl Meldungen pro Nachricht. Positive Ganzzahl oder -1 für deaktiviert. SPLIT_FILE Y/N. Split auf Dateiebene (Y). Mit N wird auf Meldungsebene gesplittet. 10.17.2 Import von gesplitteten UTILMD-Nachrichten Dies wird über das UNH-Segment in der Datenelementgruppe S010 signalisiert. Y Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 221 von 384 Abbildung 10-11: Import von gesplitteten UTILMD Beispiel: Ablage im ecount: UTILMD 1: UNH+XXX10049918329+UTILMD:D:11A:UN:5.1+XXX10049918329+1:C… Ablage in folgender UTILMD_NACHRICHTEN-Spalte - SEQ_ID = XXX10049918329 SEQ_NR = 1 SEQ_FIRST_LAST = C UTILMD 2: UNH+REA10049920270+UTILMD:D:11A:UN:5.1+REA10049918329+8' Ablage in folgender UTILMD_NACHRICHTEN-Spalte - SEQ_ID = REA10049918329 SEQ_NR = 8 SEQ_FIRST_LAST = null 10.18 Verschlüsselung und Signatur Beim Export von EDFIACT-Dateien wird über die Spalten SIGNIEREN und VERSCHLUESSELN in der Tabelle EXPORT_ECOUNT der KomA mitgeteilt ob die Nachricht signiert und verschlüsselt werden muss (mit dem Wert Y). Ist das Zertifikat für das Verschlüsseln zusätzlich in ecount gepflegt (Tabelle NAS_ZERTIFIKATE) muss der Wert aus der Spalte NAS_ID auch beim Export übergeben werden. Die NAS_ID muss dabei in der Tabelle EXPORT_ADRESSEN in der Spalte NAS_ID für den Empfänger der Datei (entspricht EXPORT_ADRESSEN.KLASSE=TO) übermittelt werden. Seite 222 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Besitzt EXPORT_ECOUNT.VERSCHLUESSELN also den Wert Y und ist für den Empfänger eine NAS_ID gepflegt, wird beim Verschlüsseln in der KomA das Zertifikat aus ecount geladen. 10.18.1 Besonderheit CONTRL CONTRL-Nachrichten werden zum Teil vom KomA, zum andern Teil von ecount erzeugt. Die Ermittlung der Informationen für Signatur und/oder Verschlüsselung sowie die NAS_ID des Empfängers (der anschließenden CONTRL) werden dabei von der Import-API beim Import der eigentlichen EDFIACT-Datei (ungleich CONTRL) ermittelt und in der Tabelle IMPORT_REPLY_INFO abgelegt. Beim Anlegen des Exportauftrages werden diese Informationen anschließend wiederverwendet. Sodass CONTRLS (und auch APERAKS) mit den vorgesehen Einstellungen bezüglich der Signatur und der Verschlüsselung exportiert werden. 10.19 Allgemeine EDIFACT Probleme/Lösungen Im nachfolgenden Kapitel sind bekannte Probleme und deren Lösungsmöglichkeiten beschrieben. 10.19.1 Doppelimport in zwei Mandanten Auf einigen Systemen wurden Probleme erkannt, die im Zusammenhang mit der Einstellung Test_Systembetreiber stehen. Diese Einstellung war aktiviert, zusätzlich wurde jedoch explizit eine Mandanten-ID über VTP_ID_MANDANT übermittelt. Dies hatte zur Folge, dass der Import mit Mandant 1 startete. Anschließend wurde die Mandanten-ID des Systembetreibers überprüft und die neue ID gesetzt. Das Problem tritt demnach nur auf, wenn VTP_ID_MANDANT ungleich Mandanten-ID des Systembetreibers und beide Einstellungen in der EDI.properties enthalten sind. Konfiguration in EDI.properties: Test_Systembetreiber = Y VTP_ID_MANDANT = 1 Log-Auszug: 05.06.14 16:46:38 Debug(7): Setze VTP-ID-Mandant 1 05.06.14 16:46:38 Debug(7): New Import file id 3472354 05.06.14 16:46:38 Debug(7): Insert CMSG_ID=2085949 / cma_id=null 05.06.14 16:46:38 Debug(7): New Edifact-File ID 1457117 05.06.14 16:46:38 Debug(7): Setze VTP-ID-Mandant 99999 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 223 von 384 10.19.2 Änderungen in EDIFACT_Tabellen protokollieren/nachvollziehen Einige Tabellen im Schema EC_EDIFACT werden per Trigger auf Änderungen protokolliert. Das betrifft aktuell die Tabellen: IFTSTA_MELDUNGEN, IFTSTA_NACHRICHTEN, IFTSTA_WIM_MELDUNGEN, INSRPT_DOKUMENTE, INSRPT_MELDUNGEN, INSRPT_NACHRICHTEN, ORDERS_MELDUNGEN, ORDERS_NACHRICHTEN, ORDRSP_MELDUNGEN, ORDRSP_NACHRICHTEN, QUOTES_MELDUNGEN, QUOTES_NACHRICHTEN, REQOTE_NACHRICHTEN. Eine globale Abfrage auf Änderung der Spalte REF_VERSION in IFTSTA_MELDUNGEN wird wie folgt ausgeführt: SELECT * FROM EDIFACT_AENDERUNGEN X WHERE X.TABELLE = 'IFTSTA_MELDUNGEN' AND X.SPALTE = 'REF_VERSION' AND X.ZEITSTEMPEL > SYSDATE – 10 Für einen Datensatz kann folgendes Select ausgeführt werden: SELECT * FROM edifact_aenderungen WHERE tabelle = 'IFTSTA_NACHRICHTEN' AND daten_id = 3086 Die Daten-ID ist die ID aus IFTSTA_NACHRICHTEN bzw. ISN_ID aus IFTSTA_MELDUNGEN. 10.19.3 Probleme bei Dateinamen im Gas-Umfeld Damit auf der KomA die Dateinamen nach der richtigen Konvention erstellt werden können, muss in der Abo-Definition das Feld Anhang-Dateiname leer gelassen werden. Alternativ kann in der KomA der Dateiname übersteuert werden, dies ist global und wird in der Config.properties via calculateFilename=E realisiert. 10.20 Zusammenspiel mit EDIFACT-Cockpit (MF_EDIFMON) Beim Export von EDIFACT-Dateien können diese Dateien im ecount abgespeichert werden. Im EDIFACTCockpit können diese Dateien im Reiter „Allg.“ (Allgemein) über die beiden Schaltflächen „speichern unter…“ und „anzeigen“ betrachtet werden. Damit diese Funktionalität ausgeführt wird muss in der KomA der den Export übernimmt in der Config.properties-Datei folgendes Option gesetzt werden: export.edifact.insert_ec_doc = Y Dabei wird die Datei über die Import-Zwischentabelle „EC_DOK.GTMP_DOK_IMPORT_QUEUE“ importiert und anschließend durch die PL/SQL-Prozedur „ec_dok.pkg_dokumente.prc_process_new_dokuments()“ verarbeitet. Dadurch wird die Datei gzipkomprimiert in der Tabelle „EC_DOK.DOK_BLOBS“ abgelegt. In der Tabelle „EC_XCH.EDIFACT_FILE“findet anschließend die Verknüpfung zu dem Datensatz über die Spalte „DOK_ID“ statt. Seite 224 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Die beiden Schaltflächen sind deaktiviert wenn die Ablage in den EC_DOK-Tabellen deaktiviert ist oder ein Fehler während der Ablage auftrat. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 225 von 384 11 Importfilter 11.1 Allgemeine Einheitenkonvertierung Für alle Importfilter die in die Import-Zwischentabellen schreiben existiert eine globale Logik für die Einheitenkonvertierung. Notwendig ist dies da in ecount nur Einheiten erlaubt sind die auch gepflegt wurden (Tabelle REF_EINHEITEN). Beispiel: In ecount ist einheitenlos mit none spezifiziert, wenn in der Import-Datei jedoch bspw. - für einheitenlos steht muss dies konvertiert werden, anderenfalls scheitert die Nachverarbeitung. Des Weiteren ist es möglich die Einheitenkonvertierung global für alle oder nur für eine ausgewählte Datenquelle zu aktivieren. Die Einheitenkonvertierung kann in der Config.properties konfiguriert werden. Es ist jedoch sinnvoll, diese in eine extra Datei auszulagern. Im Folgenden werden beide Varianten beschrieben. 1. Config.properties – Datei Globale Syntax: import.unitconvert.global.<Einheit-Alt>=<Einheit-Neu> Beispiel - Die Einheit KWH soll für alle Formate nach kWh konvertiert werden: import.unitconvert.global.KWH = kWh Datenquelle-Syntax: import.unitconvert.ds:<Datenquelle>.<Einheit-Alt> = <Einheit-Neu> Beispiel - Nur für das Format EDI soll die Einheit KWH nach kWh konvertiert werden: import.unitconvert.ds:EDI.KWH = kWh 2. import.unitconvert.properties - Datei Damit die Einheitenkonvertierung zentral gepflegt wird, bietet es sich an, die import.unitconvert.properties im gleichen Ordner wie die Config.properties (config-Ordner) anzulegen. Da hierbei aus den Dateinamen die Syntax schon teilweise hervorgeht, weicht die Syntax von der der Config.properties-Datei ab. Globale Syntax: global.<Einheit-Alt>=<Einheit-Neu> Beispiel – Einheit „-“ in none ändern global.-=none Datenquelle-Syntax: ds:<Datenquelle>..<Einheit-Alt>=<Einheit-Neu> Beispiel – Einheit „-“ in none für Format GASX ändern ds:GASX.-=none Seite 226 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Die Datenquelle ist dabei das Format-Kürzel (2. Parameter) aus der datenimport.ini, falls keine Properties-Datei für diesen Eintrag existiert. Beispiel: - datenimport.ini: *.xml GASX_TEST import/GASX import.unitconvert.properties: ds:GASX_TEST.-=none Oder falls eine Properties-Datei existiert (z. B. config/import/GASX_TEST.properties) und in dieser Datei für die Einstellung datenquelle (die Groß- und Kleinschreibung ist irrelevant) ein Wert definiert wurde, dieser Wert. Beispiel: - GASX_TEST.properties: datenquelle=GASBEST import.unitconvert.properties: ds:GASBEST.-=none Die Konfiguration der Datenquelle hat immer Vorrang vor der globalen Einheitenkonvertierung. Damit ist es möglich, dass für ein ausgewähltes Format eine andere Einheit verwendet wird als für die restlichen Formate. 11.2 Wichtige Hinweise zur Nutzung der Import-API (Nachkommastellen) Der Import über die zentrale Import-API nutzt eine Datenstruktur, die für einen Wert 17 Stellen vorsieht. Dabei sind 6 Stellen für den Dezimalbereich (nach dem Komma) und 11 Stellen vor dem Komma vorgesehen. Werden nun Zahlen mit mehr als 6 Nachkommastellen importiert, wird standardmäßig von der KomA gerundet (round half up). Eine andere Rundungslogik muss explizit beantragt und im jeweiligen ImportFilter implementiert werden. Erfolgt der Import über den Importkonfigurator und handelt es sich um sehr kleine Zahlen, beispielsweise eine Zahl mit 8 Nachkommastellen deren Genauigkeit beibehalten werden soll, so wäre eine Möglichkeit der Umsetzung die Multiplikation des Wertes mit 1000. Damit können die Daten vorerst ohne Nachkommastellenverlust in die Importzwischentabellen übernommen werden. In der nachfolgenden Anwendungslogik (PL/SQL) müssen dann die Werte wieder mit 1000 dividiert werden. Wenn noch kleinere Werte (z. B. Zahlen mit 10 oder 30 Nachkommastellen) importiert werden müssen, ist die Nutzung des Allgemeines/Zweck des Dokumentes11.6 oder eines Spezialfilters projektspezifisch in Betracht zu ziehen, der die Daten in separate (meist kundenspezifische) Datenbank-Import-Tabellen übertragen kann und ohne die Begrenzung der 17 Stellen arbeitet. 11.3 CSV (Universeller Importkonfigurator) FILTER = CSV Siehe Kapitel 13 Importkonfigurator. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 227 von 384 11.4 DWD_ELE (Temperaturdaten - IST und PROGNOSE – im XML-Format) Hinweise: HandlerClass = de.robotron.ecount.dataimport.filter.DWD_ELEHandler Pfad: filter_import\ecount_import_DWD_ELE.jar Es handelt sich um einen Importfilter, der Wetterdaten im XML-Format einlesen kann. Dabei werden Istund Prognose-Daten importiert. XML-Beispiel: <?xml version="1.0" encoding="ISO-8859-1"?> <DATEN Quelle="MeteoGroup Deutschland GmbH" Typ="Wetterdaten" Ort="Berlin_B" Datum="2013-12-17" Zeit="05:01" Zeitzone="UTC" > <WETTERDATEN Typ="Temperatur" Einheit="°C"> <WERT Datum="2013-12-16" Zeit="00:00">1.6</WERT> <WERT Datum="2013-12-16" Zeit="01:00">2.0</WERT> <WERT Datum="2013-12-16" Zeit="02:00">1.6</WERT> <WERT Datum="2013-12-16" Zeit="03:00">1.3</WERT> <WERT Datum="2013-12-16" Zeit="04:00">1.5</WERT> <WERT Datum="2013-12-16" Zeit="05:00">1.4</WERT> <WERT Datum="2013-12-16" Zeit="06:00">1.5</WERT> <WERT Datum="2013-12-16" Zeit="07:00">1.1</WERT> <WERT Datum="2013-12-16" Zeit="08:00">1.6</WERT> <WERT Datum="2013-12-16" Zeit="09:00">2.9</WERT> <WERT Datum="2013-12-16" Zeit="10:00">5.4</WERT> <WERT Datum="2013-12-16" Zeit="11:00">7.5</WERT> <WERT Datum="2013-12-16" Zeit="12:00">8.8</WERT> <WERT Datum="2013-12-16" Zeit="13:00">9.2</WERT> <WERT Datum="2013-12-16" Zeit="14:00">9.1</WERT> <WERT Datum="2013-12-16" Zeit="15:00">7.8</WERT> Seite 228 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 <WERT Datum="2013-12-16" Zeit="16:00">6.7</WERT> <WERT Datum="2013-12-16" Zeit="17:00">6.4</WERT> <WERT Datum="2013-12-16" Zeit="18:00">5.7</WERT> <WERT Datum="2013-12-16" Zeit="19:00">5.4</WERT> <WERT Datum="2013-12-16" Zeit="20:00">5.7</WERT> <WERT Datum="2013-12-16" Zeit="21:00">4.5</WERT> <WERT Datum="2013-12-16" Zeit="22:00">3.5</WERT> <WERT Datum="2013-12-16" Zeit="23:00">4.1</WERT> </WETTERDATEN> Tabelle 11-1: Formatspezifische Einstellungen DWD_ELE Parameter/Beschreibung BEZEICHNUNG_LINIE_IST Name der Linie für die Wetterdaten (IST) BEZEICHNUNG_LINIE_PROGNOSE Name der Linie für die Vorhersage-Daten (Prognose) STATUS_LINIE_IST ecount-Status für die zu importierenden Werte für die IST-Daten Standardwert _Temperatur_Import_IST _Temperatur_Import_PRG W STATUS_LINIE_PROGNOSE ecount-Status für die zu importierenden Werte für die Prognose- V Daten IGNORE_UNIT_CHECK Y/N. Mit dem Wert N werden nur Temperaturen mit der Einheit °C importiert. Mit Y werden alle Daten importiert. N USE_FKID3 Y/N. Mit dem Wert N wird beim Import nur die FK_ID1 und FK_ID2 N verwendet, mit Y wird als FK_ID3 zusätzlich der Wert aus dem XMLElement „Daten“ und mit dem Attribut „Quelle“ verwendet. FILTER_TYP Filterung anhand des „Typ“-Attributes im XML-Element WETTERDATEN bzw. VORHERSAGE Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Seite 229 von 384 Standardwert IGNORE_UTC_TIMEZONE Y/N. Um UTC in der Datei zu ignorieren und die Standardzeitzone des Servers zu nutzen. Bei Y wird beim Sommer-Winter-Wechsel 1 beliebige Stunde addiert, bei Winter-Sommer-Wechsel eine beliebige Stunde entfernt. Zusätzlich wird ein Filter anhand des „Typs“ aktiviert, der nur noch Tagesmitteltemperatur berücksichtigt. Da bei der Tagesmitteltemperatur die Werte konstant sind, ist das Hinzufügen/Löschen eines beliebigen Wertes bei der Zeitumstellung nicht problembehaftet. N D.h. aber, dass der Modus IGNORE_UTC_TIMEZONE nicht für andere Typen außer der Tagesmitteltemperatur vorgesehen und unterstützt ist! (seit eCount- 00047602 KomAIMPORT-FILTER DWD_ELE - 1.1.2.5). 11.5 EBIX Format für den Schweizer Energiemarkt. 11.5.1 GZIP-Support Mit eCount- 00063422 (R 5.1 – 6032) wurde für den EBIX-Importfilter der Support für GZIPkomprimierte Dateien explizit implementiert. Per Default unterstützt der KomA-Datenimport nur Rohdateien (XML, TXT, XLSX, …) und ZIP-Dateien. Diese Feature wurde in den Filter eingebaut da der ebIX-Manager dieses Feature bietet und es somit für den Anwender intuitiver ist (alle EBIX-Tools arbeiten nach dem gleichen Prinzip). Es werden keine GZIP-Archive unterstützt die mehr als eine Datei beinhalten! 11.6 ELDR (EcountLoader) FILTER=ELDR Der Import Filter ELDR ist ein an den Oracle-SQL-Loader angelehnter Filter, der es ermöglicht, einfache Tabellenstrukturen aus flachen CSV- oder Excel-Dateien in eine Datenbank-Tabelle zu importieren (Master-Detail-Beziehungen werden nicht unterstützt). Die eigentliche Verarbeitung der Daten erfolgt dann meist durch nachgelagerte PL/SQL-Routinen. Die Konfiguration erfolgt neben der standardmäßigen .properties-Datei mittels einer zusätzlichen Loader-Definitionsdatei in einem speziellen Format. Die .properties-Datei enthält dabei mindestens folgende Einträge, mit denen der Filter und das Loader-Skript angegeben werden: FILTER=ELDR config_skript = config/import/ELDR.ldr Weitere Einstellung der .properties-Datei sind folgende. Seite 230 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Tabelle 11-2: Formatspezifische Einstellungen ELDR Parameter/Beschreibung BATCH_COUNT Parameter zur Festlegung ob die Inserts in die Datenbank als Batch erfolgen sollen. Positive Ganzzahl zwischen 2 und 10000 ist. Siehe 11.6.4.6 ENCODING_LDR Zum Einlesen der ldr-Datei wird das Default-Encoding (ISO-8859-1) verwendet. Soll ein anderes Zeichenencoding mitgegeben werden kann dies über diese Einstellung geschehen. Z.B. kann explizit UTF-8 mit folgender Einstellung in der .properties-Datei angefordert werden. ENCODING_LDR=UTF-8 Speziell bei Umlauten oder bei andere Zeichen (z.B. russischen Schriftzeichen) ist es erforderlich UTF-8 für die ldr-Dateien zu definieren. Sollte in der ldr-Datei das BOM vorhanden sein, über das das Encoding bestimmt werden kann, wird das Encoding aus der BOM verwendet. In Anlage 5 Konfigurationsbeispiele für Loader-Import sind einige Beispiel-Konfigurationen zum schnelleren Einstieg zu finden. Im Folgenden wird nun die Syntax dieses Loader-Skriptes beschrieben. Kommentare können wie in vielen anderen Sprachen auch mit // für einzeilige und /* ... */ für mehrzeilige Kommentare angegeben werden. Die gesamte Syntax basiert auf geklammerten Ausdrücken. Der äußere Ausdruck ist immer e*countload-definition(). Dieser enthält zuerst die verwendeten Datenbank-Verbindungen, danach die Formatdefinition für die Eingabedatei und danach die Definitionen der Ziel-Tabellen. Dies alles sind jeweils wieder einzelne Ausdrücke, die ohne weitere Verkettungszeichen hintereinander geschrieben werden. Für Datenbank-Verbindungsdefinitionen gibt es 3 verschiedene Typen: Tabelle 11-3: Typen für Datenbank-Verbindungsdefinitionen am ELDR Attribut Beschreibung databaseOCI() Damit kann eine Oracle-Datenbank-Verbindung mit Hilfe des nativen OracleOCI-Treibers definiert werden. databaseTHIN() Damit kann eine Oracle-Datenbank-Verbindung mit Hilfe des Java-JDBCOracle-Treibers definiert werden. Mit dieser Verbindungsart kann die in der Kommunikationsautomatisierung databaseECOUNT() eingestellte Datenbankverbindung genutzt werden, wahlweise mit neuen Anmeldeinformationen. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 231 von 384 Hinweise: Wenn möglich, sollte immer databaseECOUNT(), ohne zusätzliche Verbindungsparameter, verwendet werden! D.h. die Tabellen müssen für den Nutzer EC_XCH erreichbar sein und mit den benötigten Grants versehen werden (SELECT, INSERT, UPDATE). Damit ist sichergestellt, dass beim Ändern des Passwortes für EC_XCH nicht alle Konfigurationen geändert werden müssen! Es sollte also niemals databaseECOUNT(user = "ec_xch" passwd = "xyz") verwendet werden! Liegen die Tabellen nicht im KomA-Schema EC_XCH, ist es ratsam, die Tabellen an EC_XCH zu granten und die jeweiligen Synonyme zu vergeben. Somit müssen Nutzer und Passwort nicht im Klartext für ein anderes Schema auf der KomA in einer Datei abgelegt werden. Die Datenbank-Verbindungen haben mehrere Attribute: Tabelle 11-4: Attribute für Datenbank-Verbindungsdefinitionen am ELDR Attribut Beschreibung id Wenn mehrere Datenbanken angegeben wurden, der Name, mit dessen Hilfe die Verbindung innerhalb des Skriptes referenziert wird connect Je nach Verbindungstyp unterschiedlicher Connect-String host Servername für THIN-Verbindungstyp port Serverport für THIN-Verbindungstyp user Der anzumeldende Datenbank-Nutzer passwd Das Anmeldepasswort transaction_mode AUTO_COMMIT, COMMIT_AFTER(num), ROLLBACK_ON_ERROR, COMMIT_ON_CLOSE; Modus für die Transaktionsverwaltung Die einzelnen Verbindungstypen unterstützen davon folgende Attribute (in der angegebenen Reihenfolge): Tabelle 11-5: Unterstützung der Attribute pro Verbindungstyp am ELDR Attribut Beschreibung databaseOCI() required: connect, user, passwd optional: id, transaction_mode databaseTHIN() required: connect oder (host, port, service), user, passwd optional: id, transaction_mode databaseECOUNT() optional: id, user , passwd, transaction_mode Seite 232 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Nach den Datenbank-Verbindungen folgt die Definition des Eingabeformates. Hierfür wird ein Ausdruck namens inputFormat() angegeben. Dieser hat folgende Attribute: Tabelle 11-6: Attribute für Ausdruck inputFormat() Attribut Beschreibung encoding Zeichensatz, nur bei Typ CSV anwendbar. Standard: ISO-8859-1 (optional) CSV FIXED_LENGTH EXCEL EXCEL_POI type EXCEL kann nur das Format XLS einlesen. EXCEL_POI kann sowohl XLS als auch XLSX einlesen. Wird eine XLSX-Datei importiert, wird automatisch auf EXCEL_POI umgeschaltet, falls EXCEL konfiguriert wurde. Für neue Konfigurationen sollte immer EXCEL_POI verwendet werden! EXCEL war die erste Implementierung, die auf JExcelAPI basiert und aktuell desupportet ist. EXCEL_POI basiert auf APACHE POI und stellt aktuell den besten Standard zur Verfügung und wird auch aktiv Weiterentwickelt. Bei Typ EXCEL oder EXCEL_POI kann eine Komma-separierte Liste von Namen zu verarbeitender Arbeitsblätter definiert werden, z. B. Tabelle1 (optional) excelSheets Die Angabe des Namens des Arbeitsblattes ist „case insensitive“. Intern wird mit To-UpperCase gearbeitet um Probleme mit Groß- und Kleinschreibung zu umgehen. Wird in der Excel-Datei kein Arbeitsblatt mit den definierten Namen gefunden, wird die Excel-Datei mit der Fehlermeldung „Keine verarbeitbaren Arbeitsblätter gefunden“ in das Error-Verzeichnis verschoben. separator Kennzeichnet beim Typ CSV das Separator-Zeichen (Default: ; ) (optional) escape Kennzeichnet beim Typ CSV das Escape-Zeichen zum Entwerten eines Separators (optional) quotes true / false, bei Typ CSV innerhalb doppelter Anführungszeichen vorkommende Separatoren werden nicht als solche verarbeitet (optional) fieldLengths Bei Typ FIXED_LENGTH wird eine Komma-separierte Liste mit Feldlängen generiert (optional) stripSpaces true / false, Leerzeichen am Anfang und Ende von Feldern abschneiden (optional) headerRow Zeilennummer, die als Kopfzeile interpretiert werden soll, mit 1 beginnend (optional) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Attribut Seite 233 von 384 Beschreibung firstDataRow Zeilennummer, die als erste Datenzeile verarbeitet werden soll (optional) onEmptyRow Werte skip, stop, error; Verhalten beim Auffinden von Leerzeilen (optional) Abschließend folgen ein oder mehrere Blöcke mit Zieltabellen-Definitionen vom Typ targetTable(). Diese enthalten folgende Elemente: Tabelle 11-7: Zieltabellen-Definitionen vom Typ targetTable() am ELDR Attribut Beschreibung db_id ID der verknüpften Datenbank (optional) schema DB-Schema der Zieltabelle (optional) createOnMissing true / false, Angabe, ob Zieltabelle bei Bedarf angelegt werden soll; wenn true, müssen Datentypen und weitere Storage-Parameter befüllt werden (optional) table_space Ziel-Tablespace, wenn Tabelle angelegt werden soll (optional) name Name der Tabelle comment Kommentar für Tabelle, wenn diese angelegt werden soll (optional) importAssignments Enthält die Definitionen und Zuordnungen der Tabellenspalten und zusätzliche Verarbeitungsregeln Innerhalb des Blocks importAssignments() werden zuerst die Tabellenspalten-Definitionen und Zuordnungen mit column()-Blöcken angegeben. Danach können optional noch zusätzliche Regeln angefügt werden, die ein Sonderverhalten erzwingen. Die column()-Blöcke haben folgenden Aufbau: Tabelle 11-8: Zieltabellen-Definitionen vom Typ column()-am ELDR Attribut Beschreibung name Spaltenname in der Importtabelle dataExpression(), Ausdruck der angibt, wie die Spalte befüllt werden soll src Beispiele: src=toNumber(fileColumn(13)) src=ifi_id() Seite 234 von 384 Attribut Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Beschreibung src=toNumber(property("VTP_ID_MANDANT")) src=fileColumn(3)+fileColumn(4) type Optional; Datentyp in der Datenbank zum Anlegen der Tabelle; NUMBER, VARCHAR2, CHAR, DATE Optional; Wird beim Anlegen der Tabelle verwendet; primary_key Angabe, dass es sich um einen Primärschlüssel handelt; Es kann zusätzlich die Position innerhalb des Primärschlüssels mit einer Zahl angegeben werden. references Zielspalte: optional; Zum Anlegen der Tabelle; Angabe, dass es sich um einen Fremdschlüssel handelt not_null Optional; Zum Anlegen der Tabelle; Angabe, dass die Spalte ein Pflichtfeld ist comment Optional; Zum Anlegen der Tabelle; Angabe eines Spaltenkommentars Die folgende Übersicht beschreibt nun die möglichen Ausdrücke zur Angabe der Werte für die Tabellenspalten in dataExpression(): Tabelle 11-9: Zieltabellen-Definitionen vom Typ dataExpression()-am ELDR Attribut Beschreibung ChrarcterLiteral Ein beliebiges Zeichen z. B. 'A' columnHead(IntegerLiteral column) columnHead Wert der Kopfzeile in der angegebenen Spalte decode(StringExpression source [, StringExpression default] (, (StringLiteral key, StringLiteral value))+) decode Expression String CellExpression StringDekodiert den Wert source an Hand der Wertepaare, ist Expression ein Default-Wert angegeben, wird im Falle, dass kein passender Schlüssel in der Dekodiertabelle gefunden wird, dieser Default-Wert ausgegeben, sonst der Eingabewert aus source. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Attribut Beschreibung Seite 235 von 384 Expression fileCell(IntegerLiteral column, IntegerLiteral row) Absolute Zellenangabe fileCell Diese Funktion wird aktuell nur für das Input-Format EXCEL_POI unterstützt (eCount- 00049235). CellExpression Bsp. Excel-Zeile 1 Spalte 2 als Wert übernehmen: src=fileCell(2,1) fileColumn fileColumn(IntegerLiteral colNr) Spalte in der Datei mit Spaltennummer 1 beginnend zu zählen FileColumn fileColumn( (StringLiteral colName | IntegerLiteral colNr) [, optional] [,numericPrecision = IntegerLiteral colNr]) Spalte in der Datei entweder mit colName anhand des Spaltennamens in der Kopfzeile (s.o. headerRowDefinition) oder mit colNr die Spaltennummer (von 1 beginnend zu zählen). fileColumn Mit dem Parameter optional kann die Spalte als optional CellExpression markiert werden, d.h. es erscheinen keine Warnungen, wenn die Spalte in der Datei fehlt. Beispiel: fileColumn("ILN_ALTLIEFERANT", optional) Mit numericPrecision kann die Anzahl der Nachkommastellen beim Auslesen numerischer Werte angegeben werden (Standard 6). Beispiel: fileColumn(1, numericPrecision=12) filename() filename Liefert den Dateinamen der verarbeiteten Datei ohne evtl. Präfix der ZIP-Datei filenameZip() filenameZip Liefert den Dateinamen der verarbeiteten Datei mit evtl. Präfix der ZIP-Datei ifi_id() Aktuelle ID in IMPORT_FILE. ifi_id() Nur wenn diese Funktion verwendet wird, wird überhaupt die Import-API genutzt d.h. ohne diese Funktion sieht man in der Import-Dateien-Maske auch keine Einträge! StringExpression StringExpression NumberExpression Seite 236 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Attribut Beschreibung Expression IntegerLiteral Beliebige Zahl z. B. 5 Number line_nr() NumberExpression line_nr() Zeilennummer in der Datei lowerCase Wandelt alle Zeichen ([A-Z]) in Kleinbuchstaben StringExpression NumberLiteral Vorkommastellen.Nachkommastellen z. B. 10.59 Number nvl nvl(DateExpression source, DataExpression nullReplace) DateExpression Liefert Werte von source, wenn vorhanden, sonst Wert von nullReplace lowerCase(StringExpression source) nvl2(Expression expr1, Expression expr2, Expression expr3) Dies ist eine NULL-Handling-Funktion alternativ Werte für NULL und NICHT NULL liefert. expr1 = Ausdruck der verglichen werden soll. expr2 = Wert der zurückgegeben wird wenn expr1 nicht null und nicht leer ist. expr3 = Wert der zurückgegeben wird wenn expr1 null/leer ist. nvl2 Die Parameter der Funktion müssen immer identisch sein, sprich es ist nicht möglich als expr1 eine Zeichenkette zu verwenden und als expr2 ein Date. Beispiel Zeichenkette: …src=nvl2(fileColumn("A"), "XYZ", null)) Wenn in der Spalte A ein Wert enthalten ist (nicht null und nicht leer) so wird "XYZ" in die Spalte "Detail" eingefügt, anderenfalls wird null übergeben. (statt null könnte hier auch der Wert "123" stehen, es soll jedoch gezeigt werden dass auch null-Werte gehen). Beispiel Date: src=nvl2(toDate(fileColumn("A"), "dd.MM.yyyy"), Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Attribut Beschreibung Seite 237 von 384 Expression toDate(fileColumn("MSB_B"), "dd.MM.yyyy"),null)) Alle 3 Parameter müssen vom Typ „Date“ sein, nur der letzte Parameter darf auch null sein. nvld nvld(DateExpression source, DateExpression nullReplace) Spezielle nvl-Variante für Datentyp DATE property recordCount() replace DateExpression property(StringExpression name) Liefert den Wert der Filtereinstellung aus der zugehörigen Properties-Datei StringExpression recordCount() NumberExpression Einfacher Satzzähler replace(StringExpression source, StringLiteral find, StringLiteral replace) Ersetzt alle Vorkommen von find in source durch replace StringExpression replaceAll(StringExpression source, StringLiteral regex, StringLiteral replacement) replaceAll Ersetzt jedes Zeichen dieser Zeichenfolge (source), die dem angegebenen regulären Ausdruck (regex) entspricht, mit dem Wert aus replacement. Beispiele: Ersetze alle Zeichen, die keine Ziffer sind: src=replaceAll(fileColumn(1), "\\D", "")) String"abc123adf54664" --> 12354664 Expression Ersetze alle Ziffern [0-9]: src=replaceAll(fileColumn(1), "\\d", "")) "abc123adf54664" --> abcadf Ersetze alle Zeichen, die weder Buchstabe noch Zahl noch Unterstrich sind (also [^a-zA-Z_0-9]): src=replaceAll(fileColumn(1), "\\W", "")) abc123adf5523~sd~#-4664 --> abc123adf5523sd4664 siehe Anlage 3 replaceFirst replaceFirst(StringExpression source, StringLiteral regex, StringLiteral replacement) StringExpression Seite 238 von 384 Attribut Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Beschreibung Expression Ersetzt die erste Zeichenkette dieser Zeichenfolge (source), die dem regulären Ausdruck (regex) entspricht, mit dem Wert aus replacement. Beispiel: Ersetze das erste Vorkommen von AA durch XX:s src=replaceFirst(fileColumn(1),"AA", "XX") siehe Anlage 3 Sequence sequence( [schema = StringLiteral] name = StringLiteral [createOnMissing = true | Numberfalse]) Expression Liefert den Wert einer DB-Sequence und legt diese bei Bedarf an, wenn createOnMissing gesetzt ist StringLiteral Beliebige Zeichenkette z. B. TEXT String subString(StringExpression source, IntegerLiteral start [, IntegerLiteral length]) subString Liefert den Teilstring, der ab Zeichen start (ab 0 zählend) beginnt und ggf. bis zur Länge length, wenn die Länge der StringExpression Quellzeichenfolge kürzer ist als durch length gefordert, wird die Teilzeichenfolge bis zum Ende der Quellzeichenfolge ausgegeben, liegt start sogar hinter dem Ende der Quellzeichenfolge, wird eine leere Zeichenfolge geliefert SYSDATE SYSDATE Gibt das Systemdatum (des Kommunikationsservers) an DateExpression toDate(StringExpression source, StringLiteral pattern) toDate DateExpression Konvertiert einen String in ein Datum anhand der Datumsmaske, pattern siehe Anlage 2 Datumsformatierung tokenize(StringExpression source, StringLiteral separators, IntegerLiteral tokenIdx) tokenize Zerteilt die Zeichenfolge source an den durch separators angegebenen Zeichen und liefert die Teilzeichenfolge mit der Nummer tokenIdx zurück, tokenIdx wird ab 0 gezählt; ist der Wert negativ, beginnt die Zählung ab der letzten Teilzeichenfolge, -1 bezeichnet also die letzte Teilzeichenfolge StringExpression Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Attribut Beschreibung toLowerCase Gleichbedeutend zu lowerCase toNumber Seite 239 von 384 Expression toNumber(StringExpression source [, format= StringExpression, decimal = CharacterLiteral, group = CharacterLiteral]) Konvertiert eine Zeichenfolge in eine Zahl format beschreibt eine Formatmaske nach Anlage 2 Datumsformatierung decimal gibt den Dezimal-Trenner an group gibt das Tausender-Trennzeichen an toString(source) toString Primär zur Konvertierung von Ganz-Zahlen in eine Zeichenkette gedacht. Ist der Inputwert bereits eine Zeichenkette, wird diese nicht verändert. Ist der Inputwert eine Zahl wird diese in eine Zeichenkette gewandelt. Ist der Inputwert ein Datum wird dies mit folgender Formatmaske behandelt (dd.MM.yyyy HH:mm), dabei wir die Zeitzone der KomA-Instanz (USER_TIMEZONE in der env.cmd|sh) Stringverwendet. Expression Ein Anwendungszweck dieser Funktion war die Konvertierung einer Datumsspalte (Quelldatei war eine EXCEL-Datei) in eine Zeichenkette um anschließend das Date-Objekt richtig erzeugen zu können. (Hintergrund sind hier öfters Inkompatibilitäten zwischen Excel und Apache POI). Beispiel: src=toDate(toString(fileColumn("X")),"yyyyMMdd")) toUpperCase Gleichbedeutend zu upperCase trim(StringExpression source) trim Schneidet führende und folgende Leerzeichen ab upperCase(StringExpression source) upperCase Wandelt alle Zeichen ([a-z]) in Großbuchstaben StringExpression StringExpression Zuletzt können nun, wie bereits oben erwähnt, Regeln angegeben werden, die die Verarbeitung weiterer Spaltenzuweisungen steuern. Diese werden mit rule()-Ausdrücken angegeben. Diese Regeln enthalten jeweils eine Bedingung und eine Spaltenzuweisung mittels eines column()-Ausdruckes, wie oben beschrieben. Die Bedingung wird mit einem condition-Attribut angegeben und enthält einen Ausdruck vom Typ BooleanExpression. Dafür existiert zurzeit nur die Funktion notNull(DateExpression), die dann einen wahren Wert ergibt, wenn der übergebene Ausdruck Seite 240 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 einen gültigen Wert enthält. Ist mindestens eine solche Regel vorhanden, wird die aktuelle Datenzeile nur dann verarbeitet, wenn mindestens eine Regel wirksam ist. Die maximale Genauigkeit beim EcountLoader liegt bei 6 Nachkommastellen. 11.6.1 Mandantenfähigkeit Existiert in der Import-Tabelle eine Spalte für den Mandanten (z. B. VTP_ID_MANDANT) so muss diese Spalte durch den Loader berücksichtigt werden. Wenn der Mandant nicht in der zu importierenden Datei enthalten ist kann dieser über die Properties-Datei definiert werden. Beispiel: Loader-Datei nutzt die Properties-Einstellung VTP_ID_MANDANT Im Abschnitt importAssignments muss die Spalte definiert sein: … column(name="VTP_ID_MANDANT" src=toNumber(property("VTP_ID_MANDANT"))) … Sollen nun zwei Mandanten über diese Loader-Konfiguration geladen werden, müssen 2 Einträge in der datenimport.ini und zwei unterschiedliche Properties-Dateien, die den Mandanten definieren, hinterlegt werden. Beispiel: Die Loader-Datei heißt ELDR.ldr, die Properties-Datei für Mandant 1 heißt ELDR_M1.properties und die Properties-Datei für Mandant 2 heißt ELDR_M2.properties. Die Properties-Dateien haben dabei folgenden Aufbau. ELDR_M1.properties FILTER=ELDR DATENQUELLE=XYZ VTP_ID_MANDANT=1 config_skript=config/import/ELDR.ldr ELDR_M2.properties FILTER=ELDR DATENQUELLE=XYZ VTP_ID_MANDANT=2 config_skript=config/import/ELDR.ldr Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 11.6.2 Seite 241 von 384 Hinweise bei der Nutzung von Excel (XLS, XLSX) Der ELDR-Filter nutzt für Excel-Dokumente die Apache POI-Bibliothek (siehe Hinweise unter 12.14) und nicht Microsoft Excel. Die Excel-Dokumente sollten einen einfachen Aufbau haben und möglichst auf komplexe Formeln und unterschiedliche Spalten-Typen und Spalten-Formatierungen verzichten. Hintergrund: Bei der Ablage des Inhaltes der Excel-Dokumente muss unter Umständen eine Konvertierung vorgenommen werden. Damit stimmt der extrahierte Inhalt mit der Anzeige im Excel nicht überein (Beispiel Spalten-Typ „Boolean“, im deutschen Excel wird „WAHR“ angezeigt aber über Apache POI wird „TRUE“ geliefert). Mit eCount- 00053450 wurde Unterstützung für die Excel-Typen „Boolean“ und „Formular“ (Formeln) implementiert, wenn der Inhalt als Zeichenkette (Varchar-Spalte) in der Datenbank abgelegt werden soll. Bei Formel-Spalten wird auf den Cache-Wert zugegriffen (weil POI nicht alle Formeln von MS Excel unterstützen kann). Der Cache-Wert ist der Wert, den Microsoft Excel berechnet hat und separat abspeichert. Werden also Formeln verwendet und werden Daten „on the fly“ geändert, die in den Formeln Anwendung finden, muss sichergestellt werden, dass diese von Microsoft Excel berechnet werden (das muss insbesondere dann beachtet werden wenn automatisiert Excel-Dokumente erstellt werden, die auf einem Template mit Formeln basieren). 11.6.3 Beispielkonfigurationen Die in diesem Kapitel hinterlegten Beispiele sind nur vereinfacht dargestellt, die relevanten Befehle sind markiert. 11.6.3.1 CSV mit Komma als Trennzeichen inputFormat( encoding = "ISO8859-1" type = CSV separator="," … ) 11.6.4 Probleme/Lösungen 11.6.4.1 Zeichenkodierung (encoding) Die Kodierung einer Datei und die entsprechende Konfiguration in der Loader-Datei müssen übereinstimmen. Es kommt oft vor, dass Fehlermeldungen erstellt werden, die am Ende auf eine Abweichung zwischen EcountLoader-Konfiguration und zu importierender Datei zurückzuführen sind. So ist beispielsweise in der Konfiguration das Encoding auf ISO8859-1 eingestellt, die importierende Datei ist jedoch als UTF-8 konvertiert. Diese Problematik trifft speziell bei CSV-Dateien oft auf. Seite 242 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Um solche Probleme zu analysieren, lohnt sich oft die Nutzung eines HEX-Tools. Beispielsweise sieht eine Unicode kodierte Datei dabei wie folgt aus (die Leerzeichen verraten hier schon einmal, dass es nicht ISO8859-1 kodiert sein kann): Abbildung 11-1: Importdatei UNICODE kodiert Mit eCount- 00051053 wird die Zeichenkodierung anhand der BOM (Byte Order Mark) bestimmt. Die BOM-Prüfung umfasst folgende Charsets: - UTF-8 UTF-16LE (UTF-16 little-endian) UTF-16BE (UTF-16 big-endian) UTF-32LE (UTF-32 little-endian) UTF-32BE (UTF-32 big-endian) Wird eine BOM gefunden, wird anhand dieser Information die Zeichenkodierung bestimmt und nicht die EcountLoader-Konfiguration verwendet. Ist in der zu importierenden Datei kein BOM enthalten, wird ganz normal die EcountLoader-Konfiguration genutzt. Wird eine Datei in UTF-16 kodiert, jedoch ohne BOM geliefert, und weicht diese Kodierung von der EcountLoader-Konfiguration ab, wird es weiterhin ungewünschte Effekte/Probleme geben. 11.6.4.2 Zeichenproblem bei Excel-Dateien Für den Import von Excel-Dateien existieren intern 2 Methoden. Eine basiert auf JExcelAPI (type = EXCEL) und die andere auf Apache POI (type = EXCEL_POI). Der Support für JExcelAPI wurde seit Langem eingestellt, sodass Apache POI aktuell die beste Implementierungsbasis darstellt. Kommt es zu Problemen, d.h. Zeichen werden bspw. mit umgedrehten Fragezeichen dargestellt, bei Umlauten oder anderen Zeichen wie dem ß, so sollte geprüft werden, ob der type auf EXCEL steht. Ist dies der Fall, sollte EXCEL_POI verwendet werden. 11.6.4.3 Zieltabelle xyz nicht gefunden Wenn die Fehlermeldung trotz korrekt gesetzter Rechte (Select, Insert) auftritt, befindet sich die Tabelle mit hoher Wahrscheinlichkeit in einem anderen Schema als über databaseXYZ() definiert wurde. Wird beispielsweise die Default KomA-Datenbankverbindung (EC_XCH) via databaseECOUNT() genutzt und befindet sich die Tabelle MEINE_IMPORT_TABELLE im SCHEMA EC_MEINE, so muss die targetTable-Definition das richtige schema enthalten. Beispiel: e*count-load-definition ( databaseECOUNT() inputFormat( … ) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 243 von 384 targetTable( schema="EC_MEINE" name="MEINE_IMPORT_TABELLE" … Technischer Hintergrund: Ohne Schema-Angabe wird mit folgendem Select geprüft, ob die Tabelle vorhanden ist: select TABLE_NAME from USER_TABLES where TABLE_NAME= ‚MEINE_IMPORT_TABELLE' Mit Schema-Angabe wird folgendes Select abgesetzt: select TABLE_NAME from ALL_TABLES where TABLE_NAME=? and upper(OWNER)=? 11.6.4.4 Sequence xyz nicht gefunden Wenn die Fehlermeldung trotz korrekt gesetzter Rechte (select) auftritt, befindet sich die Sequenz in einem anderen Schema, als über databaseXYZ() definiert wurde. Beispiel: Der Loader ist so konfiguriert, dass die EC_XCH-Verbindung genutzt wird. e*count-load-definition ( databaseECOUNT( transaction_mode = COMMIT_AFTER(500) ) Die Sequenz “MEINE_SEQ” befindet sich jedoch im Schema “ec_irgendwas”. Damit muss bei der Definition der sequence-Spalte auch das Schema mitgegeben werden. column(name="ID" src=sequence(schema="ec_irgendwas” name="MEINE_SEQ")) Technischer Hintergrund: Ohne Schema-Angabe wird die Sequenz mit folgendem Select geprüft: SELECT SEQUENCE_NAME FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'MEINE_SEQ' Mit Schema-Angabe wird folgendes Select abgesetzt: SELECT SEQUENCE_NAME FROM ALL_SEQUENCES WHERE SEQUENCE_NAME = 'MEINE_SEQ' AND SEQUENCE_OWNER = 'EC_IRGENDWAS' Seite 244 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 11.6.4.5 Spalten mit Anführungszeichen ("SPALTE_X") Sind in der zu importierenden Datei die Spalten mit Anführungszeichen aufgeführt (beispielsweise beim Export über robotron*CsvExport), so müssen die Anführungszeichen auch in der Loader-Konfiguration berücksichtigt werden. Hierbei muss beachtet werden dass " ein Sonderzeichen im Java-Umfeld ist und dieses Zeichen somit mit einem Backslash \ maskiert (escaped) werden muss. Beispiel: CSV-Datei und Loader-Konfiguration: CSV-Datei: "Spalte_A";"SPALTE_B" Loader-Konfiguration: … src=fileColumn("\"SPALTE_A\"") … src=fileColumn("\“SPALTE_B\“") … 11.6.4.6 Performance bei großen Datenmengen (BATCH_COUNT) Bei großen Datenmengen (mehrere hunderttausend Datensätze) benötigt der EcountLoader sehr viel Zeit. Ursache kann hier unter anderem eine langsame Verbindung zwischen KomA und DB sein, da der EcountLoader aktuell jeden Datensatz einzeln in die Datenbank überträgt. Mit eCount- 00052604 (Version 4.0.2.20 des Moduls KOMA-IMPORT-FILTER ELDR) wurde ein Batch-Modus implementiert mit dem die Anzahl an Datensätzen festgelegt werden kann, nachdem das Insert stattfinden soll. Dazu muss die Einstellung BATCH_COUNT=x (wobei x eine positive Ganzzahl zwischen 2 und 10000 ist) in der jeweiligen Properties-Datei spezifiziert werden. Mit BATCH_COUNT=1000 wird also mitgeteilt, dass der Import aller 1000 Datensätze erfolgen soll. Bei Angabe eines Wertes <= 1 wird der BatchModus deaktiviert, bei mehr als 10000 wird auf 10000 begrenzt. Beispielkonfiguration (MY_LOADER.properties): FILTER=ELDR DATENQUELLE=XYZ BATCH_COUNT=1000 config_skript=config/import/MY_LOADER.ldr Der richtige Wert für den BATCH_COUNT hängt hauptsächlich von folgenden Restriktionen ab. - Der Größe der jeweiligen Datensätze (Anzahl an Spalten pro Datensatz und deren Wertausprägung z. B. nur Number(1) oder Varchar2(1000)?) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 - Seite 245 von 384 Dem zur Verfügung stehenden Speicherplatz (Stichwort OutOfMemoryError), mit dem der Datenimport gestartet wurde (siehe Kapitel 3.3.4). Hintergrund: Intern wird jeder Datensatz im Speicher gehalten bevor das Insert in die Datenbank erfolgt. Es ist daher ratsam, auf dem System Testläufe mit verschiedenen Werten für BATCH_COUNT durchzuführen, um den besten Wert zu ermitteln, z. B. mit 100, 1000, 5000. 11.6.4.7 Problem mit Umlauten und Sonderzeichen Wird in der ldr-Datei mit Umlauten oder Sonderzeichen (oder anderen Zeichen wie russischen Schriftzeichen gearbeitet) kommt es beim Import oft zu seltsamen Effekten (z.B. das einzelne Spalten nicht importiert werden). Bis Version 4.0.2.28 vom ecount_import_ELDR.jar wurde die ldr-Datei immer mit ISO-8859-1 eingelesen. Wurde die ldr-Datei aber beispielsweise mit UTF-8 angelegt kommt es bei Umlauten zu Zeichensalat (aus einen „ä“ wird z.B. ein „ä“, damit klappen dann interne Zuordnung über diese Zeichenkette nicht mehr). Mit Version 4.0.2.29 ist es möglich die Zeichenkodierung der LDR-Datei zu definieren, dies kann in der zugehörigen Properties-Datei über die Einstellung ENCODING_LDR geschehen. Beispiel UTF-8: ENCODING_LDR=UTF-8 Sollte die LDR-Datei ein Byte Order Mark (BOM) besitzen, wird die Zeichenkodierung über die BOM abgeleitet, dabei wird die Einstellung ENCODING_LDR überschrieben/ignoriert. Mit Notepad++ kann sehr schnell herausgefunden werden ob das Encoding z.B. UTF-8 oder UTF-8 ohne BOM ist. Abbildung 11-2: Überprüfung Encoding 11.6.4.8 AFTER_FILE_CLOSE_TRIGGER und TRANSACTION_MODE Damit in der Datenquelle (Import-API in PL/SQL) Code für den AFTER_FILE_CLOSE_TRIGGER ausgeführt wird, muss in der Loader-Konfiguration die Funktion ifi_id() verwendet werden. Ohne diese Funktion erfolgen die INSERT nur in die Datenbank-Tabelle, ohne Aufruf der Import-API. Seite 246 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Zusätzlich muss der TRANSACTION_MODE der Loader-Definition auf AUTO_COMMIT stehen, sonst sind die Daten im AFTER_FILE_CLOSE_TRIGGER nicht sichtbar. 11.7 EEX-Daten (.xls - Dateien) Für den Import von Daten vom EEX-Portal http://www.eex.de existieren 2 vordefinierte Filter. Die Daten können mit Hilfe des HTTP-Import-Moduls automatisch abgeholt werden. Von diesen Daten können zum einen die Spot-Historie (z. B. https://ftp.eex.de/statistic/energy_spot_historie_2005.xls) mit dem Filter EEX und zum anderen die Futures-Historie (z. B. https://ftp.eex.de/statistic/energy_phelix_power_futures_historie_2005.xls) mit Hilfe der vordefinierten CSV-Konfiguration EEX_FUTURES importiert werden. Für beide Importe werden Zählpunkte mit Zählpunktbezeichnungen angelegt, die mit DE000EEX00000_ beginnen. Dafür existiert ein spezieller, datenbankseitiger Datenimport-Job, der die neuen Daten automatisch sofort in die Linien importiert. Von den Daten der Spot-Historie werden Preise (Arbeitsblatt Prices) sowie Energiemengen (Arbeitsblatt Volumes) importiert. Von beiden Blättern werden jeweils die Werte der Spalten mit den Überschriften: Phelix Day Base, Phelix Day Peak, Off Peak I 01 - 08, Off Peak II 21 - 24, Night 01 - 06, Morning 07 - 10, Business 09 - 16, High Noon 11 - 14, Afternoon 15 - 18, Rush Hour 17 - 20, Evening 19 - 24, Hour 1 00 01, EEX Volume Total, EEX Volume Continuous Block Trading und EEX Volume Auction Market importiert. Für die Futures-Historie muss zuerst die Filter-Konfiguration aus config/samples/import/EEX_FUTURES.properties unter config/import installiert werden. Diese kann dann noch z. B. mit einem Texteditor oder mit dem Importkonfigurator angepasst werden. Die Liste der verarbeiteten Arbeitsblätter findet sich im Parameter EXCEL_SHEETS = F1BM, F1BQ, F1PM, F1PQ, F1PY Die zu importierende Spalte wird durch den Parameter COLUMN_SKIP_CRITERIA = not(in(cellValue(n,2),"Settlement Price")) als die Spalte mit der Überschrift Settlement Price festgelegt (es werden alle Spalten übersprungen, deren Überschrift nicht Settlement Price lautet). Soll hier eine weitere Spalte importiert werden, so kann diese Bedingung entsprechend erweitert werden. 11.8 EEX_XML Basierend auf dem Dokument EoD – XML – Market Results Interface Specification (www.eex.com/download/en/65940) ist der EEX_XML-Filter in der Lage, folgende XML-Ausprägungen zu importieren. - FuturesMarketResults GasSpotMarketResults GasSpotMarketSettlementResults o - Support für SettlementPrices mit eCount- 00053931 PowerSpotMarketAuctionResults o Support für HourPrices mit eCount- 00053931 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 - Seite 247 von 384 EmissionSpotMarketResults und EmissionFuturesMarketResults GasSpotMarketDRPResults (mit eCount- 00053931) PowerFutureMarketResults (mit eCount- 00053931) GasFutureMarketResults (mit eCount- 00053931) Tabelle 11-10: Formatspezifische Einstellungen für EEX_XML Parameter/Beschreibung Standardwert DefaultUnit Standardeinheit, falls nicht anders in der XML-Datei (im Element Currency) spezifiziert. Bei EmissionSpot wird diese Einstellung nicht beachtet. EUR/MWh EmissionSpot.IntradayAuctionPrice_FKID2 FK-ID2 für IntradayAuctionPrice EmissionSpotMarketResults.Prices.Product.Intra dayAuctionVolume EmissionSpot.IntradayAuctionPrice_IMPORT Y/N. Mit Y kann das Element IntradayAuctionPrice (EmissionSpotMarketResults.Prices.Product.Intr adayAuctionPrice) importiert werden. N EmissionSpot.IntradayAuctionPrice_UNIT Basiseinheit (t, MWh, etc...) für den IntradayAuctionPrice. Die Einheit ergibt sich aus dem Currency-Element. Einheit und Basiseinheit werden automatisch mit einem / getrennt. EmissionSpot.IntradayAuctionVolume_FKID2 FK-ID2 für IntradayAuctionVolume EmissionSpotMarketResults.Prices.Product.Intra dayAuctionVolume EmissionSpot.IntradayAuctionVolume_IMPORT Y/N. Mit Y kann das Element IntradayAuctionVolume (EmissionSpotMarketResults.Prices.Product.Intr adayAuctionVolume) importiert werden. EmissionSpot.IntradayAuctionVolume_UNIT Einheit für IntradayAuctionVolume N MWh EmissionSpot.OTCVolume_FKID2 FK-ID2 für OTCVolume EmissionSpotMarketResults.Prices.Product.OTCVo lume Seite 248 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Standardwert EmissionSpot.OTCVolume_IMPORT Y/N. Mit Y kann das Element OTCVolume (EmissionSpotMarketResults.Prices.Product.OTCV olume) importiert werden. EmissionSpot.OTCVolume_UNIT Einheit für OTCVolume N MWh EmissionSpot.SettlementPrice_FKID2 FK-ID2 für SettlementPrice EmissionSpotMarketResults.Prices.Product.Settl ementPrice EmissionSpot.SettlementPrice_IMPORT Y/N. Mit Y kann das Element SettlementPrice (EmissionSpotMarketResults.Prices.Product.Sett lementPrice) importiert werden. N EmissionSpot.SettlementPrice_UNIT Basiseinheit (t, MWh, etc...) für den SettlementPrice. Die Einheit ergibt sich aus dem Currency-Element. Einheit und Basiseinheit werden automatisch mit einem / getrennt. EmissionSpot.TotalVolume_FKID2 FK-ID2 für TotalVolume EmissionSpotMarketResults.Prices.Product.Total Volume EmissionSpot.TotalVolume_IMPORT Y/N. Mit Y kann das Element TotalVolume (EmissionSpotMarketResults.Prices.Product.Tota lVolume) importiert werden. EmissionSpot.TotalVolume_UNIT Einheit für TotalVolume N MWh EmissionSpot.USE_UNIT Y/N. Damit kann gesteuert werden, ob die Einheit für die Kanäle von der KomA festgelegt werden soll (Y) oder nicht (N). FK_ID2_GAS_SPOT_DRP FK-ID2 für die GasSpotMarketDRPResults-Elemente Y Price Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Seite 249 von 384 Standardwert FK_ID2_POWER_SPOT_PRICE FK-ID2 für Price PowerSpotMarketAuctionResults.HourPrices.Hours .Price FK_ID2_POWER_SPOT_VOLUME FK-ID2 für Volume PowerSpotMarketAuctionResults.HourPrices.Hours .Volume FK_ID2_SPOT FK-ID2, für den Import in die ecount-Zwischentabellen, für GAS_SPOT-Dateien Price FK_ID2_SPOTSETTLEMENT FK-ID2, für den Import in die ecount-Zwischentabellen, für GAS_SPOT_SETTLEMENT-Dateien FUTURE .OpenInterestContracts_FKID2 FK-ID2 für Products.Product.OpenInterestContracts Price Volume FUTURE .OpenInterestContracts_IMPORT Y/N. Mit N können die OpenInterestContracts-Elemente importiert werden. FUTURE.ContractVolume_FKID2 FK-ID2 für *.Results.Product.ContractVolume N Volume FUTURE.ContractVolume_IMPORT Y/N. Mit N kann ContractVolume (*.Results.Product. ContractVolume) importiert werden. FUTURE.ContractVolume_UNIT Einheit für *.Results.Product.ContractVolume N MWh FUTURE.HighPrice_FKID2 FK-ID2 für HighPrice FuturesMarketResults.Products.Product.HighPric e FUTURE.HighPrice_IMPORT Y/N. Mit Y kann das Element HighPrice (FuturesMarketResults.Products.Product.HighPri ce) importiert werden, (Einheit = EUR/MWh). N Seite 250 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Standardwert FUTURE.HighPrice_UNIT Basiseinheit (t, MWh, etc...) für HighPrice. Die Einheit ergibt sich aus dem Currency-Element. Einheit und Basiseinheit werden MWh automatisch mit einem / getrennt. eCount- 00053931 wird bei den 2015-Formaten nicht mehr ausgewertet. FUTURE.LastPrice_FKID2 FK-ID2 für LastPrice FuturesMarketResults.Products.Product.LastPric e FUTURE.LastPrice_IMPORT Y/N. Mit Y kann das Element LastPrice (FuturesMarketResults.Products.Product.LastPri ce) importiert werden, (Einheit = EUR/MWh). N FUTURE.LastPrice_UNIT Basiseinheit (t, MWh, etc...) für LastPrice. Die Einheit ergibt sich aus dem Currency-Element. Einheit und Basiseinheit werden MWh automatisch mit einem / getrennt. eCount- 00053931 wird bei den 2015-Formaten nicht mehr ausgewertet. FUTURE.LowPrice_FKID2 LowPrice FK-ID2 für FuturesMarketResults.Products.Product.LowPrice FUTURE.LowPrice_IMPORT Y/N. Mit Y kann das Element LowPrice (FuturesMarketResults.Products.Product.LowPric e) importiert werden, (Einheit = EUR/MWh). N FUTURE.LowPrice_UNIT Basiseinheit (t, MWh, etc...) für LowPrice. Die Einheit ergibt sich aus dem Currency-Element. Einheit und Basiseinheit werden automatisch mit einem / getrennt. MWh eCount- 00053931 wird bei den 2015-Formaten nicht mehr ausgewertet. FUTURE.OpenInterest_FKID2 FK-ID2 für OpenInterest FuturesMarketResults.Products.Product.OpenInte rest Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Seite 251 von 384 Standardwert FUTURE.OpenInterest_IMPORT Y/N. Mit Y kann das Element OpenInterest (FuturesMarketResults.Products.Product.OpenInt erest) importiert werden, (keine Einheit) FUTURE.OpenInterestVolume_FKID2 FK-ID2 für *.Results.Product.OpenInterestVolume N Volume FUTURE.OpenInterestVolume_IMPORT Y/N. Mit Y kann OpenInterestVolume (*.Results.Product.OpenInterestVolume) importiert werden. N eCount- 00053931 wird bei den 2015-Formaten nicht mehr ausgewertet. FUTURE.OpenInterestVolume_UNIT Einheit für *.Results.Product.OpenInterestVolume MWh FUTURE.OpenPrice_FKID2 FK-ID2 für OpenPrice FuturesMarketResults.Products.Product.OpenPric e FUTURE.OpenPrice_IMPORT Y/N. Mit Y kann das Element OpenPrice (FuturesMarketResults.Products.Product.OpenPri ce) importiert werden, (Einheit = EUR/MWh). N FUTURE.OpenPrice_UNIT Basiseinheit (t, MWh, etc...) für OpenPrice. Die Einheit ergibt sich aus dem Currency-Element. Einheit und Basiseinheit werden MWh automatisch mit einem / getrennt. eCount- 00053931 wird bei den 2015-Formaten nicht mehr ausgewertet. FUTURE.SettlementPrice_FKID2 Price bei Gas sonst unitFK-ID2 für FuturesMarketResults.Products.Product.Settleme unique EUR/MWh ntPrice FUTURE.SettlementPrice_IMPORT Y/N. Mit N kann das Element SettlementPrice vom Import ausgeschlossen werden Y Seite 252 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Standardwert (FuturesMarketResults.Products.Product.Settlem entPrice). FUTURE.SettlementPrice_UNIT Basiseinheit (t, MWh, etc...) für SettlementPrice. Die Einheit ergibt sich aus dem Currency-Element. Einheit und Basiseinheit werden automatisch mit einem / getrennt. MWh eCount- 00053931 wird bei den 2015-Formaten nicht mehr ausgewertet. FUTURE.TradedContracts_FKID2 FK-ID2 für TradedContracts FuturesMarketResults.Products.Product.TradedCo ntracts FUTURE.TradedContracts_IMPORT Y/N. Mit Y kann das Element TradedContracts (FuturesMarketResults.Products.Product.TradedC ontracts) importiert werden, (keine Einheit). FUTURE.TradedVolume_FKID2 FK-ID2 für *.Results.Product.TradedVolume N Volume FUTURE.TradedVolume_IMPORT Y/N. Mit Y kann das Element TradedVolume (*.Results.Product) importiert werden. FUTURE.TradedVolume_UNIT Einheit für *.Results.Product.TradedVolume eCount- 00053931 wird bei den 2015-Formaten nicht mehr ausgewertet. MWh FUTURE.USE_UNIT Y/N. Damit kann gesteuert werden, ob die Einheit für die Kanäle von der KomA festgelegt werden soll (Y) oder nicht (N). Y FUTURE.Volume_FKID2 FK-ID2 für FuturesMarketResults.Products.Product.Volume Volume FUTURE.Volume_IMPORT N Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Seite 253 von 384 Standardwert Y/N. Mit Y kann das Element Volume (FuturesMarketResults.Products.Product.Volume) importiert werden, (Einheit = MWh). FUTURE.Volume_UNIT Basiseinheit (t, MWh, etc...) für Volume. Die Einheit ergibt sich aus MWh dem Currency-Element. Einheit und Basiseinheit werden automatisch mit einem / getrennt. FUTURE_PREFIX Für die Generierung der FK-ID1 notwendig. Bestimmt, in Verbindung F0=DE,F1=DE,G0=DE,G2=D mit dem Wert <Contract>G0BM</Contract> aus der XMLE,F2=FR Datei, einen Teil der FK-ID1. Per Default wird bei G0 also DE verwendet. IMPORT_BLOCK_PRICES Y/N. Für POWER_SPOT relevant. Damit kann der Import der XMLElemente BlockPrices aktiviert werden. IMPORT_TYPE Über diese Einstellung wird dem Filter mitgeteilt, um welche XMLDatei es sich handelt (da es nur 1 Filter für alle XML-Ausprägungen gibt). Mögliche Werte sind: - GAS_SPOT_SETTLEMENT POWER_SPOT GAS_SPOT GAS_FUTURE POWER_FUTURE EMISSION_FUTURE (eCount- 00045885) EMISSION_SPOT GAS_DRP (eCount- 00053931) FUTURE_RESULTS_2015 (eCount- 00053931) Seit eCount- 00049753 wird, beim Fehlen dieser Einstellung, über den Dateinamen versucht, den Typ korrekt zu bestimmen. Dies funktioniert jedoch nur, wenn die Dateinamen den Richtlinien der Spezifikation entsprechen. - GAS_SPOT_SETTLEMENT wird verwendet, wenn der Dateiname mit GasSpotMarketSettlementResults beginnt POWER_SPOT wird verwendet, wenn der Dateiname mit PowerSpotMarketAuctionResults beginnt GAS_SPOT wird verwendet, wenn der Dateiname mit GasSpotMarketResults startet N Seite 254 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung - Standardwert GAS_FUTURE wird verwendet, wenn der Dateiname GasFuturesMarketResults enthält POWER_FUTURE wird verwendet, wenn der Dateiname PowerFuturesMarketResults enthält. EMISSION_FUTURE wird genutzt, wenn der Dateiname EmissionSpotMarketResults oder EmissionFuturesMarketResults enthält. INCLUDE_AREA_ALIASE Für POWER_SPOT relevant. Damit wird spezifiziert, welche Areas aus der XML-Datei importiert werden. DE-AT PowerSpot.VOLUME_IMPORT Y/N. Mit N kann der Import der HourPrices.Hours.VolumeElemente unterbunden werden. PowerSpot.VOLUME_UNIT Einheit für Volume SPOT_INDEX_NAME Für POWER_SPOT relevant. Wird zur Generierung der FK-ID1 bei BlockPrices verwendet. ValuesFlag ecount-Statuswert für die zu importierenden Werte Y MWh DEAT=PHELIX,CH=SWISSIX,F R=FRANCE W Alle zusätzlichen Informationen/Elemente werden nur importiert wenn SettlementPrice nicht den Wert für ein nicht gehandeltes Produkt (0.01 bzw. 0.001 bei Gas) enthält. 11.8.1 Fremdkanal-ID 1(FK-ID1) Für alle FK-ID1 gilt: Wenn 33 Zeichen noch nicht erreicht sind, wird mit 0 aufgefüllt, bei mehr als 33 Zeichen wird abgeschnitten. Die FK-ID1 ergibt sich wie folgt: FuturesMarketResults - Mapping aus FUTUR_PREFIX i.V.m. Wert aus Contract 000EEX0 Wert aus Contract, 3 Stellen, B=BASE, P=PEAK, O=OFFPEAK Beispiel: FR000EEX0F2CR_R122014_00000000000 EmissionSpotMarketResults - DE000EEX00 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 - Seite 255 von 384 Wert aus Product.ProductID Falls ContractStart und ContractEnd vorhanden sind: _ContractStartContractEnd_ _SPOT_CO2 Beispiel: DE000EEX00EUSP_20122021__SPOT_CO2 PowerSpotMarketAuctionResults - FK-ID1 ergibt sich aus den ersten beiden Buchstaben von AREA.Alias + 000EEX00000_PRI_HOUR_1_00_-_01_ FK-ID1 für BlockPrices ergibt sich aus dem Block-Alias. Aktuell werden nur folgende Aliase supportet: - BL06 - 000EEX00000_PRI_OFF_PEAK_II_21_ BL07 - 000EEX00000_PRI_{1}_DAY_BASE BL08 - 000EEX00000_PRI_{1}_DAY_PEAK BL10 - 000EEX00000_PRI_OFF_PEAK_I_01_- Bei BL07 und BL08 wird der Platzhalter über die Einstellung SPOT_INDEX_NAME bestimmt. GasSpotMarketSettlementResults - DE000EEX AREA.ALIAS (5 Zeichen, wenn weniger wird vorher mit 0 aufgefüllt) _SPOTSETTLEMENT_ AREA.ALIAS GasSpotMarketResults - DE000EEX AREA.ALIAS (5 Zeichen, wenn weniger wird vorher mit 0 aufgefüllt) _SPOT_ AREA.ALIAS GasSpotMarketDRPResults - DE000EEX Product. MarketArea (5 Zeichen, wenn weniger wird vorher mit 0 aufgefüllt) _SPOT_ Product. MarketArea 11.9 ESS_LG (nur Import von Daten ohne Fahrplan) Umsetzung mit eCount- 00030512. ESS-Confirmationreports können importiert werden, ohne dass ein Fahrplanmanagement mit dem System betrieben wird. D.h. es gibt keine zusätzlichen Prüfungen auf Einträge in der Tabelle FPL_DATEIEN oder Ähnliches. Der Filter unterstützt Confirmationreport- als auch Acknowledgement-XML-Dateien. 11.10 GASX (von Mummert Consulting) HandlerClass=de.robotron.ecount.dataimport.filter.GASXHandler Pfad: filter_import/ecount_import_GASX.jar Seite 256 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Tabelle 11-11: Formatspezifische Einstellungen GASX Parameter/Beschreibung statusmapping_W statusmapping_V statusmapping_E statusmapping_G statusmapping_N Anstelle von "status.<Datei-Status>=<eCount-Status>" gibt es nun für jeden ecount-Status eine eigene Einstellung. Die Werte werden dabei durch Semikolon getrennt. Die Werte dürfen jedoch nicht durch ein Enter-Zeichen, zur besseren Lesbarkeit, getrennt werden! Defaults: Import-Status -> ecount-Status OK -> W (leerer Status) ->W K -> W OE -> E E -> E - -> - ? -> F V -> V OV -> G O -> G VD -> G D -> G ! -> F Beispiel: statusmapping_W=v --;v;v--;V statusmapping_V=OE --;OE;OE--;E --;E statusmapping_E=E1 --;E1 statusmapping_G=z --;z;z-statusmapping_N=X FKID2_MIT_PERIODE Y/N (Default Y). Wenn aktiviert, wird die Kanal-ID2 wie folgt gebildet: vop.quantity / vopset.period Ist die Option deaktiviert, wird nur der Wert aus vop.quantity übermittelt. FKID1 Mit FKID1=CODE wird als FKID1 der Wert aus dem "code"-Attribut des Elements vopset verwendet. FKID2 Mit FKID2=QUANTITY_MAPPING wird die FKID2 über den Wert im "quantity"-Attribut bestimmt, der zusätzlich über die Einstellung QUANTITY_MAPPING gemappt wird. QUANTITY_MAPPING Wird nur ausgewertet bei FKID2=QUANTITY_MAPPING. Angabe des Wertes des "quantity"Attributes, gefolgt von = und dem zu setzenden Wert. Mehrere Einträge werden durch Semikolon getrennt. Default: Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 257 von 384 Parameter/Beschreibung QUANTITY_MAPPING=QN=7-20:99.33.17;Qn_v=7-10:99.33.17 Für QN wird als FKID2 also 7-20:99.33.17 übernommen, bei Qn_vwird 7-10:99.33.17 verwendet. FKID2_MIT_WERTESTATUS Y/N (Default N). Wenn Y wird dies für FKID2_MIT_WERTESTATUS.Hon und FKID2_MIT_WERTESTATUS.Zu verwendet/aktiviert. Diese Einstellung ist aus Kompatibilitätsgründen enthalten. FKID2_MIT_WERTESTATUS.Hon Y/N (Default N). Wenn Y, wird bei Hon (Brennwert) der Status ("state"-Attribut des Elementes vopset) gegen die Einstellung STATUS_FKID2_HON_ZU geprüft. Wenn der Status in STATUS_FKID2_HON_ZU enthalten ist, wird an der FKID2 ein _E anderenfalls ein _V (bei _V wird zusätzlich der Status auf V gestellt und damit wird also vopset.state überschrieben) angefügt. FKID2_MIT_WERTESTATUS.Zu Y/N (Default N). Wenn Y, wird bei Zu (Umwerterfaktor) ein _E angefügt. STATUS_FKID2_HON_ZU Angabe einer Liste mit Statuswerten, die gegen den Wert aus vopset.state geprüft wird. Ist der Status enthalten wird das _E an die FKID2 angefügt, sonst _V. Mehrere Einträge werden durch ein Semikolon getrennt. Default: OK und OE Beispiel: STATUS_FKID2_HON_ZU=OK;OE;OV FKID2_CHANGE_STATUS_HON_OK Y/N (Default Y). Wenn der Status (vopset.state) in STATUS_FKID2_HON_ZU enthalten ist, kann die Änderung des Status auf V mit den Parameterwert N unterbunden werden. Ist der Status nicht enthalten wird immer auf V geändert. FKID2_CHANGE_STATUS_ZU_OK Y/N (Default Y). Wenn der Status (vopset.state) in STATUS_FKID2_HON_ZU enthalten ist, kann die Änderung des Status auf V mit den Parameterwert N unterbunden werden. Ist der Status nicht enthalten wird immer auf V geändert. FKID3_AUS_VOPSET_CODE_HINZUFUEGEN Y/N (Default N) Mit Y wird als FKID3 der Wert aus vopset.code übermittelt. Seite 258 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 11.11 INVCC Pfad: filter_import/ecount_import_INVCC.jar Importfilter für das Robotron INVOIC-CSV-Format. Aufbau ist identisch zu der Beschreibung des Exportfilters siehe Kapitel 12.18. 11.12 LPEX Hinweise: HandlerClass = de.robotron.ecount.dataimport.filter.LPEXHandler Pfad: filter_import/ecount_import_LPEX.jar Tabelle 11-12 Parameter für LPEX Parameter/Beschreibung InvalidFlagError Y/N (Default Y). Mit N wird das Schreiben des Import-Fehlers „Invalid flag in line x: …“ unterbunden. 11.13 LOADER_BCX Hinweise: HandlerClass = de.robotron.ecount.dataimport.filter.LOADER_BCXHandler Pfad: filter_import/ecount_import_LOADER_BCX.jar Mit diesem Filter ist es möglich, die zu importierende Datei in eine BLOB, CLOB oder XMLTYPE-Spalte zu übertragen. Bei der Übertragung einer Text-Datei in eine CLOB- oder XMLTYPE-Spalte kann es zu Problemen bezüglich der Kodierung kommen, wenn die Kodierung der Datei nicht mit der Kodierung der Datenbank (Parameter NLS_CHARACTERSET) übereinstimmt. Die sicherste Variante ist die Übertragung der Datei in eine BLOB-Spalte. Für XMLTYPE besteht zusätzlich eine Option, den Inhalt der zu importierenden Datei in die Kodierung der DB zu konvertieren. Tabelle 11-13: Parameter für LOADER_BCX Parameter/Beschreibung CHARSET Wird nur benötigt wenn CODING_TO_DB_CHARSET=Y und wenn das Encoding nicht aus der Datei ableitbar ist (es wird nach der BOM gesucht und wenn vorhanden das Charset gesetzt). Ist das Charset nicht aus der Datei ableitbar und ungleich UTF-8 (z.B. UTF-16) so muss dies über diese Einstellung mitgeteilt werden z.B. CHARSET=UTF-16 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 259 von 384 Parameter/Beschreibung CODING_TO_DB_CHARSET Y/N (Default N). Bei Y ist zusätzlich die Angabe von NLS_CHARACTERSET erforderlich. Hierbei wird der Dateiinhalt in die Kodierung (unter NLS_CHARACTERSET definiert) konvertiert. Dadurch ist es möglich, UTF-8 kodierte Dateien in einer Datenbank mit NLS_CHARACTERSET=WE8MSWIN1252 zu importieren, ohne dass es zum Verlust von Umlauten oder ähnlichen „Sonderzeichen“ kommt. Parameter wird nur bei den Spalten CLOB und XMLTYPE ausgewertet! DATENQUELLE Optionale Zeichenkette, die als Datenquellen-ID verwendet werden kann. Wird ausgewertet wenn INDEX_RDQ_ID > 0 INDEX_CONTENT Platzhalter-Index (Fragezeichenposition) der Spalte für die Datei in SQL_INSERT (positive Ganzzahl, SQL bei 1 beginnend) INDEX_IFI_ID Platzhalter-Index (Fragezeichenposition) der IFI_ID-Spalte (IMPORT_FILE.ID) in SQL_INSERT (positive Ganzzahl, SQL bei 1 beginnend) INDEX_RDQ_ID Platzhalter-Index (Fragezeichenposition) der Datenquellen-Spalte in SQL_INSERT (positive Ganzzahl, SQL bei 1 beginnend). INDEX_VTP_ID_MANDANT Platzhalter-Index (Fragezeichenposition) der Mandanten-Spalte in SQL_INSERT (positive Ganzzahl, SQL bei 1 beginnend) NLS_CHARACTERSET Notwendig, wenn CODING_TO_DB_CHARSET=Y. Mögliche Werte sind z. B. WINDOWS-1252, UTF-8 SKIP_BOM Y/N (Default Y). Mit Y wird der BOM einer Datei entfernt. SQL_INSERT Das Insert-Statement für die Ablage der Datei. Hier ist mind. die Spalte zur Ablage der Datei erforderlich. Es kann aber auch noch eine Spalte für die IFI_ID, VTP_ID_MANDANT, RDS_ID angegeben werden. Bsp: SQL_INSERT: INSERT INTO TABLE (BLOB )VALUES (?) TYP Der Typ der zu importierenden DB-Spalte (BLOB, CLOB oder XMLTYPE) Seite 260 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung VTP_ID_MANDANT Optional kann der Mandant übertragen werden. Wird ausgewertet, wenn INDEX_VTP_ID_MANDANT > 0 XSD_DIRECTORY Ordner, in dem die XSD-Dateien liegen (ausgehend vom KomA-Basisverzeichnis). Nur notwendig, wenn unter XSD_FILENAME kein absoluter Pfad definiert wurde. Default: config/import/xsd XSD_FILENAME Dateiname (dann ist XSD_DIRECTORY noch erforderlich) oder der absolute Pfad auf die XSD-Datei. XSD_VALIDATION Y/N (Default N). Bei XML-Dateien kann zusätzlich die Validierung der XML-Dateien gegen eine XSD (wird über XSD_FILENAME spezifiziert) aktiviert werden. 11.13.1 Beispiele 11.13.1.1 Import einer Datei in eine XMLTYPE-Spalte HandlerClass = de.robotron.ecount.dataimport.filter.LOADER_BCXHandler TYP=XMLTYPE SQL_INSERT=INSERT INTO TABLE (XML_CONTENT, IFI_ID) VALUES (?, ?) INDEX_CONTENT=1 INDEX_IFI_ID=2 11.13.1.2 Import einer Datei in BLOB HandlerClass = de.robotron.ecount.dataimport.filter.LOADER_BCXHandler TYP=BLOB SQL_INSERT=INSERT INTO table (blob_content, ifi_id, VTP_ID_MANDANT, RDQ_ID) VALUES (?, ?, ?, ?) INDEX_CONTENT=1 INDEX_IFI_ID=2 INDEX_VTP_ID_MANDANT=3 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 261 von 384 INDEX_RDQ_ID=4 RDQ_ID=XYZ VTP_ID_MANDANT=1 11.13.1.3 Import einer Datei in XMLTYPE mit impliziter Kodierung Import einer Datei in eine Datenbank-Spalte vom Typ XMLTYPE mit Zeichensatzkodierung. Der Dateiinhalt soll dabei in der Kodierung WINDOWS-1252 in der Datenbank abgelegt werden. Die Kodierung der zu importierenden Datei kann hier eine andere sein. Diese wird über die BOM (falls vorhanden) der zu importierenden Datei bestimmt bzw. es wird UTF-8 (= Default der CHARSETEinstellung) verwendet. Das Beispiel umfasst nur die relevanten Einstellungen! HandlerClass = de.robotron.ecount.dataimport.filter.LOADER_BCXHandler TYP=XMLTYPE … CODING_TO_DB_CHARSET=Y NLS_CHARACTERSET=WINDOWS-1252 Hierbei wird eine Konvertierung des Dateiinhaltes nach WINDOWS-1252 vorgenommen. Dies ist z. B. notwendig, wenn die Datenbank als Windows-1252 konfiguriert wurde, die zu importierende Datei aber mit einer UTF-8 Kodierung vorliegt. 11.13.1.4 Import einer Datei in XMLTYPE mit expliziter Kodierung Als Beispiel wird eine CSV-Datei mit UTF-16 Kodierung in eine UTF-8 Datenbank importiert. Die zu importierende Datei besitzt hierbei kein BOM, d.h. die Kodierung der Datei muss dem Filter über die Einstellung CHARSET mitgegeben werden. Das Beispiel umfasst nur die relevanten Einstellungen! HandlerClass = de.robotron.ecount.dataimport.filter.LOADER_BCXHandler TYP=XMLTYPE … CHARSET=UTF-16 CODING_TO_DB_CHARSET=Y NLS_CHARACTERSET=UTF-8 11.14 MCW (Wetterdaten in XML-Format) Pfad: filter_import/ecount_import_MCW.jar HandlerClass: de.robotron.ecount.dataimport.filter.MCWHandler Seite 262 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Filter zum Import von Wetterdaten in XML-Format. Es können sowohl Prognosen (XML-Element VORHERSAGE) als auch IST-Daten (XML-Element WETTERDATEN) übertragen werden. Die Importdateien haben folgenden Aufbau. <DATEN xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Quelle="XYZ" Typ="Vorhersage" Ort="10147_V" Datum="2016-05-02" Zeit="13:30" Zeitzone="UTC"> <VORHERSAGE Typ="Temperatur" Einheit="°C"> <WERT Datum="2016-01-01" Zeit="05:00">3.9011202346041</WERT> … </VORHERSAGE> <WETTERDATEN Typ="Temperatur" Einheit="°C"> <WERT Datum="2013-10-17" Zeit="00:00">6.9</WERT> </WETTERDATEN> </DATEN> Tabelle 11-14: MCW - Parameter Parameter/Beschreibung FKID-2 Hier kann TYP oder EINHEIT spezifiziert werden (Default EINHEIT). Bei TYP wird als FKID2 der Wert aus dem XML-Element VORHERSAGE.Typ, bei Einheit aus VORHERSAGE.Einheit übernommen. ValueFlag Bei VORHERSAGE ist der Default V, bei WETTERDATEN ist der Default W. Über das ValueFlag können andere Status für die darin befindlichen Werte (die an die Import-API übergeben werden) definiert werden. 11.15 VESP_EXCEL Pfad: filter_import/ecount_import_VESP_EXCEL.jar Kundenspezifischer Filter für den Import einer Excel-Datei mit 2 Sheets. Das erste Sheet umfasst Stammdaten. Dabei werden die Spalten A und B in der Tabelle EC_VESP.IMP_BESTELLUNGEN abgelegt. Das zweite Sheet umfasst Daten in der Form Zeitstempel und Wert, die in der Tabelle IMP_BESTELLUNGEN_PROFILE abgelegt werden. Da es für Gas- und Stromdaten abweichende Excel-Strukturen gibt (z. B. sind Gas-Werte immer nur täglich angegeben, bei Strom 96x 15 Minutenwerte), muss dem Filter über die Einstellung MODUS mitgeteilt werden, ob Strom- oder Gas-Dateien importiert werden. Mögliche Einstellungen sind GAS oder POWER (Standardwert). Als Zeitzone wird MEZ verwendet, es gibt keine Zeitumstellung! 11.16 ZVW (Geräteverwaltung) Import von Gerätedaten, unterstützt XML-Format (eCount- 00036822) sowie ein Excel-Format (eCount00042974). Die Daten werden im DB-Schema EC_XCH in den Importtabellen IMP_ZVW_* abgelegt. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 263 von 384 11.16.1 ELS-Format (eCount- 00047331) Der ImportFilter_ZVW wurde um ein neues Format elektronischer Lieferscheine (ELS) erweitert. Die Properties-Datei in der KomA (config/import) ist zwingend notwendig. Beispiel ZVW_ELS.properties (ggf. Mandant und Datenquelle anpassen!) HandlerClass = de.robotron.ecount.dataimport.filter.ZVWHandler FORMAT = ELS VTP_ID_MANDANT = RDQ_ID=ZVW_ELS # VTP_ID des standarmäßigen Eigentümers (default = Wert des Parameters 'VTP_ID_MANDANT') VTP_ID_EIGENTUEMER = 11.16.2 WEMAG-Format Tabelle 11-15: WEMAG-Formate Tabelle: IMP_ZVW - Spalte Wert IFI_ID IMPORT_FILE.ID (automatisch vergeben) VTP_ID_MANDANT Wert aus Einstellung VTP_ID_MANDANT der Properties-Datei RDQ_ID Wert aus Einstellung RDQ_ID der Properties-Datei Tabelle: IMP_ZVW_GERAETE Spalte Wert IZVW_ID IMP_ZVW.ID (automatisch vergeben) ZVGE_EXID Element Geraet Attribut Id ZVGE_IMPORT_ID Element Geraet Attribut Id VTP_ID_MANDANT Wert aus Einstellung VTP_ID_MANDANT der Properties-Datei ZVGE_TYP Wert aus Element Geraeteart ZVGE_ZUSATZFELD_01 Wert aus Element Geraeteart ZVGE_HERSTELLER Wert aus Element Hersteller Seite 264 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Tabelle: IMP_ZVW_GERAETE Spalte Wert ZVGE_GERAETENUMMER Wert aus Element Geraetenr ZVGE_BAUJAHR Wert aus Element Baujahr ZVGE_EICHGUELTIG_BIS Wert aus Element GeeichtBis (Formatierung dd.MM.yyyy und dd.MM.yyyy HH:mm zulässig) ZVGE_BEFESTIGUNGSART Wert aus Element Befestigungsart ZA_ZAEHLERTYP Wert aus Element Zaehlertyp KUNSP_B Wert aus Element Zaehlverfahren ZA_MESSERFASSUNGSART Wert aus Element MWErfassung WA_FAKTOR Wert aus Element WDLFaktor ZA_ZAEHLERTARIF Wert aus Element Tarifanzahl ZA_ZAEHLRICHTUNGEN Wert aus Element Zaehlrichtung ZA_TURNUSINTERVALL Wert aus Element Zaehlwerk.Ableseturnus ZA_TURNUSABLESUNG_VON Wert aus Element Zaehlwerk.Ablesemonat ZA_TURNUSABLESUNG_BIS Wert aus Element Zaehlwerk.Ablesemonat Tabelle: IMP_ZVW_ZAEHLWERKE Spalte Wert Wert aus Element Zaehlwerk.Aktiv ZW_AKTIV_FLAG Wird N geliefert, so soll sich das N nur auf GPKE und MPES beziehen und daher ist hier G in der Importtabelle einzutragen. OBIS_KENNZIFFER Wert aus Element Zaehlwerk.OBISKz ZAEHLWERKSNUMMER Wert aus Element Zaehlwerk Attribut ZwNummer ZW_IMPORT_ID Wert aus Element Zaehlwerk Attribut Id IZVWGE_ID IMP_ZVW_GERAETE.ID (automatisch vergeben) VTP_ID_MANDANT Wert aus Einstellung VTP_ID_MANDANT der Properties-Datei Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 265 von 384 Tabelle: IMP_ZVW_ZAEHLWERKE Spalte Wert ZAEHLWERKSART Wert aus Element Zaehlwerk.ZwArt ZUORD_ZA_ZW_VON Wert aus Element Zaehlwerk.Von ZUORD_ZA_ZW_BIS Wert aus Element Zaehlwerk.Bis VORKOMMASTELLEN Wert aus Element Zaehlwerk.VKStellen NACHKOMMASTELLEN Wert aus Element Zaehlwerk.NKStellen SCHWACHLASTKENNZEICHEN Wert aus Element Zaehlwerk.Schwachlast (bei false wird ZNS, bei true wird ZSF eingetragen) Tabelle: IMP_ZVW_GER_SPERRHIST Wert - Spalte IZVWGE_ID IMP_ZVW_GERAETE.ID (automatisch vergeben) VON Wert aus Element Sperrungen.Von Wert aus Element Sperrungen.Bis BIS Beim BIS-Datum wird 1 Tag addiert, falls das Format dd.MM.yyyy verwendet wird, bei Datumsformat mit Uhrzeit wird die Addition nicht vorgenommen. Tabelle: Wert IMP_ZVW_EIGENTUMSHIST - Spalte IZVWGE_ID IMP_ZVW_GERAETE.ID (automatisch vergeben) Wert aus Element Geraet.Von VON eCount- 00040355: Wenn das Von-Datum im GERAET angegeben, dann wird dieses (inklusive dem Bis-Datum) verwendet, anderenfalls werden das Von- und Bis-Datum des ersten Zählwerkes verwendet. Wert aus Element Geraet.Bis BIS eCount- 00040355: Wenn das Von-Datum im GERAET angegeben, dann wird dieses (inklusive dem Bis-Datum) verwendet, anderenfalls werden das Von- und Bis-Datum des ersten Zählwerkes verwendet. Seite 266 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Tabelle: Wert IMP_ZVW_EIGENTUMSHIST - Spalte VTP_ID_MANDANT Wert aus Einstellung VTP_ID_MANDANT der Properties-Datei VTP_EXID Wert aus Einstellung VTP_ID_EIGENTUEMER der PropertiesDatei (falls nicht angegeben, wird der Wert aus der Einstellung VTP_ID_MANDANT der Properties-Datei verwendet) EIGENTUMSNUMMER Wert aus Element Geraet Attribut Eigentumsnr Tabelle: IMP_ZVW_ZUORD_ZPT Spalte Wert IZVWGE_ID IMP_ZVW_GERAETE.ID (automatisch vergeben) VTP_ID_MANDANT Wert aus Einstellung VTP_ID_MANDANT der Properties-Datei ZPT_MET_CODE Wert aus Element Sperrungen.Meteringcode Wert aus Element Geraet.Von VON eCount- 00040355: Wenn das Von-Datum im GERAET angegeben, dann wird dieses (inklusive dem Bis-Datum) verwendet, anderenfalls werden das Von- und Bis-Datum des ersten Zählwerkes verwendet. Wert aus Element Geraet.Bis BIS eCount- 00040355: Wenn das Von-Datum im GERAET angegeben, dann wird dieses (inklusive dem Bis-Datum) verwendet, anderenfalls werden das Von- und Bis-Datum des ersten Zählwerkes verwendet. Zusatzgeräte: Element Zusatzgeraet mit den Attributen ReferenzId und Eigentumsnr sowie den Unterelementen Hersteller und Geraetenr werden in die folgenden 4 Import-Tabellen übertragen. Tabelle 11-16: Importtabellen Zusatzgeräte Tabelle: IMP_ZVW_GERAETE Spalte Wert ZVGE_EXID Wert aus Element Zusatzgeraet Attribut ReferenzId IZVW_ID IMP_ZVW.ID (automatisch vergeben) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 267 von 384 Tabelle: IMP_ZVW_GERAETE Spalte Wert VTP_ID_MANDANT Wert aus Einstellung VTP_ID_MANDANT der Properties-Datei ZVGE_HERSTELLER Wert aus Element Zusatzgeraet.Hersteller ZVGE_GERAETENUMMER Wert aus Element Zusatzgeraet.Geraetenr Tabelle: Wert IMP_ZVW_EIGENTUMSHIST - Spalte IZVWGE_ID IMP_ZVW_GERAETE.ID (ID des Zusatzgerätes, automatisch vergeben) VTP_ID_MANDANT Wert aus Einstellung VTP_ID_MANDANT der Properties-Datei VTP_EXID Wert aus Einstellung VTP_ID_EIGENTUEMER der PropertiesDatei (falls nicht angegeben, wird der Wert aus der Einstellung VTP_ID_MANDANT der Properties-Datei verwendet) Wert aus Element Geraet.Von VON eCount- 00040355: Wenn das Von-Datum im GERAET angegeben, dann wird dieses (inklusive dem Bis-Datum) verwendet, anderenfalls werden das Von- und Bis-Datum des ersten Zählwerkes verwendet. Wert aus Element Geraet.Bis BIS eCount- 00040355: Wenn das Von-Datum im GERAET angegeben, dann wird dieses (inklusive dem Bis-Datum) verwendet, anderenfalls werden das Von- und Bis-Datum des ersten Zählwerkes verwendet. EIGENTUMSNUMMER Wert aus Element Zusatzgeraet Attribut Eigentumsnr Tabelle: IMP_ZVW_ZUORD_ZPT Spalte Wert IZVWGE_ID IMP_ZVW_GERAETE.ID (ID des Zusatzgerätes, automatisch vergeben) ZPT_MET_CODE Wert aus Element Geraet. Meteringcode VTP_ID_MANDANT Wert aus Einstellung VTP_ID_MANDANT der Properties-Datei VON Wert aus Element Geraet.Von Seite 268 von 384 Tabelle: IMP_ZVW_ZUORD_ZPT Spalte Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Wert eCount- 00040355: Wenn das Von-Datum im GERAET angegeben, dann wird dieses (inklusive dem Bis-Datum) verwendet, anderenfalls werden das Von- und Bis-Datum des ersten Zählwerkes verwendet. Wert aus Element Geraet.Bis eCount- 00040355: Wenn das Von-Datum im GERAET angegeben, dann wird dieses (inklusive dem Bis-Datum) verwendet, anderenfalls werden das Von- und Bis-Datum des ersten Zählwerkes verwendet. BIS Tabelle: IMP_ZVW_ZUORD_ZVGE Spalte Wert IZVWGE_ID IMP_ZVW_GERAETE.ID (ID des Zusatzgerätes, automatisch vergeben) ZVGE_M_EXID Element Geraet Attribut Id Wert aus Element Geraet.Von eCount- 00040355: Wenn das Von-Datum im GERAET angegeben, dann wird dieses (inklusive dem Bis-Datum) verwendet, anderenfalls werden das Von- und Bis-Datum des ersten Zählwerkes verwendet. VON Wert aus Element Geraet.Bis eCount- 00040355: Wenn das Von-Datum im GERAET angegeben, dann wird dieses (inklusive dem Bis-Datum) verwendet, anderenfalls werden das Von- und Bis-Datum des ersten Zählwerkes verwendet. BIS 11.16.3 EC-Format (eCount- 00052357) XML-Struktur mit folgender DTD-Struktur (Document Type Definition). <!ELEMENT ZVW (GERAETE*)> <!ELEMENT GERAETE (GERAET*)> <!ELEMENT GERAET (EIGENTUMSHISTORIEN, KOMPARAMETER*, KOMROLLENPROFILE*, ZUORD_GERAETE*, (ZAEHLER?|KOMGERAET?)) > <!ATTLIST GERAET geraetetyp CDATA #IMPLIED> Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 <!ELEMENT EIGENTUMSHISTORIEN (EIGENTUMSHIST+)> <!ELEMENT EIGENTUMSHIST EMPTY> <!ATTLIST EIGENTUMSHIST eigentumsnummer CDATA #REQUIRED> <!ELEMENT ZAEHLER EMPTY> <!ATTLIST ZAEHLER ZAEHLERTYP CDATA #IMPLIED freischaltung_push_flag CDATA #IMPLIED messperiode CDATA #IMPLIED server_id CDATA #IMPLIED> <!ELEMENT ZUORD_GERAETE (ZUORD_GERAET+)> <!ELEMENT ZUORD_GERAET EMPTY> <!ATTLIST ZUORD_GERAET kom_master CDATA #IMPLIED von CDATA #IMPLIED bis CDATA #IMPLIED> <!ELEMENT KOMGERAET EMPTY> <!ATTLIST KOMGERAET server_id CDATA #IMPLIED> <!ELEMENT KOMPARAMETER (KOMPARAM+)> <!ELEMENT KOMPARAM EMPTY> <!ATTLIST KOMPARAM telefonnummer CDATA #IMPLIED komschnittstelle CDATA #REQUIRED> <!ELEMENT KOMROLLENPROFILE (KOMROLLENPROF+)> <!ELEMENT KOMROLLENPROF EMPTY> <!ATTLIST KOMROLLENPROF Seite 269 von 384 Seite 270 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 nutzer CDATA #IMPLIED passwort CDATA #IMPLIED parametrierpasswort CDATA #IMPLIED> 11.16.4 INTERN_EXCEL-Format (eCount- 00053633) Bildet als Excel-Datei die Import-Tabellen (IMP_ZVW*) ab. Damit ist es möglich, mittels MS Excel, alle relevanten Daten zu übermitteln. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 271 von 384 12 Exportfilter Für jedes Exportformat (Eintrag in der der Tabelle EXPORT_ECOUNT in der Spalte FORMAT) wird während der Abarbeitung eine Lizenzprüfung durchgeführt. Die Lizenz für Exportformat beginnt dabei immer mit E_ gefolgt vom Format (die Lizenz für EDI heißt also E_EDI). Diese Filter liegen in der KomA im lib-Unterverzeichnis filter_export. Die filterspezifische Konfiguration der Exportformate erfolgt über Properties-Dateien <BASE>/config/export/<Format>.properties. In den Dateien wird dann über <key>=<value> die Festlegung der Parameter durchgeführt. Beispiel: <BASE>/config/export/FFF.properties Separator=, 12.1 Globale Export-Parameter In diesem Kapitel sind Einstellmöglichkeiten erklärt, die für alle Export-Formate gültig sind. 12.1.1 ObisMapping Die Funktionalität wird beim Abrufen der Daten von der KomA aus der Datenbank ausgeführt. Es ist möglich, ein globales Mapping in der Config.properties zu hinterlegen. Dies ist sinnvoll, wenn unterschiedliche Formate mit dem gleichen Mapping arbeiten sollen. Die Konfigurationen werden im Abschnitt export angegeben: Syntax: ObisMapping.<name>=<OBIS-Suche> ; <OBIS-Ersetzung> Beispiel: export.ObisMapping.a = 7-20:99.33.17 ; 7-1:33.2.71 export.ObisMapping.b1 = 7-20:99.36.17 ; 7-1:36.2.71 export.ObisMapping.b2 = 1-x:x.29.x*x ; 1-x:x.9.x*x Hinweise: Platzhalter, Beispiel: export.ObisMapping.G1 = 7-x:x.x.x ; 7-1:*.*.* Links die Platzhalter (x) gelten als Joker-Suchkritierum, damit die Regel gefunden wird und die rechten Platzhalter (*) gelten für die Übernahme der entsprechenden Felder aus der eingehenden OBIS-Kennzahl. Basierend auf der Angabe trifft die Regel also für alle OBIS-Kennzahlen zu, die mit 7 (= Medium GAS) importiert werden. Für OBIS-Kennzahlen auf die die Regel zutrifft, wird jeder Kanal auf 1 gesetzt, die Messgröße(n) und der Zeitbezug werden aus der eingehenden OBIS übernommen. Die globalen Regeln können wiederum pro Format mit der Einstellung ObisMapping = N deaktiviert bzw. durch eigene Regeln ersetzt werden. Die Regeln werden nach Namen sortierter Reihenfolge abgearbeitet. Der Name der Regel ist der letzte Bestandteil vor dem = (im Beispiel: a, b1, b2). Seite 272 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Soll das Mapping nur für ein Format gelten, muss dies in der filterspezifischen Properties-Datei ohne das Präfix export angegeben werden (z. B. für MSCONS in der Datei config/export/EDI.properties). 12.2 Abschlüsse CSV (Format ABSCSV) Der Export der Abschlüsse per CSV wird intern als Format ABSCSV bezeichnet. Auf der KomA wird dieses Format über das Modul filter_export/ecount_export_VERTRAG.jar realisiert. Die dazugehörige JavaKlasse ist hier de.robotron.ecount.exportcom.filter.VERTRAGHandler. Export mit folgenden Kopfdaten: KUNDENNAME;VERTRAGSTYP;VERTRAGSNUMMER;VON;BIS;METERINGCODE;OBIS;TYP;VO N;BIS;TARIF;EDIS;TYP;STATUS;WERT;ZEITPUNKT Sollten mehrere Tarife vorhanden sein, werden die Spalten EDIS;TYP;STATUS;WERT;ZEITPUNKT wiederholt. Tabelle 12-1: Parameter Abschlüsse CSV (Format ABSCSV) Parameter/Beschreibung Standardwert EXPORT_OBIS Y/N. Mittels EXPORT_OBIS=Y wird der Export der OBIS zwischen Liniennamen und Typ aktiviert. Wird nur ausgewertet, wenn EXPORT_OBIS_INSTEAD_LINIENNAME=N ist. N …METERINGCODE;LINIENNAME;OBIS;TYP;… EXPORT_OBIS_INSTEAD_LINIENNAME Y/N. Bei Y wird anstelle des Liniennamens die OBIS-Kennzahl exportiert: N …METERINGCODE;OBIS;TYP;…. ExportUnit Y/N. Mit ExportUnit=Y wird zwischen Wert und Zeitpunkt zusätzlich noch N die Einheit ausgegeben: … EDIS;TYP;STATUS;WERT;Einheit;ZEITPUNKT… SHORT_OBIS Früher wurde die OBIS für Energiewerte von ecount in Kurzform (z. B. 1.29.0) geliefert. Mit Umstellung in eCount- 00050344 wird nun die Langform (z. B. 11:1.29.0) verwendet. Ist dieser Parameter aktiviert, wird nach dem Zeichen : (Trennzeichen 2 N ASCII 3A) geprüft. Ist das Zeichen vorhanden, wird das Trennzeichen inklusive aller vorhergehenden Zeichen (Medium, Trennzeichen 1 - ASCII 2D, Kanal) entfernt. Es wird nicht garantiert, dass dieser Parameter bei zukünftigen Änderungen Bestand hat. Der Parameter ist hier solange gültig, solange Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Seite 273 von 384 Standardwert die OBIS nach der aktuellen Systematik (EDI@Energy OBIS-KennzahlenSystem, Stand: 12. Juni 2014, Version: 2.2b) gültig sind und auch in dieser Form übergeben werden! 12.3 BELVIS (BELVIS CSV Lastgänge) Pfad: filter_export/ecount_export_BELVIS.jar BELVIS ist ein kundenspezifischer Exportfilter für Lastgänge im CSV-Format. Der Aufbau der CSV-Datei enthält keine Kopfdaten, es werden sofort die Werte in folgender Form exportiert: Zählpunktname;Tag (dd.MM.yyyy);Uhrzeit (HH:mm); Status;Wert;MEZ Als Status wird für W-Werte 0, für E-Werte 1 und ansonsten 2 exportiert. Die Zeichenkette MEZ ist hart hinterlegt. 12.4 CSV/XML (Format CSV) Der Aufbau des Formates ist grob wie folgt definiert: Abbildung 12-1: Aufbau Format CSV/XML Gelb ist die Legende (alles was mit einer Raute # beginnt). Blau sind die Kopfdaten (basiert hier auf einer Konfiguration mit Header1 und Header2), danach folgen die Lastgangdaten (Datum + Zeit, Wert). Tabelle 12-2: Parameter CSV/XML (Format CSV) Parameter/Beschreibung csvSeparator Trennzeichen für die CSV-Spalten decimalSeparator Dezimaltrennzeichen Standardwert ; , Exportiere_Legende Y/N. Bei Y wird bei nutzerspezifischen Kopfdaten (Nutzung von Header1, Header2, ...) die Legende als Kopfzeile exportiert. N Seite 274 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Standardwert SO_WI_03h Y/N. Mit Parameter SO_WI_03h=Y werden Zeitstempel während der Umschaltstunde N von Sommer auf Winter mit 03:00 statt 02:00 kodiert (Zeitstempel vor der Umschaltung). WI_SO_02h Y/N. Mit Parameter WI_SO_02h=Y kann die Winter-Sommer-Umschaltstunde von 03:00 auf 02:00 geändert werden. N Anzahl_Nachkommastellen Angabe der Nachkommastellen für die Werte. Dieser Parameter kann direkt im Abo definiert werden. Default "so viele wie möglich, so wenig wie nötig" Trennzeichen_Zwischen_Datum_Zeit Y/N. Bei Y werden Datum und Zeit durch ein Trennzeichen (;), bei N werden Datum und Zeit durch ein Leerzeichen ( ) getrennt. N Dieser Parameter kann direkt im Abo definiert werden. Exportiere_Kopfdaten Y/N. Mit N kann die Ausgabe der Kopfdaten (der Header1 – Header6 - Angaben) deaktiviert werden. Y Dieser Parameter kann direkt im Abo definiert werden. Exportiere_Header Y/N. Mit Y kann eine Kopfzeile in Form: „Datum/Zeit ZP-Bezeichnung-Linie1, ZPBezeichnung-Linie2...“ ausgegeben werden. Ist dieser Parameter aktiviert, werden weder Exportiere_Kopfdaten noch Exportiere_Legende ausgewertet und N auch nicht ausgegeben! Im Datenversand ist die Formateigenschaft Exportiere_Header beim Format "CSV mit Status" auswählbar. Header1 bis Header9 Folgende Informationen können als Kopfdaten, über die in der Liste aufgeführten Codes, extrahiert werden. Die Angabe erfolgt in Form „Headerx = Code Ausgabetest“. - MET_CODE (= Zählpunkt- Meteringcode) OBIS_CODE (= Obis-Code) UNIT (= Einheit) KUNDE_NAME (=Name des Kunden) LINE_WEB_DESC (= Linien-Webbezeichnung) COUNT_POINT_WEB_DESC (= Zählpunkt-Webbezeichnung) VOLT_ABNAHME_STELLE (Sucht nach einer Zuordnung des Zählpunkts zu einem Dienstleistungsvertrag. Ist dieser gefunden, wird der Name des VTP2 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung - und der Ort des Netzanschlusses über dem ZPT als Zeichenkette, mit Komma getrennt, zurückgegeben.) LINE_STATUS_DETAIL (Originalstatus des Wertes) ZRD_ID (ID der Zeitreihendefinition) Soll also nur der Meteringcode als Text „ZP-Meteringcode“ ausgegeben werden, ist folgende Konfiguration notwendig: Header1 = MET_CODE ZP-Meteringcode Soll der Meteringcode (Text: Metcode), gefolgt von der Linien-Webbezeichnung (Text: Linie) und der Einheit (Text: Einheit) ausgegeben werden, ist folgende Konfiguration anzuwenden. Header1 = MET_CODE Metcode Header2 = LINE_WEB_DESC Linie Header3 = UNIT Einheit 12.4.1 Beispiel: Metering-Code und OBIS als Kopfspalten mit Legende Basierend auf folgender Konfiguration: Header1 = MET_CODE Metering-Code Header2 = OBIS_CODE OBIS-Code Exportiere_Legende = Y # Datum der Auswertung: 11.11.2014 # Zeitraum der Auswertung: 10.11.2014 - 11.11.2014 # Zählpunkte: # ZP1 ZP1 1-1:1.9.0 Kundenname - (137121) # ZP1 ZP1 1-1:3.9.0 Kundenname - (137121) Metering-Code;ZP1;ZP1 OBIS-Code;1-1:1.9.0;1-1:3.9.0 10.11.2014 00:15;77,6;25,2 10.11.2014 00:30;81,6;26,8 12.4.2 Beispiel: Metering-Code und OBIS als Kopfspalten ohne Legende Basierend auf folgender Konfiguration: Header1 = MET_CODE Metering-Code Header2 = OBIS_CODE OBIS-Code Exportiere_Legende = N Seite 275 von 384 Standardwert Seite 276 von 384 Metering-Code;ZP1;ZP1 OBIS-Code;1-1:1.9.0;1-1:3.9.0 10.11.2014 00:15;77,6;25,2 10.11.2014 00:30;81,6;26,8 12.4.3 Beispiel: Trennzeichen_Zwischen_Datum_Zeit = Y Basierend auf folgender Konfiguration: Header1 = MET_CODE Metering-Code Header2 = OBIS_CODE OBIS-Code Exportiere_Legende = N Trennzeichen_Zwischen_Datum_Zeit = Y Metering-Code;ZP1;ZP1 OBIS-Code;1-1:1.9.0;1-1:3.9.0 10.11.2014;00:15;77,6;25,2 10.11.2014;00:30;81,6;26,8 12.4.4 Beispiel: Exportiere_Kopfdaten = Y Basierend auf folgender Konfiguration: Header1 = MET_CODE Metering-Code Header2 = OBIS_CODE OBIS-Code Exportiere_Kopfdaten = Y Metering-Code;ZP1;ZP1 OBIS-Code;1-1:1.9.0;1-1:3.9.0 10.11.2014 00:15;77,6;25,2 10.11.2014 00:30;81,6;26,8 12.4.5 Beispiel: Exportiere_Kopfdaten = N Basierend auf folgender Konfiguration: Header1 = MET_CODE Metering-Code Header2 = OBIS_CODE OBIS-Code Exportiere_Kopfdaten = N 10.11.2014 00:15;77,6;25,2 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 277 von 384 10.11.2014 00:30;81,6;26,8 10.11.2014 00:45;135,2;29,6 10.11.2014 01:00;132;28 10.11.2014 01:15;122;28,8 12.4.6 Beispiel: Exportiere_Header = Y Basierend auf folgender Konfiguration: Header1 = MET_CODE Metering-Code Header2 = OBIS_CODE OBIS-Code Exportiere_Header = Y Datum/Zeit;ZP1;ZP1 10.11.2014 00:15;77,6;25,2 10.11.2014 00:30;81,6;26,8 10.11.2014 00:45;135,2;29,6 Die Parameter Exportiere_Legende und Exportiere_Kopfdaten werden nicht ausgewertet und auch nicht ausgegeben! 12.4.7 Beispiel: Header1 bis Header5 Basierend auf folgender Konfiguration: Header1 = MET_CODE Metering-Code Header2 = OBIS_CODE OBIS-Code Header3 = UNIT Einheit Header4 = KUNDE_NAME Kundenname Header5 = LINE_WEB_DESC Linie Exportiere_Header = Y Exportiere_Legende = Y # Datum der Auswertung: 11.11.2014 # Zeitraum der Auswertung: 10.11.2014 - 11.11.2014 # Zählpunkte: # ZP1 ZP1 1-1:1.9.0 Kundenname - (137121) # ZP1 ZP1 1-1:3.9.0 Kundenname - (137121) Metering-Code;ZP1;ZP1 Seite 278 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 OBIS-Code;1-1:1.9.0;1-1:3.9.0 Einheit;kWh;kvarh Kundenname;Kundenname - (137121);Kundenname - (137121) Linie;1-1:1.9.0;1-1:3.9.0 10.11.2014 00:15;77,6;25,2 10.11.2014 00:30;81,6;26,8 10.11.2014 00:45;135,2;29,6 12.5 CSV2 Bei dem CSV2-Filter handelt es sich primär um einen konfigurierbaren CSV-Export des robotron*EdifactKonverter, der aber auch in der KomA verwendet werden kann. Tabelle 12-3: Formatspezifische Einstellungen CSV2 Parameter/Beschreibung Default ZST_SEKUNDAER_WERT Y/N. Mit aktivierter Einstellung ist es möglich, Sekundärwerte der Zählerstände zu verschicken (ähnlich dem Parameter ZST_SEKUNDAERWERTE=J in der EDI.properties) SEPARATOR Trennzeichen in der CSV-Datei. ENCODING Zeichenkodierung für die zu erstellende Datei 12.6 CSV_MEMI2016_RV (Format CSV_MEMIRV) MeMi Schnittstelle – Abo-Export in CSV-Format. Das Format umfasst folgende Spalten: • • • • • • • • • • • 1. Belegnummer (aus Abrechnungssystem) 2. Zählpunkt (Meteringcode) 3. Richtung 4. ANTW: Netzkonto Nummer 5. ANTW: MP-Id Lieferant (Antwort) 6. ANTW: MP-Id Netzbetreiber (Antwort) 7. ANTW: Flag Bilanzierung 8. ANTW: Bil-Zeitraum Von 9. ANTW: Bil-Zeitraum Bis 10. ANTW: BIL-Wert 11. ANTW: NN-Zeitraum von N ; ISO-8859-1 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 • • • • • Seite 279 von 384 12. ANTW: NN-Zeitraum bis 13. ANTW: NN-Wert (Verbrauchswert tariflos) 14. ANTW: MMM-Wert 15. Storno 16. PLAUSI_ALOLISTE (Plausibilität Allokationslisten) Die Von- und Bis-Spalten (8, 9, 11, 12) werden in den Format DD.MM.YYYY exportiert. Die Spalten BIL-Wert und NN-Wert werden per Default wie folgt formatiert: - kein Tausendertrennzeichen Komma als Dezimaltrennzeichen maximal 3 Nachkommastellen, es wird kaufmännisch gerundet Tabelle 12-4 Parameter für CSV_MEMIRV Parameter/Beschreibung decimalSeparator Dezimaltrennzeichen maxFractionDigits Maximale Anzahl an Nachkommastellen Default , 3 12.7 CSV_MMM (CSV für Rahmenverträge) Mit eCount- 00042647 wurde das Format "CSV für Rahmenverträge" erstellt, mit dem Beispiel - Ausgabe: # Mehrmindermengen # Rahmenvertrag RV_XYT # Vertrag von 01.10.2010 #;;;;;;Abrechnungszeitraum;;Bilanzierungszeitraum Typ;Bezeichnung;MeteringCode;Verbrauch;Prognose;Mehrmindermenge;von;bis;von;bis;Belegnummer NNA Einzelwerte;Haush MFH.;DE00xx;18000;17701,054731;298,945269;01.01.2012;31.12.2012;01.01.2012;31.12.2012; Einzelwerte;Gartenbau Allg;DE00xx;12000;11192,19362;807,80638;01.01.2012;31.12.2012;01.01.2012;31.12.2012; Einzelwerte;Haush EFH Alt.;DE00xx;16000;15475,98412;524,01588;01.01.2012;31.12.2012;01.01.2012;31.12.2012; Einzelwerte;Haush EFH Alt Rhzg. + WW.;DE00xx;20000;16164,967421;3835,032579;01.01.2012;31.12.2012;01.01.2012;31.12.2012; Rahmenvertragssummen;;;66000;60534,199892;-5465,800108;01.01.2012;31.12.2012;;; Seite 280 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 12.8 CSV_ROHDAT Pfad: filter_export/ecount_export_CSV_ROHDAT.jar CSV-Exportformat für Zähler/Zählerwerte mit folgender Kopfzeile: METERING_CODE;ZEITSTEMPEL_UTC;DRIFT_SEKUNDEN;EIGENTUMSNUMMER;IMPULSANZAHL;SEKUND AERWERT;SEKUNDAERWERT_EINHEIT;SEKUNDAERWERT_KENNUNG;SEKUNDAERWERT_KENNUNG_ZFA; KUMULATIV;ALLGEMEINE_KONSTANTE;IMPULSKONSTANTE;SPANNUNG_PRIM;SPANNUNG_SEK;STROM _PRIM;STROM_SEK;IMPULSWERTIGKEIT_ZAEHLER;IMPULSWERTIGKEIT_NENNER;IMPULSWERTIGKEIT_E INHEIT;PRIMAERWERT;PRIMAERWERT_EINHEIT;PRIMAERWERT_KENNUNG;PRIMAERWERT_KENNUNG_ ZFA;SEKUNDENINDEX;SIGNATUR;SKALIERUNGSFAKTOR Ab Zeile 2 folgen die Daten, jeder Datensatz wird auf eine neue Zeile geschrieben. Tabelle 12-5: Parameter CSV_ROHDAT Parameter/Beschreibung encoding Bestimmung des Zeichensatzes für die zu exportierende Datei. NUMBER_FORMAT Es sollte folgendes Format verwendet werden: #######.0000 Default ISO8859-1 0.0000 Vorlage Mit der Einstellung VEM ist es möglich, den Export in ein anderes CSV-Format zu betreiben. In diesem Modus werden auch die Parameter NUMBER_FORMAT und eHZ ausgewertet. Mit Vorlage=VEM wird folgende Kopfzeile mit 14 Spalten generiert: Ablesezeit;Wandlerfaktor;ZPB;1-0:0.0.0;1-0:1.8.0;1-0:1.8.1;10:1.8.2;7-0:0.0.0;7-0:3.1.0;6-0:0.0.0;6-0:1.0.0;8-0:0.0.0;80:1.0.0;1-0:2.8.0 eHZ N Y/N 12.9 CSV_ZST (CSV Zählerstandsversand) Das im robotron*ecount auswählbare Format „CSV Zählerstände“ (KomA CSV_ZST) wird über die Lizenz E_CSV_ZST bereitgestellt. Ausgehend von der folgenden Beispiel-Konfiguration der Properties-Datei erfolgt die Ausgabe in folgendem Format: 1. Zeile (Kopfzeile) mit folgenden Spalten: Zählpunkt; Eigentumsnummer; OBIS-Kennzahl; Datum; Zählerstand; Wandlerfaktor; Vorkommastellen; Nachkommastellen; Kennung; Einheit; Ablesegrund; Erfassungsart; Anfang/Ende Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 281 von 384 Zeile 2 bis n jeweiligen Zählerstände (Beispiel 1 Datensatz) DE00039676756S4785000008VERM09010; 24361927; 1-1:1.8.1; 18.03.2013; 44781; 1; 6; 1; W; kWh; ROM; Automatische Fernauslesung; Ende 12.9.1 Export-Attribute Die nachfolgende Tabelle beschreibt die möglichen Attribute die exportiert werden können. Tabelle 12-6: Export-Attribute für CSV_ZST (CSV Zählerstandsversand) Variablenbezeichnung Beschreibung ABLESEGRUND Der Ablesegrund des Zählerstandes oder des Verbrauchs ABLESUNG_ANFANG_ENDE Beginn/Ende des Zählerstandes EIGENTUMSNR Eigentumsnummer bei Verbrauch EINHEIT Einheit, Default: kW ERFASSUNGSART Erfassungsart (Zählerstand oder Verbrauch) MET_CODE MeteringCode des Zählpunktes NACHKOMMASTELLEN Nachkommastellen des Zählwerks VORKOMMASTELLEN Vorkommastellen des Zählwerks OBIS_CODE OBIS-Code des Zählerstandes STATUS Zählerstandskennung WANDLERFAKTOR Wandlerfaktor BRENNWERT Brennwert Z_ZAHL Zustands-Zahl ZAEHLWERKSKENNZEICHEN Kennzeichen des Zählwerkes SCHWACHLASTKENNZEICHEN Schwachlastkennzeichen 12.9.2 Beispiel-Konfiguration (Properties-Datei auf dem KomA) HandlerClass = de.robotron.ecount.exportcom.filter.CSV2Handler CalculateFilename = E ENCODING = ISO-8859-1 Seite 282 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 TYPE = ZST SEPARATOR = ; DATE_FORMAT = dd.MM.yyyy TIME = "00:00" NUMBER_FORMAT = #####0.### NUMBER_FORMAT.DECIMAL_SEPARATOR = , NUMBER_FORMAT.GROUPING_SEPARATOR = . ZST_SEKUNDAER_WERT = Y VALUE_FIELD_DIMENSION = {0,1} EXPORT.VALUE_AT(1,1) = Zählpunkt MET_CODE = cellValue(1,n) EXPORT.VALUE_AT(2,1) = Eigentumsnummer EIGENTUMSNR = cellValue(2,n) EXPORT.VALUE_AT(3,1) = OBIS-Kennzahl OBIS_CODE = cellValue(3,n) EXPORT.VALUE_AT(4,1) = Datum DATE = cellValue(4,n) EXPORT.VALUE_AT(5,1) = Zählerstand FIRST_VALUE_FIELD = cellValue(5,2) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 283 von 384 EXPORT.VALUE_AT(6,1) = Wandlerfaktor WANDLERFAKTOR = cellValue(6,n) EXPORT.VALUE_AT(7,1) = Vorkommastellen VORKOMMASTELLEN = cellValue(7,n) EXPORT.VALUE_AT(8,1) = Nachkommastellen NACHKOMMASTELLEN = cellValue(8,n) EXPORT.VALUE_AT(9,1) = Kennung STATUS = cellValue(9,n) EXPORT.VALUE_AT(10,1) = Einheit EINHEIT = cellValue(10,n) EXPORT.VALUE_AT(11,1) = Ablesegrund ABLESEGRUND = decode(cellValue(11,n), "", ("", ""), ("COM", "COM"), ("COS", "COS"), ("COT", "COT"), ("", ""), ("Gerätewechsel", "COM"), ("Lieferantenwechsel", "COS"), ("Tarifwechsel", "COT")) EXPORT.VALUE_AT(12,1) = Erfassungsart ERFASSUNGSART = decode(cellValue(12,n), "", ("", ""), ("AMR", "AMR"), ("MMR", "MMR"), ("CMR", "CMR"), ("Automatische Fernauslesung", "AMR"), ("Ablesung durch Netzbetreiber", "MMR"), ("Kundenselbstablesung", "CMR")) EXPORT.VALUE_AT(13,1) = Anfang/Ende ABLESUNG_ANFANG_ENDE = decode(cellValue(13,n), "?", ("", ""), ("Anfang", "A"), ("Ende", "E")) Seite 284 von 384 12.9.3 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Beispiel zusätzliche Ausgabe von Schwachlast und Zählwerkskennzeichen in config/export/CSV_ZST.properties sind beispielsweise folgende Zeilen zu ergänzen (basiert auf dem ersten Beispiel, der nächste Spalten-Index lautet also 14): EXPORT.VALUE_AT(14,1) = Zählwerkskennzeichen ZAEHLWERKSKENNZEICHEN = cellValue(14,n) EXPORT.VALUE_AT(15,1) = Schwachlastkennzeichen SCHWACHLASTKENNZEICHEN = cellValue(15,n) 12.10 DATENREBAP DATENREBAP ist ein Exportfilter für Lastgangdaten im CSV-Format (kundenspezifische Entwicklung). Pfad: filter_export/ecount_export_DATENREBAP.jar Tabelle 12-7:Parameter für DATENREBAP Parameter/Beschreibung Standardwert FILTER_DATA_SOURCE Mit der Einstellung kann zwischen DATENREBAP und DATENOC umgeschaltet werden. Dies hat Einfluss auf die Auswertung von Liniendetails. DATENREBAP Bei DATENREBAP wird EXPORT_BEZEICHNUNG_REBAP, ansonsten EXPORT_BEZEICHNUNG_OC für die Linienbezeichnung ausgewertet. csvSeparator Spalten-Trennzeichen für die Ausgabedatei decimalSeparator Dezimaltrennzeichen DATE_FORMAT Formatierung der Datumswerte in der Ausgabedatei Encoding Zeichenkodierung für die Ausgabedatei 12.11 EDIS_INVC Exportfilter für INVOIC im CSV-Format an IS/U (kundenspezifische Entwicklung). ; , dd.MM.yyyy HH:mm ISO-8859-1 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 285 von 384 Die CSV-Datei besteht aus 3 Kopfzeilen. In der ersten Zeile steht Sender;Empfänger in der zweiten Zeile die ID des Senders und des Empfängers. In der 3. Zeile werden 26 Spalten mit folgender Reihenfolge/Ausprägung ausgegeben, darunter folgen dann die eigentlichen Daten: Zählpunkt, Name, Strasse, Hausnr ,Hausnrerg, PLZ, Ort, Nachrichtentyp, Stornierung, Rechnungsdatum, Fälligkeitsdatum, Abrechnungszeitraumvon, Abrechnungszeitraumbis, Nachrichtennr, Rechnungstyp, Originalrechnungsnr, Originalrechnungsdatum, Rechnungswährung, Kundennummer, Netto, NettoSteuerfrei, Gesamtsteuerbetrag, Rechnungsbetrag, VorausbezahlterBetrag, VorausbezahlterSteuern, fälligerBetrag 12.12 EEX (European Energy Exchange Excel) Es geht um Excel-Dateien von EEX mit den Tabellenblättern PRICES und VOLUMES. Die Abarbeitungsreihenfolge im Excel-Sheet erfolgt nach dem Bottom-Up-Prinzip, d.h. die Abarbeitung beginnt mit der letzten Zeile im Sheet. Tabelle 12-8: Formatspezifische Einstellungen EEX Parameter/Beschreibung Standardwert PRICES_BREAK_BY_ROW_COUNT Möglichkeit zur Definition der Anzahl der zu importierenden Zeilen für das Excel-Sheet PRICES VOLUMES_BREAK_BY_ROW_COUNT Möglichkeit zur Definition der Anzahl der zu importierenden Zeilen für das Excel-Sheet VOLUMES BOTTOM_UP Die Abarbeitungsreihenfolge im Excel-Sheet erfolgt nach dem Bottom-Up-Prinzip, d.h. Y die Abarbeitung beginnt mit der letzten Zeile im Sheet. Mit dem Parameter BOTTOM_UP=N kann die Reihenfolge für PRICES_BREAK_BY_ROW_COUNT und VOLUMES_BREAK_BY_ROW_COUNT nach dem TOP-Down-Prinzip verändert werden. valuesFlag Status des Wertes beim Import nach ecount unit.prices Einheit beim Import für das Sheet PRICES unit.volumes Einheit beim Import für das Sheet VOLUMES Beispiel: W EUR/MWh MWh Seite 286 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 VOLUMES_BREAK_BY_ROW_COUNT=1 Nur der Wert für den 01.01.2012 würde importiert werden. Beispiel: VOLUMES_BREAK_BY_ROW_COUNT=1 BOTTOM_UP=N Nur der Wert für den 13.09.2012 würde importiert werden. Beispiel: VOLUMES_BREAK_BY_ROW_COUNT=5 BOTTOM_UP=N Die Werte vom 13.09. bis 09.09. würden importiert werden. 12.13 ESS-XML-Fahrpläne (ETSO Scheduling System) ETSO Scheduling System = standardisiertes Fahrplanaustausch-Format Pfad: filter_export/ecount_export_ESS.jar Tabelle 12-9: Formatspezifische Einstellungen ESS Parameter/Beschreibung Standardwert StatusRequestVersion 1 Version des Statusrequests, aktuell nur 1 und 2 unterstützt. Wird nur ausgewertet bei der Abo-Art „SR“ StatusRequestRelease Version für DtdRelease, z. B. im XML-Element <StatusRequestDocument> 0 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 287 von 384 Parameter/Beschreibung Standardwert STYLECHEET_STATUS_REQUEST Der href-Wert für das xml-stylesheet-Element StatusRequestDTD Standardwert: Bei StatusRequest 1: ../scheduleV2r3/dtd/request-xml.dtd Bei StatusRequest 2: wird aktuell keine DTD-Information exportiert StatusRequestStylesheet Bei StatusRequest 2: ../statusrequestv2r0/stylesheet/request-xsl.xsl Kein Standardwert für StatusRequest 1 12.14 Excel-Reports (XLS_REP) KomA-JAR: ecount_export_XLS_REP.jar Dieser Filter übernimmt die Verarbeitung der Excel-Reports auf die KomA (siehe 14). 12.15 EXP/XML (Format EXP) Export von Verrechnungsdaten aus der Görlitz-ZFA. 12.16 Fröschl Flat File (Format FFF) Formatspezifische Einstellungen. Tabelle 12-10: Formatspezifische Einstellungen FFF Parameter/Beschreibung Separator Legt das Trennzeichen zwischen den einzelnen Elementen fest UsePadding Definiert, dass alle Attribute bis zur maximalen Länge mit Leerzeichen aufgefüllt werden Default ; 0 12.17 GAS-XML (Format GASX) Pfad: filter_export/ecount_export_GASX.jar Mit Version 4.0.2.14 (eCount- 00034137) unterstützt der Filter die Zählpunkt- und Linien-Platzhalter für Dateinamen. Seite 288 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 12.18 INVCC Pfad: filter_export/ecount_export_INVCC.jar Hierbei handelt es sich um ein Robotron INVOIC-CSV-Format. Mit eCount- 00052653 wurden Änderungen im Format vorgenommen die nicht mehr 100% identisch zur Vorversion sind. Der hier beschriebene Aufbau entspricht der neuen Fassung aus eCount- 00052653. Der Aufbau der Datei ist wie folgt: 1. Zeile: Kopfdaten der Datei mit folgenden Spalten: * Ziel-Dateiname;Absender-ID;Absender-ID-Typ;Empfänger-ID;Empfänger-ID-Typ;UNB-Referenz;UNBZeitstempel Spalte Beschreibung Ziel-Dateiname Dateiname Absender-ID ID des Absenders Absender-ID-Typ Typ (ILN, VDEW, DVGW, EDIGAS) Empfänger-ID ID des Empfängers Empfänger-ID-Typ Typ (ILN, VDEW, DVGW, EDIGAS) UNB-Referenz UNB.0020 UNB-Zeitstempel UNB.S004 2. Zeile: die entsprechenden Werte 3. Zeile – Kopfdaten für die INVOIC-Nachricht mit folgenden Spalten: INVOIC-Version;Nachrichten-ID;Rechnungstyp;Rechnungsfunktion;Datum;Beginn Abrechnungszeitraum;Ende Abrechnungszeitraum;Abrechnungsart;Rech-Nr Orig;Rech-Dat Orig;Währung;Fällig;Steuerpfl.Betrag;Summe Ust.-frei;Steuern ges.;Rech-Betr. incl. Steuern;VorausBetrag incl. Steuern;Voraus-Steuern;Fälliger Betrag incl. Steuern;Buchungsdatum Spalte Beschreibung INVOIC-Version UNH.DE0057 Nachrichten-ID BGM.DE1004 Rechnungstyp BGM.DE1001 Rechnungsfunktion BGM.DE1225 Datum DTM+137 Beginn Abrechnungszeitraum DTM+155 Ende Abrechnungszeitraum DTM+156 Abrechnungsart IMD.DE7081 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 289 von 384 Rech-Nr Orig SG1.RFF+OI Rech-Dat Orig SG1.DTM+171 Währung SG7.CUX+2 Fällig SG8.PYT-DTM+265 Steuerpfl.Betrag SG50.MOA+125 Summe Ust.-frei SG50.MOA+389 Steuern ges. SG50.MOA+176 Rech-Betr. incl. Steuern SG50.MOA+77 Voraus-Betrag incl. Steuern SG50.MOA+113 Voraus-Steuern SG50.MOA+115 Fälliger Betrag incl. Steuern SG50.MOA+9 Buchungsdatum DTM+9 4. Zeile: die entsprechenden Werte 5. Zeile: Kopfzeile für den Absender mit folgenden Spalten: * Absender-ID;ID-Typ;Name;Name2;Straße, Hausnummer;Str/Hnr2;Str/Hnr3;Str/Hnr4;Ort;PLZ;Land;UstNr.;Steuer-Nummer;Anwend-Ref.;Zus. Partner-ID;Ansprechpartner;Ansp. Email;Ansp. Tel.;Ansp. Fax;Ansp. 2. Telefon;Ansp. Mobil Spalte Beschreibung Absender-ID SG2.NAD.MS.DE3039 ID-Typ SG2.NAD.MS.DE3055 Name SG2.NAD.MS.DE3036(1+2) Name2 SG2.NAD.MS.DE3036(3+4) Typ SG2.NAD.MS.C080.3045 Straße Hausnummer SG2.NAD.MS.DE3042(1) Str/Hnr2 SG2.NAD.MS.DE3042(2) Str/Hnr3 SG2.NAD.MS.DE3042(3) Str/Hnr4 SG2.NAD.MS.DE3042(4) Ort SG2.NAD.MS.DE3164" PLZ SG2.NAD.MS.DE3251 Land SG2.NAD.MS.DE3207 Ust-Nr. SG3.MS.RFF+VA Steuer-Nummer SG3.MS.RFF+FC Anwend-Ref. SG3.MS.RFF+AGK Zus. Partner-ID SG3.MS.RFF+API Ansprechpartner SG5.CTA.DE.3412 Ansp. Email SG5.COM+EM Seite 290 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Spalte Beschreibung Ansp. Tel. SG5.COM+TE Ansp. Fax SG5.COM+FX Ansp. 2. Telefon SG5.COM+AJ Ansp. Mobil SG5.COM+AL 6. Zeile: die entsprechenden Werte 7. Zeile: Kopfzeile für den Empfänger mit folgenden Spalten: * Empfänger-ID;ID-Typ;Name;Name2;Straße, Hausnummer;Str/Hnr2;Str/Hnr3;Str/Hnr4;Ort;PLZ;Land;Ust-Nr.;Steuer-Nummer;Anwend-Ref.;Zus. Partner-ID Spalte Beschreibung Empfänger-ID SG2.NAD.MR.DE3039 ID-Typ SG2.NAD.MR.DE3055 Name SG2.NAD.MR.DE3036(1+2) Name2 SG2.NAD.MR.DE3036(3+4) Typ SG2.NAD.MR.C080.3045 Straße Hausnummer SG2.NAD.MR.DE3042(1) Str/Hnr2 SG2.NAD.MR.DE3042(2) Str/Hnr3 SG2.NAD.MR.DE3042(3) Str/Hnr4 SG2.NAD.MR.DE3042(4) Ort SG2.NAD.MR.DE3164 PLZ SG2.NAD.MR.DE3251 Land SG2.NAD.MR.DE3207 Ust-Nr. SG3.MR.RFF+VA Steuer-Nummer SG3.MR.RFF+FC Anwend-Ref. SG3.MR.RFF+AGK Zus. Partner-ID SG3.MR.RFF+API 8. Zeile: die entsprechenden Werte 9. Zeile: Kopfzeile für die Lieferanschrift mit folgenden Spalten: Lieferanschrift-Name;Lieferanschrift-Name2;Straße, Hausnummer;Str/Hnr2;Str/Hnr3;Str/Hnr4;Ort;PLZ;Land;Zählpunkt;Int. Kundennummer;AnwendRef.;Zus. Partner-ID Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 291 von 384 Spalte Beschreibung Lieferanschrift-Name SG2.NAD.DP.DE3036(1+2) Lieferanschrift-Name2 SG2.NAD.DP.DE3036(3+4) Typ SG2.NAD.DP.C080.3045 Straße, Hausnummer SG2.NAD.DP.DE3042(1) Str/Hnr2 SG2.NAD.DP.DE3042(2) Str/Hnr3 SG2.NAD.DP.DE3042(3) Str/Hnr4 SG2.NAD.DP.DE3042(4) Ort SG2.NAD.DP.DE3164 PLZ SG2.NAD.DP.DE3251 Land SG2.NAD.DP.DE3207 Zählpunkt SG2.LOC+172 Int. Kundennummer SG3.DP.RFF+IT Anwend-Ref. SG3.DP.RFF+AGK Zus. Partner-ID SG3.DP.RFF+API 10. Zeile: die entsprechenden Werte 11. Zeile: Kopfzeile für die Rechnungspositionen mit folgenden Spalten: * Rechnungsposition;Produkt-Nummer;Produkt-Nummer-Typ;Menge;Einheit;Beginn Abrechnungszeitraum;Ende Abrechnungszeitraum;Positionsbetrag;Berechnungspreis;Berechnungspreis Qualifier;Zählernummer;Steuersatz;Menge 2;Einheit 2;Gemeinderabatt;Umspannungszuschlag;BetriebsmittelZuschlag;Rabatt;Gesamt-Zuschlag/-Abschlag Spalte Beschreibung Rechnungsposition SG26.LIN.DE1082 Produkt-Nummer SG26.LIN.DE7140 Produkt-Nummer-Typ SG26.LIN.DE3055 Menge SG26.QTY+47.DE6060 (wenn nicht vorhanden dann SG26.QTY+136.DE6060) Einheit SG26.QTY+47.DE6411 (oder SG26.QTY+136.DE6411) Beginn Abrechnungszeitraum SG26.DTM+155 Ende Abrechnungszeitraum SG26.DTM+156 Positionsbetrag SG26.MOA+203.DE5004 Berechnungspreis SG29.PRI+CAL.DE5118 Berechnungspreis Qualifier SG29.PRI+CAL.DE6411 Zählernummer SG30.RFF+MG Seite 292 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Spalte Beschreibung Steuersatz SG34.TAX+7+VAT.DE5278 Menge 2 SG26.QTY+136.DE6060 Einheit 2 SG26.QTY+136.DE6411 Gemeinderabatt SG39.ALC+A+Z01 Umspannungszuschlag SG39.ALC+C+Z02 BetriebsmittelZuschlag SG39.ALC+C+Z03 Rabatt SG39.ALC+A+Z04 Gesamt-Zuschlag/-Abschlag SG27.MOA+131.DE5004 Ab den dann folgenden Zeilen Ausgabe der Position, pro Position eine Zeile 12.19 KISS Fahrplanformat im KISS-Format - Excel Tabelle mit 15min Lastgängen. Tabelle 12-11:Parameter für KISS Parameter/Beschreibung Standardwert XLSX Y/N. Mit N kann die Generierung der Ausgabedatei im XLSX-Format aktiviert werden, Default ist XLS. N 12.20 Abschlüsse KVASY (Format KVASY) CSV-Export von Abschlüssen mit folgender Dateistruktur: • • • • Zählpunktbezeichnung OBIS Zählerstand (entspricht im kvasy bei den Lastgangzählern der Menge der Abschlussperiode) Ablesedatum (letzter Tag der Abschlussperiode, für Juli also der 31.07.2007) Formatspezifische Einstellungen Tabelle 12-12 Parameter für Exportformat KVASY Parameter/Beschreibung SEPARATOR Trennzeichen in der CSV-Datei DEZIMALTRENNER Dezimaltrennzeichen Standardwert ; . Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 293 von 384 Parameter/Beschreibung Standardwert encoding Kodierung der Datei, z.B. „ISO_8859_1“ DEZIMALSTELLEN Anzahl der Dezimalstellen OBIS_DEC Der mit DEZIMALSTELLEN gesetzte Wert kann pro OBIS-Kennzahl mit einer individuellen Einstellung OBIS_DEC.[OBIS] übersteuert werden. Existiert ein Wert in OBIS_MAP so wird der gemappte Wert auf diese Einstellung angewandt! OBIS_MAP Mapping der OBIS-Kennzahl im Filter. z.B. OBIS_MAP.1-1:1.6.0 = 1-1.6.1 OBIS_IGNORIER OBIS-Kennzahlen die nicht exportiert werden sollen. Prüfung erfolgt auf die OriginalOBIS aus dem ecount (nicht auf die gemappte OBIS) 12.21 LPEX/XML (Format LPEX) HandlerClass: de.robotron.ecount.exportcom.filter.LPEXHandler Pfad: filter_export/ecount_export_LPEX.jar Lizenz: E_LPEX Tabelle 12-13: Formatspezifische Einstellungen LPEX Parameter/Beschreibung DecimalSeparator Legt das Dezimaltrennzeichen innerhalb von Messwerten fest Linebreak Legt die Behandlung von Zeilenumbrüchen fest – voreingestellt ist DOS, d.h. 0Dh 0Ah. Andere Einstellungen, wie UNIX, bewirken nur 0Dh als Zeilenumbruch. IGNORE_STATUS Mit eCount- 00045240 können für LPEX auch Einzelwerte exportiert werden. Dabei werden alle Werte ignoriert, die nicht den zu exportierenden Status, der über den Exportparameter IGNORE_STATUS mitgeteilt wird, ausgegeben. Beispiel: IGNORE_STATUS = N,? Alle Werte mit dem Status N oder ? werden beim Export ignoriert. Standardwert , (KOMMA) Seite 294 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Parameter/Beschreibung Standardwert IsLPEX2 Y/N. Mit dieser Einstellung kann zwischen LPEX-Version 1 und 2 gewechselt werden. Bei Version 2 werden unter anderem zwei Kopfdaten ausgegeben, deren Aufbau ist wie folgt: 1 Kopfzeile: N LPEX V2.0 2. Kopfzeile: Datum;Zeit;Kundennummer;Kundenname;eindeutigeKDNr;GEId;GEKANr;KALINr;Linie;ei ndeutigeLINr;ZPB;Kennzahl;Einheit;Wandlerfaktor;MPDauer;Werte 12.22 MMMKVASY (MEMI_SST_KVASY) HandlerClass: de.robotron.ecount.exportcom.filter.MMMKVASYHandler Pfad: filter_export/ecount_export_MMMKVASY.jar Lizenz: E_MMMKVASY Export von Mehr-Minder-Mengen im CSV-Format. Folgende Spalten (nicht als Kopf in der Datei enthalten) werden ausgegeben. • • • • • • • • • • • • • • • • • Lieferant (ENERGIEDATEN.RVPI_WERT_LIEF) Netzbetreiber (ENERGIEDATEN.RVPI_WERT_VNB) ZP-Bezeichnung (ENERGIEDATEN.METERINGCODE) Richtung (ENERGIEDATEN.RKAT_ID) Netzkonto (ENERGIEDATEN.BILG_EIC) Bilanziert ab (BIL_VON) Bilanziert bis (BIL_BIS) Bilanzierungsmenge (PROG) Bilanzierungsflag (BILANZIERT) Netznutzung ab (Att_VON) Netznutzung bis (Att_BIS) Netznutzungsmenge (Att_VBR) Mehr-/Mindermenge (Att_MMM) Storno (STORNO) MSCONS-Ref (REFERENZ) MSCONS Versand Belegnummer (ABL_BELEG) Tabelle 12-14 Formatspezifische Einstellungen MMMKVASY Parameter/Beschreibung decimalSeparator Legt das Dezimaltrennzeichen fest. Standardwert , (KOMMA) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 295 von 384 12.23 OBM_VD_CSV Bei dem Format OBM_VD_CSV handelt es sich um einen kundenspezifischen CSV-Export von Verrechnungsdaten zu OBM. Die Kopfzeile setzt sich aus folgenden Spalten zusammen: - UTC-Zeitstempel des Ablesevorganges OSM-/Zählerkennung (alphanumerisch möglich) (0-0:96.1.0) Beginn des Ladevorgangs (UTC) Einheit (Zählerstand zu Beginn des Ladevorgangs) Zählerstand zu Beginn des Ladevorgangs Ende des Ladevorgangs (UTC) Einheit (Zählerstand zum Ende des Ladevorgangs) Zählerstand zum Ende des Ladevorgangs Lieferanten-Kennung (alphanumerisch möglich) (1-0:0.0.3) Systemsteckdosen-Kennung (alphanumerisch möglich) (1-0:0.0.4) Systemsteckdosen-Ladevorgangszähler (1-0:0.0.5) Signatur Ladelastgangdatensatz (1-0:0.0.6) Signatur Zählerstandsdatensatz (1-0:0.0.7) OSM-Ladevorgangszähler (1-0:0.0.8) Statuswort / Fehlercode (1-0:96.5.5) 12.24 Reports (Format REPORT) Im System robotron*ecount können nutzerspezifische Reports (ecount: Reports > Benutzerreports) erzeugt werden. Diese werden über de.robotron.ecount.exportcom.filter.ReportHandler abgearbeitet. Tabelle 12-15 Formatspezifische Einstellungen REPORT Parameter/Beschreibung EXPORT_COLUMN_HEADER Y/N (Default Y). Damit kann der Export der Kopfspalte, bei der alle im SQL enthaltenen Spaltennamen exportiert wird, deaktiviert werden. useSecuredEcountLogon Y/N (Default N). Ist diese Einstellung aktiviert wird folgende Funktion aufgerufen ec_sys.pkg_db_security_logon.set_role. Über diese Funktion soll sichergestellt werden, dass der Nutzer keiner Möglichkeit hat DB-Objekte zu lesen oder zu ändern. Die Formatierung von Zahlen ist ein oft gebrauchtes Feature. Dabei stehen folgende Parameter zur Verfügung (Report.properties unter config/export): - numberFormat (Zeichenkette Formatierungszeichen) decimalSeparator (Dezimaltrennzeichen, genau 1 Zeichen) groupSeparator (Gruppierungszeichen, genau 1 Zeichen) enable_groupSeparator (Y/N, Default ist Y) Seite 296 von 384 Beispiele: Formatierung für Schweizer Kunden (Wert 12345678,90): numberFormat=###,###.### decimalSeparator=. groupSeparator=' Ergebnis: 12‘345‘678.90 Beispielwert: 25599,85 und 0,75 Beispiel 1: numberFormat = system Ergebnis: 25.599,85 und 0,75 Beispiel 2: numberFormat = #,###,##0.00 Ergebnis: 25.599,85 und 0,75 Beispiel 3: numberFormat = #0.00 Ergebnis: 25599,85 und 0,75 Beispiel 4: numberFormat = #.00 Ergebnis: 25599,85 und ,75 Beispiel 5: numberFormat = system enable_groupSeparator = N Ergebnis: 25599,85 und 0,75 Beispiel 6: numberFormat = #.00000 Ergebnis: 25599,85000 und ,75000 Beispiel 7: numberFormat = #.# decimalSeparator = . Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 297 von 384 Ergebnis: 25599.8 und 0.8 Legende: , -> Grouping separator # -> Digit, zero shows as absent 0 -> Digit . -> Decimal separator or monetary decimal separator numberFormat "system" -> 0.########## 12.25 SAPEDM HandlerClass: de.robotron.ecount.exportcom.filter.SAPEDMHandler Pfad: filter_export/ ecount_export_SAPEDM.jar Lizenz: E_SAPEDM Kundenspezifisches CSV-Format: <Zählpunkt>;<Datum>;<OBIS>;<Periode>;<Abweichung zur UTC>;<Umstellungskennzeichen>;<Wert1>;…<Wertn> Tabelle 12-16: Formatspezifische Einstellungen SAPEDM Parameter/Beschreibung InsertCR Y/N (Default N). In Kombination mit InsertLF nutzbar. Mit Y wird für den Zeilenumbruch ein Wagenrücklauf (engl. carriage return, kurz CR, hexadezimal 0D) hinzugefügt. InsertLF Y/N (Default N). In Kombination mit InsertCR nutzbar. Mit Y wird für den Zeilenumbruch ein Zeilenvorschub (englisch line feed, kurz LF, hexadezimal 0A) hinzugefügt. CorrectOBIS Y/N (Default N). Wandelt in der OBIS die Zeichenkette „.9.0“ nach „.9.1“. AnzahlNachkommastellen Anzahl der maximalen Nachkommastellen für den Dezimalbereich, es wird kaufmännisch gerundet. Default: 3 DUPLICATE_LINE_CHECK Y/N (Default N). Mit Y werden doppelte Linien (unter einem Zählpunkt) ignoriert. Die Identifizierung findet über die LINIEN_ID statt. Seite 298 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 12.25.1 Zeilenumbruch Windows (CR LF) InsertCR=Y InsertLF=Y Linux (LF) InsertCR=N InsertLF=Y Max (CR) InsertCR=Y InsertLF=N 12.26 STD_XML HandlerClass: de.robotron.ecount.exportcom.filter.STD_XMLHandler Pfad: filter_export/ecount_export_STD_XML.jar Die Beschreibung der XML-Struktur ist unter export\STD_XML in Anlage 4 zu finden. Der Exportfilter unterstützt folgende 3 Ausprägungen an Export-Abos: - Verrechnungsdaten Lastgänge Zählerstände/Verbräuche. 12.26.1 Zusammenspiel Abo – Export-Tabelle – XML-Output Tabelle 12-17: Abo – Export-Tabelle – XML-Output Abo Export-Tabelle XML-Element Verrechnungsdaten EXPORT_ABLESUNG METER_READING Lastgang EXPORT_TAGESLASTPROFILE VALUES EXPORT_VERBRAUCHSDATEN, CONSUMPTION_DATA und METER_STATUS EXPORT_VERTRAEGE CONTRACT Zählerstände/Verbräuche 12.26.2 Konfigurationsparameter Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 299 von 384 Tabelle 12-18: Konfigurationsparameter für STD_XML Parameter/Beschreibung Standardwert Typ DATE_FORMAT dd.MM.yyyy HH:mm:ss String . (PUNKT) String UTF-8 String Ausgabeformatierung der Zeitstempel DecimalSeparator Dezimaltrennzeichen ENCODING XML-Datei-Encoding, nur auf der KomA nicht pro Abo definierbar, Standardwert sollte in den meisten Fällen passen FILE_EXTENSION_XSLT String Spezifiziert eine Dateierweiterung bei der Nutzung von XSLT. Es ist beispielsweise möglich, per Transformation die XML-Datei nach CSV zu konvertieren. Dann kann die Dateierweiterung csv hier übermittelt werden, ohne den Anhang-Dateinamen anpassen zu müssen, dieser kann weiterhin auf XML enden. Ist primär für das schnelle Umschalten zwischen Transformation und nicht Transformation sinnvoll. Die Transformation kann mittels USE_TRANSFORMATION=N (oder löschen) deaktiviert werden. Anschließend werden die korrekten Dateierweiterungen gebildet, ohne eine weitere Konfiguration vornehmen zu müssen. GroupingSeparator String Tausendertrennzeichen, wenn nicht spezifiziert dann wird auch kein Tausendertrennzeichen verwendet. INTERN_OBIS_MAPPING Y Bool N Bool Die ecount internen OBIS-Codes (GAS_BRENNWERT, GAS_Z_ZAHL) werden in eine BDEW konforme OBIS gewandelt. SEND_EXPORT_PARAMETER Y/N. Mit Y können die Parameter des Exportauftrages mit exportiert werden, falls die Gegenstelle mit diesen Informationen etwas anfangen kann. Statusmapping: status.<ecount-status>=<neuer status> Folgende Status können von ecount geliefert werden: W (wahrer Wert) E (Ersatzwert) G (gestörter Wert) V (vorläufiger Wert) String Seite 300 von 384 Parameter/Beschreibung Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Standardwert Typ UTC String N Bool F (fehlender Wert) N (Nicht vorhandener Wert) ? (unbekannte Kennung) Soll statt dem Status E hier 220 exportiert werden, so muss Folgendes definiert werden: status.E=220 Der Status wird aktuell ausschließlich im Element V verwendet. TIMEZONE Zeitzone für die Ausgabe von Datumsangaben. UTC, Europe/Berlin und MEZ werden unterstützt USE_TRANSFORMATION Y/N. Mit Y kann die XSLT-Transformation aktiviert werden. XSLT_DIR config/export/xslt Dir Bei der relativen Angabe der XSLT-Datei kann das Basisverzeichnis (innerhalb des KomA) für die Transformationsdateien mit diesem Parameter konfiguriert werden. XSLT_PATH String Pfad zur XSLT-Datei (wird nur bei USE_TRANSFORMATION=Y ausgewertet). Absolute oder relative Angabe möglich. Wenn die Angabe relativ erfolgt wird per Default in der KomA unter config/export/xslt nach der Datei gesucht. Der Ordner kann über die Einstellung XSLT_DIR modifiziert werden. 12.26.3 XSLT – Transformation Eine Transformation ist mit folgenden Einstellungen möglich: USE_TRANSFORMATION=Y XSLT_PATH=XSLT_TLP_CSV.xsl Die Datei XSLT_TLP_CSV.xsl ist relativ angegeben, damit wird in der KomA im Verzeichnis config/export/xslt nach dieser Datei gesucht. Da auch eine Transformation in ein anders Dateiformat, z. B. CSV, stattfinden kann ist ggf. die Angabe der neuen Dateierweiterung sinnvoll. Dies ist aber nur notwendig, wenn im Namen z.B. *.xml definiert wurde und die Transformation das Dateiformat ändert (zum Beispiel auf CSV via FILE_EXTENSION_XSLT=csv) Befinden sich die Transformationsdateien (XSL) in einem anderen Verzeichnis, kann dies über die Einstellung XSLT_DIR übermittelt werden, Beispiel: Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 301 von 384 USE_TRANSFORMATION=Y XSLT_PATH=XSLT_TLP_CSV.xsl XSLT_DIR= c:\KomA\config\export\xslt 12.26.4 XML-Elemente: 12.26.4.1 TIMEZONE Gibt die Zeitzone an, in der Datumswerte definiert wurden (Standardwert UTC). Möglich sind aktuell noch Europe/Berlin und MEZ. 12.26.4.2 DATETIMEFORMAT Angabe der Datumsformatierung (Java) z. B. dd.MM.yyyy HH:mm:ss Folgende Elemente verwenden diese Formatierung: Tabelle 12-19: Elemente für DATETIMEFORMAT BAL_END BAL_START CREATION_DATE READING START END TIME LINE_DETAIL (Attribut start, end) V (Attribut start, end) METERING_POINT_DETAIL (Attribut start, end) 12.26.4.3 NUMBERFORMAT Angabe der Zahlenformatierung ds = DecimalSeparator gs = GroupingSeparator gs_enable Folgende Elemente verwenden diese Formatierung: Tabelle 12-20: Elemente für NUMBERFORMAT V VALUE Z_NUMBER CALORIFIC_VALUE SECONDARY_VALUE 12.26.4.4 EMISSION Medienart, folgende Werte sind möglich. Seite 302 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Tabelle 12-21: Elemente für EMISSION Electricity Gas Abstract objects Heat (cost) Other commodities Heat Cold Storable fuels Water (hot) Water (cold) 12.26.4.5 PERIOD - 1 – minütlich 15 – für Viertelstunden Werte 30 – halbstündlich hour – für stündliche Werte day – für Tagesdaten month – für Monatsdaten Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 303 von 384 13 Importkonfigurator Der Importkonfigurator bietet Support für den Import von CSV- und einfachen Excel-Dateien für Lastgangdaten. Die Daten werden direkt an die ecount-Import-API übergeben. Der Importkonfigurator ist im Modul Import-Filter CSV (filter_import/ecount_import_CSV.jar) implementiert. Hinweise: Achtung: Manuell vorgenommene Änderungen in der Properties-Datei (z. B. bei der Definition von File- oder Kanal-Detail) werden beim Speichern über die Oberfläche des Importkonfigurators überschrieben bzw. entfernt! Datumsinformationen werden an die Import-API immer in der Zeitzone MEZ (deutsche Winterzeit) übergeben. Diese Bedingung muss beim internationalen Betrieb berücksichtigt werden. D.h., die Nachverarbeitung muss ggf. die Datumsinformationen von MEZ in eine andere konvertieren, um diese in der Landeszeitzone anzuzeigen. 13.1 Mehrsprachenfähigkeit Mit eCount- 00057288 ist es möglich, den Importkonfigurator auch mit anderen Sprachen zu nutzen, folgende Modulversionen sind dafür notwendig: - filter_import/ecount_import_CSV.jar : 4.0.2.76 filter_import/ecount_import_CSV2.jar : 4.0.2.37 Die Mehrsprachendateien sind sogenannte Resource-Dateien (Dateiendung RES). Diese werden von Robotron ausgeliefert (teilweise jedoch nur mit deutschem Inhalt, welcher durch den Kunden dann übersetzt werden muss). Diese Resource-Dateien werden in einem Ordner hinterlegt, der anschließend über die Config.properties-Datei referenziert wird. Beispiel: Die Resource-Dateien für die englische Sprache liegen unter: *\resources\en\ In der *\config\Config.properties-Datei wird über die Einstellung common.resourceDir der Pfad zu den Ressourcen mitgeteilt (hier common.resourceDir = resources\en). 13.2 Unterschied FILTER=CSV vs. FILTER=CSV2 Die Verarbeitung in der KomA und die Übertragung an ecount kann über zwei Filter realisiert werden. Der CSV-Filter nutzt intern andere Funktionen (fnc_add_lg_str, …) aus PKG_IMPORT_API als der CSV2Filter (fnc_add_lg_tab, …). Der CSV2-Filter muss außerhalb von Europa/Berlin zwingend genutzt werden da dieser Filter die Zeitstempel in einer anderen Zeitzone als „Europa/Berlin“ (nicht konfigurierbarer Default des CSVFilters) an die Import-API übertragen kann. Eine automatische Migration von CSV nach CSV2 ist nicht vorgesehen, die Migration muss manuell erfolgen. Dazu muss ein neuer Filter mit den Importkonfigurator angelegt werden und als Filter-Variante Seite 304 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 muss Zählpunkt/OBIS ausgewählt werden (steht als Synonym für CSV2). Die Filter-Variante für den CSV-Filter heißt Fremd-Kanal-IDs. Abbildung 13-1 Importkonfigurator FILTER=CSV2 Abbildung 13-2 Importkonfigurator FILTER=CSV 13.3 Grundmodell Horizontale Lastgangdaten: Alle Werte eines Tages stehen nebeneinander (Leserichtung von links nach rechts). Es wird eine Zeile gelesen, beim Zeilenende ist der Tag zu Ende und der aktuelle Lastgang wird geschlossen. Auf der nächsten Zeile wird ein neuer Lastgang angelegt. Abbildung 13-3 Anzeige Importkonfigurator horizontales Lastgangdatenmodell Vertikale Lastgangdaten: Die Werte eines Tages stehen untereinander (Leserichtung von oben nach unten). Der Lastgang wird geschlossen wenn ein neuer Tag identifiziert wird (ausgehend von der Messperiode und dem Datum + Uhrzeit) Abbildung 13-4 Anzeige Importkonfigurator vertikales Lastgangdatenmodell Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 305 von 384 13.4 Funktionen Folgende Funktionen stehen beim Importkonfigurator zur Verfügung: - Angaben in [] sind als optional zu verstehen. Dürfen Angaben beliebig oft wiederholt werden, sind diese mit einem Plus + versehen Expression ist ein allgemeiner Datentyp, IntegerExpression/ BooleanExpression sind speziellere Datentypen, die sich überall dort anwenden lassen, wo Expression verlangt wird. (EdisSignExpression kann nur bei den Funktionen verwendet werden, die genau diesen Typ erwarten). Tabelle 13-1: Funktionen Importkonfigurator Funktion Beschreibung cellValue(RelativeNumber column, RelativeNumber row [, Expression defaultValue] [, errorOnMissing]) Wert einer Zeile cellValue Beispiel: cellValue(3,18) -> Wert aus Zeile 18, Spalte 3 cellValue(n,1) -> Wert aus Zeile 1, Spaltenangabe dynamisch cellValue(n,n) ->Zeile- und Spaltenangabe dynamisch column() Spalte des aktuellen Wertes (von 1 gezählt). (IntegerExpression) contains(Expression source, Expression searchString) contains Test, ob source die Zeichenfolge searchString enthält. (BooleanExpression) cutLeft(Expression source, IntegerExpression length) cutLeft Linksseitiges Abschneiden von source auf die Länge length (Expression) cutRight(Expression source, IntegerExpression length) cutRight Rechtseitig Abschneiden von source auf die Länge length (Expression) dateCompare(DateTimeExpression expr1, String operator, DateTimeExpression expr2) expr1 ist das Datum welches mit dem Operator gegen die expr2 geprüft wird. Als operator sind folgende Anweisungen erlaubt: dateCompare • • • • • • > für größer als < für kleiner als >= für großer oder gleich <= für kleiner oder gleich == für gleich != sowie <> für nicht gleich Seite 306 von 384 Funktion Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Beschreibung Besonderheiten: • • • Liefert <expr1> und <expr2> als Ergebnis null so wird true zurückgegeben bei ==, sonst false. Ist <expr1> null und <expr2> not null so wird true zurückgegeben bei != sowie <>, sonst false. Ist <expr1> not null und <expr2> null so wird true zurückgegeben bei > und !=, sonst false. Beispiel: Wert-Status: dynamische Belegung mittels Zeitstempel: (dateCompare(toDate(cellValue(2,2)),>,toDate(cellValue(1,n))) ? "W" : "V") decode(Expression source [, Expression default] [, ( Expression sourceValue, Expression targetValue )]+) Werte konvertieren. (Expression) decode Beispiel: decode(cellValue(n+1,n),"?",("","W"),("W","W"),("X","E" ))) -> Konvertiert eine leere Zeichenkette nach W, X nach E, W bleibt W, trifft keine der Regel zu, wird ? verwendet. edisAA edisAA(IntegerExpression newMessart, EdisSignExpression source) Messart ersetzen. (EdisSignExpression) edisDefKK edisDefKK(IntegerExpression defaultKanal, EdisSignExpression source) Standard-Kanal eintragen. (EdisSignExpression) edisDefM edisDefM(IntegerExpression defaultMedium, EdisSignExpression source) Standardwert für Medium in Edis-Kennzeichen eintragen, falls nicht vorhanden edisDefRR edisDefRR(IntegerExpression defaultRueckstellung, EdisSignExpression source) Standard-Rückstell-Kennziffer eintragen. (EdisSignExpression) edisDefTT edisDefTT(IntegerExpression defaultTarif, EdisSignExpression source) Standard-Tarif eintragen. (EdisSignExpression) edisGG edisGG(IntegerExpression newMessgroesse, EdisSignExpression source Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Funktion Seite 307 von 384 Beschreibung Messgröße ersetzen. (EdisSignExpression) edisKK edisKK(IntegerExpression newKanal, EdisSignExpression source) Kanal ersetzen. (EdisSignExpression) edisM(IntegerExpression newMedium, EdisSignExpression source) edisM edisRR Medium in Edis-Kennzeichen source ersetzen ( -1 : Medium entfernen) . (EdisSignExpression) edisRR(IntegerExpression newRueckstellung, EdisSignExpression source) Rückstell-Kennziffer ersetzen. (EdisSignExpression) edisSign(Expression source) edisSign edisTT source als OBIS-Kennzeichen (vormals als EDIS bezeichnet) interpretieren. (EdisSignExpression) edisTT(IntegerExpression newTarif, EdisSignExpression source) Tarif ersetzen. (EdisSignExpression) endOfFile(CellValueExpression cell) endOfFile Test, ob sich Zelle cell hinter dem Dateiende befindet. (BooleanExpression) endOfLine(CellValueExpression cell) endOfLine Test, ob sich Zelle cell hinter dem Zeilenende befindet. (BooleanExpression) endsWith(Expression source, Expression searchString) endsWith Test, ob source mit Zeichenfolge searchString endet. (BooleanExpression) equals(Expression source, Expression searchString) equals filename() Test, ob source die Zeichenfolge searchString enthält. (BooleanExpression) Dateiname der verarbeiteten Datei - ggf. vorangestellter Name des umschließenden ZIP-Archives mit / abgetrennt. (Expression) fillLeft(Expression source, Expression fillString, IntegerExpression length) fillLeft fillRight Linksseitiges Auffüllen des Ausdrucks source auf die Länge length mit Hilfe der Zeichenfolge fillString. (Expression) fillRight(Expression source, Expression fillString, IntegerExpression length) Seite 308 von 384 Funktion Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Beschreibung Rechtsseitiges Auffüllen des Ausdrucks source auf die Länge length mit Hilfe der Zeichenfolge fillString. (Expression) in(Expression source (, Expression value)*) in Prüfung, ob Wert in Werteliste vorhanden ist. (BooleanExpression) isEmpty(Expression source) isEmpty Test, ob Wert von source leer ist. (BooleanExpression) length(Expression source) length Anzahl von Zeichen von source ermitteln. (IntegerExpression) lowerCase(Expression source) lowerCase source in Kleinbuchstaben umwandeln. (Expression) not(BooleanExpression source) not Negation eines booleschen Ausdrucks. (BooleanExpression) replace(Expression source, STRING oldString, STRING newString) replace Alle Zeichenfolgen oldString in source durch newString ersetzen. (Expression) Beispiel: Entferne alle Plus-Zeichen (+) replace(cellValue(n,n),"+","") replaceAll replaceFirst(Expression source, Expression regex, Expression replacement) Manipulation einer Zeichenkette durch Nutzung von regulären Ausdrücken (siehe Anlage 3). Beispiel: Entferne alle Ziffern a, b und c replaceAll(cellValue(n,n),"[abc]","") replaceFirst replaceFirst(Expression source, Expression regex, Expression replacement) Manipulation einer Zeichenkette durch Nutzung von regulären Ausdrücken (siehe Anlage 3:). Hierbei wird die Verarbeitung nach dem ersten Treffer beendet. row() Zeile des aktuellen Wertes (von 1 gezählt). (IntegerExpression) sheetname () Name des aktuell verarbeiteten Arbeitsblattes. (Expression) startsWith(Expression source, Expression searchString) startsWith Test, ob source mit Zeichenfolge searchString beginnt. (BooleanExpression) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Funktion Seite 309 von 384 Beschreibung subString(Expression source, INTEGER start, INTEGER length) subString Teilzeichenfolge von source ab Position start mit Länge length, start zählt ab 0. (Expression) toDate(Expression source [, dateFormat(Expression format)]) Wandelt eine Zeichenkette (source) in ein Date-Objekt (DateTimeExpression), welches anschließend zum Beispiel in der dateCompare-Methode verwendet werden kann, um. toDate Über das Format kann ein Formatierungsmuster übergeben werden, siehe Anlage 2. Wird kein eigenes Datumsformat spezifiziert wird das globale (Datumsformat und/oder Zeitformat) verwendet. Der Rückgabewert ist eine DateTimeExpression. Beispiel: toDate(cellValue(1,n), dateFormat("yyyy-MM-dd HH:mm")) toDate(cellValue(1,n)) token(Expression source, Expression separators, IntegerExpression position) token Zeichenfolge source an Separatorzeichen separators zerlegen und das Teil an angegebener Position position zurückliefern, position zählt von 0 an, negative Position zählt vom letzten Teil abwärts (-1 ist letztes Token), mehrere aufeinanderfolgende Separatorzeichen werden als ein Separator behandelt. (Expression) Beispiel: token(cellValue(1,n)," ",-1) Leerzeichen dient hier als Separatorzeichen, es wird das letzte Zeichen zurückgegeben. „ABC 123 DEF“ liefert hier also „DEF“ tokenFix(Expression source, Expression separators, IntegerExpression position) tokenFix Wie token, jedoch werden aufeinanderfolgende Separatorzeichen als mehrere Token ausgewertet. (Expression) toNumber(Expression source [, numberFormat(Expression numberformat)]) toNumber Wandelt eine Zeichenkette in eine Zahl. Es ist möglich, ein Zahlenformat zu definieren. trim(Expression source) trim Schneidet Leerzeichen am Anfang und Ende von source ab. (Expression) upperCase upperCase(Expression source) Seite 310 von 384 Funktion Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Beschreibung source in Großbuchstaben umwandeln. (Expression) - - 13.4.1 Boolesche Ausdrücke können mit den booleschen Standard-Operatoren && (AND), || (OR) und ^^ (XOR) verknüpft werden. Integer- und beliebige numerische Ausdrücke können mit den Operatoren <, >, <=, >=, = (oder ==) und <> (oder !=) verglichen werden. Arithmetische Operationen sind derzeit in geringem Umfang möglich (einfache Grundrechenoperationen ohne Klammerung) INTEGER-Konstante: ganzzahlige, vorzeichenlose Zahlen FLOAT-Konstante: vorzeichenlose Zahl mit . als Dezimaltrenner und ohne TausenderTrennzeichen STRING-Konstante: Zeichenfolgen in " ZEICHEN-Konstante: einzelnes Zeichen in ' eingeschlossen BOOLEAN-Konstante: Y , N , true , false RelativeNumber: relative Zahl, z. B. 1, n , n+1, n-1 String-Ausdrücke werden ohne Trennzeichen zusammengefasst, also "ABC" "DEF" ist gleichbedeutend mit "ABCDEF" Datumsformat / Zeitformat Die Formatierungsregeln richten sich nach den Java-Standard (SimpleDateFormat) siehe Anlage 2 13.4.1.1 Datums- und Zeitformat in einer Spalte Ist in einer Spalte sowohl das Datum als auch die Zeit enthalten (z. B. 201302210000;…), kann der Wert wie folgt extrahiert werden. Die ganze Format-Kette muss im „Zeitformat“ hinterlegt werden. Abbildung 13-5: Beispiel: Datum und Zeit im Zeitformat hinterlegen Denn folgende Konfiguration führt zu einem Parser-Fehler, da per Default zwischen Datums- und Zeitformat ein Leerzeichen eingefügt wird. Ist ein Zeitstempel in einer Spalte beispielsweise wie folgt hinterlegt: 2016-06-13T00:00:00.000+02:00 so sieht die Konfiguration wie folgt aus. Wichtig ist, dass bei Datum und Zeitstempel der gleiche Ausdruck hinterlegt ist. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 311 von 384 13.5 Eigenschaften 13.5.1 Zeitzonen Bezüglich der Zeitzonen muss folgendes beachtet werden. Über den Importkonfigurator kann aktuell nur die Zeitzone der zu importierenden Datei festgelegt werden. Sprich mit welcher Zeitzone die Datumswerte interpretiert werden müssen. Wird in der Konfiguration der CSV-Filter verwendet (in der Properties-Datei steht FILTER = CSV), dann werden die Datumswerte in die Zeitzone Europe/Berlin gebracht und an die Import-API (PKG_IMPORT_API) übergeben. Wird der CSV2-Filter verwendet (in der Properties-Datei steht FILTER = CSV2), dann werden die Datumswerte in die konfigurierte Zeitzone aus der user_env.(cmd|sh) gebracht und anschließend an die Import-API übergeben. Der Importkonfigurator bietet Unterstützung für die nachfolgenden Zeitzonen. 13.5.1.1 MEZ Hierbei werden alle Daten mit der Mitteleuropäischen Zeit eingelesen. Die Differenz der Mitteleuropäischen Normalzeit (MEZ) zur Weltzeit UTC beträgt +1 Stunde. 13.5.1.2 UTC Hierbei werden alle Daten in UTC-Zeit eingelesen. Aufgrund der Einfachheit sollte diese Variante, wenn möglich, verwendet werden. 13.5.1.3 Deutschland mit Sommer-/Winterzeit-Umschaltung Hierbei werden die Werte in MEZ und MESZ (Mitteleuropäischen Sommerzeit) eingelesen. Bei der Umschaltstunde treten aktuell Warnungen im Importkonfigurator auf, die ignoriert werden können. Warnung: Allgemeiner Zeitstempelkorrektor konnte Problem zu Wert x auf Blatt y in Zeile z Spalte a nicht beheben, erwarteter Zeitstempel: 30.03.2014 04:00 GMT+2, gefundener Zeitstempel: 30.03.2014 03:00 GMT+2 13.5.1.3.1 Winter-Sommer-Umschaltmethode Standard (fortlaufende Werte) Wenn die Anzahl an Werten nicht mit der max. Anzahl des Tages übereinstimmt wird geprüft, ob 0 Werte bei 2-3 Uhr vorhanden sind. Ist dies der Fall, werden diese (überflüssigen) Werte gelöscht. Stunde 2-3 löschen (falls diese aus 0-Werte(n) besteht) Am Umschalttag wird immer 1 Stunde gelöscht, jedoch nur wenn diese 0-Werte hat. Seite 312 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Werte 2-3 Uhr ignorieren [0200-0245 bei ¼ stündlich] Entfernt IMMER 1 Stunde bei Messperiode kleiner/gleich stündlich und prüft somit auch nicht auf 0Werte. Beispiel: Bei Periode 15 Minuten werden die Werte 02:00 bis 02:45 Uhr entfernt, bei Periode stündlich wird nur die Stunde (2 Uhr) entfernt. (seit eCount- 00047369). Beispiel - Werte 2-3 Uhr ignorieren: Abbildung 13-6: Beispiel Winter-Sommer-Umschaltmethode: Werte 2-3 Uhr ignorieren 13.5.1.3.2 Sommer-Winter-Umschaltmethode Standard (fortlaufende Werte) Es wird davon ausgegangen, dass die Daten in der richtigen Anzahl übermittelt werden, d.h. die Umschaltstunde ist enthalten (also 100 Werte bei ¼-Stunden-Werten am Tag der Umschaltung). Zeitstempel mit A-/B-Markierungen Die Umschaltstunde ist mit A bzw. B (für die Stunde, welche doppelt vorkommt) markiert. 1/4 Stundenwerte (2-3Uhr) im Paar [02:15,02:15,...,03:00,03:00] Dieser Modus wurde in eCount- 00059170 implementiert und wird aktuell nur bei Periode 15 Minuten unterstützt. Der Aufbau der Datei ist dabei wie folgt (Umschaltstunde wird paarweise übermittelt), wobei der erstgenannte Zeitstempel im Paar immer zur ersten Stunde und der 2. zur zweiten Stunde gehört. 6.10.2014 02:00 26.10.2014 02:15 26.10.2014 02:15 26.10.2014 02:30 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 313 von 384 26.10.2014 02:30 26.10.2014 02:45 26.10.2014 02:4 26.10.2014 03:00 26.10.2014 03:00 13.5.1.4 Weitere Zeitzonen Mit eCount- 00052478 können weitere Zeitzonen importiert werden. - Europe/Istanbul - Osteuropäische Zeit Europe/London - Greenwich Zeit Europe/Moscow - Moskauer Normalzeit Europe/Sofia - Osteuropäische Zeit Mit eCount- 00063725 können die Daten zusätzlich noch in UTC+1 bis UTC+5 und UTC-1 bis UTC-5 vorliegen. 13.5.2 Zeitstempel als Intervallbeginn Mit der Option Zeitstempel als Intervallbeginn (in der Properties-Datei TIME_IS_INTERVALBEGIN) kann die Interpretation des ersten Wertes gesteuert werden (z. B. 00:00 statt 00:15). In der KomA wird per Standardeinstellung mit Endzeitstempeln gearbeitet (also der Erste Wert ist 00:15). Beispiel: Spalte A Spalte B Wert 00:00 00:15 5 00:15 00:30 10 Als Zeitstempel würde hier cellValue(1,n) erwartet (also Spalte B). Sollte diese Spalte nicht vorhanden sein, könnte mit cellValue(0,n) und aktiviertem Zeitstempel als Intervallbeginn gearbeitet werden. 13.5.3 Demultiplex (DEMUX_CHANNELS) Für die korrekte Abarbeitung ist ecount_import_CSV.jar Version 4.0.2.59 erforderlich! Die Option Demultiplex von Kanälen ist sinnvoll, wenn z. B. 3 Kanäle in der Datei auftreten, bei denen die Zeilen nach Zeitstempel sortiert sind. Dies bedeutet, dass zuerst alle 00:15-Zeitstempel zu allen Kanälen und dann alle 00:30-Zeitstempel zu allen Kanälen usw. angegangen werden. Damit nicht Tausende Einzelwert-Lastgänge entstehen, entwirrt das Feature die Kanäle wieder (s. Abbildung 13-7). Seite 314 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 13-7: Option Demultiplex von Kanälen 13.5.4 Zeitstempel rückwärts Die Funktion ist im Reiter Allgemein zu finden. In der Properties-Datei heißt die Einstellung REVERSE_TIMESTAMP_ORDER. Diese Funktion ist notwendig, wenn die Zeitangaben in der zu importierenden Datei rückwärts sind, sprich der Wert für 23-0 Uhr ist der erste Wert und 0-1 Uhr der letzte (bei Periode stündlich). Dies ist beispielsweise bei einigen EEX-Formaten der Fall. Abbildung 13-8: Beispiel: Rückwärtige Zeitangaben in einer zu importierenden Datei 13.5.5 Tabulator als Trennzeichen Wird als Trennzeichen kein ;, sondern das Steuerzeichen Tabulator verwendet, muss dies wie folgt angegeben werden. CSV-Trennzeichen: \t Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 13.5.6 Seite 315 von 384 Spracheinstellung Im Reiter Allgemein gibt es das Feld „Sprache“. Dieses Feld ist zum Beispiel bei Monatsnamen relevant, wird jedoch nur ausgewertet wenn der Formatstring für den Monat mehr als 2 Zeichen enthält. Beispiel: Erfolgt die Angabe des Datums z.B. in folgender Form: 10.März.2016 dann muss das Datumsformat wie folgt definiert sein dd.MMMMM.yyyy. Hier greift dann die Spracheinstellung, bei englischen Monatsnamen müsste als Sprache z.B. en_GB gewählt werden. Abbildung 13-9 Spracheinstellungen (Monatsnamen) 13.5.7 Ignoriere Datensätze die älter als x Tage sind Mit eCount- 00052950 gibt es ein Feature, mit dem Daten, die älter als x Tage (ausgehend vom aktuellen Systemdatum) sind, ignoriert werden können. Das Feature ist besonders bei täglichen Perioden sinnvoll, bei denen in den zu importierenden Dateien viel Altlasten enthalten sind. Dies ist beispielsweise beim EEX-Import der Fall, bei dem für jeden Handelstag im Jahr ein neuer Datensatz in der Datei eingefügt wird. Werden die Daten täglich importiert, sind im Dezember in der Datei 90.000 Datensätze vorhanden von denen nur ein Bruchteil noch relevant ist. Im Importkonfigurator befindet sich diese Einstellung auf dem Reiter Format. In der Properties-Datei wird die Einstellung unter dem Namen IGNORE_DATA_OLDER_THAN_X_DAYS abgespeichert. Mit der Einstellung IGNORE_DATA_OLDER_THAN_X_DAYS = 20 werden somit alle Lastgänge ignoriert, die älter als 20 Tage sind (hierbei wird der Startzeitstempel des Lastganges als Vergleichszeitpunkt verwendet). Abbildung 13-10: Option: Ignoriere Daten (älter als x Tage) Die Auswertung dieses Parameters erfolgt erst während des Imports in das System robotron*ecount. Damit ist die Auswirkung des Parameters nicht im Importkonfigurator (GUI) sichtbar. 13.5.8 NVL (NULL und leere Zeichenketten) Eine NVL-Funktion ist nicht implementiert, es kann jedoch über cellValue ein Standardwert angegeben werden (cellValue(spalte,zeile,default)). Eine andere Variante ist die Arbeit mit dem WERT-Dekoder: Dabei ist NULL und leerer String für den Importkonfigurator dasselbe, d.h. eine NULL-Prüfung wird auch über ““ realisiert. Beispiel: Seite 316 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 toNumber((isEmpty(cellValue(n,n)) ? "0" : cellValue(n,n))) Hierbei wird auf eine leere Zeile geprüft, wenn null/leer wird 0 verwendet ansonsten der Wert aus der Zelle. Anschließend wird dieser Wert in eine Zahl konvertiert. Eine weitere Variante ist die Nutzung der decode-Methode: Beispiel: decode(cellValue(n,n),("","0")) Hierbei werden alle NULL-Werte gegen 0 getauscht (s. Abbildung 13-11). Abbildung 13-11: Option: Wert-Dekoder - Methode decode 13.5.9 Warnung bei Zeitumstellung (WARNING.VALUE_DISTANCE) Y/N (Default Y). Der Importkonfigurator prüft die chronologische Reihenfolge der Werte auf Richtigkeit. Dies erfolgt mit dem Ziel, die Datenbank zu entlasten indem falsche Werte schon im Filter erkannt werden. Diese Prüfung hat bei der Zeitumstellung (Sommer-Winter, Winter-Sommer) jedoch teilweise Schwierigkeiten (z. B. wenn die Datumsangaben nicht in der erwarteten Java-Notation vorliegen, für den reinen Anwender jedoch logisch erscheinen – z. B. Sommer-Winterwechsel Sprung von 02:45 auf 02:00 statt auf 03.00). Der Fehlertext wird in folgender Form angezeigt: Zeitstempel x in Blatt y Zeile a Spalte b passt nicht zur Periode p , erwarteter Zeitstempel ist z ; Abweichung w Die Option ist im Reiter Format hinterlegt. Abbildung 13-12: Option: Warnung bei Zeitumstellung Der Parametername dieser Option ist WARNING.VALUE_DISTANCE. Dieser Parameter wird als ERROR (und nicht als WARNING, wie der Parametername vermuten ließe), behandelt. Sprich durch eine eventuell falsche Prüfung wird unter Umständen der gesamte Import unterbrochen. In dem Fall sollte der Parameter auf N gestellt werden. Die Import-API hat umfangreichere und genauere Prüfbedingungen implementiert, die fehlerhafte Daten dennoch erkennen und aussteuern können. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 317 von 384 13.5.10 Abbruch bei Äquidistanzproblemen Hintergrund: Beim Importkonfigurator kommt es zu Unstimmigkeiten beim Import von „falschen“ Werten. Im konkreten Fall wurde die Umschaltstunde nicht in der geforderten Notation übertragen. Es wurden diese Zeitstempel übertragen (26.10.2014 02:00, 26.10.2014 02:00, 26.10.2014 02:15, 26.10.2014 02:15, 26.10.2014 02:30, 26.10.2014 02:30, 26.10.2014 02:45, 26.10.2014 02:45). Erwartet wird jedoch 02:00, 02:15, 02:30, 02:45, 02:00, 02:15, 02:30, 02:45. Der Importkonfigurator ist jedoch so implementiert, das alle Daten versucht werden nach ecount zu importieren. Werden diese Daten anschließend ohne Prüfung verarbeitet kommt es zu Problemen (z.B. weil einige Werte an den Linien falsch überschrieben werden oder ähnliches). Mit der Importkonfigurator Einstellung: WARNING.VALUE_DISTANCE=Y können solche Äquidistanzproblemen angezeigt werden, diese Meldungen werden auch für den ImportDatensatz protokolliert (Tabelle: IMPORT_FILE_ERR). Jedoch müssen auch hier nachfolgende Prozesse diese Fehler-Datensätze auswerten und korrekt darauf reagieren. Es wurde eine neue Einstellung erstellt mit der eine Datei bei Äquidistanzproblemen fehlerhaft abgewiesen wird. Die Einstellung muss in der zugehörigen Properties-Datei der ImportkonfiguratorKonfiguration hinterlegt werden. Die Einstellung heißt CANCEL_IMPORT_BY_VALUE_DISTANCE_ERROR, ist vom Typ Boolean (Y/N) und ist per Default deaktiviert (N). Um die Einstellung zu aktivieren muss folgendes in der Properties-Datei hinzugefügt werden (die mit # beginnenden Zeilen sind Kommentare). ## Bei Äquidistanzproblemen wird die zu importierende Datei mit Fehler abgewiesen ## Y/N, Default N CANCEL_IMPORT_BY_VALUE_DISTANCE_ERROR = Y 13.5.11 Zeitreihen fortsetzen (CONTINUE_TIMESERIES) Diese Funktion ist sinnvoll wenn das Model weder aus horizontalen noch aus vertikalen Lastgangdaten besteht sondern ein Mix daraus ist. Hier gibt es ansonsten Probleme bei der Umschaltstunde. Hintergrund: Der Importkonfigurator braucht für die korrekte Erkennung von Umschaltstunden eine fortlaufende Zeitreihe, die die Werte vor und nach der Stunde enthält. Wird jedoch jede Stunde als einzelne Zeitreihe betrachtet (was der Fall ist bei diesem Modell ohne die Funktion der Fall ist), werden alle separat voneinander betrachtet. Hierbei steht keine Information zu Verfügung um die Umschaltstunde zu ermitteln (z.B. ob beim Sommer-Winter-Wechsel die 1. oder die 2. Stunde wiederholt wird). Dies sorgt beim Import nach ecount anschließend zu Problemen. Über die Funktion Zeitreihen fortsetzen kann das Problem bei dieser Konstellation umgangen werden. Beispiel: In der ersten Spalte steht ein Datum und eine Uhrzeit (volle Stunde). Die nächsten Spalten enthalten dann die 10-min-Werte dieser Stunde. Seite 318 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 13.5.12 Gas-Tagesgrenze 06:00 Bei Gas-Tagen läuft die Zeitgrenze von 6 Uhr bis 6 Uhr (Kalendertag 30.06 01:00 Uhr ist Gas-Tag 29.06 01:00). Um dies den Importkonfigurator mitzuteilen muss im Reiter Bedingungen die Einstellung GasTagesgrenze 06:00 auf Y gestellt werden (intern wird dies als true oder false abgespeichert). Abbildung 13-13 Gas-Tagesgrenze aktivieren (Reiter Bedingungen) Hierbei ist zu beachten das bei separater Datum- und Zeitstempel-Konfiguration der Zeitstempel (= Stundenangabe) nicht mit n angegeben wird sondern fest auf die erste Stundenangabe konfiguriert wird (siehe nachfolgendes Beispiel). Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 319 von 384 Abbildung 13-14 Beispiel Gastag mit separater Tag und Zeit Mit der Angabe Datum: cellValue(3,1) Zeitstempel: cellValue(2,n) Gas-Tagesgrenze 06:00: true Werden für den Gastag zwei Tageslastprofile angelegt. (von 7 bis 0 Uhr von von 0 bis 7 Uhr). Seite 320 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Mit der festen Zeitangabe auf den ersten Stundenwert hingegen: Datum: cellValue(3,1) Zeitstempel: cellValue(2,18) Gas-Tagesgrenze 06:00: true Wird (wie gewünscht) nur 1 Tageslastprofil von 6 bis 6 Uhr angelegt. 13.5.13 Verkettung mehrere Werte Es können auch mehrere Zellen für einen Wert ausgewertet werden. Beispiel: Die FK-ID1 wird aus zwei Zellen gebildet, die beiden Zellen werden durch ein Minuszeichen (-) getrennt. Es gibt hier keinen Verkettungsoperator (+), sodass eine Angabe aller: cellValue(2,3) + "-" + cellValue(n,7) fehlerhaft ist. 13.6 Anlegen einer Konfiguration Zur einfacheren Konfiguration existiert ein separates Modul mit grafischer Benutzeroberfläche. Abbildung 13-15: Grafische Benutzeroberfläche zum Anlegen einer Konfiguration 1/3 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 321 von 384 Die entsprechenden Dateien können auch mit einem Texteditor unter <KomA>/config/import/<FORMAT>.properties direkt bearbeitet werden. Gestartet wird die Oberfläche über das Skript Importkonfigurator.cmd. Hier gibt es die Sicht auf die Datei datenimport.ini, über welche die verknüpften Formate bearbeitet werden können. Um eine neue Formatdefinition zu erstellen, kann die Schaltfläche Neue Format-Konfiguration verwendet werden. Hier geben Sie den Formatnamen, das Importverzeichnis und die Dateimaske an und es wird eine neue Konfiguration für den Importkonfigurator angelegt. Diese ist zuerst mit #! auskommentiert, so dass die Konfiguration zwar vom Konfigurator erkannt, aber im Datenversand erst einmal ignoriert wird. Auf diese Weise kann direkt auf einem aktiven KomA-Verzeichnis getestet werden. Abbildung 13-16: Grafische Benutzeroberfläche zum Anlegen einer Konfiguration 2/3 Abbildung 13-17: Grafische Benutzeroberfläche zum Anlegen einer Konfiguration 3/3 Konfiguration des Formats Zuerst ist festzulegen, welches Dateiformat importiert werden soll. Hier gibt es die Möglichkeit, für den Parameter FILE_FORMAT entweder CSV, EXCEL, EXCEL 2007 oder FIXED_LENGTH für ein Festlängenformat anzugeben. Hinter EXCEL und EXCEL 2007 verbergen sich zwei unterschiedliche Implementierungen, die auf unterschiedlichen API basieren. EXCEL 2007 ist dabei das neuere und sollte ab sofort immer verwendet werden. Seite 322 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abhängig vom gewählten Format, gibt es weitere Formatparameter. Für EXCEL gibt es den weiteren Parameter EXCEL_SHEETS, der bestimmt, welche Arbeitsblätter der Excel-Dateien importiert werden sollen. Ist der Parameter leer, werden alle vorhandenen Arbeitsblätter importiert, ansonsten wird eine komma-separierte Liste mit Namen zu importierender Arbeitsblätter angegeben. Ggf. ist bei dem Format aber auch die Bedingung Bedingung für Sheet-Überspringen sinnvoller. Ist das Ausgangsformat ein normales CSV-Text-Format, sind hierfür einige Grundparameter einzustellen. Zuerst ist das Trennzeichen mit dem Parameter SEPARATOR festzulegen, das standardmäßig ein Semikolon ist. Mit dem Parameter ESCAPE_CHARACTER kann ein Entwertungszeichen für das CSVTrennzeichen angegeben werden. Dies ist standardmäßig ein Backslash (\). Mit dem booleschen Parameter QUOTES (Standardwert N) kann eingestellt werden, ob in doppelte Anführungszeichen eingeschlossener Text bei der Suche nach CSV-Trennzeichen übersprungen werden soll. Es können noch weitere allgemeine Parameter wie TRIM_DATA und ENCODING angegeben werden, deren Bedeutungen den Kommentaren in der mitgelieferten Beispielkonfiguration bzw. der Beschreibung der Felder in der grafischen Konfigurationsoberfläche zu entnehmen sind. Der nächste wichtige Parameter heißt TYPE, der das Grundmodell der CSV-Datei angibt. Dafür gibt es zurzeit (Stand CSV-Import-Version 4.0.2.40) die folgenden Werte: VERTICAL_SINGLE_VALUE: Lastgang-Daten, deren Werte fortlaufend untereinander stehen (ggf. in mehreren Spalten) - HORIZONTAL_SINGLE_VALUE: horizontal bzw. zeilenweise angeordnete Lastgangdaten - HORIZ_DAYVALUES: horizontale Tageswerte auf Stunden-Intervall - VERTIC_DAYVALUES: vertikale Tageswerte auf Stunden-Intervall - HORIZ_VD: horizontal angeordnete Verrechnungs- bzw. Verbrauchsdaten - HORIZ_PROGNOSE: horizontal angeordnete Prognosedaten Diese Modelle legen die Vorgehensweise beim Verarbeiten der weiteren Daten fest. Im Folgenden soll nur auf die Lastgangdaten eingegangen werden, die sich durch ihre Iterationsrichtung zeilenweise oder spaltenweise unterscheiden. - Der Ausgangsparameter heißt hierfür FIRST_VALUE_FIELD und gibt an, welches das obere linke Feld ist, das den ersten Wert enthält. Sämtliche Zeilen- und Spaltenangaben in der Konfigurationsdatei werden bei 1 beginnend gezählt und werden mittels cellValue(<Spalte>, <Zeile>) ausgedrückt. Der nächste Basisparameter heißt VALUE_FIELD_DIMENSION und gibt an, in welchem horizontalen und vertikalen Abstand sich die jeweils benachbarten Wertefelder befinden. Dieser wird fest mit {<horizontaler Abstand>, <vertikaler Abstand>} angegeben, wobei ein horizontaler Abstand von „0“ angegeben werden kann, wenn nur eine Wertespalte existiert. Mit den Parametern DATE_FORMAT und TIME_FORMAT können die Formatmasken für Datums- und Uhrzeitfelder angegeben werden. Stehen beide Angaben in demselben Feld, dann wird die gemeinsame Formatmaske für dieses Feld aus Datumsmaske und Uhrzeitmaske, mit Leerzeichen verkettet, zusammengesetzt. Wird ein spezielles Zahlenformat verwendet, muss dieses mit Hilfe der Parameter NUMBER_FORMAT, NUMBER_FORMAT.DECIMAL_SEPARATOR und NUMBER_FORMAT.GROUPING_SEPARATOR eingestellt werden. Als nächster Schritt folgt die Einrichtung der weiteren Felder, die sich jeweils auf das aktuelle Wertefeld beziehen. Deshalb können hier relative Feldreferenzen angegeben werden. Das Feld für den Wertestatus ist standardmäßig so definiert, dass es sich rechts neben dem zugehörigen Wertefeld befindet. Dazu werden relative Feldkoordinaten mit der Variablen n angegeben. Das Feld rechts neben dem Wertefeld wird also mit cellValue(n+1,n) angegeben. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 323 von 384 Wichtige Feld-Parameter sind zuerst die Parameter für die Kanalzuordnung FIELDS.FK_ID1 und FIELDS.FK_ID2 sowie die Felder für Datum FIELDS.DATE, Uhrzeit FIELDS.TIME, Wert-Status FIELDS.STATUS und FIELDS.PERIODE für die Messperiode. Beispiel: Definiertes CSV-Format mit Abbruchbedingung Abbildung 13-18: Beispiel: Definiertes CSV-Format mit Abbruchbedingung - Format Abbildung 13-19: Beispiel: Definiertes CSV-Format mit Abbruchbedingung - Allgemein Seite 324 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 13-20: Beispiel: Definiertes CSV-Format mit Abbruchbedingung - Bedingungen 13.7 Import-File- und Kanal-Detail Es ist möglich, über die Properties-Datei (es gibt keine GUI-Unterstützung) Details für Import-File (Tabelle: IMPORT_FILE_DETAILS) und Kanäle (Tabelle: KANAELE_DETAILS) anzulegen. Die Angabe erfolgt nach der Notation FileDetail.<Bedeutung> = <Wert>. Beispiel: Aus der Spalte 2 soll der Wert der ersten Zeile (ist ein Datum) als Import-File-Detail Berechnungsdatum bzw. als Kanal-Detail Berechnungsdatum abgelegt werden. Die zugehörige Konfiguration in der Properties-Datei ist folgende: FileDetail.Berechnungsdatum = cellValue(2,1) KanalDetail.Berechnungsdatum = cellValue(2,1) 13.8 Beispiele 13.8.1 Einheit extrahieren Eingangswerte: - Lufttemperatur (°C) Globalstrahlung - Meteosat (Wh/m²) Sonnenscheindauer (min) Windgeschwindigkeit (m/s) Variante 1: Decode (Nachteil: recht starr, Eingangswerte dürfen sich nicht ändern) decode(subString(cellValue(n,1),0,5),"kW",("Luftt","°C"),("Windg","m/s "),("Sonne","min"),("Globa","Wh/m²")) Variante 2: token und replace replace(token( cellValue(n,1), "(", -1),")", "") Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 325 von 384 token( cellValue(n,1), "(", -1) liefert: °C), Wh/m²), min) und m/s) replace(token(cellValue(n,1),"(",-1),")","") entfernt das letzte ")" 13.8.2 Werte multiplizieren (*1000) Bei Zahlen mit mehr als 7 Nachkommastellen müssen Werte ggf. mit 1000 multipliziert werden. Die Realisierung kann über den Wert-Dekoder stattfinden. toNumber(cellValue(n,n))*1000 13.8.3 Status in Abhängigkeit zu Feldinhalt bestimmen Anforderung: Eine CSV-Datei nur mit Werten (keine Status). Per Default soll W (wahrer Wert) als Status übernommen werden. Jedoch existiert die Besonderheit, dass keine Zahl als ## abgebildet wird und diese Zahl mit dem Status N (Nicht vorhandener Wert) hinterlegt werden soll. Lösung: Bei Wert-Status: (contains(cellValue(n,n),"##") ? "N" : "W") 13.8.4 0-Wert anhand von Codierungen ermitteln Anforderung: Eine CSV-Datei nur mit Werten, jedoch werden 0-Werte als ## übergeben, dieser Wert muss als 0-Wert interpretiert werden. Lösung: Bei Wert-Dekoder: decode(cellValue(n,n),("##","0")) 13.8.5 0-Werte mit Status N Fehlende Werte werden mit „-„ übergeben, diese Werte sollen als 0 interpretiert werden, zusätzlich soll aber auch der Status der Werte in ecount N sein, für alle gültigen Werte soll W verwendet werden. Bei Wert-Dekoder: decode(cellValue(n,n),("-","0")) Beim Wert-Dekoder gibt es keinen Default, wenn also „-„ in der Zelle auftaucht wird „0“ genommen, sonst wird immer der Wert aus der Zelle verwendet. Seite 326 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Bei Wert-Status: decode(cellValue(n,n),"W",("-","N")) W ist der Default-Wert, wenn jedoch „-„ in der Zelle auftaucht wird N verwendet 13.8.6 Abbruchbedingung nach x Zeilen Über die Funktion row() kann die aktuelle Zeilenzahl ermittelt werden (diese beginnt bei 1). Beispiel: Abbruch beim Erreichen der 19. Zeile: row()==19 Beispiel: Abbruch, wenn die Zeilenanzahl größer 20 ist: row()>20 13.8.7 Bei Zahlen mit führendem Plus (+) kommt es zum Fehler (Unparsable Number) Positive Zahlen dürfen beim Konvertieren in eine Zahl in Java kein führendes Vorzeichen (+) besitzen. Das Vorzeichen kann einfach entfernt werden, dazu muss beim Wert-Dekoder Folgendes definiert werden: replace(cellValue(n,n),"+","") Negative Zahlen dürfen/müssen das Vorzeichen (-) besitzen! 13.8.8 Stündliche Gas-Werte ohne Uhrzeit (nur Datum) mit 6-Uhr-Grenze Folgende Zeile soll importiert werden: ID; 06.08.2015; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000; 1000 Es handelt sich hierbei um ein horizontales Lastgangmodell, der Werteabstand beträgt {1,1} und das erste Wertefeld ist bei cellValue(3,1). Eine besondere Konfiguration kommt dem Datums- und Zeitformat zugute, hierbei muss manuell die Zeit (bei Gas also der 6 Uhr-Wert) spezifiziert werden. Abbildung 13-21 Ausschnitt Importkonfigurator (Reiter Allgemein) Da es sich um Gas-Werte handelt muss im Reiter Bedingung die Gas-Tagesgrenze 06:00 aktiviert werden, andernfalls wird der Lastgang bei 0 Uhr gesplittet. Abbildung 13-22 Ausschnitt Importkonfigurator (Reiter Bedingung) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 13.8.9 Seite 327 von 384 Doppelte Anführungszeichen ignorieren Beispiel-Datei: "KUNDE_ID";"KUNDE_NAME";"KAM_ID";"KAM_NAME" "015";""Hausmeister GmbH"";"XYZ";"Max, Mustermann" Diese Anführungszeichen können über folgende Konfiguration eliminiert werden. inputFormat( .. quotes = true .. ) 13.8.10 Verwendung von toDate und dateCompare Im konkreten Fall werden in einer Datei aktuelle Werte (wahre Werte) und vorläufige Werte (Prognosen) geliefert. Im ecount sollen die Werte mit den richtigen Staus (W = wahrer Wert) und (V = vorläufiger Wert) importiert werden. Ausgehend von den Beispiel (Abbildung 13-23, Abbildung 13-24) gibt die Zelle B2 das Referenzdatum an. Alle Werte in der Datei die vor diesen Datum liegen sind wahre Werte, alle die nach dem Datum liegen sind Prognosedaten. Die Werte sind als Startdatum zu interpretieren, daher muss die Option „Zeitstempel als Intervallbeginn“ aktiviert sein. Abbildung 13-23 Beispiel-Datei (Start) - Importkonfigurator Abbildung 13-24 Beispiel-Datei (Ende) – Importkonfigurator Seite 328 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Die Konfiguration bezüglich der Zeitstempel sieht wie folgt aus, hierbei sind das Zeitformat und der Zeitstempel als Intervallbeginn die entscheidenden Faktoren. Die vollständige Anweisung für den „Wert-Status“ ist folgende: (dateCompare(toDate(subString(replace(cellValue(2,2),"\"",""),0,14) "00"),>,toDate(cellValue(1,n))) ? "W" : "V") Erklärung: • Da in B2 der Wert mit Anführungszeichen enthalten ist, werden diese erstmal entfernt: replace(cellValue(2,2),"\"","") • Die Konfiguration interpretiert aktuell die Zeitstempel als „Zeitstempel als Intervallbeginn“. Der Zeitstempel „11.05.2016 18:00“ ist also die Stunde von 18 bis 19 Uhr. Wenn man den 18 Uhr Wert nun mit 18:33 vergleicht wäre der 18 Uhr Wert (Anfangszeitstempel) immer kleiner. Möchte man jedoch eher die 19 Uhr vergleichen (Endzeitstempel) machen wir einfach den Trick indem wir das Referenzdatum auf die Stunde reduzieren und anschließend mit dem Operator „größer als“ (>) arbeiten. Mit subString(replace(cellValue(2,2),"\"",""),0,14) "00" wird die Zeichenkette in B2 auf diesen Wert geändert: 2016-05-11 18:00 • Mittels „toDate“ werden die Datum-Zeichenketten nun zu „Date“-Objekten konvertiert die anschließend miteinander verglichen werden können (mit den Zeichenketten allein ist das nicht möglich). Da alle Datum-Zeichenketten die gleiche Formatierung aufweisen (nämliche die im Zeitformat spezifizierte) brauch bei „toDate“ kein extra Format angegeben werden. Das Vergleichsdatum aus B2 wird wie folgt zum Date-Objekt: toDate(subString(replace(cellValue(2,2),"\"",""),0,14) "00") In Spalte A wird das Datum so erstellt: toDate(cellValue(1,n)) • Die Date-Objekte können mittels dateCompare verglichen werden. Solange die Angabe in B2 größer ist als in Spalte A soll der Wertstatus ein „W“ (wahrer Wert) sein, ansonsten ein „V“ (vorläufiger Wert = Prognose). Um einen Vergleich durchführen zu können muss der Ausdruck dateCompare(…) geklammert werden, anschließend kann mittels „?“ nach „true“ gefragt werden, der „false“-Zweig wird mittels „:“ eingeleitet. Nach den erfolgreichen Import der Datei sehen die Daten im Import-Viewer wie folgt aus: (bis 18 Uhr haben die Werte den Status W, danach den Status V) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 329 von 384 Abbildung 13-25 eCount-Ansicht des Import mittels dateCompare 13.8.11 Zählvariable (1 … n) statt Uhrzeit [decode-Alternative] Es gibt Excel-formate die haben eine bestimmte Periode (z.B. viertelstündlich) und ein Datum. Die Uhrzeiten sind nur von 1 bis n nummeriert. Abbildung 13-26 Beispiel: CSV-Datei mit Zählvariable Seite 330 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Anstatt dies über ein umfangreiches decode (1 zu 0015, 2 zu 0030, … wandeln) kann auch ein Feature zur automatischen Bestimmung der Zeit verwendet werden. Ausgehend vom obigen Beispiel ist das Datum fest in Zeile 1, Spalte 2 zu finden. Der Zeitstempel wird zu einer Zahl gewandelt und anschließend mit 15 (da es sich hier um viertelstündliche Werte handelt) multipliziert. Im Zeitformat muss anschließend das Format für die Stunde (mm) angegeben werden. Datum: cellValue(2,1) Zeitstempel: toNumber(cellValue(1,n))*15 Datumsformat: dd.MM.yyyy Zeitformat: mm Abbildung 13-27 Konfiguration (Ausschnitt) CSV-Datei mit Zählvariable 13.9 Restriktion bezüglich Excel-Dokumenten 13.9.1 Export und anschließender Import Es gibt Systeme, die aus ecount mittels Excel-Reports Daten exportieren (siehe Kapitel 12.24) und diese anschließend über den Importkonfigurator wieder importieren möchten, ohne dass die Excel-Datei mit Microsoft Excel geöffnet wurde. Dies ist möglich, aber es muss folgender Sachverhalt beachtet werden: Sobald für den Excel-Report ein Excel-Template genutzt wird welches Formeln enthält und mit optimistischer Formelaktualisierung gearbeitet wird, kann nicht garantiert werden dass der Import 100% funktioniert! Technischer Hintergrund: Der Export erfolgt mit der Option optimistische Formelaktualisierung (Maske Excel Template > Reiter Report > Kontrollfeld Optimistisch aktualisieren). Die Excel-Datei wird anschließend nicht manuell mit MS Office geöffnet sondern direkt importiert. Die in der Excel-Datei definierten Formeln können von Apache POI nicht aufgelöst werden. Durch die optimistische Formelaktualisierung wird jedoch kein Fehler beim Export erstellt sondern es wird in der Excel-Datei eine Option gesetzt, welche die Neuberechnung der Formeln beim Öffnen der Datei im Microsoft Excel startet. Dadurch, dass die Datei jedoch nicht manuell geöffnet wurde, sind die Formeln auch nicht berechnet worden. Beim Import wird die gleiche Bibliothek (Apache POI) verwendet, auch hier können die Formeln nicht berechnet werden. Damit kommt es zu dem Fehler, dass der Export zwar einwandfrei funktioniert, der Import jedoch scheitert. Mögliche Lösungsvarianten: Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 - Seite 331 von 384 Verzicht der Formeln im Template Es muss sichergestellt werden, dass vor dem Import die Excel-Datei mit MS Excel geöffnet wurde, damit die Neuberechnung der Formeln aktiviert wird. Die Restriktion bezüglich der Formeln in Excel-Dokumenten besteht leider und kann von Robotron nicht beeinflusst werden. Eine 100%-ige Kompatibilität von Excel-Dokumenten in der Programmiersprache Java (auf dem die KomA basiert) ist nicht möglich und kann auch nicht gewährleistet werden. 13.9.2 Problem mit Datumsformaten Beim manuellen Erstellen einer Excel-Datei mit einer Datumsspalte – die Datumsspalte wird dabei einfach gezogen, sodass Excel weitere Werte für das Datum automatisch anlegt – kann es zu folgenden Problemen kommen. Es kommt zu einer Warnung: Inexact timestamp x .005 from Excel-File. Beim Zusammenspiel zwischen Apache POI und Excel kommt es zu einen Problem. Die Datumsinformationen sind nicht exakt und müssen gerundet werden, die Warnung signalisiert diesen Fehlstand. Leider ist dafür aktuell keine Lösung vorhanden, die Warnungen müssen einfach ignoriert werden. Des Weiteren kann es, in Abhängigkeit der definierten Importkonfiguration bezüglich der Zeitzone, zu schwerwiegenden Problemen bei der Zeitumstellung (Winter-Sommer / Sommer-Winter) kommen obwohl die Excel-Datei fehlerfrei aussieht. Eine mögliche Lösung ist die Kontrolle der Datumsspalte und die Änderung des Formates auf Text. Anstelle von Benutzerdefiniert oder Datum also Text nutzen (Achtung: unter Umständen nimmt Excel eine Konvertierung des Dateninhaltes vor, der angepasst werden muss). Damit wird vom Excel kein Date-Objekt mehr geliefert, sondern eine Zeichenkette, die im Importkonfigurator korrekt in Abhängigkeit zur Konfiguration behandelt werden kann. Seite 332 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 13-28 Dialog Zellen formatieren 13.10 Probleme/Lösungen 13.10.1 Eigentumsnummer beim Speichern der Konfiguration erforderlich Mit eCount- 00058988 wurde eine Prüfung auf die Angabe einer Eigentumsnummer implementiert. Hintergrund: Wird im Importkonfigurator das Feld Eigentumsnummer nicht gefüllt, so werden Warnungen ins Tagebuch geschrieben. Das Problem ist aber, dass der Anwender aus der Meldung im Tagebuch nicht darauf schließen kann, dass und in welcher Filter-Konfiguration ein Fehler aufgetreten ist. Beim Import (Filter CSV) wird nun eine Default-Eigentumsnummer (abgeleitet aus der FKID1, jedoch max. die ersten 20 Zeichen) gebildet wenn keine Eigentumsnummer vorhanden ist. Dies verhindert Warnungen im Tagebuch die keiner Datei beziehungsweise Konfiguration zugeordnet werden können. Damit werden Warnungen aus dem Tagebuch in den Importkonfigurator verschoben, was die Zuordnung von Fehler und Ursache deutlich einfacher gestaltet. Lösung: Die Eigentumsnummer (Kanal-Gruppe) sollte mit einen sinnvollen Eintrag befüllt werden. Die Eigentumsnummer kann jedoch maximal 20 Zeichen beinhalten, intern ist im Filter automatisch eine Limitierung eingebaut wobei die ersten 20 Zeichen der Übergabezeichenkette verwendet werden. Ein geeigneter Wert können beispielsweise die letzten 20 Zeichen des MeteringCodes sein. Benötigt man die Eigentumsnummer nicht bzw. hat keinen sinnvollen Wert parat kann einfach die Konfiguration der FKID-1 verwendet/kopiert werden! Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 333 von 384 13.10.2 Anzeige im Importkonfigurator stimmt nicht mit der Anzeige im eCount überein Bei Periode täglich kommt es im StandardImport Viewer (MF_SIEC) zu einer Unschönheit. Unter Startzeitstempel wird der rechtsbündige Wert angezeigt, das ist bei Start-Datum 16.09.2015 und Periode täglich der 17.09.2015. In der Spalte Datum steht in dem Fall der gleiche Wert drin, hier muss dieser Startzeitstempel also ignoriert werden! Abbildung 13-29 StandardImport Viewer - Unschönheit bei Periode täglich 13.10.3 Datenbank-Fehler / Übermittlung von KENNUNG_ORIG Der DB-Fehler kann unter Umständen auch eine ganz andere Ursache haben! Beim Import kommt es zu einer Fehlermeldung deren Ursache nicht erkennbar ist. Datenbank-Fehler: Zu großer Wert für Spalte eingefügt: "x": java.sql.SQLException (at de.robotron.ecount.database.PreparedStatementImpl:269/de.robotron.ecount.db_ifc.PKG_IMPORT_AP I_Impl:1616/de.robotron.ecount.db_ifc.PKG_IMPORT_API_Wrapper:273/de.robotron.ecount.db_ifc.PK G_IMPORT_API_Impl:48/de.robotron.ecount.dataimport.xml.EcountDatenHandler:1941) Hintergrund: Das Problem tritt bei der Übermittlung des Wertes KENNUNG_ORIG im Typ TY_IMPORT_API_LG_WERT auf. Dieser Typ wird in pkg_import_api.fnc_add_lg_tab_k übermittelt. Der Wert KENNUNG_ORIG ist mit VARCHAR2(10) definiert. Im Importkonfigurator ist zusätzlich ein Mapping für den Wert-Status definiert der eine decode-Funktion enthalten muss [decode(cellValue(n,n),"W",("","N"))]. Dadurch wird implizit der Wert (im Beispiel aus cellValue(n,n)) als KENNUNG_ORIG verwendet. Der Inhalt dieser Zellen ist größer als 10 Zeichen, was die Ursache des Problems ist. Das Problem tritt weiterhin nur bei der Nutzung von CSV2 zu, da hier die Übergabe an die Datenbank über den Typ TY_IMPORT_API_LG_WERT stattfindet, was bei CSV nicht der Fall ist. Lösung: Die Übermittlung von KENNUNG_ORIG kann per Einstellung deaktiviert werden. Die Einstellung heißt IMPORT_ORIGINAL_STATUS und kann die Werte N oder Y tragen, der Default ist Y. Diese Einstellung kann nicht mit den Importkonfigurator ausgewählt werden sondern muss manuell in die Properties-Datei eingetragen werden. Seite 334 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Bei mehr als 10 Zeichen für KENNUNG_ORIG wird der Wert nun automatisch auf 10 Zeichen gekürzt. 13.11 Besondere Import-Möglichkeiten (CSV2) Über den CSV2-Importfilter sind spezielle Importmöglichkeiten vorhanden die in diesen Kapitel näher beschrieben werden. Für diese Varianten gibt es keine Konfigurationsmöglichkeit, die Anpassung/Erstellung der Properties-Dateien muss manuell über einen Editor geschehen. 13.11.1 Import von Zählerständen aus CSV-Datei Ausgangspunkt ist folgende CSV-Datei ZAEHLPUNKTBEZEICHNUNG;OBIS;ERLEDIGTDATUM;Wert DE00XXXXXXX4400000000000000XXXXXX;1-1:1.8.0;04.12.2014;2634,21 DE00XXXXXXX4710000000000001XXXXXX;1-1:2.8.0;04.12.2014;3636 DE00XXXXXXX6900000000000001XXXXXX;1-1:1.8.0;21.11.2014;4711 DE00XXXXXXX9700000101300000XXXXXX;1-1:1.8.0;04.12.2014;777777 Die zugehörige Properties-Datei (z.B. CSV_ZST.properties) hat folgenden Aufbau: Extensions = csv FILTER = CSV2 DATENQUELLE = CSV ENCODING = ISO-8859-1 TYPE = ZST SEPARATOR = ; VTP_ID_MANDANT=x DATE_FORMAT = dd.MM.yyyy TIME = "00:00" NUMBER_FORMAT = #####0.### VALUE_FIELD_DIMENSION = {0,1} MET_CODE = cellValue(1,n) OBIS_CODE = cellValue(2,n) DATE = cellValue(3,n) FIRST_VALUE_FIELD = cellValue(4,2) EINHEIT = "kW" Wichtig ist über die Einstellung Filter wird der Verweis auf den CSV2-Importfilter hergestellt, die zu importierende Datei besitzt als Kodierung ISO-8859-1 und wird über ENCODING definiert. Dass es sich um Zählerstände handelt wird über TYPE = ZST mitgeteilt. Da weder ein Mandant noch eine Einheit in der Datei vorkommen werden Standardwerte hinterlegt. Der erste Wert ist in der zweiten Zeile, in der 4 Spalte, dies muss mittels FIRST_VALUE_FIELD = cellValue(4,2) definiert werden. Der Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 335 von 384 nächste Wert befindet sich in der gleichen Spalte eine Zeile drunter, die Konfiguration wird mittels VALUE_FIELD_DIMENSION = {0,1} vorgenommen. In der ersten Spalte steht der Zählpunkt MET_CODE = cellValue(1,n) gefolgt von der OBIS OBIS_CODE = cellValue(2,n), das Ablesedatum ist in der dritten Spalte mit der Datumsformatierung dd.MM.yyyy (siehe DATE_FORMAT) hinterlegt. Das Datum wird inklusive Uhrzeit erwartet (ergibt sich aus DATE und TIME), daher muss mit einen Trick TIME = "00:00" eine DefaultUhrzeit mitgegeben werden. Nach dem Import der Datei werden die Daten im StandardImport Viewer (MF_SIEC) wie folgt angezeigt. Abbildung 13-30 Anzeige der Zäherstand-CSV-Datei im StandardImport Viewer In der nachfolgenden Tabelle sind die für einen Zählerstand möglichen Attribute aufgelistet die letztendlich nach ecount (Import-Tabelle: IMPORT_VB) importiert werden können. Tabelle 13-2: Import von Zählerständen aus CSV-Datei – mögliche Attribute Einstellung in PropertiesDatei OBIS_CODE EINHEIT WANDLERFAKTOR Beschreibung Feld-Referenz '{x,y}' für OBIS-Code (p_edis_kennz in pkg_import_api. prc_add_verbrauchsdaten3) Feld-Referenz für die Einheit, Defaultwert möglich z.B. "kW" (p_einheit in pkg_import_api. prc_add_verbrauchsdaten3) Feld für Wandlerfaktor (nur für Primärwerte!) (p_wdl_faktor in pkg_import_api. prc_add_verbrauchsdaten3) VORKOMMASTELLEN Feld für Anzahl Vorkommastellen bei Zählern NACHKOMMASTELLEN Feld für Anzahl Nachkommastellen bei Zählern STATUS ORIG_STATUS Feld-Referenz für Wert-Status (p_flag in pkg_import_api. prc_add_verbrauchsdaten3) Feld-Referenz für Original-Wert-Status (p_original_status in pkg_import_api. prc_add_verbrauchsdaten3) Seite 336 von 384 Einstellung in PropertiesDatei BRENNWERT Z_ZAHL BWZ_VON P_BWZ_VON P_BWZ_BIS Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Beschreibung Feld-Referenz für Brennwert, Defaultwert möglich z.B. 0 (p_brennwert in pkg_import_api. prc_add_verbrauchsdaten3) Feld-Referenz für Zustandszahl, Defaultwert möglich z.B. 0 (p_z_zahl in pkg_import_api. prc_add_verbrauchsdaten3) Feld-Referenz für Zustandszahl (p_von in pkg_import_api. prc_add_verbrauchsdaten3) Beginn des Brennwertzeitraumes (p_bwz_von in pkg_import_api. prc_add_verbrauchsdaten3) Ende des Brennwertzeitraumes (p_bwz_bis in pkg_import_api. prc_add_verbrauchsdaten3) Feld-Referenz für Zählwerkskennzeichen ZAEHLWERKSKENNZEICHEN SCHWACHLASTKENNZEICHEN (p_zaehlwerkskennung in pkg_import_api. prc_add_verbrauchsdaten3) Feld-Referenz für Schwachlastkennzeichen (p_schwachlastfaehig in pkg_import_api. prc_add_verbrauchsdaten3) TIME Feldreferenz für Zeitstempel zum aktuellen Werte-Feld, Defaultwert möglich z.B. "00:00" DATE Feldreferenz für Datum zum aktuellen Werte-Feld Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 337 von 384 14 EXCEL Reports Für die Abarbeitung der Excel-Reports gibt es zwei Varianten. Einmal kann die Verarbeitung automatisch per Export-Auftrag über die KomA realisiert werden (Exportfilter 12.14). Bei der anderen Variante kann der Anwender über die Oberfläche den Report direkt starten und das Ergebnis auf seinen Rechner herunterladen. Bei der zweiten Variante wir der Excel-Report direkt auf den Applikations-Server (dem Weblogic-Server) ausgeführt und das Ergebnis anschließend an den Client-Rechner übertragen. 14.1 Besonderheiten Die Excel-Reports werden nicht über Microsoft Excel, sondern über eine 3rd Bibliothek in Java Apache POI generiert. Daher sind keinerlei extra Lizenzkosten oder Installationen auf dem KomA-Server notwendig. Hinweise: Apache POI ist damit ein Nachbau der Excel-Funktionalität in Java und aus diesem Grund nicht 100% mit Microsoft Excel vergleichbar. So werden beispielweise nicht alle Formeln von POI unterstützt. Selbst wenn einzelne Formeln unterstützt werden ist es möglich, dass eine Kombination verschiedener Formeln wiederum nicht unterstützt wird. Es wird daher immer geraten, die Funktion optimistisch aktualisieren zu verwenden. Das Problem kann im ecount umgangen werden, indem in der Maske Excel Template (MF_EXR_TPL) die Funktion optimistisch aktualisieren für den Report aktiviert wird. Damit wird bei nicht unterstützen Formeln die Abarbeitung nicht unterbrochen. Zusätzlich wird dem Excel-Dokument ein Flag mitgegeben, mit dem Microsoft Office beim Öffnen dieses Dokumentes eine Neuberechnung aller Formeln durchführt. Damit ist bei der Nutzung von Microsoft Office das Problem behoben. Es kann nicht garantiert werden, dass die Funktionalität auch von OpenOffice oder LibreOffice oder anderen Tools unterstützt wird. 14.2 Restriktionen bezüglich Spalten und Zeilen Die Excel-Format 2003 Restriktion besteht auch weiterhin für das Excel-Format 2007/2010. Die maximale Anzahl an Spalten ist 256, die maximale Zeilenanzahl ist 65536. Ursache für diese Einschränkung sind die zugrundeliegende Implementierung (in Apache POI und deren Abhängigkeiten) und der Verbrauch an Hardwarespeicher. Sollen Excel-Dateien mit einer größeren Anzahl an Spalten oder Zeilen exportiert werden, kann dies über die Implementierung eines speziellen (neuen) Filters realisiert werden. Mit eCount- 00065023 (R 5.2 lfd. Nr. 1197) wurden die Grenzen beim Export über die KomA erweitert. Dies geschieht durch Abfrage des zur Verfügung stehenden Arbeitsspeichers (für den Datenversand). In der folgenden Tabelle ist aufgeschlüsselt wie viele Spalten und Zeilen maximal zur Verfügung stehen. Seite 338 von 384 Zur Verfügung stehender Arbeitsspeicher Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Max. Anzahl an Zeilen Max. Anzahl an Spalten < 4.000 MB 65.536 256 > 4.000 MB 200.000 300 > 8.000 MB 500.000 500 > 12.000 MB 600.000 1.000 > 16.000 MB 1.048.576 2.000 Die Einrichtung eines Excel-Reports-Versand-KomA ist im Kapitel 3.3.5.5 beschrieben. Achtung: Da Java intern selbst Arbeitsspeicher benötigt, wird die maximal Anzahl an Zeilen nicht bei –Xmx16g sondern erst bei –Xmx17g zur Verfügung stehen! Es können auch weiterhin OutOfMemory-Fehler auftauchen da jeder Excel-Report unterschiedlich ist bezüglich der zu exportierenden Daten und damit auch unterschiedlich viel Arbeitsspeicher benötigt. Es kann also nicht sichergestellt werden, dass bei 14 GB Arbeitsspeicher auch wirklich 600.000 Zeilen mit 1.000 Spalten exportiert werden können. Aus diesem Grund wurde die maximal Anzahl an Spalten auch nur auf 2.000 erhöht (Excel selbst kann bis zu 16.384). Tritt ein OutOfMemory-Fehler auf gibt es nur 2 Optionen: 1. Verringerung des Umfangs des Excel-Reports 2. Erhöhung des Arbeitsspeichers für den KomA-Datenversand-Prozess. 14.3 Versionsübersicht abfragen Die Versionsabfrage kann über einen kleinen Trick aus der Oberfläche (MF_EXR_TPL) heraus geöffnet werden. Dazu muss ein Report ausgewählt werden, über die Schaltfläche „Report erzeugen“ öffnet sich ein kleiner Dialog indem man rechts oben ein Doppelklick tätigen muss. Daraufhin öffnet sich ein weiteres Informationsfenster indem unter anderem die Versionen der EXCEL_REPORTS.jar ausgegeben werden. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 339 von 384 Abbildung 14-1 Excel Reports: Versionsübersicht abfragen 14.4 EXCEL Reports über eCount-Oberfläche Wird der Report direkt über die Oberfläche aufgerufen (aktuell existiert nur eine Forms-Oberfläche) wird der Report direkt gestartet. Bei Forms wird auf den Applikation Server dafür ein neuer Java-Prozess initialisiert. Dieser Java-Prozess ist unabhängig von dem Java-Prozess des Applikation Servers! Bei der Erstellung dieses Java-Prozesses wurde aktuell die Default-Sprache des Betriebssystems verwendet. Mit diesen Spracheinstellung werden vom Oracle JDBC-Driver automatisch die NLSParameter (NLS_LANGUAGE, …) initialisiert. Unterscheidet sich jedoch die Betriebssystem-Sprache des Weblogic-Servers von den Spracheinstellungen des Nutzers in ecount kommt es zu ungewünschten Resultaten (z.B. bei der Ausgabe von Monatsnamen per SQL). Mit eCount- 00058594 wurde eine neue Einstellmöglichkeit für die EXCEL-Sprache implementiert. Es gibt dafür eine neue globale Einstellung (EXR_NLS_LANGUAGE - Spracheinstellung für Excel Reports) der per Default auf GERMAN steht und benutzerscharf administriert werden kann. Abbildung 14-2 Globale Einstellung EXR_NLS_LANGUAGE - Spracheinstellung für Excel Reports Mit dieser Einstellung wird anschließend der Java-Prozess gestartet und die NLS-Einstellungen entsprechend gesetzt. Unterstütz werden folgende Sprachen (GERMAN, AMERICAN, ENGLISH, NORWEGIAN, RUSSIAN, TURKISH, SPANISH, FRENCH, ITALIAN, BULGARIAN). Seite 340 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 14.5 Logging der EXCEL-Reports in der GUI Den folgenden Inhalt nach „/webapps/<server>/applserv/wforms/ log4j.xml“ kopieren (Datei anlegen). <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true"> <!--====================================================================--> <!-- Appenders --> <appender name="FILE" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="/webapps/ece11ef11r2/applserv/java_server/EXCEL_REPORTS.log"/> <param name="Append" value="true"/> <param name="MaxFileSize" value="5000KB"/> <param name="MaxBackupIndex" value="15"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ISO8601} %t %-5p %c{2} - %m%n"/> </layout> </appender> <!--====================================================================--> <logger name="test.FormsReportBuilder" level="debug" additivity="false"> <appender-ref ref="FILE" /> </logger> <logger name="test.FormsReportStreamBuffer" level="debug" additivity="false"> <appender-ref ref="FILE" /> </logger> <logger name="test.FormsReporter" level="debug" additivity="false"> <appender-ref ref="FILE" /> </logger> <category name="test"> <priority value="DEBUG"/> </category> <!--===================================================================--> <!-- Appender Assignments --> <root> <priority value="info"/> <appender-ref ref="FILE"/> </root> </log4j:configuration> Der wforms-Ordner ist der Ordner in der die Forms-GUI liegt und in der der Java-Prozess für den Excel-Report gestartet wird, daher sucht das Log4J in diesem Ordner nach der Konfiguration. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 341 von 384 In der log4j.xml ist besonders der Pfad (Zeile 7) relevant, dieser muss angepasst werden! (da ece11ef11r2 ein WLS bei Robotron ist). Abbildung 14-3 Excel Reports: log4j.xml Je nach eingestelltem Pfad sollte die Log-Datei (nachdem das ecount neugestartet wurde und ein ExcelReport über die GUI exportiert wurde) auftauchen. Im Beispiel wurde die Datei EXCEL_REPORTS.log im Unterordner java_server abgelegt. Abbildung 14-4 Bsp.-Verzeichnis für EXCEL_REPORTS.log 14.6 Probleme/Lösungen 14.6.1 Embedded record type expected, but Export_Profile_Values received Dieser Fehler trat bei der Verwendung des Bausteins getProfileValues auf. Ist-Zustand: Der Kunde hat ein Abo Datenversand mit einem Excel Report als Grundlage erstellt, die Vorlage sah wie folgt aus: Abbildung 14-5 ABO-Datenversand mit Excel-Report – Bausteindefinition (getProfileValues) Seite 342 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 14-6 ABO-Datenversand mit Excel-Report – Konfiguration (getProfileValues) Diese Vorlage funktioniert an sich. Es wird über alle Linien im Abo iteriert. Dann werden zu jeder Linie einzeln über den Baustein getProfileValues die Zeitreihenwerte der Periode bestimmt. Man könnte sich nun nebeneinander immer Zeitskala und Zeitreihenwerte ausgeben lassen. Der Kunde hat die Zeitskala nur einmal ausgegeben und am Anfang der Tabelle niedergeschrieben. Dies funktioniert aber nur wenn alle Linien im Abo über den gleichen Zeitraum gültig sind bzw. dem Abo angehören. Wenn eine Linie z.B. in der Mitte des Monats erst zum Abo gehört werden die Werte trotzdem an Anfang des Reports (hier ab Zeile 6) ausgegeben. Diese Werte passen dann nicht mehr zu der Zeitskala (in Spalte A). Lösung: Die Lösung des Problems ist der Baustein getProfiles. Dieser baut einen großen Block aus allen Linien im Abo und dem größtmöglichen Zeitraum. Statt also nur die Zeit zu betrachten an dem eine einzelne Linie dem Abo zugeordnet ist (getProfileValues), wird hier jede Linie mit dem Zeitbereich gespeichert wo die Linie mit der längsten Zugehörigkeit gültig ist. Der Trick liegt dann aber in der Konfiguration. Man kann hier nicht die Werte und Zeitstempel (wie dies normalerweise der Fall ist) aus dem Baustein ausgeben lassen, sondern muss explizit einen Iterator darunter setzen, auch wenn man diesem keinen weiteren Baustein unterordnet: Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 343 von 384 Abbildung 14-7 ABO-Datenversand mit Excel-Report – Bausteindefinition (getProfiles) Abbildung 14-8 ABO-Datenversand mit Excel-Report – Konfiguration (getProfiles) Um auch die richtige Zeitskala ausgeben zu können, muss man noch einmal ohne Schrittweite über getProfiles iterieren und dann hieraus „größte gemeinsame Zeitskala aller Abolinien“ ausgeben: Seite 344 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 14-9 Zeitskala bestimmen (getProfiles) - Bausteindefinition Abbildung 14-10 Zeitskala bestimmen (getProfiles) – Konfiguration 14.6.2 Zellenformatierungen aus Template werden nicht übernommen Wird im Excel-Template eine Formatierung für alle Zellen angegeben, so geht diese Information während der Ausführung des Excel-Reports verloren (Kompatibilitätsproblem MS-Excel und Apache POI). Im unteren Screenshot wurde die Zeile 2 beispielsweise fett mit grünem Hintergrund definiert. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 345 von 384 Als Workaround kann mit einer bedingten Formatierung gearbeitet werden. Dazu wird geprüft ob der Zellenwert ungleich leer (““) ist, zu der Bedinung kann anschließend die gewünschte Formatierung vorgenommen werden. Seite 346 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 15 Performance-Tuning Dieses Kapitel stellt eine Zusammenfassung wichtiger Parameter, Informationen und Lösungen bereit, die bei Performanceproblemen angewendet werden können. 15.1 Datenempfang (ComImport) 15.1.1 Hintergrundinformation Der Datenempfang läuft nach folgendem Schema ab. Eine Datei/E-Mail wird über das entsprechende Importkonto (FTP, SFTP, E-Mail [= POP3, IMAP], HTTP, FILE) abgerufen, d.h. auf der KomA übertragen. Anschließend wird für jede Datei geprüft, ob diese bereits von der KomA importiert wurde (um Mehrfachimporte zu unterbinden). Dies erfolgt über folgendes SQL-Statement: SELECT COUNT(1) FROM COM_MESSAGE WHERE CACC_ID=? AND UPPER(MESSAGE_ID)=UPPER(?) AND MESSAGE_CREATED=? AND MESSAGE_SIZE=? - CACC_ID ist die ID des Importkontos (ID-Spalte in MF_COMIMPORT – Importkommunikation) MESSAGE_ID ist bei einer E-Mail der Wert aus dem Header-Feld Message-ID, bei den anderen Konten ist dies der Dateiname. MESSAGE_CREATED ist bei einer E-Mail das Sende-Datum, bei anderen Konten das LastModified-Datum der Datei. MESSAGE_SIZE ist die Größe der E-Mail bzw. die Dateigröße in bytes Diese Prüfung erfolgt jedoch nur unter folgender Voraussetzung: - HTTP Immer, da per HTTP nie gelöscht/verschoben werden kann SFTP Wenn das Konto als „read only“ definiert wurde (Maske Kommunikationseinstellungen MF_RIMPORT) FTP Wenn das Konto als „read only“ definiert wurde (Maske Kommunikationseinstellungen MF_RIMPORT), gilt sowohl für ImportFTPConnection als auch für ImportFTPConnection2 FILE Wenn das Konto als „read only“ definiert wurde (Maske Kommunikationseinstellungen MF_RIMPORT) E-Mail Wenn das Konto als „read only“ definiert wurde (Maske Kommunikationseinstellungen MF_RIMPORT) ODER Wenn in der Config.properties der Parameter importcom.mex.CHECK_PROCESSED_MAILS aktiviert wurde (d.h. vorhanden ist und den Wert Y oder J besitzt) ODER Wenn alle Import-Formate für das Konto keine Endaktion haben, beziehungsweise die Endaktion keine ausgewählt wurde (Maske Importkommunikation - MF_COMIMPORT > Reiter edit > Spalte Aktionstyp) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 347 von 384 Abbildung 15-1: Definition von "read only" für das Importkonto Bei allen Importkonten (außer HTTP) ist es daher unbedingt notwendig, Aktionen für das Leeren der Importordner bzw. Postfächer festzulegen! Anderenfalls kann es passieren, dass die KomA immer mehr Zeit für den Import braucht, da zahlreiche „Datei-Schon-Import“-Prüfungen durchgeführt werden. Im schlimmsten Fall, kann es zum Stillstand des Comimport führen. Das ist der Fall, wenn mehr Zeit für die Prüfung benötigt wird als dem Importkonto zur Verfügung steht. Das primäre Ziel der Aktionen ist es, also sicherzustellen, dass die zu überwachenden Ordner nicht überfüllt werden. D.h. dass die Dateien/EMails entweder in andere Ordner (die nicht von der KomA überwacht werden) verschoben oder komplett gelöscht werden. Werden „fremde“ Importkonten angesteuert (z. B. der FTP von EEX), so wird der Nutzer dort mit großer Sicherheit keine Rechte für das Löschen/Verschieben von Dateien haben und deshalb ist die Definition von Aktionen auch nicht zielführend. Hier macht die Einstellung „read only“ Sinn. Bei anderen Importkonten, bei denen nur das Leserecht vergeben wurde, sollte mit dem jeweiligen Betreiber über mögliche Maßnahmen zur Reduzierung der Dateien/E-Mails gesprochen werden (so dass die Daten z. B. periodisch nach X-Tagen z. B. von einem Dritten gelöscht werden). 15.1.2 Wie sieht ein korrekt definiertes E-Mail-Konto aus? Auf E-Mail-Konten sollte, wenn möglich, immer über das IMAP-Protokoll (also mit den Typ imap) zugegriffen werden. Da beim Typ pop3, aufgrund der Restriktion des zugrundeliegenden POP3Protokolls, zum Beispiel kein Verschieben unterstützt wird. Bei der Verwendung von pop3 muss als Aktion immer löschen verwendet werden. Wichtig ist, dass die Kommunikationseinstellung nicht als „read only" definiert werden (Maske Kommunikationseinstellungen - MF_RIMPORT)! Abbildung 15-2: Kennzeichnung eines E-Mail-Kontos als read only Bei der Definition der Importkommunikation (Maske Importkommunikation - MF_COMIMPORT) muss nun noch folgender Sachverhalt beachtet werden. Die Einstellung bei Operation nach dem Abholen wird für alle Nachrichten ausgeführt, für die kein Format zutrifft. Das ist dann der Fall, wenn die Importformate mit Filterkriterien gesteuert werden. Dazu folgen nun ein paar Beispiele, welche die Sache verdeutlichen: Beispiel - Falsch: Es wird ein Format verwendet, welches E-Mails anschließend in einen Unterordner verschiebt, dies ist i.O., da IMAP verwendet wird. Für das Format ist ein Filterkriterium spezifiziert. Es ist jedoch keine Operation für alle anderen E-Mails definiert. Damit besteht die Gefahr, dass das Postfach überfüllt wird (da Spam bzw. alle E-Mails, die nicht auf den Filter passen, im Postfach liegen bleiben). Seite 348 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 15-3: Beispiel: Falsch konfiguriertes E-Mail-Konto Beispiel – Richtig: Zusätzlich zur Aktion für das Format ist eine Aktion für alle E-Mails definiert, die nicht auf den Filter (Datei im Anhang beginnt mit CONTRL) passen. Damit wird das Postfach „INBOX/TEST_KOMA“ definitiv immer geleert. Abbildung 15-4: Beispiel: Korrekt konfiguriertes E-Mail-Konto Muss als Typ pop3 verwendet werden, so muss als Aktion löschen gewählt werden, da verschieben über POP3 nicht möglich ist! 15.1.3 Definition anderer Importkonten (außer HTTP) Wie bei einem E-Mail-Konto sollte auch hier sichergestellt werden, dass bei der Nutzung von Filtern eine Aktion für alle Dateien definiert wird, auf die kein Filterkriterium passt. Zusätzlich sollte auch hier wieder ein Aktionstyp löschen oder verschieben verwendet werden. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 349 von 384 Abbildung 15-5: Konfiguration E-Mail-Konto: Operation für abgeholte Dateien und Aktionstyp für alle übrigen 15.1.4 Bereinigung der COM-Import-Tabellen Über den Job „COM_IMPORT-Tab. Bereinigen“ (Import - 002735) können die Tabellen (COM_MESSAGE, COM_MESSAGE_ATTACH, COM_MESSAGE_DETAIL, COM_ERROR) bereinigt werden. Abbildung 15-6 Anlage COM-Import-Bereinigung Dazu werden die beiden globalen Parameter (LIFESPAN_ERRORS und LIFESPAN_MESSAGES) verwendet die einen Wert in Monaten erwarten. Wird beispielsweise für LIFESPAN_MESSAGES der Wert 10 definiert, werden alle COM_MESSAGE-Einträge gelöscht die älter als 10 Monate sind (Referenzspalte ist COM_MESSAGE .MESSAGE_RECEIVED) Abbildung 15-7 COM-Import-Bereinigung - Parameter Seite 350 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 16 Checkliste KomA-Fehlermeldungen Bevor eine KomA-Fehlermeldung aufgegeben wird sollte geprüft werden ob das Problem nicht bekannt ist und eine Lösungsbeschreibung vorhanden ist. 16.1 Bekannte Probleme und deren Lösungen In den meisten Kapiteln gibt es einen Unterpunkt „Probleme/Lösungen“ in dem bekannte Probleme beschrieben sind. Dieses Kapitel fasst alle Kapitel zu dieser Thematik „Probleme und Lösungen“ zusammen. - Allgemeine siehe 4.2 E-Mail (Comimport) siehe 5.3.7 File (Comimport) siehe 5.4.2 FTP (Comimport) siehe 5.5.4 SFTP (Comimport) siehe 5.6.5 HTTP (Comimport) siehe 5.8 Datenimport siehe 6.10 E-Mail (Datenversand) siehe 7.3.6 FTP (Datenversand) siehe 7.4.6 SFTP (Datenversand) siehe 7.6.3 Datenversand Allgemein 7.8 EDIFACT – ALOCAT siehe 10.8.3 EDIFACT – CONTRL siehe 10.9.4 EDFIACT – MSCONS siehe 10.11.3 EDIFACT - Allgemein siehe 10.19 16.2 Bereitstellung aller notwendigen Informationen bei Fehlern im KomA Das vorliegende Dokument beschreibt die Informationen, die bei einer KomA-Fehlermeldung zwingend notwendig sind. Das heißt eine Überprüfung der Fehlermeldung kann erst nach Übermittlung aller relevanten Informationen zielführend erfolgen. Alle Screenshots stammen vom Robotron-System und dienen nur dem besseren Verständnis. Die Verzeichnisstruktur kann auf Kundensystemen abweichen. 16.2.1 Allgemeine Informationen Die in diesem Kapitel beschriebenen Informationen müssen sowohl bei Import- als auch bei Exportfehlern stets angegeben werden! 16.2.1.1 Versionsübersicht Die aktuelle Versionsübersicht des betreffenden KomA-Servers ist immer zu übermitteln. Dazu muss listVersions.cmd (bei Windows-System) bzw. listVersions.sh (bei Linux-System) auf dem KomA-Server ausgeführt werden. Im Unterverzeichnis tmp des Servers ist dann eine Datei versions.txt enthalten, diese muss übermittelt werden. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 351 von 384 Abbildung 16-1 Ermittlung der Versionsübersicht Abbildung 16-2 Ergebnis der Ermittlung der Versionsübersicht Die Übermittlung des ecount – Patchstandes (bzw. einer laufenden ecount-Nummer) ist nicht ausreichend, da KomA-Server und ecount – Patchstand oft unabhängig voneinander aktualisiert werden. Nur über die Datei versions.txt können die aktuell verwendeten KomA-Softwarestände bestimmt werden. 16.2.1.2 Properties-Dateien Properties-Dateien dienen zur Konfiguration der Import- und Export-Filter auf dem KomA-Server und liegen im Unterverzeichnis config/import bzw. config/export. Insbesondere bei Problemen mit EDIFACT oder spezifischen Formaten wie ESS muss die entsprechende Properties-Datei übermittelt werden. Die Properties-Dateien für den Import liegen grundsätzlich unter config/import und heißen wie das Format in der datenimport.ini mit der Dateiendung properties. Die Properties-Dateien für Exportformate liegen immer unter config/export. Die Properties-Datei für den Import und Export von EDIFACT-Dateien lautet EDI.properties. Des Weiteren ist es besser, mehr Informationen zur Verfügung zu stellen als zu wenig. Daher können auch die Unterordner config/export bzw. config/import komplett übermittelt werden (bitte vorher als ZIP-Datei packen). 16.2.1.2.1 Korrekte Properties-Datei für den Import identifizieren Ausgangspunkt: Maske Import-Dateien (Import > Import-Dateien). Seite 352 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 16-3 Properties-Datei (Import) In der Maske Import-Dateien können verschiedene Details angesehen werden. Konkret wird das Detail Format benötigt. Wenn dieses Detail nicht vorhanden ist, ist der Name der .properties-Datei gleich dem der „untersten“ Ebene config/import/<Datenquellen-ID>.properties. Bei Vorhandensein des Details Format, entspricht der Name der .properties-Datei der „untersten“ Ebene config/import/<Inhalt-von-File-Detail-Format>.properties. Ist die .properties-Datei der „untersten“ Ebene nicht vorhanden, so gelten die Default-Einstellungen des Filters. Ist die .properties-Datei der „untersten“ Ebene gefunden, muss dort nachgeschaut werden, ob die Eigenschaft ALIAS vorhanden ist. Der Wert von ALIAS verweist auf eine weitere .properties-Datei, welche ebenfalls bereitgestellt werden muss. Das ist solange zu wiederholen, bis kein ALIAS mehr gefunden wird oder keine .properties-Datei mehr zum Wert von ALIAS zur Verfügung steht. Von der Datenbank aus kann also der Name der ersten .properties-Datei bestimmt werden. Um diese und die weiteren .properties zu beschaffen, ist allerdings Zugriff auf den KomA-Server notwendig. Es ist u. U. einfacher, den gesamten config/import-Ordner als ZIP-Datei zu packen und im Ticket zu hinterlegen. Ausgangspunkt ist der KomA-Server: Es können beliebige Datenquellen angelegt werden, die anschließend per Properties-Datei auf den richtigen KomA-Handler (Java-Klasse, die für die Abarbeitung zuständig ist) verweisen. Über die Datei datenimport.ini kann herausgefunden werden, welcher Import-Ordner mit welcher Datenquelle verknüpft ist. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 353 von 384 Abbildung 16-4 Properties-Datei finden In der Datenimport.ini wird nach der Dateierweiterung das Format angegeben. Beispiel: *.xml XYZ_ABC import/XYZ Dateien, die im Importordner import/XYZ abgelegt werden, werden über die Datenquelle XYZ_ABC bearbeitet. Nun muss überprüft werden, ob unter config/import eine XYZ_ABC.properties vorhanden ist und falls ja, muss diese bei der Meldung des Fehlers angegeben werden. 16.2.1.2.2 Korrekte Properties-Datei für den Export identifizieren Ausgangspunkt ist die Maske Export-Aufträge (Export > Export-Aufträge). Die richtige Properties-Datei kann oft bereits über das Format ermittelt werden. Im Beispiel ist eine ALOCAT-Datei auf Fehler gelaufen. Unter config/export ist eine ALOCAT.properties-Datei vorhanden, die für die Fehlermeldung von Relevanz ist. Seite 354 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 16-5 Properties-Datei Export-Auftrag (1) Abbildung 16-6 Properties-Datei Export-Auftrag (2) 16.2.2 Zentrale Konfigurationsdatei (Config.properties) Die Datei Config.properties, die sich im Unterordner config des KomA-Servers befindet, stellt eine zentrale Konfigurationsdatei dar und sollte immer (sowohl bei Import- als auch bei Export-Problemen) übermittelt werden. 16.2.3 LOG-Dateien Die KomA schreibt im KomA-Unterverzeichnis log zahlreiche LOG-Dateien. Per Default wird für den Datenimport eine datenimport.log, für den ComImport die importcom.log und für den Export die exportcom.log geschrieben. Die Namen können ggf. über die Config.properties in den Einstellungen export.logfile, import.logfile und importcom.logfile verändert werden. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 355 von 384 Die Log-Dateien werden in regelmäßigen Abständen, beim Überschreiten einer Dateigrößengrenze, als ZIP-Datei archiviert. Es ist wichtig die entsprechenden Log-Dateien immer mitzuliefern. Bei ComImport-Problemen also die importcom.log-Dateien, bei Export-Problemen die exportcom.log-Dateien usw. Wenn alle Logdateien übermittelt werden, weil der Anwender nicht sicher ist in welcher Log-Datei die Info nun steht, so muss unbedingt der Zeitpunkt des Problems genannt werden um das Problem lokalisieren zu können. 16.3 Kochrezept – Datenermittlung bei Exportfehlern Bei Exportfehlern ist die Übermittlung der Versionsübersicht (siehe 16.2.1.1) der Properties-Dateien (siehe 16.2.1.2) und der zentralen Konfigurationsdatei (siehe16.2.2) zwingend notwendig. Zusätzlich muss die interne robotron-XML-Datei für den jeweiligen Export-Auftrag angegeben werden. Diese Datei stellt den Dateninhalt dar, der vom ecount-System (Datenbank) dem KomA-Server übermittelt wird. Damit ist es möglich, evtl. vorhandene Fehler einzugrenzen (Fehler auf dem KomAServer, im Abo, im Datenbestand…). Die Datei kann wie folgt gefunden werden: Ausgangspunkt ist die Maske Export-Aufträge: Abbildung 16-7 Maske "Export-Aufträge“ Mithilfe der ID (Beispiel: 253100) kann auf dem KomA-Server gesucht werden. Dabei muss im Exportverzeichnis des KomA-Servers (per Default ist dies der Ordner Email, es kann jedoch über die Datei Config.properties mit der Einstellung export.archive_dir auch ein anderes Verzeichnis konfiguriert sein) nach einer ZIP-Datei im Format ec_<export_auftrag_id>_<format>.zip gesucht werden. Seite 356 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Ist keine XML-Datei vorhanden, wurde die Option der XML-Generierung ggf. deaktiviert. Da die Problemanalyse ohne XML-Datei sehr schwer ist, sollte diese Option aktiviert und der Exportauftrag (wenn möglich) wiederholt werden. Die XML-Generierung kann über folgende Optionen aktiviert werden: config\Config.properties: export.write_xml=Y Abbildung 16-8 Config.properties - Einstellung XML-Datei Der Wert bei KomA-Server (siehe Abbildung 16-7) wird vom KomA-Server eingetragen, der den Exportauftrag abgearbeitet hat. Dieser Wert wird im KomA-Server in der Datei Config.properties in der Einstellung importcom.comserver = x hinterlegt. (Achtung: Kein Rechtschreibfehler, die Einstellung importcom.comserver wird für den Export mitgenutzt). 16.3.1 Beispiel Export-Auftrag „253100“ auf dem Robotron-Entwicklungs-KomA-Server. Annahme: export.archive_dir in Datei Config.properties wurde nicht modifiziert, damit ist die Suche im Unterordner Email vorzunehmen. Ergebnis: Im Verzeichnis Email\error wurde für den Export-Auftrag eine ZIP-Datei gefunden. Diese ZIP-Datei muss bei einer Fehlermeldung bezüglich eines Exportproblems immer übermittelt werden. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 357 von 384 Abbildung 16-9 Interne Robotron-XML-Datei finden Sollte die ZIP-Datei nicht gefunden werden, kann die Einstellung export.archive_dir in der Datei Config.properties geprüft werden. Ob überhaupt auf dem richtigen KomA-Server gesucht wird, kann über die Datei Config.properties (importcom.comserver) und den Wert in der Spalte KomA-Server (siehe Abbildung 16-7) kontrolliert werden. Seite 358 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 16-10 KomA-Server 16.3.2 Ermittlung der Export-Auftrag-ID bei EDIFACT-Dateien Steht nur die EDIFACT-Datei als Informationsquelle zur Verfügung, kann mit Hilfe eines SQL-Befehles die Export-Auftrag-ID ermittelt werden. Beim Export wird das Datenelement „BGM.C106.1004“ (EDINachrichtennummer, die vom Absender des Dokuments vergeben ist) mit einem vom ecount generierten, für den Absender eindeutigen, Wert belegt. Über diesen Wert ist es möglich, im ecount (Tools > EDIFACT-Cockpit) zu suchen. Wichtig hierbei ist, dass das von-Datum (Pflichtfeld) mit einem hinreichenden Wert eingeschränkt wird. Anschließend kann in der Karteikarte Allg. (Allgemein) über die Spalte UNB-Ref. gesucht werden. Die Suche wird hierbei ganz normal mit F7 eingeleitet und mit F8 ausgeführt. Beispiel MSCONS-Datei Die UNB-Ref. Lautet hier „EC4_260376E“: Abbildung 16-11 MSCONS-Datei Diese Information kann auch aus dem robotron*EdifactKonverter entnommen werden: Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 359 von 384 Abbildung 16-12 EdifactKonverter Mit diesem Wert wird anschließend in der Maske Edifact-Cockpit gesucht. Dabei wird das von-Datum auf einen ausreichend großen Zeitraum geändert und anschließend mit F7 die Suche eingeleitet. Danach wird dieser Wert in der Karteikarte Allg. in die Spalte UNB-Ref. eingetragen und die Suche mit F8 ausgeführt. Wenn die Suche erfolgreich war, kann in der Karteikarte Export die Export-Auftrag-ID ermittelt werden. Abbildung 16-13 EDIFACT-Cockpit Suche Seite 360 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 16-14 EDIFACT-Cockpit Export 16.3.3 Datenversand-ABO über EAU_ID identifizieren Mit der EXPORT_AUFTRAG.ID (EAU_ID) kann folgendes Select ausgeführt werden: select p.eah_id, p.eau_id, p.* from eab_protokolle p where p.eau_id = <EAU_ID> Liefert das obige SQL ein Ergebnis kann mit der EAH_ID folgendes Select durchgeführt werden: select h.eab_id, h.* from eab_historien h where id = <EAH_ID>; Liefert das obige SQL ein Ergebnis kann über die EAB_ID das Abo identifiziert werden. select * from eab_historien where id = <EAB_ID> Wenn die Abfragen kein Ergebnis liefern so ist der Export-Auftrag mit großer Wahrscheinlichkeit nicht durch ein ABO sondern durch einen automatischen Prozess entstanden. 16.3.4 Fehler beim E-Mail-Versand Kommt es zu einem Fehler beim Versand von E-Mails (SMTP) so liegt meist ein Konfigurationsproblem vor. Die verwendete Konfiguration kann mit expliziten Debug-Informationen ausgegeben werden, dies sollte jedoch nur kurzfristig bei Problemanalysen erfolgen. Folgende beiden Änderungen sind durchzuprüfen. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 361 von 384 Config.properties: Damit Debug-Ausgaben der JavaMail-Bibliothek in den Datenversand-Logdateien landen muss folgende Zeile ergänzt/aktiviert werden: export.MEX.debug = Y In der Export-Communication.log.properties, Datei befindet sich im config-Ordner, muss folgende Zeile ergänzt/aktiviert werden: log4j.logger.de.robotron.ecount.exportcom.sender.MailSenderProperties= DEBUG 16.4 Kochrezept – Datenermittlung bei Importfehlern Bei Importfehlern ist die Übermittlung der Versionsübersicht (siehe 16.2.1.1), der Properties-Dateien (siehe 16.2.1.2) und der zentralen Konfigurationsdatei (siehe 16.2.2) zwingend notwendig. Zusätzlich muss die Importdatei angegeben werden. Auf dem KomA-Server wird bei einem ImportFehler eine ZIP-Datei mit der Datei und den zugehörigen Protokollen in einem Unterverzeichnis abgelegt. Bei Importfehlern wird zusätzlich zwischen ZIP-Dateien und „normalen“ Dateien (EDFIACT, Textdateien, CSV, EXCEL, …) unterschieden. Das bedeutet, dass Zip-Dateien mit Fehlern im Gegensatz zu „normalen“ Dateien mit Fehlern in einem anderen Unterverzeichnis abgelegt werden. Das Fehler-Unterverzeichnis für „normale“ Dateien ist standardmäßig err, kann aber über die Datei Config.properties mit der Einstellung import.errorDir überschrieben werden. Das FehlerUnterverzeichnis für ZIP-Dateien ist standardmäßig zip-error und kann über die Einstellung import.zipErrorDir umbenannt werden. 16.4.1 Beispiel (ZIP-Datei) Ausgangspunkt ist die Maske Import-Dateien (Import > Import-Dateien). Die importierte Datei lautet „IA_7337_EDI_20130404095333458.zip“. Da es eine ZIP-Datei ist, wird diese im Fehlerfall im Unterverzeichnis zip-error abgelegt. Seite 362 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 16-15 Beispiel ZIP-Datei (1) Die Suche nach dem verwendeten KomA-Server kann über die Karteikarte Details erfolgen. Dabei liefert der FILE_PATH oft Rückschlüsse über die KomA-Instanz. Abbildung 16-16 Beispiel ZIP-Datei (2) Die Suche nach den Dateinamen im Import-Ordner sollte die betreffende ZIP-Datei finden, kann auch aus FILE_PATH entnommen werden, (hier import\EDI). Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 363 von 384 Abbildung 16-17 Beispiel ZIP-Datei (3) 16.4.2 Beispiel (EDIFACT-Datei „ORDERS“) Bei einer „normalen“ Datei ist wie unter 4.1 vorzugehen. Der einzige Unterschied ist, dass die Fehlerdatei nicht unter zip-error sondern unter err abgelegt wird. Die Karteikarte Details liefert über FILE_PATH die Information über das Importverzeichnis. Laufwerk C: muss hier ausgehend vom Host (rdsnt21) betrachtet werden. Seite 364 von 384 Abbildung 16-18 Beispiel EDIFACT-Datei (1) Abbildung 16-19 Beispiel EDIFACT-Datei (2) Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 365 von 384 16.5 Informationsbeschaffung beim ComImport Beim Abholen von Daten von externen Quellen wie E-Mail-Servern, FTP- und SFTP-Konten können Fehler nicht immer eindeutig identifiziert werden. Zur genaueren Analyse stehen Logging-Mechanismen (Log4j) zur Verfügung, die temporär aktiviert werden müssen. Die Logeinstellungen werden in Properties-Dateien hinterlegt, die wiederum im config Unterverzeichnis des KomA-Servers abgelegt werden. Per Default heißt die Log-Properties Datei für den ComImport Import-Kommunikation.log.properties. Sollte diese Datei nicht vorhanden sein, muss sie angelegt werden. Import-Kommunikation.log.properties - Beispiel-Konfiguration: log4j.rootLogger=WARN, Ecount log4j.appender.Ecount= de.robotron.ecount.util.Log4jAdapter log4j.appender.Ecount.layout=org.apache.log4j.PatternLayout log4j.appender.Ecount.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} %p %C{1}:%L %M() %m%n log4j.logger.de.robotron.ecount.importcom=DEBUG Die Kopfdaten (erste 4 Zeilen) müssen in der Datei immer angegeben sein. Darauf folgen verschiedene Einstellungen je Package (Kenntnis darüber haben nur die Entwickler beim Hersteller). Für den ComImport reicht die Zeile aus der obigen Beispiel-Konfiguration aus: log4j.logger.de.robotron.ecount.importcom=DEBUG Da die Einstellungen erst nach einem Neustart des ComImport wirken, muss ein Neustart erfolgen. Nach erfolgreichem Start des ComImports werden im log-Verzeichnis des KomA-Servers in der Datei comimport.log (Dateiname kann über die Config.properties mittels importcom.logfile auch einen anderen Namen haben) die zusätzlichen Informationen abgelegt. Nach einer gewissen Zeit (abhängig von der Datenmenge auf dem System und den Log-Einstellungen) wird die Log-Datei in eine Zip-Datei gepackt, daher sind die Informationen ggf. in einer aktuellen importcom.log….-Zip-Datei zu finden. Wichtig: Das Logging sollte aus Performancegründen nur zeitweise, zur Fehleranalyse, aktiviert werden. Beim Deaktivieren reicht es aus, ein # vor den jeweiligen log4j.logger*-Eintrag zu setzen. Beispiel: log4j.rootLogger=WARN, Ecount log4j.appender.Ecount= de.robotron.ecount.util.Log4jAdapter log4j.appender.Ecount.layout=org.apache.log4j.PatternLayout log4j.appender.Ecount.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} %p %C{1}:%L %M() %m%n #log4j.logger.de.robotron.ecount.importcom=DEBUG Seite 366 von 384 16.5.1 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Explizites Protokollieren des Empfangs von E-Mails Wie oben erwähnt ist die Log-Konfiguration: log4j.logger.de.robotron.ecount.importcom=DEBUG ausreichend, jedoch werden dabei alle möglichen Importkonten (SFTP, FTP, …) protokolliert. Dies erschwert bei größeren Systemen die Fehlersuche in den Log-Dateien. Anstelle der oben genannten Konfiguration kann in der Import-Kommunikation.log.properties auch Folgendes hinterlegt werden: log4j.logger.de.robotron.ecount.importcom.email.MailImportMessage=Debug log4j.logger.de.robotron.ecount.importcom.email.MailImportMessage.Content=DEBUG log4j.logger.de.robotron.ecount.importcom.email.ImportMailConnection=DEBUG log4j.logger.de.robotron.ecount.importcom.email.PlainMailImportMessage=DEBUG Damit ist die Protokollierung nur für E-Mail (MEX) aktiviert. 16.5.2 Besonderheiten beim Abholen vom Mail-Server Die Bibliothek für das Abholen von E-Mails javamail verfügt über ein extra Debugging, welches explizit aktiviert werden muss. Dies geschieht über die Config.properties-Datei und folgende Einstellung: importcom.debug Die Default-Einstellung ist N (deaktiviert), bei der Analyse von Problemen muss diese Einstellung aktiviert werden, dies geschieht über das Setzen auf Y, Beispiel: importcom.debug=Y Die zusätzlichen Informationen werden auch hier in der comimport.log im log-Verzeichnis des KomAServers hinterlegt. Diese Einstellung muss nach dem Erstellen der erforderlichen Log-Datei wieder deaktiviert, d.h. auf N gesetzt oder komplett gelöscht werden! 16.5.3 Speichern der E-Mails vom Mail-Server Bei ungeklärten Problemen mit E-Mails benötigt die Robotron Datenbank-Software GmbH die E-Mail im EML-Format. Im aktuellen Microsoft Outlook kann leider nur im proprietären MSG-Format gespeichert werden. Diese Dateien sind zur Fehleranalyse unbrauchbar. Aus diesem Grund muss die E-Mail entweder mit einen E-Mail-Programm, welches das EML-Format unterstützt, heruntergeladen werden (z.B. Mozilla Thunderbird). Oder auf der KomA muss das Speichern der E-Mails aktiviert werden, dies wird hier beschrieben. Dazu muss in der Config.properties folgende Einstellung aktiviert sein: importcom.save_mail=Y Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 367 von 384 (Da der Default true (Y) ist, wird auch ohne diese Einstellung die Datei gespeichert, hier muss also primär geprüft werden ob nicht importcom.save_mail=N eingestellt ist.) Per Default erfolgt die Ablage der E-Mail im Unterordner importmail. Dieser Ordner kann über die Config.properties-Einstellung importcom.mail_dir jedoch auch modifiziert werden. Die E-Mail-Daten werden als ZIP-Datei geschrieben, dabei werden „Problem“-E-Mails einfach im importmail-Verzeichnis abgelegt. E-Mails der jeweiligen Konten werden im Unterverzeichnis IA<Kommunikationseinstellung-ID> hinterlegt: Abbildung 16-20 : Ablage der „Problem“-E-Mails 16.6 Informationsbeschaffung beim Problemen im EDIFACT-Umfeld Bei Problemen im EDIFACT-Umfeld ist eine Ticketerstellung nach diesem Kapitel die Voraussetzung für eine zügige Bearbeitung des Problemfalls. 16.6.1 Spezialfall CONTRL Ab 01.10.2014 werden CONTRL-Nachrichten nicht mehr ausschließlich auf der KomA erzeugt, sondern auch in der Datenbank (Import-API, Workflows). Auf der KomA werden nur noch negative CONTRLNachrichten erzeugt, positive CONTRL-Nachrichten werden ausschließlich in der Import-API erstellt. Diese Aufteilung ist aufgrund der zu prüfenden Fehlercodes (z.B. Unbekannter Absender der Übertragungsdatei, Empfänger der Übertragungsdatei ist nicht der tatsächliche Empfänger) und der großen Anzahl an Konfigurationsmöglichkeiten notwendig (diese Informationen stehen in der KomA nicht direkt zur Verfügung, können übersteuert werden etc.). Dies macht die Fehlersuche bei Problemen natürlich komplizierter, da ggf. mehrere Stellen überprüft werden müssen. Aus diesem Grund müssen folgende Daten übermittelt werden (ggf. muss dies über den Support geschehen, falls die Fachanwender keinen Zugang zur KomA haben). Werden alle relevanten Daten übermittelt, kann die Analyse des Fehlers umgehend erfolgen, nur so kann die schnelle Bearbeitung/Hilfe sichergestellt werden. 16.6.2 Welche Daten sind zu übermitteln? - Versionsübersicht von der KomA siehe Kapitel 16.2.1.1. - Die EDIFACT-Datei, die für die Fehlermeldung relevant ist Diese wird in KomA im Unterverzeichnis done oder err (oder zip-done und zip-error, falls die Dateien als ZIP-Datei importiert wurden) abgelegt. Der Importordner kann dynamisch konfiguriert werden und wird über die datenimport.ini festgelegt. Beispiel: Folgender Eintrag ist in der datenimport.ini vorhanden Seite 368 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 *.txt EDI_AUTO import/EDI_AUTO Die Dateien werden also, ausgehend vom KomA-Basisverzeichnis, im Ordner import/EDI_AUTO/done oder import/EDI_AUTO/err… hinterlegt. Die Datei wird standardmäßig als ZIP-Datei gepackt und umfasst neben der EDIFACT-Datei auch die Log-Datei die beim Import von der KomA erzeugt wurde. - Die Properties-Datei der EDI-Datenquelle Der Name der Properties-Datei ergibt sich aus dem 2. Parameter der Einstellung in der datenimport.ini. Beispiel: *.txt EDI_AUTO import/EDI_AUTO Die zugrundliegende Properties-Datei heißt EDI_AUTO.properties. Die Properties -Dateien für den Import werden standardmäßig im Unterverzeichnis config/import abgelegt. - Diagnose-Report der Importdatei aus dem robotron*ecount ist erforderlich Die Maske Import-Dateien ist über den Menüpunkt Import > Import-Dateien im ecount erreichbar. Anschließend die entsprechende Import-Datei auswählen und im Reiter Intern die Schaltfläche Diagnose drücken. Anschließend wird eine HTML-Datei (Report und Simulation Eingangsprüfung für Import-Datei x) erzeugt und automatisch im Browser geöffnet, diese HTMLDatei ist dem Fehlerticket beizulegen Abbildung 16-21 Diagnose-Schaltfläche in MF_IFI Der Diagnose-Report kann mit einem erweiterten Logging ausgestattet werden. Dieses wird mit der Datenquellen-Einstellung IAPI$LPL:LOGLEVEL auf den Wert 2 aktiviert, sodass ein lineares Protokoll namens Import-API Debug geschrieben wird. Auszug aus den Releasenotes eCount- 00050884: Für die Fehlersuche durch den Support der Robotron Datenbank-Software GmbH wurde die Datenquellen-Einstellung IAPI$LPL:LOGLEVEL bereits mit KM 50731 bereitgestellt. Die Vorgänge innerhalb der Import-API werden aufgezeichnet, wenn der Wert der Einstellung auf 0, 1 oder 2 gesetzt wird (Debuglevel). Aktuell ist nur vorgesehen, kurzzeitig auf den Wert 2 zu setzen. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 369 von 384 Debuglevel 0 und 1 geben im Moment noch nicht signifikant weniger Informationen aus, sodass eine längerfristige Verwendung noch nicht möglich ist. - Optional: Erweitertes Logging auf der KomA aktivieren Mit Hilfe der Datei Datenimport.log.properties (im config-Verzeichnis des KomAs) kann explizit das Logging auf DEBUG gestellt werden. Dadurch werden umfassendere Informationen von der KomA protokolliert. Da diese Protokollierung Systemressourcen kostet, sollte das erweiterte Logging nur vorrübergehenden aktiviert werden! Sollte die Datei Datenimport.log.properties nicht vorhanden sein, kann diese einfach angelegt werden. Die Datei sollte folgenden Aufbau haben. log4j.rootLogger=WARN, Ecount log4j.appender.Ecount=com.robotron.ecount.util.Log4jAdapter log4j.appender.Ecount.layout=org.apache.log4j.PatternLayout log4j.appender.Ecount.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} %p %C{1}:%L %M() %m%n log4j.logger.de.robotron.ecount.dataimport.filter.edifact.ReplyConfig=DEBUG log4j.logger.de.robotron.ecount.database=DEBUG Sollte die Datei schon vorhanden sein muss geprüft werden ob folgende Einstellungen gesetzt sind: log4j.logger.de.robotron.ecount.dataimport.filter.edifact.ReplyConfig=DEBUG log4j.logger.de.robotron.ecount.database=DEBUG 16.6.3 Vom EDIFACT-Cockpit zum Diagnose-Report Über das EDIFACT-Cockpit (MF_EDIFMON) sind die importieren und exportieren EDIFACT-Dateien sichtbar. Bei importierten Dateien stehen im Reiter Import einige wichtige Informationen, unter anderem ist hier der Wert bei Interne ID (entspricht der DB-Tabelle IMPORT_FILE Spalte ID) von zentraler Wichtigkeit. Über die Schaltfläche anzeigen kann direkt zum Import-Dateien Datensatz gesprungen werden. Alternativ: Dieser Wert aus Interne_ID kann als Suchkriterium im Menu Import Import-Dateien (MF_IFI) bei Interne ID verwendet werden. Wird der Datensatz gefunden (d.h. dieser Datensatz wurde noch nicht archiviert) kann der Diagnose-Report über den Reiter Intern bei der Schaltfläche Diagnose geladen werden. Seite 370 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Abbildung 16-22 EDIFACT-Cockpit (MF_EDIFMON)- Interne ID des Import-Datensatzes ermitteln Abbildung 16-23 (Alternativ) Import-Dateien (MF_IFI ) Datensatz über Interne ID suchen Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Anlage 1 Seite 371 von 384 Glossar Apache POI Ist eine Java Bibliothek für den Umgang mit Excel-Dateien in Java. Da es sich um einen Nachbau handelt ist dies nie zu 100% mit Microsoft Excel vergleichbar. So werden beispielweise nicht alle in Excel zu Verfügung stehenden Formeln von Apachen POI unterstützt. BOM Byte Order Mark Dient als Kennung zur Definition der Byte-Reihenfolge und Kodierungsform in UCS/Unicode-Zeichenketten. Ist insbesondere bei Textdateien (txt, csv) notwendig um den Inhalt korrekt einlesen zu können. Z.B. besteht das BOM einer UTF-8 kodierten Datei aus 3 Bytes „EF BB BF“. FKID Fremd-Kanal-ID ecount-spezifische. Beim Import von Daten wird ein Kanal über Fremd-Kanäle identifiziert. Hierbei stehen FKID1 (Fremd-Kanal 1) bis FKID4 (Fremd-Kanal 4) zur Verfügung. JAXP Java API for XML Processing ist eine leichtgewichtiges standardisiertes API zum Validieren, Parsen, Generieren und Transformieren von XML-Dokumenten. SMB Server Message Block-Protokoll (SMB-Protokoll) ist ein Kommunikationsprotokoll in Netzwerken und dient überwiegend der Freigabe von Netzwerkdateien. Seite 372 von 384 Anlage 2 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Datumsformatierung Oft können Datumsformatierungen angegeben werden, dies erfolgt nach dem Standard Java-Pattern (SimpleDateFormat). Die möglichen Optionen sind hier auszugsweise erklärt. Date and Time Patterns: Tabelle 16-1: Date and Time Patterns Letter Date or Time Component Examples G Era designator AD y Year 1996; 96 Y Week year 2009; 09 M Month in year (context sensitive) July; Jul; 07 L Month in year (standalone form) July; Jul; 07 w Week in year 27 W Week in month 2 D Day in year 189 d Day in month 10 F Day of week in month 2 E Day name in week Tuesday; Tue u Day number of week (1 = Monday, ..., 7 = Sunday) 1 a Am/pm marker PM H Hour in day (0-23) 0 k Hour in day (1-24) 24 K Hour in am/pm (0-11) 0 h Hour in am/pm (1-12) 12 m Minute in hour 30 s Second in minute 55 S Millisecond 978 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 373 von 384 Letter Date or Time Component Examples z Time zone (General time zone) Pacific Standard Time; PST; GMT-08:00 Z Time zone (RFC 822) -800 X Time zone (ISO 8601) -08; -0800; -08:00 Beispiele: Tabelle 16-2: Beispiele für Date and Time Patterns Pattern Ergebnis yyyy.MM.dd G 'at' HH:mm:ss z 2001.07.04 AD at 12:08:56 PDT EEE, MMM d, ''yy Wed, Jul 4, '01 hh 'o''clock' a, zzzz 12 o'clock PM, Pacific Daylight Time yyMMddHHmmssZ 010704120856-0700 yyyy-MM-dd'T'HH:mm:ss.SSSZ 2001-07-04T12:08:56.235-0700 yyyy-MM-dd'T'HH:mm:ss.SSSXXX 2001-07-04T12:08:56.235-07:00 YYYY-'W'ww-u 2001-W27-3 dd.MM.yyyy 03.06.2014 dd.MM.yyyy HH:mm 03.06.2014 09:27 Seite 374 von 384 Anlage 3 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Reguläre Ausdrücke Über reguläre Ausdrücke ist eine umfangreiche Manipulation von Zeichenketten möglich. Reguläre Ausdrücke besitzen in Java spezielle Regeln, einige wichtige werden hier beschrieben. Weitere Informationen können aus der Java-Dokumentation von Oracle bezogen werden. Tabelle 16-3: Reguläre Ausdrücke Zeichenklasse Enthält x The character x \\ The backslash character \xhh The character with hexadecimal value 0xhh \uhhhh The character with hexadecimal value 0xhhhh \t The tab character ('\u0009') \n The newline (line feed) character ('\u000A') \r The carriage-return character ('\u000D') \f The form-feed character ('\u000C') \e The escape character ('\u001B') Zeichenklasse Enthält [abc] Zeichen a, b, oder c [^abc] Nicht die Zeichen a, b oder c (negation) [a-zA-Z] Groß-/Klein-Buchstaben a bis z [0-9a-fA-F] Zeichen 0, 1, 2, …, 9 oder Groß-/Klein-Buchstaben a, b, c, d, e, f Zeichenklasse Enthält . Jedes Zeichen \d Ziffer: [0-9] \D keine Ziffer: [^0-9] beziehungsweise [^\d] \s A whitespace character: [ \t\n\x0B\f\r] Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Zeichenklasse Enthält \S No whitespace character [^\s] \w Wortzeichen: [a-zA-Z_0-9] \W kein Wortzeichen: [^\w] Seite 375 von 384 Seite 376 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Anlage 4 Import- und Export-Filter (XSD, DTD Beispiele) Umfangreiche Dokumentationen zu den Filtern wie XML-Struktur und Beispiele sind über folgende URL abrufbar: KOMA-Import-Export-Filter_DTD_Examples (http://support.robotron.de/ecount-comserver/KOMA-Import-Export-Filter_DTD_Examples.zip). Die ZIP-Datei ist dabei nach import und export getrennt. Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Anlage 5 Konfigurationsbeispiele für Loader-Import ELDR beschriebener Loader-Import. // Minimal-Konfiguration für Loader-Import: e*count-load-definition ( databaseECOUNT() // aktuell konfigurierte XCH-Verbindung wählen inputFormat( encoding = "ISO8859-1" type = CSV stripSpaces = true headerRow = 1 firstDataRow = 2 onEmptyRow = skip ) targetTable( // Zieltabelle ELDR_SAMPLE_IMPORT: name="ELDR_SAMPLE_IMPORT“ importAssignments( column( name="IFI_ID" src=ifi_id() ) column( name="COLUMN1" src= fileColumn(1) ) column( name="COLUMN_DEMO" src= fileColumn("DEMO") ) Seite 377 von 384 Seite 378 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 rule( condition=(notNull(fileColumn(2))) column( name="COLUMN2" src= fileColumn(2) ) ) ) ) ) Anlage Abbildung 1: Beispiel für minimale Loader-Konfiguration databaseECOUNT( id = "ec_xch" user = "ec_xch" passwd = "xch" transaction_mode = COMMIT_ON_CLOSE ) databaseTHIN( id = "demoTHIN" connect="dbServer:1521:orcl" user = "scott" passwd = "tiger" transaction_mode = COMMIT_AFTER(1000) ) databaseTHIN( id = "demoTHIN" connect = "(description=(address=(protocol=tcp)(host=srv)(port=1521))(connect_da ta=(sid=orcl)))" Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 379 von 384 user = "scott" passwd = "tiger" transaction_mode = COMMIT_ON_CLOSE ) databaseOCI( id="demoOCI" connect="myDb" user="scott" passwd="tiger" transaction_mode = ROLLBACK_ON_ERROR ) Anlage Abbildung 2: Beispiele für Loader-Datenbank-Verbindungen inputFormat( type = EXCEL excelSheets = "*" stripSpaces = true headerRow = 1 firstDataRow = 2 onEmptyRow = stop ) Anlage Abbildung 3: Beispiel für Excel-Konfiguration im Loader-Skript src = 1 // numerische Konstante src = "Test" /Varchar-Konstante src = fileColumn(2) Spalte 2 // String- // Inhalt von Seite 380 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 src = fileColumn("Test-Spalte") + "-DEMO" // Inhalt von Spalte mit Suffix src = toNumber( Number-Konvertierung // String-nach- fileColumn(2), format = "###,###.###", decimal = ',', group = '.' ) src = fileCell( 1, 1) Dateizelle // feste src = columnHead( 1 ) // Überschrift von src = nvl(fileColumn(2), "leer") // Nullwerte src = SYSDATE // Systemdatum Spalte 1 ersetzen src = nvld( toDate( fileColumn(2), "dd.MM.yyyy HH:mm:ss" ), SYSDATE ) src = sequence(name = "DEMO_DEQ") DB-Sequence src = sequence( Angabe schema = "DEMO" name = "DEMO_DEQ" createOnMissing = false // Wert aus einer // Ausführlichere Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 381 von 384 ) src = recordCount() aktuellen Satzes // Nummer des src = ifi_id() IMPORT_FILE-Satzes // Aktuelle id des src = line_nr() Zeilennummer // Aktuelle src = filename() verarbeiteten Datei // Name der src = filenameZip() Zip-Dateiname // s.o. mit ggf. src = tokenize(fileColumn(2), ";,", 1) bis zum folgenden „,“ // vom ersten „;“ src = trim(fileColumn(2)) Anfang und Ende abschneiden // Spaces an src = subString(fileColumn(2), 0, 3) (maximal) 3 Zeichen // die ersten src = replace (fileColumn(2), "A", "BB") „BB“ ersetzen // alle „A“ durch src = replace( // mehrstufige Ersetzung replace(fileColumn(2), "A", "BB"), "C", "DD" ) // Dekodier-Funktion: B->D, C->D, alles Andere->A : src = decode(fileColumn(2), "A", ("B", "D"), ("C", "D")) // Dekodier-Funktion: B->D, C->D, alles Andere unverändert : src = decode(fileColumn(2), ("B", "D"), ("C", "D")) Anlage Abbildung 4: Beispiele für Funktionen Seite 382 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Anlage 6 Beispielkonfiguration FTP-Empfang für EEX-Daten Im ecount unter Menüpunkt Import > Kommunikationseinstellungen (MF_RIMPORT) muss als erstes die FTP-Verbindung definiert werden. Im vorliegenden Fall ist dies der Hostname infoproducts.eex.com mit dem Nutzernamen info_at_robotron.ch (+ Passwort). Der Typ muss hier den Wert ftp haben. Es wird der Standard-FTP-Port (21) verwendet, daher wird der Port nicht spezifiziert (-1). Zusätzlich muss ein HTTP-Proxy definiert werden: PROXY_TYPE=HTTP PROXY_HOST=proxy.robotron.de PROXY_PORT=80 Damit passives FTP verwendet wird, ist folgender Parameter zu setzen: passive=Y (Passives FTP: Diese Technik wird eingesetzt, wenn der Server keine Verbindung zum Client aufbauen kann. Dies ist beispielsweise der Fall, wenn der Client sich hinter einem Router befindet, der die Adresse des Clients mittels NAT umschreibt, oder wenn eine Firewall das Netzwerk des Clients vor Zugriffen von außen abschirmt.) Anlage Abbildung 5: Beispiel FTP-Verbindung (MF_RIMPORT) Anschließend geht es um die Konfiguration der abzuholenden Daten. Unter dem Root-Verzeichnis von infoproducts.eex.com befindet sich folgende Verzeichnisstruktur: Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Seite 383 von 384 Anlage Abbildung 6: Verzeichnisstruktur unter dem Root-Verzeichnis von infoproducts.eex.com Im Beispiel sollen folgende Verzeichnisse (und folgende Dateien) abgefragt werden: - power/xls/spot_market/2014 o o - power/xls/derivatives_market/2014 o o - energy_phelix_power_futures_historie_*.xls energy_german_power_futures_historie_*.xls gas/xls/spot_market/2014 o - energy_spot_historie_*.xls swiss_power_spot_market_*.xls gas_spot_historie_*.xls gas/xls/derivatives_market/2014 o gas_futures_historie_*.xls Es gibt mehrere Varianten, wie die Konfiguration vorgenommen werden kann. Im vorliegenden Beispiel wird für jeden zu importierenden Ordner ein Import-Format (in MF_RIMPORT) angelegt. Dabei sollten ein sprechender Name und eine eindeutige Kurzbezeichnung vergeben werden. Zusätzlich muss der Import-Ordner auf dem KomA-Server definiert werden (Zielverzeichnis). Anlage Abbildung 7: Importformate definieren Seite 384 von 384 Kommunikationsautomatisierung - KomA Version 8.0 vom 19.09.2016 Nun erfolgt die Konfiguration des Kontos über Menüpunkt Import > Kommunikationsautomatisierung (MF_COMIMPORT). Hierbei wird die zuvor definierte FTP-Verbindung ausgewählt, der KomA-Server und das Prüfintervall festgelegt. Anschließend werden die zuvor definierten Formate ausgewählt. Anlage Abbildung 8: FTP-Konto Das Verzeichnis auf dem FTP-Server wird im Feld Verzeichnispfad hinterlegt, über die Schaltfläche Filter wird anschließend der Filter für die gewünschten Dateinamen definiert. Anlage Abbildung 9: FTP-Verzeichnis / Filter