Libelle SystemCopy Version 4.6.1 Programmierhandbuch Automatisierte SAP Systemkopien Libelle AG Gewerbestr. 42 70565 Stuttgart, Germany T +49 711 / 78335-0 F +49 711 / 78335-190 [email protected] www.libelle.com © 2017 Libelle AG. Printed in Germany. Alle Rechte vorbehalten. Libelle AG haftet nicht für etwaige Fehler in dieser Dokumentation. Die Haftung für mittelbare und unmittelbare Schäden, die im Zusammenhang mit der Lieferung oder dem Gebrauch dieser Dokumentation entstehen, ist ausgeschlossen, soweit dies gesetzlich zulässig ist. Alle Rechte, insbesondere das Recht der Vervielfältigung und Verbreitung, sowie der Übersetzung, bleiben vorbehalten. Kein Teil der Dokumentation darf in irgendeiner Form (durch Fotokopie, Mikrofilm oder ein anderes Verfahren) ohne vorherige Zustimmung von Libelle reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden. ® ® ® Libelle, das Libelle Logo, BusinessShadow , DBShadow und FSShadow sind eingetragene Warenzeichen der Libelle AG. Alle weiteren genannten Marken- und Produktnamen sind Bezeichnungen und zum Teil eingetragene Warenzeichen der jeweiligen Firmen. Dieses Produkt verwendet die nachfolgenden Bibliotheken: avalon (Apache License Version 2.0) batik (Apache License Version 2.0) boost 1.49.0 (Boost Software License - Version 1.0 - August 17th, 2003) commons (Apache License Version 2.0) eclipse 3.6 (Eclipse Public License - v 1.0) fop 1.1 (Apache License Version 2.0) jsyntaxpane 0.9.5-b29-custom1 (Apache License Version 2.0) junit 4.8.1 (BSD License Copyright (c) 2000-2006, www.hamcrest.org) ldap 0 (The OpenLDAP Public License Version 2.8, 17 August 2003) log4j 1.2.15 (Apache License Version 2.0) org-netbeans-lib-profiler-treetable repack (COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0) serializer (Apache License Version 2.0) xalan (Apache License Version 2.0) xercesc 3.1.1 (Apache License Version 2.0) xercesImpl (Apache License Version 2.0) xml-apis (Apache License Version 2.0, W3C® DOCUMENT LICENSE, W3C® SOFTWARE NOTICE AND LICENSE) xmlgraphics (Apache License Version 2.0) Die Lizenzen sind abgelegt im Verzeichnis LSC_HOME/docs/3rdparty_licenses. Programmierhandbuch Libelle SystemCopy Inhaltsverzeichnis 1 Übersicht................................................................ 1 2 Globale Parameter................................................. 3 3 Lokale Parameter................................................... 5 4 Tabellen-Parameter................................................ 7 5 Bedingungen.......................................................... 9 6 Datum und Uhrzeit................................................ 13 7 Allgemeine Funktionen......................................... 17 8 Attribute der Konfiguration.................................. 23 9 Attribute der Ausführung...................................... 25 10 Systemattribute.................................................... 27 11 Attribute des Kopierwerkzeugs.......................... 31 12 Attribute externer Tools...................................... 33 13 Taskattribute......................................................... 35 14 Alarmattribute...................................................... 39 15 Alias...................................................................... 43 16 Verwendung des JDBC-Connectors.................. 45 17 Verwendung des SAP-Connectors..................... 53 Inhaltsverzeichnis • III Libelle SystemCopy Programmierhandbuch 18 Index .................................................................... IV• Inhaltsverzeichnis 59 Programmierhandbuch Libelle SystemCopy 1 Übersicht Dieses Programmierhandbuch wurde verfasst, um den Programmierern, die eigene Tasks erstellen, einen Überblick über die Parameter der Libelle SystemCopy zu geben. Es gibt verschiedene Parametertypen, die alle in den folgenden Kapiteln beschrieben sind. Parameter der Libelle SystemCopy sind unabhängig von Großund Kleinschreibung. Parameternamen können aus den 26 Grundbuchstaben des Alphabets gebildet werden, von a-z oder A-Z, ebenso aus den Ziffern 0-9 sowie dem Unterstrich. Jeder Parametername muss mindestens einen Buchstaben enthalten. Geklammerte Parameterschlüsselwörter dürfen nicht in Anführungszeichen gesetzt zu werden. Die Beschreibung der Parameter und Funktionen zusammen mit den Beispielen sollte Ihnen dabei helfen, Probleme beim Taskprogrammieren zu beheben. Falls dennoch Probleme bestehen bleiben, wenden Sie sich bitte an das Libelle Professional Services Team. Übersicht • 1 Libelle SystemCopy 2 • Übersicht Programmierhandbuch Programmierhandbuch Libelle SystemCopy 2 Globale Parameter Ein globaler Parameter ist ein vom Libelle SystemCopy Benutzer manuell definierter Parameter, der von allen Tasks genutzt werden kann. Die Abbildung unten zeigt, wie globale Parameter mit dem Grafischen Leitstand gesetzt werden können. Um einen globalen Parameter vom Code aus auszulesen, benutzen Sie folgende Syntax: $_param(<parameter_name>)_$ Globale Parameter • 3 Libelle SystemCopy Programmierhandbuch Das ursprüngliche Code-Beispiel sappfpar pf=$_param(target_profile_file)_$ all | findstr rdisp/max_wprun_time würde wie folgt ersetzt: sappfpar pf=C:\usr\sap\SID\profile\sid_DVEBMSG003_profile all | findstr rdisp/max_wprun_time Für bestimmte Plattformen werden standardmäßig globale Parameter bereitgestellt, diese können ohne weitere Definition angesprocen werden. Siehe separate Dokumentation über Importierte globale Parameter. Hinweis: Bevor eine Task nach dem Wert eines $_param(<name>)_$ bei den globalen Parametern sucht, prüft sie, ob $_param(<name>) als lokaler Parameter definiert ist. Ein lokaler Parameter ist dem gleichnamigen globalen Parameter übergeordnet. Siehe Kapitel Lokale Parameter. 4 • Globale Parameter Programmierhandbuch Libelle SystemCopy 3 Lokale Parameter Ein lokaler Parameter ist ein für eine bestimmte Task geschaffener Parameter. Er wird in einer Taks definert, und nur diese Task kann den Parameter benutzen. Lokale Parameter können mit dem Taskdialog gesetzt werden. Um einen lokalen Parameter in einer Task zu benutzen, verwenden Sie die folgende Syntax: $_param(<parameter_name>)_$ Lokale Parameter • 5 Libelle SystemCopy Programmierhandbuch Das ursprüngliche Code-Beispiel REPORT zsm02add. START-OF-SELECTION. CALL FUNCTION 'SM02_ADD_MESSAGE' EXPORTING message = '$_param(MESSAGE1)_$' message2 = '$_param(MESSAGE2)_$' message3 = '$_param(MESSAGE3)_$' würde wie folgt ersetzt: REPORT zsm02add. START-OF-SELECTION. CALL FUNCTION 'SM02_ADD_MESSAGE' EXPORTING message = 'WARNING: SAP System Copy will be executed!' message2 = '' message3 = '' Für bestimmte ausgelieferte Tasks sind standardmäßig einige lokale Parameter verfügbar, diese können ohne weitere Definition angesprocen werden. Siehe separate Dokumentation über Importierte lokale Parameter. 6 • Lokale Parameter Programmierhandbuch Libelle SystemCopy 4 Tabellen-Parameter Bei Parametern mit dem Typ "table" kann mithilfe des folgenden Platzhalters auf die gesamte Tabelle oder gewählte Spalten oder Zeilen in verschiedenene Formaten zugreifen: $_table(paramName, output, rowSelection, columns)_$ Das Argument paramName muss angegeben werden, die restlichen Argumente haben Standard-Werte, die greifen, sollten sie nicht überschrieben werden. Zusätzlich zu den globalen und TaskParametern gibt es zum Zugriff auf die Mandanten-Tabelle die virtuellen Parameter ?system(ROLE, clients), wobei ROLE wie beim system-Platzhalter (siehe im entsprechenden Kapitel) "current", eine System-Rolle oder eine System-ID sein kann. Diese Tabelle hat das interne Format table{id:string{3,3}; username; password:password; logsys; copy:bool; default:bool:unique}, ihre Spalten heißen also id, username, password, logsys, copy und default. Mögliche Werte für output sind: • • • csv(RowSeperator, CellSeperator): Standard-Wert. Gibt die Tabelle als CSV-Text aus, wobei die Zeilen- und ZellenTrennzeichen angegeben werden können. Standard-Werte dafür sind Zeilenwechsel und Semikolon. Beide müssen hier umgeben von " angegeben werden. Dabei wird \n durch einen Zeilenwechsel, \r durch einen Wagenrücklauf, \t durch einen Tab, \" durch ein Anführungszeichen und \\ durch einen \ ersetzt. Enthält die Zelle eines der Zeichen ";:, oder Tab, wird sie in " eingeschlossen und enthaltene " werden verdoppelt. csvFile(fileName, RowSeperator, CellSeperator): wie csv, jedoch wird der Text in eine Datei auf dem Worker ausgegeben. fileName hat den Standard-Wert paramName + ".csv". Diese Datei wird im task_home-Verzeichnis ausgegeben, der Platzhalter durch ihren absoluten Pfad ersetzt. lsh(variableName): erzeugt LSH-Code, der eine LSH-Variable vom Typ Tabelle anlegt und mit den Werten der auszugebenden Tabelle füllt. Jede Zeile (Schlüssel: Index ab 1) ist wiederrum Tabellen-Parameter • 7 Libelle SystemCopy Programmierhandbuch eine Tabelle, wobei die Spalten-Namen der Schlüssel sind. Standard-Wert für variableName ist paramName. Mit dem Argument rowSelection können Bedingungen angegeben werden, die für jede Zeile entscheiden, ob sie ausgegeben wird. Mehrere Bedingungen müssen durch Semikolon getrennt werden, und können SpaltenName = Wert, SpaltenName != Wert oder eine Zeilennummer (beginnend bei 1) sein. Im Argument columns können, durch Semikolon getrennt, die auszugebenden Spalten mittels ihrer Namen oder ihrer Indexe (beginnend mit 1) gewählt werden. Ist nichts angegeben, werden alle Spalten ausgegeben. 8 • Tabellen-Parameter Programmierhandbuch Libelle SystemCopy 5 Bedingungen Mithilfe verschiedener Bedingungen lässt sich der Ablauf einer Task steuern. Dies ist beispielsweise sehr hilfreich, um den Code abhängig von der eingesetzten SAP-Version gestalten zu können. Eine Bedingung wird mit folgendem Platzhalter formuliert: $_if(condition, then)_$ Wenn die von umgebenden Whitespaces befreite (getrimmte) condition "true" ist, unabhängig von Groß- und Kleinschreibung, wird der Platzhalter durch das getrimmte then ersetzt, sonst durch nichts. Das then darf dabei z. B. Zeilenwechsel, Klammern, Kommata und andere Platzhalter enthalten, nicht aber allein stehende _$. Die Zeichenkombination _$ könnte allerdings durch zwei hintereinander folgende Bedingungen erzeugt werden, wobei die erste den Unterstrich und die zweite das Dollarzeichen ausgibt. Für alle Platzhalter dieses Kapitels gilt: Whitespaces hinter der ersten öffnenden Klammer, vor der letzten schließenden Klammer und rund um Kommata außerhalb des then werden ignoriert. Condition-Platzhalter Die folgenden Platzhalter der condition werden durch "true" ersetzt, wenn die zugehörige Bedingung zutrifft. Anderenfalls nehmen die Platzhalter den Wert "false" an. Wenn condition oder ein Argument von and, or oder not weder "true" noch "false" ist, wird ein Fehler geworfen. Bedingungen • 9 Libelle SystemCopy Platzhalter $_lt(a, b)_$ $_le(a, b)_$ $_ne(a, b)_$ $_eq(a, b)_$ $_gt(a, b)_$ $_ge(a, b)_$ $_and(a, b)_$ $_or(a, b)_$ $_not(a)_$ Programmierhandbuch Bedingung a lexikografisch vor b a lexikografisch vor b oder gleich b a ungleich b a gleich b a lexikografisch hinter b a lexikografisch hinter b oder gleich b a als Boolean und b als Boolean a als Boolean oder b als Boolean a ist "false" Beispiel: Nehmen wir an, in einem ABAP-Programm müsste bei SAP-Versionen ab 720 noch die Funktion FutureFunction aufgerufen werden. Schreiben wir das aber in einen ABAP-Anweisungsblock, werden ältere SAP-Versionen Probleme bekommen, weil sie FutureFunction nicht kennen. Das darf also gar nicht als auszuführender Code im SAP-System landen, sondern muss ähnlich wie Präprozessor-Code zuvor abgehandelt werden. Der Task-Code könnte dann wie folgt aussehen: $_if($_ge($_system(current, sap.release)_$, 720)_$, CALL FUNCTION FutureFunction EXPORTING a = 'David'. )_$ Das alles wird bei SAP-Versionen kleiner als 720 komplett entfernt. Ab Versionsnummer 720 wird es durch Folgendes ersetzt: CALL FUNCTION FutureFunction EXPORTING a = 'David'. 10 • Bedingungen Libelle SystemCopy Programmierhandbuch SAP-Release-Bedingungen Für Verzweigungen, die von der SAP-Version abhängig sind, werden vereinfachte Platzhalter bereitgestellt. Das obige Beispiel lässt sich damit kompakter und übersichtlicher codieren: $_if_saprel_ge(720, CALL FUNCTION FutureFunction EXPORTING a = 'David'. )_$ Die SAP-Version muss natürlich bekannt sein, sonst würde der Vergleich mit einem leeren String durchgeführt und das Ergebnis möglicherweise verfälscht. Die folgenden SAP-Release-Bedingungen verursachen daher einen Fehler, wenn die SAP-Version nicht ermittelt werden kann. Kontrollieren Sie bitte im Graphischen Leitstand der Libelle SystemCopy, ob die SAP-Version richtig eingetragen ist: Einrichten → Systeme → <system> → SAP-Daten → SAP BasisRelease. Die SAP-Release-Bedingungen lassen sich durch diesen Ausdruck darstellen: $_if_saprel_operator(b, then)_$ Hierbei wird die Zeichenkette operator mit einem Kürzel der nachfolgenden Tabelle ersetzt. Die SAP-Version wird dann mit der entsprechenden Operation mit dem Wert b verglichen. Falls die Bedingung zutrifft, wird der Ausdruck durch den Wert then ersetzt, anderenfalls durch eine leere Zeichenkette. Kürzel gt ge eq ne lt le Bedeutung größer als größer gleich gleich ungleich kleiner als kleiner gleich Symbol > ≥ = ≠ < ≤ Bedingungen • 11 Libelle SystemCopy Programmierhandbuch Um zu prüfen, ob die SAP-Version in einem bestimmten Bereich liegt, können mit dem folgenden Ausdruck untere und obere Grenze sowie die zugehörigen Operatoren definiert werden. Zur unteren Grenze b definieren Sie als Operator lower entweder das Kürzel gt oder ge, siehe obige Tabelle. Zur oberen Grenze c definieren Sie entsprechend als Operator upper entweder das Kürzel lt oder le. $_if_saprel_lower_upper(b, c, then)_$ Die SAP-Version wird dann mit dem festgelegten Bereich verglichen. Falls die Bedingung zutrifft, die SAP-Version also innerhalb des Bereiches liegt, wird der Ausdruck durch den Wert then ersetzt, anderenfalls durch eine leere Zeichenkette. Beispiel: Die Funktion RangeFunction soll für den Fall aufgerufen werden, dass die SAP-Version zwischen 720 und 730 liegt. In diesem Bereich sei lediglich die untere Grenze eingeschlossen: $_if_saprel_ge_lt(720, 730, CALL FUNCTION RangeFunction EXPORTING a = 'Sarah'. )_$ 12 • Bedingungen Programmierhandbuch Libelle SystemCopy 6 Datum und Uhrzeit Um in Tasks mit Datum und Uhrzeit zu arbeiten, bietet Libelle SystemCopy eine Reihe von Platzhaltern, die im Folgenden vorgestellt werden. Zeitstempel Die folgenden Platzhalter werden durch einen Zeitstempel ersetzt. Diese Zeitstempel beziehen sich auf die UTC-Zeit auf dem Master und sind im ISO-8601-kompatiblen Format %Y%m %dT%H%M%S%F (ohne Zeitzonen-Angabe) geschrieben, z.B. 20160314T102601.913050 für den 14.03.2016 11:26:01 MEZ, denn MEZ ist UTC plus eine Stunde. Der letzte Teil %F sind Bruchteile einer Sekunde startend mit Punkt und je nach Plattform eventuell unterschiedlich lang. Sollte es keine solche Bruchteile geben, endet der String direkt nach den Sekunden ohne Punkt. Platzhalter $_now()_$ Bedeutung Die aktuelle Zeit, zu der dieser Platzhalter ersetzt wird, direkt vor dem Ausführen der Task. $_execution(startTime)_$ Der Start-Zeitpunkt der aktuellen Ausführung. $_task(UID, startTime)_$ Der Start-Zeitpunkt der frühesten TaskInstanz (ihr letzter Lauf zählt) einer anderen Task UID. $_task(UID, endTime)_$ Der End-Zeitpunkt der letzten Task-Instanz (ihr letzter Lauf zählt) einer anderen Task UID. Datum und Uhrzeit • 13 Libelle SystemCopy Programmierhandbuch Berechnungen Mit solchen Zeitstempeln kann gerechnet werden, indem eine bestimmte Dauer hinzugefügt oder entfernt wird. Der Platzhalter dafür lautet: $_timeCalc(timestamp, +/-duration)_$ Dabei muss timestamp dem Format %Y%m%dT%H%M%S%F (%F ist ein leerer String, wenn es keine Sekundenbruchteile gibt) folgen, in dem auch die Ersetzung des Platzhalters formatiert wird. Der Wert der Dauer, duration, kann zwei verschiedene Formate haben, mit Einheiten für Tage, Minuten usw. oder ohne, wobei die Stelle die Einheit angibt. Dauer mit Einheiten Die Dauer kann durch mehrere, optional mit Leerzeichen getrennte Folgen von Zahlen und dazugehörigen Einheit ausgedrückt werden. Beispiele: $_timeCalc(20151231T235900, +1 m)_$ --> 20160101T000000 $_timeCalc($_now()_$, - 1d 12h)_$ --> Zeitpunkt vor eineinhalb Tagen Mögliche Einheiten sind: d für Tage, h für Stunden, m für Minuten und s für Sekunden. Dauer ohne Einheit Die Einheiten von Zeitangaben können sich auch durch ihre Stelle ergeben, ähnlich wie bei Angaben der UTC-Abweichung. Jeweils zwei Ziffern ergeben einen Block. Blöcke sind optional durch Doppelpunkt voneinander getrennt. Die Anzahl der Blöcke ergibt die Einheit jedes Blocks. Zwei Blöcke sind %H%M, drei Blöcke %H%M%S, vier Blöcke %d%H%M%S, wobei d hier beliebig viele Ziffern haben darf. 14 • Datum und Uhrzeit Programmierhandbuch Libelle SystemCopy Beispiele: $_timeCalc(20151231T235900, +00:01)_$ --> 20160101T000000 $_timeCalc(20151231T235900, +0100)_$ --> 20160101T005900 $_timeCalc(20131231T235900, -365:00:00:00)_$ --> 20121231T235900 $_timeCalc($_now()_$, -1:12:00:00)_$ --> vor eineinhalb Tagen Zur besseren Lesbarkeit empfiehlt es sich, Doppelpunkte einzufügen. Sie ändern am Verhalten nichts, die duration des letzten Beispiels hätte ebenso mit -1120000 angegeben werden können. Formatierte Ausgabe Die Ausgabe solcher Zeitstempel kann wie folgt definiert werden: $_timeFormat(timestamp, pattern)_$ Dabei muss timestamp dem Format %Y%m%dT%H%M%S%F folgen (%F ist ein leerer String, wenn es keine Sekundenbruchteile gibt), pattern darf beliebige Zeichen (auch weitere Kommata) außer % enthalten. Folgende Ersetzungen im pattern finden statt, wenn nicht anders angegeben zweistellig mit führender 0: Muster %Y %y %m %B %b %d %A %a %H %I Bedeutung Jahr vierstellig Jahr Monat Voller Monatsname Abgekürzter Monatsname Tag Voller Wochentag Abgekürzter Wochentag Stunde 24h-Format Stunde 12h-Format Beispiel 1999 99 09 April Apr 31 Monday Mon 19 07 Datum und Uhrzeit • 15 Libelle SystemCopy %p %P %M %S %f %F Programmierhandbuch AM/PM am/pm Minute Sekunde Bruchteile einer Sekunde Wenn %f nur 0en wären: nichts, sonst Punkt + %f PM pm 58 59 000000 .123456 Abkürzungen Zur leichteren Benutzung sind die folgenden Abkürzungen definiert. $_toLocalTime(timestamp)_$ => $_timeCalc(timestamp, $_system(current, utcOffset)_$)_$ Dabei wird die UTC-Abweichung des Systems, für das die Task ausgeführt wird, zum timestamp addiert. $_timeFormatTr(timestamp)_$ => $_timeFormat(timestamp, %d.%m.%Y %H:%M:%S)_$ ® Gibt den Zeitstempel so aus, wie BusinessShadow ihn erwartet. $_toLocalTimeTr(timestamp)_$ => $_timeFormatTr($_toLocalTime(timestamp)_$)_$ Die UTC-Abweichung des Systems, für das die Task ausgeführt wird, wird zum timestamp addiert und das Ergebnis so ausgegeben, wie ® BusinessShadow es erwartet. 16 • Datum und Uhrzeit Libelle SystemCopy Programmierhandbuch 7 Allgemeine Funktionen Libelle SystemCopy bietet die folgenden Funktionen an, um die Taskprogrammierung zu vereinfachen. Die Funktionswerte werden dynamisch bestimmt und können in jeder Task verwendet werden. Funktion $_correct_path(a/b\c)_$ $_include(path[,row[,row]])_$ Beschreibung Ersetzt die Dateipfadtrennzeichen im Argument mit den Trennzeichen des lokalen Betriebssystems, d. h. Backslashs für Windows und Schrägstriche für Unix. Fügt den Inhalt der Datei mit dem angegebenen Pfad ein. Dateipfadtrennzeichen werden automatisch korrigiert. Optional kann eine bestimmte Zeile oder ein Block aus Zeilen ausgewählt werden. Dabei referenziert man die erste Zeile mit row = 1 usw. Negative Zeilennummern bedeuten, dass vom Dateiende zurück gezählt wird. Wenn beide Zeilenangaben vorhanden sind, so bedeuten sie von Zeile und bis Zeile. Ist nur eine Zeile angegeben, bedeutet das von dieser Zeile bis zum Dateiende. Wenn die Zeilenangaben nicht vorhanden sind, wird das gesamte Dokument eingefügt. Diese Funktion wird von einem Worker ausgeführt, Variablen innerhalb des einzufügenden Allgemeine Funktionen • 17 Libelle SystemCopy $_include_tool( path[,row[,row]])_$ $_tool_to_file( path[,targetPath])_$ $_abap_string_assign(name, value)_$ 18 • Allgemeine Funktionen Programmierhandbuch Textes können nicht aufgelöst werden. Dies dient vor allem dazu, den Inhalt von zuvor von anderen Tasks erzeugten Dateien einzubinden. Fügt den Inhalt einer Datei ein. Dabei werden Dateipfadtrennzeichen automatisch korrigiert und Platzhalter im Text ersetzt. Path ist hier der relative Pfad zum Tools_custom oder ToolsVerzeichnis. Optional kann eine bestimmte Zeile oder ein Block aus Zeilen ausgewählt werden. Dabei referenziert man die erste Zeile mit row = 1 usw. Diese Funktion wird nur vom Master ausgeführt und dient zur Auslagerung mehrfach genutzter Code-Stücke ins ToolsVerzeichnis. Schreibt den Inhalt der Tool-Datei in eine Datei. Path ist hier der relative Pfad zum Tools_custom oder Tools-Verzeichnis. Mit dem Parameter targetPath kann die Datei an einen anderen Pfad, entweder absolut oder relativ zu TASK_HOME, geschrieben werden. Auf Unix ist diese Datei ausführbar. Der Platzhalter im Task-Code wird ersetzt durch den Pfad der geschriebenen ToolDatei. Erzeugt ABAP-Code, der den value der Variablen name zuweist. Dabei wird das Limit von 72 Zeichen pro Zeile durch Verkettung von Teilstrings umgangen. Der Programmierhandbuch $_date([format][, diff])_$ $_warnIfEmpty(s)_$ $_errorIfEmpty(s)_$ $_snippet(sName)_$ $_snippet_to_file(sName [, sPath])_$ Libelle SystemCopy Name darf maximal 24 Zeichen lang sein. Der Platzhalter date liefert das aktuelle Tagesdatum. Als Format wird zunächst nur YYYYMMDD unterstützt. Für eine optionale Zeitdifferenz steht der Parameter diff bereit. Es können Minuten (m), Stunden (h) oder Tage (d) ergänzt bzw. abgezogen werden: <diff> ::= + | -<Anzahl><m | h | d>. Meldet eine Warnung, wenn s der leere String ist oder höchstens Leerzeichen enthält. Der Platzhalter wird durch s ersetzt. Dadurch wird die Ausführung nicht unterbrochen, und die Task wird nicht automatisch gelb im Reiter Überwachen des Grafischen Leitstands. Meldet einen Fehler, für den Fall, dass s der leere String ist oder höchstens Leerzeichen enthält. Die Systemkopie kann dann nicht fortgesetzt werden, und die Task wird nicht automatisch rot im Reiter Überwachen des Grafischen Leitstands. Anderenfalls wird der Platzhalter durch s ersetzt. Ersetzt den Platzhalter mit dem Wert des Snippets sName. Schreibt den Wert des Snippets sName in eine Datei. Der Standardpfad ist dabei TASK_HOME/sName. Mit dem Parameter sPath kann die Datei an einen anderen Pfad, entweder absolut oder relativ zu TASK_HOME, geschrieben Allgemeine Funktionen • 19 Libelle SystemCopy $_lower(text)_$ $_upper(text)_$ 20 • Allgemeine Funktionen Programmierhandbuch werden. Der Platzhalter im TaskCode wird ersetzt durch den Pfad der geschriebenen Snippet-Datei. Ersetzt im Text alle Großbuchstaben A-Z durch entsprechende Kleinbuchstaben a-z (keine Sonderzeichen wie z.B. Umlaute). Ersetzt im Text alle Kleinbuchstaben a-z durch entsprechende Großbuchstaben A-Z (keine Sonderzeichen wie z.B. Umlaute). Programmierhandbuch Libelle SystemCopy Beispiele Folgender Ausdruck im Task-Code wird durch den Dateiinhalt von inf.txt im lsc-Home-Verzeichnis ersetzt: $_include($_system(current, lsc.home)_$/inf.txt)_$ Folgender Ausdruck im Task-Code wird durch den lsc_bdls_header im Verzeichnis LSC_HOME\tools\mssql\ ersetzt. Dabei wird ein im Header selbst enthaltener lsc-Systemparameter aufgelöst. $_include_tool(mssql/lsc_bdls_header.sql)_$ Immer fünf Tage nach der Task-Ausführung ist das Ablaufdatum expires erreicht. expires=$_date(YYYYMMDD, +5d)_$ Allgemeine Funktionen • 21 Libelle SystemCopy 22 • Allgemeine Funktionen Programmierhandbuch Libelle SystemCopy Programmierhandbuch 8 Attribute der Konfiguration Die Tabelle unten beschreibt die Attribute der Konfiguration, die mit der nachfolgenden Syntax bestimmt werden können: $_config(<attribut>)_$ Attribut name master.hostname master.port Beschreibung Der Name der gegenwärtigen Konfiguration. Der Name des Rechners, auf dem der Master der Konfiguration läuft. Der Port für die Kommunikation mit dem Master-Server. Beispiel Folgender Ausdruck im Task-Code wird durch den Namen des Rechners, auf dem der Master-Server der Konfiguration läuft, ersetzt. $_config(master.hostname)_$ Attribute der Konfiguration • 23 Libelle SystemCopy 24 • Attribute der Konfiguration Programmierhandbuch Libelle SystemCopy Programmierhandbuch 9 Attribute der Ausführung Die Tabelle unten beschreibt die Attribute der Ausführung, die mit der nachfolgenden Syntax benutzt werden können: $_execution(<attribut>)_$ Attribut id startTime createdBy checksOnly Beschreibung Die ID der aktuellen Ausführung Die Start-Zeit der aktuellen Ausführung im Format %Y %m%dT%H%M%S%F, z.B. 20160314T102601.913050 Der Name des Benutzers, der die Ausführung gestartet hat. Ergibt true, falls nur Start-Checks ausgeführt werden, und false, falls alle Phasen ausgeführt werden. Beispiel Folgender Ausdruck im Task-Code wird durch die ID der Ausführung ersetzt: $_execution(id)_$ Attribute der Ausführung • 25 Libelle SystemCopy 26 • Attribute der Ausführung Programmierhandbuch Libelle SystemCopy Programmierhandbuch 10 Systemattribute Die Tabelle unten beschreibt die Systemattribute, die mit folgendem Aufruf bestimmt werden können: $_system(<rolle> | <systemID>, <attribut>)_$ Mögliche Werte für rolle sind • • • • • source_db source_sap target_db target_sap current Anstelle der Rolle können Sie auch die Systemkennung (SystemID) angeben. Da eine Konfiguration mehrere Satelliten enthalten kann, ist die Rolle satellit mehrdeutig und passt nicht notwendigerweise zu einem physischen System. Daher kann sie auch nicht dazu verwendet werden, einen bestimmten Satelliten zu identifizieren. Nichtsdestotrotz kann die Rolle current in Tasks benutzt werden, die auf beliebigen Serverkomponenten ausgeführt werden, um lokale Systemattribute zu bestimmen, also auch auf Satelliten. Attribut id hostname worker.hostname utcOffset jre_home os.name os.version Beschreibung Systemkennung (SystemID). Der Rechnername dieses Systems. Der Name des Rechners, wo der Worker dieses Systems läuft. Die Abweichung der lokalen Zeit zur UTC, z.B. +0100 Pfad zum Java Runtime Environment, der das Bin-Verzeichnis enthält. Name des Betriebssystems, z. B. Linux. Die Version des Betriebssystems. Systemattribute • 27 Libelle SystemCopy os.user lsc.home lsc.version db.type db.name db.instance db.user db.password db.home db.port db.abap_stack. schema_user db.abap_stack. schema_password db.java_stack. schema_user db.java_stack. schema_password sap.type sap.release sap.support_stack sap.system_id sap.instance_number sap.sidadm.user sap.sidadm.password sap.license_type sap.license_path 28 • Systemattribute Programmierhandbuch Der Benutzername des Betriebssystems. Das Home-Verzeichnis der Libelle SystemCopy, endet nicht mit / oder \. Die Version der Libelle SystemCopy. Der Datenbankproduktname, z. B. DB2. Der Datenbankname. Die Instanz, zu der die Datenbank gehört. Ein registrierter Benutzername für Datenbankverbindungen. Das Passwort zum Benutzer für Datenbankverbindungen. Installationsverzeichnis der Datenbank, endet nicht mit / oder \. Der Datenbankport ist notwendig für Sybase ASE oder DB2 zOS. Der Benutzer des ABAP-Schemas Das Password des ABAP-Schemas. Das Schema zum Java-Stack. Das Passwort des Java-Stack-Schemas. Der Typ des SAP-Systems, z. B. CRM. Das SAP Basis-Release, z.B. 720. Der Support-Package-Level des SAP Basis-Releases, zu finden neben dem SAP Basis-Release im SAPGUI. Name des SAP-Systems. Die Instanznummer für die Kommunikation, z. B. 00. Der Benutzername des Betriebssystembenutzers <sid>adm. Das Passwort des Betriebssystembenutzers <sid>adm. Alter oder neuer Lizenztyp. Der Pfad zur SAP-Lizenz. Programmierhandbuch Libelle SystemCopy sap.java_instance_home Das Verzeichnis, wo die StandardKonfigurationsdateien für den Java-Stack im SAP-System untergebracht sind. sap.profile_file Dateipfad der aktuellen Profildatei, die der SAP-Application-Server benutzt. clients Die Mandanten-Tabelle als CSV-Text mit Semikolon als Trennzeichen. Um weitere Informationen über die Mandanten eines Systems herauszufinden, kann folgender Aufruf benutzt werden: $_system(<rolle>, client[nr].<mandant_attribut>)_$ Die Variable nr in obigem Ausdruck muss durch eine der folgenden Zahlen oder Zeichenketten ersetzt werden: • • • Mandanten-ID "current" (der Mandant, mit dem die Task ausgeführt wird) "default" (der Standardmandant) Die verfügbaren Mandantenattribute werden in nachstehender Tabelle beschrieben. Mandantenattribut id number user password logsysname copy default Beschreibung Die Mandantenkennung. Die Mandantenkennung. Der Benutzername des Mandanten Das Passwort des Mandanten. Logischer Systemname des Mandanten. Ist das Kopieren-Attribut für diesen Mandanten aktiviert? Ist dieser Mandant der Standardmandant? Systemattribute • 29 Libelle SystemCopy Programmierhandbuch Beispiele • • Der Datenbank-Home-Verzeichnispfad des Datenbankquellsystems mit den an das lokale Betriebssystem angepassten Pfadtrennzeichen: $_correct_path($_system(source_db, db.home)_$)_$ Wenn der folgende Ausdruck mit TRUE ersetzt wird, hat der Standardmandant des SAP Quellsystems das Kopieren-Attribut aktiviert: $_system(source_sap, client[default].copy)_$ 30 • Systemattribute Programmierhandbuch Libelle SystemCopy 11 Attribute des Kopierwerkzeugs Die Attribute des Kopierwerkzeugs hängen ab von der implementierten Lösung. Gegenwärtig unterstützen wir ® ® BusinessShadow mit seinen Komponenten DBShadow und ® FSShadow als Kopierwerkzeug. Siehe die verfügbaren Attribute in der nachstehenden Tabelle. Sie können mit folgendem Aufruf bestimmt werden: $_copy_tool(<attribut>)_$ Attribut tr.port Beschreibung ® Der Port der beteiligten DBShadow Systeme. tr.cfc_config_name Name der Copy-from-Copy-Konfiguration (Konfiguration AB). tr.config_name Name der Quelle-Ziel-Konfiguration (Konfiguration AC). ® tr.switch_at Der Zeitpunkt, zu dem DBShadow auf das Standby-System umschaltet. tr.recover_until Der Zeitpunkt, bis zu dem die StandbyDatenbank Logdateien recovert, ehe sie in Betrieb geht. tr.variant Produktabhängiger Name der Binärdatei, z. B. trd, trdb2, trsql, trsap, etc. ® tr.source.hostname Rechnername des DBShadow Quellsystems (A). ® tr.source.home Home-Verzeichnis des DBShadow Quellsystems (A), endet nicht mit / oder \. tr.cfc_target.hostname Rechnername des Copy-from-CopyZielsystems (B). tr.cfc_target.home Home-Verzeichnis des Copy-from-CopyZielsystems (B), endet nicht mit / oder \. ® tr.target.hostname Rechnername des DBShadow Zielsystems (C). Attribute des Kopierwerkzeugs • 31 Libelle SystemCopy tr.target.home trff.port trff.config_name trff.source.hostname trff.source.home trff.target.hostname trff.target.home Programmierhandbuch ® Home-Verzeichnis des DBShadow Zielsystems (C), endet nicht mit / oder \. ® Der Port der beteiligten FSShadow Systeme. ® FSShadow Konfigurationsname. ® Rechnername des FSShadow Quellsystems (Primärsystem). ® Home-Verzeichnis des FSShadow Quellsystems (Primärsystem), endet nicht mit / oder \. ® Rechnername des FSShadow Zielsystems (Sekundärsystem). ® Home-Verzeichnis des FSShadow Zielsystems (Sekundärsystem), endet nicht mit / oder \. Beispiele • • ® Den Namen der produktabhängigen DBShadow Binärdatei in einem Command-Script setzen: SET TR_BINARY=$_copy_tool(tr.variant)_$ ® Den Rechnernamen des FSShadow Sekundärsystems in einem Command-Script setzen: SET HOST=$_copy_tool(trff.target.hostname)_$ 32 • Attribute des Kopierwerkzeugs Libelle SystemCopy Programmierhandbuch 12 Attribute externer Tools Die Attribute von externen Tools hängen von den gewählten Tools ab. Gegenwärtig unterstützen wir Libelle DataMasking (ldm). Siehe die verfügbaren Attribute in der nachstehenden Tabelle. Sie können mit folgendem Aufruf bestimmt werden: $_tool(ldm, <attribut>)_$ Attribut hostname port protocol configuration username password Beschreibung Der Hostname auf dem der LDM server läuft. Der Port hinter dem der LDM server läuft. Das Protocol unter dem LDM erreichbar ist (http, https). Die LDM Konfiguration auf diesem Server, die verwendet werden soll. Der Benutzername, mit dem die Befehle an LDM abgesetzt werden sollen, wenn es Authentifizierung benötigt. Das zugehörige Passwort. Beispiel • Die URL des LDM-Frontends bestimmen: SET URL=$_tool(ldm, protocol)_$://$_tool(ldm, hostname)_$:$_tool(ldm, port)_$ Attribute externer Tools • 33 Libelle SystemCopy 34 • Attribute externer Tools Programmierhandbuch Libelle SystemCopy Programmierhandbuch 13 Taskattribute Die Tabelle unten beschreibt die Taskattribute, die mit folgendem Ausdruck bestimmt werden können: $_task(<uid>, <attribut>)_$ Erster Parameter ist entweder der Unique Identifier der Task oder der Begriff current. Attribut uid name task_home phase clientdependent active startTime endTime Beschreibung Der Unique Identifier der Task. Der Name der Task. Pfad, wo alle Ausführungsdateien der Task gespeichert sind. Die Phase, zu der die Task gehört, z. B. post. Ergibt true, falls die Task mandantenabhängig ist, andernfalls false. Ergibt true, falls die Task in der Konfiguration aktiviert ist, andernfalls false. Die Start-Zeit der frühesten Instanz einer anderen Task im Format %Y%m%dT%H%M %S%F, z.B. 20160314T102601.913050 Die End-Zeit der letzten Instanz einer anderen Task im Format %Y%m%dT%H%M %S%F, z.B. 20160314T105409.154675 Ausführungsdateien Tasks können spezielle Ausführungsdateien schreiben (output_files): datafile, custompath1, custompath2, ..., custompath5 für allgemeine Daten zur späteren Verwendung sowie logfile für den Fortschritt. Tasks müssen ihr Ergebnis im logfile festhalten, damit eine Zuordnung der Rückgabewerte und damit die Auswertung der Task stattfinden kann. Taskattribute • 35 Libelle SystemCopy Programmierhandbuch Die Pfade dieser Ausführungsdateien können mit folgender Syntax bestimmt werden: $_task(<uid>, <output_file>, system=<systemrole | systemID>, client=<client_id>)_$ Die Variablen system und client sind optional und können in beliebiger Reihenfolge angegeben werden. Sind sie nicht angegeben, werden die Werte der aktuellen Task probiert. Wenn es keine Task-Instanz der gegebenen UID mit den aktuellen Werten gibt, sondern genau eine Instanz, wird diese Instanz benutzt. Die Verwendung von Ausführungsdateien zum Datenaustausch bietet folgende Vorteile gegenüber herkömmlichen Dateien: • • • Ausführungsdateien können im Grafischen Leitstand angezeigt werden. Ausführungsdateien werden automatisch zum Master transportiert und stehen Tasks auch auf anderen Systemen zur Verfügung. Dabei spielt es keinen Rolle, wo jeweils der Pfad LSC_HOME eingerichtet ist. Ausführungsdateien werden nicht überschrieben, sondern werden mit einer angehängten Ziffer versehen, die bei jeder Ausführung erhöht wird. Somit bleiben Ausführungsdateien für die Auswertung erhalten. Beispiele • • • Der Pfad zur Datendatei der Task ABC für den Mandanten 100 auf dem SAP Zielsystem: $_task(ABC, datafile, system=target_sap, client=100)_$ Der Pfad zur Logdatei der Task DEF für den aktuellen Mandanten auf dem aktuellen System oder der einzigen Instanz von DEF: $_task(DEF, logfile)_$ Die Daten, die von Task LT000CS exportiert wurden, importieren: Import Client=all 36 • Taskattribute Programmierhandbuch • • Libelle SystemCopy file="$_task(LT000CS, datafile)_$" Informationen in eine Ausführungsdatei schreiben: echo information > $_task(current, custompath1)_$ Inhalt einer Ausführungsdatei verarbeiten: $_include($_task(GHI, custompath1)_$)_$ Taskattribute • 37 Libelle SystemCopy 38 • Taskattribute Programmierhandbuch Programmierhandbuch Libelle SystemCopy 14 Alarmattribute Die Tabelle unten beschreibt die Alarmattribute, die mit dem folgenden Ausdruck bestimmt werden können: $_alert(<attribut>)_$ Attribut email.enabled email.messagetypes email.messagenumbers repeat.time email.server email.recipient email.sender email.user email.password Beschreibung Liefert true, wenn E-MailAlarmierung aktiviert ist, andernfalls false. Die aktivierten Meldungstypen als Summe der Typwerte: 0 - Nichts 1 - Fehler 2 - Warnung 4 - OK Nummern und Nummernbereiche der Meldungsnummern, die alarmiert werden, werden mit Semikolon getrennt gelistet, z. B. 1; 3; 5-10. Die Zeit in Sekunden, die verstreichen muss, ehe die gleiche Meldung abermals E-Mail-Alarm auslöst. Name des Mail-Servers oder eine Liste von Servern, getrennt durch Semikolon. E-Mail-Adresse des Empfängers. Der Absender der E-Mail. Ein gültiger Benutzer mit Zugang zum Mail-Server. Das Passwort zum Benutzer mit Zugang zum Mail-Server. Alarmattribute • 39 Libelle SystemCopy snmp.enabled snmp.messagetypes snmp.messagesnumbers snmp.repeattime snmp.server snmp.community snmp.objectid winevents.enabled winevents.messagetypes winevents.messagenumbers 40 • Alarmattribute Programmierhandbuch Liefert true, wenn SNMPAlarmierung aktiviert ist, andernfalls false. Die aktivierten Meldungstypen als Summe der Typwerte: 0 - Nichts 1 - Fehler 2 - Warnung 4 - OK Nummern und Nummernbereiche der Meldungsnummern, die alarmiert werden, werden mit Semikolon getrennt gelistet, z. B. 1; 3; 5-10. Die Zeit in Sekunden, die verstreichen muss, ehe die gleiche Meldung abermals SNMP-Alarm auslöst. Name des SNMP-Servers oder eine Liste von Servern, mit Semikolon getrennt. Name der Community. Die SNMP-Trap Objektkennung. Liefert true, wenn WindowsEvents-Alarmierung aktiviert ist, andernfalls false. Die aktivierten Meldungstypen als Summe der Typwerte: 0 - Nichts 1 - Fehler 2 - Warnung 4 - OK Nummern und Nummernbereiche der Meldungsnummern, die alarmiert werden, werden mit Semikolon getrennt gelistet, z. B. 1; 3; 5-10. Programmierhandbuch Libelle SystemCopy winevents.repeattime Die Zeit in Sekunden, die verstreichen muss, ehe die gleiche Meldung abermals ein WindowsEvent auslöst. Beispiele • Wie lautet der Name des Mail-Servers? • Welche Ereignisse lösen SNMP-traps aus? $_alert(email.server)_$ $_alert(snmp.messagetypes)_$ Nehmen wir an, der Rückgabewert sei 3. Das bedeutet, dass Fehler (1) und Warnungen (2) SNMP-Traps hervorrufen. Alarmattribute • 41 Libelle SystemCopy 42 • Alarmattribute Programmierhandbuch Programmierhandbuch Libelle SystemCopy 15 Alias Für häufig gebrauchte Systemparameter werden praktische Alias als Kurzformen bereitgestellt. Die Alias sind in der folgenden Tabelle aufgelistet. $_Alias_$ ist somit gleichbedeutend mit $_Entsprechung_$. Auch bei den Alias gilt: Groß- oder Kleinschreibung ist irrelevant. Alias logFile dataFile customPath1 customPath2 customPath3 customPath4 customPath5 traceFile taskHome uid taskVersion hostName lscHome lscVersion client defaultClient logsys logsys_old logsys_new Entsprechung task(current, logfile) task(current, datafile) task(current, custompath1) task(current, custompath2) task(current, custompath3) task(current, custompath4) task(current, custompath5) task(current, tracefile) task(current, task_home) task(current, uid) task(current, version) system(current, hostname) system(current, lsc.home) system(current, lsc.version) system(current, client[current].number) system(current, client[default].number) system(current, client[current].logsysname) system(source_sap, client[current].logsysname) system(target_sap, client[current].logsysname) Alias • 43 Libelle SystemCopy Programmierhandbuch Beispiele • • Die erwartete Ausgabe einer Command-Task in die Logdatei umleiten: R3trans -d > $_logFile_$ Tabellen mit Struktur und Inhalt speichern. Genutzt in ExportTasks, um Datendateien für die zugehörigen Import-Tasks zu erzeugen: Export Client=all file="$_dataFile_$" select * from T000 44 • Alias Libelle SystemCopy Programmierhandbuch 16 Verwendung des JDBC-Connectors Der Libelle SystemCopy JDBC-Connector (lscjc) kann in eine Systemarchitektur eingebunden werden, um über eine JDBCVerbindung SQL-Statements auf einer Datenbank auszuführen. Das ist wichtig für den Fall, dass die Datenbank nicht auf dem eigentlichen Server läuft, sondern auf einem verbundenen Rechner, wie z. B. in einem z/OS oder einem System i Umfeld. lscjc ist ein Konsolenprogramm und wird als Java-Archiv im Verzeichnis plugins/task_execute ausgeliefert. Dies ist eine kurze Übersicht über das Programm mit einem Beispiel, wie wir empfehlen es zu benutzen. Aber zunächst sollten Sie einen Blick auf den lscjc Hilfebildschirm mit den Parametern werfen. Dazu geben Sie folgendes Kommando an Ihrer Konsole ein, wo Java und lscjc verfügbar sind: >java -jar lscjc.jar -h Libelle JDBC Connector lscjc Libelle AG Usage: lscjc.jar <check connection> Only check the connection to the database. Execute statements. Show help. Show version. or lscjc.jar <exec_statements> or lscjc.jar -h or lscjc.jar -v <check connection> ::= [<loadJars>] [<jdbc>] -check_connection [<files>] [<connection>] [<user>] [<password>] [<options>] <exec_statements> ::= [<loadJars>] [<jdbc>] [<files>] [<connection>] [<user>] [<password>] [<options>] Verwendung des JDBC-Connectors • 45 Libelle SystemCopy <files> Programmierhandbuch ::= [<input>] [<output] [<error>] [<trace>] <loadJars> ::= -load <jars> <jdbc> ::= -jdbc <jdbc-driver> <input> ::= -i <input-file> <output> ::= -o <output-file> <error> ::= -e <error-file> <connection> ::= -connection <conn-string> <user> ::= -user <user-name> <password> ::= -password <password-text> <options> ::= -options <(no_)feedback, (no_)heading> 46 • Verwendung des JDBC-Connectors Jars containing the jdbc driver, seperated by comma. Connect to database with the class name <jdbc-driver>. Get the commands from the file. Contains the results from the SQL statemenets. Contains the error messages. Databasespecific connection string. Defines the user. Defines the password. Feedback: shows all messages from lscjc. Heading: shows all headings from the selected tables. Libelle SystemCopy Programmierhandbuch <trace> ::= -t <trace-file> Contains the trace. The lscjc parameters can be replaced with the following environment variables: LSCJC_LOAD_JARS LSCJC_JDBC_DRIVER LSCJC_INPUT_FILE LSCJC_OUTPUT_FILE LSCJC_ERROR_FILE LSCJC_CONNECTION LSCJC_USER LSCJC_PASSWORD LSCJC_OPTIONS ::= ::= ::= ::= ::= ::= ::= ::= ::= -load <jars> -jdbc <jdbc-driver> -i <input-file> -o <output-file> -e <error-file> -connection <conn-string> -user <user-name> -password <password-text> -options <(no_)feedback, (no_)heading> The lscjc paramters have a higher priority than the environment variables. In addition to the SQL statements of the inputfile, you can use the following commands: Internal Statements: if <cond> then <statement>; [else <statement>;] fi echo <text>; Only integer values are allowed for the if-elsestatemenet. Displays the text on stdout or in the output file. Internal Variables: $_exec_status_$ if ($_exec_status_$ == 0) the statement was successful. if ($_exec_status_$ != 0) the statement was not successful. $_row_count_$ Returns the number rows resulting from select, input, delete or update. Verwendung des JDBC-Connectors • 47 Libelle SystemCopy Write Comments: /* <text> */ // <text> # <text> Programmierhandbuch Text from /* to */ is commented. Text from // to the end of the line is commented. Text from # to the end of the line is commented. Ein JDBC-Treiber für Ihre Datenbank wird benötigt für die Datenbankverbindung (LOAD), ebenso der Klassenpfad der Klasse, die die Verbindung einrichtet (DRIVER) sowie den zugehörigen Verbindungsstring (CONNECTION). Diese Informationen finden Sie in Ihrem Datenbankhandbuch oder in den nachfolgenden Beispielen. DB2 LOAD DRIVER CONNECTION db2jcc.jar,db2jcc_license_cisuz.jar com.ibm.db2.jcc.DB2Driver jdbc:db2://$SERVER:$PORT/$DBNAME MySQL LOAD DRIVER CONNECTION mysql-connector-java-5.1.12-bin.jar com.mysql.jdbc.Driver jdbc:mysql://$SERVER:$PORT/$DBNAME Sybase LOAD DRIVER CONNECTION jConn4.jar,jTDS3.jar com.sybase.jdbc4.jdbc.SybDriver jdbc:sybase:Tds:$SERVER:$PORT/$DBNAME 48 • Verwendung des JDBC-Connectors Libelle SystemCopy Programmierhandbuch Die SQL-Query wird als Textdatei mit dem Eingabeparameter -i übergeben. Das Ergebnis wird an die Konsole ausgegeben, es sei denn, Sie geben eine Ausgabedatei mit dem Parameter -o an. Mit den Optionen feedback und heading können Sie festlegen, ob Datenbankmeldungen oder Spaltenüberschriften zurückgegeben werden oder nicht. Permanenter Trace wird nach <lsc-home>/lscjc_trace/ lscjc_trace<timestamp>.txt geschrieben. Dieser Pfad kann über den Parameter -t <trace-file> bei einem lscjc-Aufruf geändert werden. Wenn Sie Fragen haben, wenden Sie sich bitte an das Libelle Professional Service Team. Beispiel 1. Die Umgebung für lscjc mithilfe des folgenden Shell-Skripts setzen: SAP_NAME=$_system(current, Sap.system_id)_$ JAVA_HOME=$_system(current, jre_home)_$ DB_SERVER=$_param(DB2ZOS_$_current_role_$_SERVER)_$ DB_PORT=$_param(DB2ZOS_$_current_role_$_PORT)_$ DB_NAME=$_system(current, Db.name)_$ LSCJC_USER=$_system(current, Db.user)_$ LSCJC_PASSWORD=$_system(current, Db.password)_$ export export export export export export JAVA_HOME DB_SERVER DB_PORT DB_NAME LSCJC_USER LSCJC_PASSWORD LSC_LOAD=/sapmnt/$SAP_NAME/global/db2/jdbc/db2jcc.jar LSC_LOAD=$LSC_LOAD,/sapmnt/$SAP_NAME/global/db2/jdbc/ db2jcc_license_cisuz.jar export LSC_LOAD LSCJC_DRIVER="com.ibm.db2.jcc.DB2Driver" export LSCJC_DRIVER Verwendung des JDBC-Connectors • 49 Libelle SystemCopy Programmierhandbuch LSCJC_CONNECTION_STRING="jdbc:db2://$DB_SERVER: $DB_PORT/$DB_NAME" export LSCJC_CONNECTION_STRING 2. LSCJC_PARAMS=" -load $LSC_LOAD -jdbc $LSCJC_DRIVER -connection $LSCJC_CONNECTION_STRING -user $LSCJC_USER -password $LSCJC_PASSWORD" export LSCJC_PARAMS Eine SQL-Query absetzen: >java -jar lscjc.jar -options feedback -i $_execfile_$.sql -o $_logFile_$ $LSCJC_PARAMS Die folgenden Meldungen sind die möglichen Rückgabewerte eines Aufrufs des JDBC Connectors lscjc. OK-Meldungen LSCJC-1000: LSCJC-1001: LSCJC-1002: LSCJC-1003: LSCJC-1004: LSCJC-1005: LSCJC-1006: LSCJC-1007: LSCJC-1008: LSCJC-1009: LSCJC-1010: LSCJC-1011: LSCJC-1012: Verbunden mit Datenbank (...) mit Benutzer (...). Abgemeldet von der Datenbank (...). Anweisung erfolgreich ausgeführt. (...) Datensätze selektiert. (...) Datensätze aktualisiert. (...) Datensätze eingefügt. (...) Datensätze gelöscht. Tabelle erfolgreich angelegt. View erfolgreich angelegt. Index erfolgreich angelegt. Tabelle erfolgreich gelöscht. View erfolgreich gelöscht. Index erfolgreich gelöscht. 50 • Verwendung des JDBC-Connectors Libelle SystemCopy Programmierhandbuch Warnungen LSCJC-2000: LSCJC-2001: LSCJC-2002: LSCJC-2003: LSCJC-2004: 0 Datensätze ausgewählt. 0 Datensätze aktualisiert. 0 Datensätze eingefügt. 0 Datensätze gelöscht. Eingabedatei ist leer. Fehlermeldungen LSCJC-3000: LSCJC-3001: LSCJC-3002: LSCJC-3003: LSCJC-3004: LSCJC-3005: LSCJC-3006: LSCJC-3007: LSCJC-3008: LSCJC-3009: LSCJC-3010: LSCJC-3011: LSCJC-3012: LSCJC-3013: Keine Verbindung zur Datenbank, <jdbc-driver> ist falsch oder existiert nicht. Keine Verbindung zur Datenbank (...), Verbindungsdaten fehlen oder sind falsch. Keine Verbindung zur Datenbank (...), Benutzer oder Passwort ist falsch. Fehler bei Ausführung, Kommando (...) Syntaxfehler. Tabelle konnte nicht angelegt werden. View konnte nicht angelegt werden. Index konnte nicht angelegt werden. Tabelle konnte nicht gelöscht werden. View konnte nicht gelöscht werden. Index konnte nicht gelöscht werden. (...) ist kein gültiger Parameter oder unerwartet an dieser Position. Zu viele Parameter an lscjc übergeben. Für die Ausführung von lscjc fehlen Parameter. SQL-Anweisung nicht mit Semikolon beendet. Verwendung des JDBC-Connectors • 51 Libelle SystemCopy 52 • Verwendung des JDBC-Connectors Programmierhandbuch Programmierhandbuch Libelle SystemCopy 17 Verwendung des SAP-Connectors Der Libelle SystemCopy SAP Connector (lscsc) kann in eine Systemarchitektur eingebunden werden, um über SAP-Verbindungen ABAP-Programme oder SAP-Transaktionen auszuführen. Derartig verwendet lsc lscsc, um ABAP-Tasks und TX-Tasks auszuführen. lscsc kann aber auch schlicht dazu benutzt werden, um zu prüfen, ob eine Verbindung zu einem SAP-System hergestellt werden kann. lscsc ist ein Konsolenprogramm und wird als Java-Archiv im Verzeichnis plugins/task_execute ausgeliefert. Dies ist eine kurze Übersicht über das Programm mit Beispielen, wie es eingesetzt werden kann. Systemanforderungen Ein Java-Runtime-Environment (jre) Version 1.4 oder neuer wird benötigt, um lscsc auszuführen. Außerdem werden verschiedene Bibliotheken für die Kommunikation mit SAP via Remote Function Call (RFC) benötigt. Der Einsatz der Bibliotheken hängt ab vom Betriebssystem. Die folgende Tabelle zeigt die erforderlichen Bibliotheken sowie die zugehörigen Umgebungsvariablen, welche den Pfad zu diesen Bibliotheken enthalten müssen. Verwendung des SAP-Connectors • 53 Libelle SystemCopy Betriebssystem AIX HP-UX Linux Solaris Windows Programmierhandbuch Bibliotheken librfccm.o, libsapjcorfc.so librfccm.so, libsapjcorfc.so librfccm.so, libsapjcorfc.so librfccm.so, libsapjcorfc.so librfc32.dll, sapjcorfc.dll 54 • Verwendung des SAP-Connectors Umgebungspfad LIBPATH SHLIB_PATH LD_LIBRARY_PATH LD_LIBRARY_PATH PATH Libelle SystemCopy Programmierhandbuch Syntax Als erstes sollten Sie einen Blick auf den lscsc Hilfebildschirm mit den Parametern werfen. Dazu geben Sie folgendes Kommando an Ihrer Konsole ein, wo Java und lscsc verfügbar sind: >java -jar lscsc.jar -h Libelle SAP Connector Libelle AG Usage: lscsc.jar <check_connection> or lscsc.jar <exec_abap> or lscsc.jar <exec_trans> or or lscsc.jar lscsc.jar -h -v Check SAP connection Execute ABAP program Execute SAP transaction Show help Show version <check_connection> ::= <connection> -check_connection [-options <feedback>] <exec_abap> ::= <connection> -exec_abap <files> [-options <feedback>] <exec_trans> ::= <connection> -exec_trans -transaction <tCode> <files> [-options <feedback>] <connection> ::= -host <hostname> -system <sysnum> -client <clientnum> -user <user> -password <password> <files> ::= -i <input-file> [-o <output-file>] [-e <error-file>] [-t <trace-file>] Verwendung des SAP-Connectors • 55 Libelle SystemCopy Programmierhandbuch The lscsc parameters can be replaced with the following environment variables: LSCSC_HOST LSCSC_SYSTEM LSCSC_CLIENT LSCSC_USER LSCSC_PASSWORD LSCSC_INPUT_FILE LSCSC_OUTPUT_FILE LSCSC_ERROR_FILE LSCSC_OPTIONS ::= ::= ::= ::= ::= ::= ::= ::= ::= -host <hostname> -system <sysnum> -client <clientnum> -user <user> -password <password> -i <input-file> -o <output-file> -e <error-file> -option <feedback | no_feedback> The lscsc paramters have a higher priority than the environment variables. Beispiele Wir wollen herausfinden, ob wir eine Verbindung zum System 00 mit Mandant 100 auf Host bsrv05p herstellen können. Dies ist das Kommando, um lscsc auf einem 32-Bit-Rechner auszuführen: >java -jar lscsc.jar -host bsrv05p -system 00 -client 100 -user dev -password ****** -check_connection -options feedback Um lscsc auf einem 64-Bit-Rechner auszuführen, müssen wir den Parameter -d64 zum Kommando hinzufügen. Das ergibt Folgendes: >java -d64 -jar lscsc.jar -host bsrv05p -system 00 -client 100 -user dev -password ****** -check_connection -options feedback Dies ist das Resultat unseres Kommandos. Man sieht die standardisierten Meldungen für Verbindungsauf- und -abbau. Connecting to SAP... LSCSC-1000: Connected to SAP with user "dev". LSCSC-1001: Disconnected from SAP. 56 • Verwendung des SAP-Connectors Libelle SystemCopy Programmierhandbuch Das folgende Beispiel benutzt den lscsc, um ein in der Datei report_abap.txt enthaltenes ABAP-Programm auszuführen. Das Ausgaberesultat des ABAP-Programms wird in die Datei report.out.txt geschrieben. >java -jar lscsc.jar -host bsrv05p -system 00 -client 100 -user dev -password ****** -exec_abap -i report_abap.txt -o report_out.txt Für SAP-Transaktionen wird ein zusätzlicher Parameter -transaction bereitgestellt, um die Transaktionskennung anzugeben, beispielsweise SCC4. Die Eingabedatei wird benutzt, um die benötigten Daten für die Transaktion zu übergeben. Das könnte eine vom Aufzeichnungstool SHDB exportierte Datei sein. Sei es die Datei scc4_in.txt, und schreiben wir das Resultat der Transaktion in scc4_out.txt, so liegt uns das komplette Kommando vor, um eine SAPTransaktion via lscsc auszuführen: >java -jar lscsc.jar -host bsrv05p -system 00 -client 100 -user dev -password ****** -exec_trans -transaction SCC4 -i scc4_in.txt -o scc4_out.txt Alle möglichen Rückgabewerte, verursacht durch lscsc-Aufrufe, sind standardisierte Meldungen, sie erscheinen in den folgenden Abschnitten. OK-Meldungen LSCSC-1000: LSCSC-1001: LSCSC-1002: LSCSC-1003: Verbunden mit SAP mit Benutzer (...). Getrennt von SAP. Programm erfolgreich ausgeführt. Transaktion erfolgreich ausgeführt. Warnungen LSCSC-2000: Eingabedatei ist leer. Verwendung des SAP-Connectors • 57 Libelle SystemCopy Programmierhandbuch Fehlermeldungen LSCSC-3000: LSCSC-3001: LSCSC-3002: LSCSC-3003: LSCSC-3004: LSCSC-3005: Keine Verbindung zu SAP, ... Fehler bei der Programmausführung. Fehler bei der Ausführung der Transaktion. ... ist kein gültiger Parameter oder unerwartet an dieser Position. Zu viele Parameter an lscsc übergeben. Für die Ausführung von lscsc fehlen Parameter. Hinweis: Der Libelle SystemCopy SAP Connector schreibt automatisch permanente Trace-Informationen. In Unix-Umgebungen werden die Traces gewöhnlich im Verzeichnis /tmp/lscsc_traces gespeichert. In Windows-Umgebungen werden die Traces gewöhnlich im Verzeichnis %TEMP%\lscsc_trace aufbewahrt - wenn kein anderes TraceVerzeichnis spezifiziert ist. Falls Sie Fragen haben, wenden Sie sich bitte an das Libelle Professional Service Team. 58 • Verwendung des SAP-Connectors Libelle SystemCopy Programmierhandbuch 18 Index A Alarmattribut...................................................................................... 39 Alias................................................................................................... 43 allgemeine Funktion.......................................................................... 17 Alphabet.............................................................................................. 1 Anwendungsdaten............................................................................. 35 Attribut............................................................................. 27, 31, 35, 39 Attribute der Ausführung................................................................... 25 Attribute der Konfiguration................................................................. 23 Ausführung........................................................................................ 25 B Bedingung........................................................................................... 9 Beispiele.............................................................. 17, 27, 31, 35, 39, 43 Block.................................................................................................. 17 D DataMasking...................................................................................... 33 Datum.......................................................................................... 13, 17 F Index • 59 Libelle SystemCopy Programmierhandbuch Funktion............................................................................................. 17 G globale Parameter............................................................................... 3 Groß-/Kleinschreibung........................................................................ 1 H Home-Verzeichnis............................................................................. 31 Host................................................................................................... 23 I Installationsverzeichnis..................................................................... 27 J JDBC-Connector............................................................................... 45 K Klammern............................................................................................ 1 Kopierwerkzeug................................................................................. 31 60 • Index Libelle SystemCopy Programmierhandbuch L ldm..................................................................................................... 33 Leerzeichen......................................................................................... 1 Libelle DataMasking.......................................................................... 33 lokale Parameter................................................................................. 3 lokale parameter.................................................................................. 5 lscjc.................................................................................................... 45 lscsc................................................................................................... 53 M mandantenabhängig.......................................................................... 35 Master................................................................................................ 23 S SAP-Connector................................................................................. 53 System i............................................................................................. 45 Systemattribut.................................................................................... 27 T Tabelle................................................................................................. 7 table..................................................................................................... 7 Task................................................................................................. 3, 5 Task-Ausführungsdaten..................................................................... 35 Taskattribut........................................................................................ 35 tool Eigenschaft................................................................................. 33 Index • 61 Libelle SystemCopy Programmierhandbuch Trennzeichen..................................................................................... 17 Ü Übersicht............................................................................................. 1 U Uhrzeit............................................................................................... 13 ungültig.............................................................................................. 31 Z z/OS................................................................................................... Zeile................................................................................................... Zeit..................................................................................................... Zusatzfunktionalität........................................................................... 62 • Index 45 17 13 35