75
Juni 2014 Automatisierung in der SAP® GUI per Scripting von Maximilian Queck Abteilung: IC LMV LP O2 IO RBG BA LOG Betreuer: Carsten Hammer, Siemens AG Gutachter: Prof. Dr. Frank Herrmann Prof. Dr. Alexander Söder Masterarbeit, eingereicht im Rahmen der Masterprüfung am Fachbereich Informatik und Mathematik im Studiengang Logistik der Fakultät für Betriebswirtschaft der Ostbayerischen Technischen Hochschule Regensburg.

Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Embed Size (px)

Citation preview

Page 1: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Juni 2014

Automatisierung in der SAP® GUI per Scripting von Maximilian Queck

Abteilung: IC LMV LP O2 IO RBG BA LOG

Betreuer: Carsten Hammer, Siemens AG

Gutachter: Prof. Dr. Frank Herrmann

Prof. Dr. Alexander Söder

Masterarbeit, eingereicht im Rahmen der Masterprüfung

am Fachbereich Informatik und Mathematik

im Studiengang Logistik der Fakultät für Betriebswirtschaft

der Ostbayerischen Technischen Hochschule Regensburg.

Page 2: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Inhaltsverzeichnis

Begriffs- und Abkürzungsverzeichnis ......................................................... IV

0 Vorwort ................................................................................................ 1

0.1 Effektivität und Effizienz: Ein wesentlicher Unterschied .................................... 1

0.2 Lösungsmethoden zur Automatisierung von Arbeitsvorgängen in SAP® ........... 2

0.3 Entwicklungsumgebung und vorausgesetzte Kenntnisse................................... 4

0.4 Kapitelübersicht .................................................................................................. 5

1 Einführung in die SAP® GUI Scripting API ............................................. 6

1.1 Die Objekthierarchie in der SAP® GUI ................................................................ 6

1.2 Die wichtigsten GUI Objekte, ihre Eigenschaften, Methoden und Events ......... 9

1.2.1 GuiApplication ............................................................................................. 9

1.2.2 GuiConnection ........................................................................................... 11

1.2.3 GuiSession.................................................................................................. 12

1.2.4 GuiSessionInfo ........................................................................................... 14

1.2.5 GuiMainWindow & GuiModalWindow ..................................................... 15

1.2.6 GuiButton .................................................................................................. 16

1.2.7 GuiComponent .......................................................................................... 17

1.2.8 GuiComponentCollection .......................................................................... 18

1.2.9 GuiGridView ............................................................................................... 19

1.2.10 GuiTableControl ......................................................................................... 21

2 Arbeitsvorgänge erfassen und implementieren ................................. 23

2.1 Vorbereiten der Entwicklungsumgebung ......................................................... 23

2.1.1 Aktivieren der Scripting-Schnittstelle in der SAP® GUI ............................. 23

2.1.2 IntelliSense® mit den SAP® GUI Objekten in VBA® nutzen ....................... 24

2.2 Verbindungsaufbau per Scripting ..................................................................... 27

I

Page 3: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

2.2.1 Neue Verbindung herstellen ..................................................................... 27

2.2.2 In bestehende Verbindungen einklinken .................................................. 29

2.3 Unterstützende Software ................................................................................. 32

2.4 GUI Objekte richtig identifizieren ..................................................................... 35

2.4.1 Aufbau von SAP® GUI IDs .......................................................................... 35

2.4.2 Objekt-Typ einer GUI ID bestimmen ......................................................... 36

2.4.3 Identifizierung von Objekten mit Hilfe des Scripting Trackers .................. 36

2.5 Scripte aufzeichnen ........................................................................................... 37

2.6 Auslesen von Daten aus Tabellen ..................................................................... 38

2.6.1 Daten im ALV Grid Control ........................................................................ 39

2.6.2 Daten im Table Control .............................................................................. 44

2.6.3 Datentypen erkennen und formatieren .................................................... 47

2.6.4 Auslesezeiten ............................................................................................. 49

2.7 Exception-Handling in VBA® und der SAP® GUI................................................ 50

2.7.1 Programmablauf verfolgen........................................................................ 51

2.7.2 Ausnahmefälle in der SAP® GUI ................................................................ 55

3 query panel: Ein Excel®- und Access®-Add-in für SAP® GUI Scripting . 57

3.1 Funktionsumfang der Klassen ........................................................................... 59

3.1.1 SAPGUI ....................................................................................................... 59

3.1.2 RFC ............................................................................................................. 66

3.1.3 Report ........................................................................................................ 68

3.1.4 TimeAndDate ............................................................................................. 70

3.1.5 FilesAndFolders ......................................................................................... 73

3.1.6 Functionlib ................................................................................................. 75

3.1.7 Excel ........................................................................................................... 76

3.2 Substitution von aufgenommenen Script-Befehlen durch Add-in-Funktionen80

3.3 Beispielprojekt: Eckstart- und Eckendtermine von in Verzug stehenden Aufträgen aktualisieren .............................................................................................. 85

II

Page 4: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

4 Résumé .............................................................................................. 90

4.1 Tipps aus der Praxis .......................................................................................... 90

4.2 Sicherheitsbezogene Fragen & Antworten ....................................................... 91

4.3 Themenbezogene Netzwerke und Verweise .................................................... 93

Anhang ....................................................................................................... V

Literaturverzeichnis ................................................................................. XIII

Abbildungsverzeichnis .............................................................................. XV

Tabellenverzeichnis ............................................................................... XVIII

Über den Autor ....................................................................................... XIX

querypanel.de .......................................................................................... XX

Ehrenwörtliche Erklärung ........................................................................ XXI

Urheberrechtshinweis ............................................................................ XXII

Danksagung ........................................................................................... XXIV

III

Page 5: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Begriffs- und Abkürzungsverzeichnis

3i Ideen Impulse Initiativen Internes Vorschlagswesen der Siemens AG

ABAP Advanced Business Application Programming Eigenname einer Programmiersprache

AG Aktiengesellschaft

ALV SAP® List View

API Application Programming Interface

CSV Comma-separated Values

ERP Enterprise Resource Planning

GUI Graphical User Interface

IDE Integrated Development Environment

LoC Lines of Code Softwaremetrik für den Umfang eines Programms

RFC SAP® Remote Function Call

SAP® Systeme, Anwendungen, Programme in der Datenverarbeitung Eigenname eines Unternehmens

SCN SAP® Community Network

SID SAP® System ID

UI User Interface

UML Unified Modeling Language

VBA® Visual Basic® for Applications Eigenname einer Programmiersprache

XLSX Excel® Spreadsheet Das XML-basierte Office® Excel® 2007-Standarddateiformat

IV

Page 6: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

0 Vorwort

Hauptprodukt der SAP® AG ist das Softwaresystem „Enterprise Resource Planning“,

kurz: ERP, mit dem sämtliche Geschäftsprozesse in Unternehmen unterstützt werden

können: Vom Rechnungswesen über Personalwirtschaft und Logistik bis hin zu

verschiedensten branchenspezifischen Lösungen. Um die ordnungsgemäße Funktion

dieses komplexen Systems zu gewährleisten, ist nicht nur ein verantwortungsbewusster

Umgang mit den zu Grunde liegenden Stammdaten vorauszusetzen sondern auch deren

ständige Pflege.

Die hierbei entstehenden Arbeitsprozesse sind meist wiederkehrend und sehr

zeitintensiv in der Durchführung. Diesem Problem habe ich mich bei der Siemens AG im

Zuge dieser Masterarbeit gewidmet. Meine herausgearbeitete Lösung mittels SAP® GUI

Scripting steigert die Effizienz zahlreicher Arbeitsvorgänge und stellt ein intensiv

genutztes Werkzeug in mehreren Abteilungen der Siemens AG am Standort Regensburg

dar.

Vor Anfertigung dieser Arbeit gab es bis auf die API [SAP12] keine Literatur zu diesem

Thema. Zu der gesamten Ausarbeitung wurde im Rahmen dieser Thesis viel

Forschungsarbeit geleistet, um die Funktionen und Tücken dieser noch jungen

Schnittstelle von SAP® zu analysieren und deren Handhabung zu erlernen.

0.1 Effektivität und Effizienz: Ein wesentlicher Unterschied

„I will always choose a lazy person to do a difficult job because, he will find an easy way to do it“

- Bill Gates

Wettbewerber, steigender Kostendruck sowie ständig zunehmende Ertragserwartungen

setzen immer höhere Ansprüche an Unternehmen in sämtlichen Branchen. Die damit

1

Page 7: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

verbundenen Veränderungen betreffen sowohl die Unternehmensorganisation, als

auch deren Prozesse und verwendeten Systeme gleichermaßen.

Effizienz und Effektivität werden umgangssprachlich meist synonym verwendet. Beide

Begriffe leiten sich aus dem lateinischen Wort „efficientia“, zu Deutsch „Wirksamkeit“,

ab. Die Wirtschaftswissenschaften weisen beiden Begriffen jedoch unterschiedliche

Bedeutungen zu: Die Frage, ob die richtigen Dinge getan werden, ist eine Frage nach der

Effektivität. Hingegen ist die Frage, ob die Dinge richtig beziehungsweise wirtschaftlich

getan werden, eine Frage der Effizienz. Sie betont also die ökonomische Seite der

eingesetzten Mittel, die Effektivität die operative.

Um ein angestrebtes Ergebnis zu erreichen, muss man in jedem Fall effektiv arbeiten.

Diese Arbeit wird umso effizienter, je besser das erzielte Ergebnis und die dafür

eingesetzten Mittel im Verhältnis zueinander stehen. Um dieses Aufwand-Nutzen-

Verhältnis bei einem fixen Ziel zu verbessern, müssen somit die Arbeitsmittel effizienter

gestaltet werden.

Bei vielen Geschäftsprozessen, die über die SAP® GUI ausgeführt werden, ist eine solche

Arbeitsmitteloptimierung in Form einer anwendergesteuerten Automatisierung

möglich. Diese spart nicht nur viel wertvolle Arbeitszeit, sondern eliminiert auch die

Fehleranfälligkeit von monotonen Arbeitsvorgängen, die insbesondere durch das

manuelle Übertragen und Eingeben von Daten auftreten können.

Die daraus gewonnene Arbeitszeit kann für anspruchsvollere Aufgaben verwendet

werden, ausbleibende Fehler sparen daraus resultierende Kosten und Behebungszeit

ein.

0.2 Lösungsmethoden zur Automatisierung von Arbeitsvorgängen in SAP®

Grundsätzlich gibt es zwei Möglichkeiten, Arbeitsabläufe in SAP® Systemen schlanker zu

gestalten. Beide haben sehr unterschiedliche Vor- und Nachteile.

2

Page 8: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Methode 1: Programmierung mit ABAP

ABAP ist eine Programmiersprache, die speziell für die Massendatenverarbeitung in

betriebswirtschaftlichen Anwendungen von SAP®, wie beispielsweise dem ERP,

entwickelt wurde. Mit ABAP lassen sich gebündelte Arbeitsabläufe für alle Anwender

eines Systems gleichzeitig implementieren: Sie werden fester Bestandteil des

Produktivsystems.

Problematisch ist aber, dass ABAP-Erweiterungen nur von hierzu befugtem Personal –

also Entwicklern oder Administratoren – und mit einem kostspieligen

Entwicklerschlüssel von SAP® integriert werden können. In der Praxis werden daher im

Regelfall nur die langfristig wichtigsten Automatisierungen umgesetzt.

Methode 2: GUI Scripting

Beim Scripting in der SAP® GUI werden Methoden und Eigenschaften der einzelnen

Objekte in der GUI benutzt, um Aktionen durchzuführen und Daten auszulesen.

Grundsätzlich sind dabei alle Aktionen möglich, die auch durch die manuelle Anwendung

der GUI durch einen Benutzer möglich sind. Es gelten dieselben benutzerspezifischen

Einschränkungen und Möglichkeiten.

Die anspruchsvollere Aufgabe beim GUI Scripting besteht vor allem darin, auf

Ausnahmesituationen und Fehler in der SAP® GUI während der Laufzeit richtig zu

reagieren.

Fazit

Da Automatisierungen per GUI Scripting für Entwickler oder auch interessierte

Anwender wesentlich einfacher zu integrieren sind und keine unternehmenspolitischen

Hürden bilden, stellt sich diese Kompetenz als interessant und vorteilhaft gegenüber der

Programmierung in ABAP dar. Berücksichtigt werden muss jedoch, dass in den meisten

Fällen von Zeit zu Zeit Anpassungen in den erstellten Scripten notwendig sein werden,

insbesondere bei einem Update der SAP® GUI.

3

Page 9: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Sowohl diese Gegebenheiten, als auch die Tatsache, dass es zu dieser noch jungen SAP®

Schnittstelle keine Literatur gibt, waren eine große Motivation für diese Arbeit.

0.3 Entwicklungsumgebung und vorausgesetzte Kenntnisse

Die VBA®-Entwicklungsumgebung „Integrated Development Environment“, kurz IDE,

dient zur Implementierung eigener Prozeduren in der Microsoft® Office®-Familie.

Gerade wenn es darum geht, die bereits sehr umfassenden Funktionen von

beispielsweise Excel® zu erweitern, ist VBA®, mit entsprechender Programmierkenntnis,

das richtige Werkzeug hierfür. Diese Arbeit stützt sich dabei auf Microsoft® Excel® als

Entwicklungsumgebung, da sich mit dieser Software gleichzeitig Daten effizient

verarbeiten als auch veranschaulichen lassen.

Excel® ist bereits in seiner Ursprungsform ein mächtiges Instrument zur

Tabellenkalkulation mit einer Vielzahl an verschiedensten Funktionen zur Kalkulation,

Datenanalyse und -präsentation. VBA® kann dabei diesen Umfang noch einmal

erweitern und an die jeweiligen Bedürfnisse anpassen.

Abbildung 1: Der Visual Basic® Editor (IDE)

4

Page 10: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Da eine Einführung in VBA® den Rahmen dieser Ausarbeitung bei Weitem sprengen

würde, sind einige Vorkenntnisse erforderlich. Um erfolgreich Lösungen für SAP® mit

Hilfe dieser Arbeit zu erstellen, sollte man bereits über folgende Kenntnisse der VBA®-

Programmierung verfügen:

• Implementierung und Anwendung von Methoden und Funktionen

• Deklaration von Variablen und Konstanten

• Kenntnisse über den Gültigkeitsbereich von Variablen

• Umgang mit Arrays

• Anwendung von Typumwandlungen

• Verschachtelte Schleifen und Wenn-Abfragen

0.4 Kapitelübersicht

Diese Ausarbeitung ist in vier Abschnitte gegliedert. Im ersten Teil wird die Struktur der

SAP® GUI in Bezug auf deren Programmierschnittstelle in den wichtigsten Punkten

detailliert erläutert.

Der zweite Abschnitt befasst sich bereits mit der praktischen Anwendung und geht dabei

besonders auf Problemgebiete und das Exception-Handling ein.

Im darauf folgenden Kapitel 3 wird ein eigens entwickeltes Excel®- und Access®-Add-in

für SAP® GUI Scripting vorgestellt. Mit einem Beispielprojekten aus der beruflichen

Praxis werden die Vorteile dieses Add-ins veranschaulicht.

Abschließend sind im letzten Kapitel praxisbezogene Tipps zu finden. Insbesondere wird

auch noch auf sicherheitsbezogene Fragen und Bedenken eingegangen.

5

Page 11: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

1 Einführung in die SAP® GUI Scripting API

Der Begriff API stammt aus dem englischen Sprachraum und ist die Kurzform von

„Application Programming Interface“. Frei ins Deutsche übersetzt bedeutet dies so viel

wie „Schnittstelle zur Anwendungsprogrammierung“.

Diese Schnittstelle besteht seit Version 6.20 des SAP® FrontEnd und wird mit diesem

standardmäßig ausgeliefert. Über sie ist es möglich, auf alle Elemente der SAP® GUI

zuzugreifen. Diese Elemente – im Programmierjargon „Objekte“ genannt – sind in einer

entsprechenden API dokumentiert, welche in der Regel im Installationspfad von SAP®

unter C:\Program Files (x86)\SAP\FrontEnd\SAPgui\SAPguihelp zu finden ist. Da dieses

Dokument leider meist nur spärliche Beschreibungen und kaum Anwendungsbeispiele

bietet, konzentriert sich das folgende Kapitel detailliert auf die wichtigsten Teile dieser

API. In diesem Kapitel sei daher grundsätzlich auf [SAP12] verwiesen.

1.1 Die Objekthierarchie in der SAP® GUI

Der Zugriff auf die SAP® GUI findet über streng hierarchisch geordnete Top-Level-

Objekte statt. Dabei bildet die GuiApplication den Einstiegspunkt zu den einzelnen SAP®

Systemen, die als GuiConnections bezeichnet werden. Jede dieser Verbindungen besteht

aus mindestens einer bis maximal sechs GuiSessions, den einzelnen Instanzen, in denen

Transaktionen durchgeführt werden.

Verbindungen können manuell über das SAP® Logon Pad oder über die Methode

OpenConnection bzw. OpenConnectionByConnectionString der GuiApplication

aufgebaut werden. Mit Verbindungsaufbau wird gleichzeitig die erste GuiSession erstellt

und angezeigt. In der Regel können bis zu fünf weitere Sessions per CreateSession-

Methode der GuiConnection erstellt werden.

6

Page 12: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Während die GuiApplication die gesamte Anwendung darstellt, ist eine GuiConnection

lediglich ein Zugangspunkt zu einer bestehenden Verbindung in ein SAP® System. Alle

Transaktionen werden immer in einer untergeordneten GuiSession durchgeführt. Jede

dieser Instanzen enthält alle wichtigen Informationen wie Benutzer, SID und Client in

dem Objekt GuiSessionInfo (mehr dazu in Abschnitt 1.2.4 GuiSessionInfo). Das jeweilige

Hauptfenster einer Session bildet die Klasse GuiMainWindow, alle weiteren Fenster sind

vom Typ GuiModalWindow. Grafisch stellt sich dieser Aufbau der soeben beschriebenen

obersten vier Ebenen wie folgt dar:

Abbildung 2: Hierarchische Darstellung der GUI-Objekte und deren Kinds-Objekte

Top-Level-Interface-Objekte

Jeder GuiSession unterliegt als Kinds-Objekt ein GuiMainWindow, welches den

Einstiegspunkt für die Interaktion mit dieser Instanz bildet.

Abbildung 3: Die Kinds-Objekte des GuiMainWindow

GuiApplication GuiConnection GuiSessionGuiSession

1..* 1..6

GuiMainWindow

GuiModalWindow

GuiSessionInfo

1

1

0..*

GuiMainWindow

GuiMenubar

GuiToolbar

GuiUserArea

GuiTitlebar

GuiStatusbar

GuiToolbar 1..2

7

Page 13: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Nachfolgende Abbildung 4 beschreibt die visuelle Abgrenzung Top-Interface-Objekte

eines GuiMainWindows.

Abbildung 4: Die Aufteilung der SAP® GUI Oberfläche

Wichtiger Hinweis: Zu beachten ist, dass die Verfügbarkeit von einigen Objekten auf dem

gewählten Design-Modus basiert. Die oben dargestellte Titelleiste ist beispielsweise im

klassischen Design der SAP® GUI nicht verfügbar. Die Verwendung des Befehls

Session.findById("wnd[0]/titl").Text

würde eine Exception auslösen, wenn das klassische Design wie in Abbildung 5 aktiv ist.

Abbildung 5: Die SAP® GUI in klassischer Ansicht

8

Page 14: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

1.2 Die wichtigsten GUI Objekte, ihre Eigenschaften, Methoden und Events

Nachfolgend führe ich die, meiner Einschätzung nach wichtigsten Objekte der SAP® GUI

Scripting API, detailliert auf:

Für die bereits im letzten Abschnitt ausführlich erläuterten Objekte GuiApplication,

GuiConnection und GuiSession wird keine gesonderte Einleitung mehr gegeben, sondern

lediglich die jeweilig wichtigsten Methoden, Eigenschaften und Events beschrieben.

1.2.1 GuiApplication

Methode Bedeutung

OpenConnection As GuiConnection

Description As String

[Sync] As Boolean,

[Raise] As Boolean

Startet eine neue Verbindung über die

Verwendung der Systembeschreibung, wie sie

im SAP® Logon Pad hinterlegt ist.

OpenConnectionByConnectionString

As GuiConnection

ConnectString As String

Diese Methode startet eine neue Verbindung

über den ConnectionString, also die Host-

Adresse mit entsprechendem Port. Mehr dazu

in 2.2.1 Neue Verbindung herstellen.

Tabelle 1: Die wichtigsten Methoden der GuiApplication

Eigenschaft Bedeutung

ActiveSession As Object Repräsentiert die aktuell aktive Session.

AllowSystemMessages As Boolean

Read-Write-Property

Steuert die Behandlung von Systemnachrichten

der SAP® GUI.

9

Page 15: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Connections As

GuiComponentCollection

Hier befinden sich die untergeordneten

GuiConnections, falls vorhanden.

ConnectionErrorText As String Diese Eigenschaft enthält eine detaillierte

Fehlerbeschreibung, falls es beim letzten

Verbindungsaufbau ein Problem gab.

NewVisualDesign As Boolean Gibt den Wert False zurück, falls das klassische

Design der SAP® GUI verwendet wird. Bei

Nutzung des visuellen Designs ist der

Rückgabewert True.

MajorVersion As Long Gibt die Version der benutzten SAP® GUI als

Zahlenwert zurück (bei Version 7.30

beispielsweise der Wert 7300). Tabelle 2: Die wichtigsten Eigenschaften der GuiApplication

Event Bedeutung

CreateSession

Session As GuiSession

Bei der Erzeugung einer neuen Session wird dieser Event

aufgerufen.

DestroySession

Session As GuiSession

Dieser Event wird ausgeführt, bevor eine Session beendet

wird.

Error

ErrorId As Long,

Desc1 As String,

Desc2 As String,

Desc3 As String,

Desc4 As String

Dieser Event behandelt alle in der SAP® GUI entstehenden

Fehler und liefert in insgesamt fünf Variablen detaillierte

Informationen hierzu an den Entwickler zurück.

Tabelle 3: Die wichtigsten Events der GuiApplication

10

Page 16: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Der weitere Teil des Kapitels gehört nicht zur Leseprobe.

Page 17: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

2 Arbeitsvorgänge erfassen und implementieren

Mit diesem Kapitel erfolgt der Übergang zur Praxis. Es wird schrittweise der Weg zum

Aufbau eines automatisierten Arbeitsablaufes dargestellt, beginnend mit der

Vorbereitung der Entwicklungsumgebung.

2.1 Vorbereiten der Entwicklungsumgebung

2.1.1 Aktivieren der Scripting-Schnittstelle in der SAP® GUI

Um einen Zugriff auf die SAP® GUI überhaupt möglich zu machen, muss vorab die

entsprechende Einstellung in den Optionen der SAP® GUI vorgenommen werden. Hierzu

wählt man aus dem Bereich „Barrierefreiheit & Scripting“ die Seite „Scripting“ und setzt

einen Haken bei „Scripting aktivieren“. Falls gewünscht, kann bei jedem

Verbindungsaufbau durch ein Script eine Benachrichtigung aktiviert werden.

Abbildung 8: Scripting-Optionen der SAP® GUI

23

Page 18: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

2.1.2 IntelliSense® mit den SAP® GUI Objekten in VBA® nutzen

IntelliSense® ist ein von Microsoft® angebotenes Hilfsmittel zur automatischen

Vervollständigung bei der Eingabe von Quellcode. Dabei erhält der Entwickler während

seiner Arbeit zusätzliche Informationen über einzelne Methoden und Eigenschaften, die

ihm die Arbeit erleichtern und die insbesondere den Umfang des manuell

einzugebenden Quellcodes reduzieren sollen.

Diese Funktion ist rein optional und erleichtert die Arbeit lediglich. Ein Beispiel für einen

Intellisense-Vorschlag durch VBA® wird in der folgenden Abbildung veranschaulicht.

Abbildung 9: Intellisense-Funktion während der Eingabe von Programmcode

Da VBA® grundsätzlich die Objekte der SAP® GUI Scripting API nicht kennt, müssen diese

zunächst „angelernt“ werden. Dies geschieht über einen Verweis auf eine

entsprechende Bibliothek, die sämtliche Informationen über die SAP® GUI Objekte

bereitstellt. Zu finden ist diese Datei in aller Regel direkt im Installationsordner des SAP®

FrontEnd:

C:\Programme\SAP\FrontEnd\SAPgui\sapfewse.ocx

24

Page 19: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Der weitere Teil des Kapitels gehört nicht zur Leseprobe.

Page 20: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

2.2.2 In bestehende Verbindungen einklinken

Sowohl aufgrund der soeben beschriebenen Einschränkungen beim Erstellen einer

neuen Verbindung durch SAP® GUI Scripting als auch wegen Sicherheitsaspekten

empfiehlt es sich stets, eine bereits bestehende Verbindung für den Script-Betrieb zu

nutzen. Wie bereits in Abschnitt 1.1 Die Objekthierarchie in der SAP® GUI erläutert,

finden sich die einzelnen Verbindungen als GuiConnection in der GuiApplication wieder.

Vor Ausführung eines Scripts muss eine hierfür passende GuiSession gewählt werden, in

der die Interaktionen stattfinden sollen. Sicher soll ein Script nie in einem beliebigen

SAP® System aufgeführt werden. Um die passende GuiSession zu finden, müssen alle

GuiConnections auf die gewünschte Verbindung hin durchsucht werden. Zur

Identifizierung einer Verbindung kann die SessionInfo einer beliebigen GuiSession

ausgelesen werden. Die Eigenschaften SystemName und Client repräsentieren dabei die

SID des Systems und den eingeloggten Mandanten.

Nachfolgender Code zeigt beispielhaft, wie man alle GuiSessions aller bestehenden

GuiConnections auflistet und deren Eigenschaften ausliest.

'Das Arbeitsblatt leeren Cells.Clear 'Überschriften setzen Rows(1).Font.Bold = True Cells(1, 1).Value = "ID" Cells(1, 2).Value = "#" Cells(1, 3).Value = "SID" Cells(1, 4).Value = "Mandant" Cells(1, 5).Value = "Benutzer" Cells(1, 6).Value = "Aktuelle Transaktion" 'Zelle A2 auswählen Cells(2, 1).Select 'Variablendeklaration Dim GuiApplication As SAPFEWSELib.GuiApplication Dim GuiConnection As SAPFEWSELib.GuiConnection Dim GuiSession As SAPFEWSELib.GuiSession 'Mit der SAP® GUI verbinden Set GuiApplication = GetObject("SAPGUI").GetScriptingEngine

29

Page 21: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Der weitere Teil des Kapitels gehört nicht zur Leseprobe.

Page 22: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

2.3 Unterstützende Software

Gerade bei der Implementierung von umfangreicheren Scripts empfiehlt es sich, auf

Tools zurückzugreifen, die die Suche nach den benötigten Objekten und deren

Methoden erleichtern. Nachfolgend werden drei Werkzeuge vorgestellt, welche die

Arbeit an Automatisierungen in der SAP® GUI effizienter gestalten.

Der SAP® Script-Rekorder

Seit Veröffentlichung der Version 6.20 der SAP® GUI befindet sich darin für alle

Anwender verfügbar ein einfacher Script-Rekorder. Der klare Aufbau erinnert an ein

Aufnahme- und Abspielgerät: Es gibt jeweils eine Schaltfläche für Abspielen,

Aufzeichnen und Stoppen.

Abbildung 17: Der SAP® Script-Rekorder mit erweiterten Einstellungsmöglichkeiten

Gestartet werden kann der Rekorder aus dem Options-Menü jeder beliebigen Session

unter „Script-Aufzeichnung und –Playback…“. Ausführliche Instruktionen zum Umgang

mit diesem Werkzeug folgen unter 2.5 Scripte aufzeichnen.

Scripting Tracker

Dieses professionelle Hilfsmittel bietet einen stark erweiterten Funktionsumfang

gegenüber den SAP®-eigenen Entwicklertools. Der Scripting Tracker besteht aus zwei

Komponenten, die im Folgenden beschrieben werden.

Per Analyzer können alle aktiven GuiSessions gescannt und im Detail untersucht werden.

Für jedes gefundene Objekt werden die wichtigsten Daten wie ID, Type und Name

32

Page 23: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

ausgelesen. Diese Informationen werden benötigt, um die Objekte richtig zu

identifizieren und über die Funktion FindById anzusprechen.

Per Rechtsklick auf das entsprechende Objekt in der Baumansicht kann das Element in

der GUI mit einem roten Rahmen gekennzeichnet und damit identifiziert werden. So

behält man stets den Überblick – auch bei umfangreicheren Darstellungen.

Eine detaillierte Beschreibung zur richtigen Anwendung der Software ist in Abschnitt

2.4.3 Identifizierung von Objekten mit Hilfe des Scripting Trackers und 2.5 Scripte

aufzeichnen zu finden.

Abbildung 18: Die Analyzer-Funktion des Scripting Trackers

33

Page 24: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Der Recorder ersetzt die SAP®-eigenen Entwicklungstools und bietet dabei noch einen

erweiterten Funktionsumfang. Wichtigstes Feature ist, dass alle Aufzeichnungen in

Echtzeit, also während der Laufzeit, mitverfolgt werden können. Hierdurch wird ein

besseres Verständnis des aufgezeichneten Codes gewährleistet. Die anschließende

Umsetzung der Aufzeichnung nach VBA® fällt so in der Regel wesentlich leichter.

Abbildung 19: Die Recorder-Funktion des Scripting-Trackers

Weitere Informationen zu der Anwendung sind im Internet unter tracker.stschnell.de zu

finden. Ebenfalls kann das Tool dort heruntergeladen werden.

Eine Videovorstellung mit Anwendungsbeispiel gibt es online auf YouTube unter

youtu.be/jZQP6vwedsc.

query panel Add-in für Microsoft® Excel® und Access®

Dieses eigens entwickelte Add-in bietet eine große Auswahl an nützlichen Funktionen

rund ums SAP® GUI Scripting, dem Import von Daten aus der SAP® GUI nach Microsoft®

Excel® und Access® und der anschließenden Datenverarbeitung. Eine detaillierte

Dokumentation ist Kapitel 3 query panel: Ein Excel®- und Access®-Add-in für SAP® GUI

Scripting zu entnehmen.

34

Page 25: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

2.4 GUI Objekte richtig identifizieren

Um den vollen Funktionsumfang der verschiedenen Objekte in einer SAP®-Transaktion

nutzen zu können, ist es Voraussetzung, zu wissen, mit welchem Objekt-Typ man es

überhaupt zu tun hat. Erst dann kann man sich über deren Eigenschaften, Methoden

und Events informieren (siehe Abschnitt 1.2 Die wichtigsten GUI Objekte, ihre

Eigenschaften, Methoden und Events) und diese entsprechend für die eigenen Zwecke

nutzen. Die Identifikation von Objekten erfolgt dabei ausschließlich über spezielle ID-

Strukturen in der SAP® GUI. Nachfolgend wird zunächst der Aufbau dieser IDs erläutert

um anschließend zwei Möglichkeiten zu deren Bestimmung vorzustellen.

2.4.1 Aufbau von SAP® GUI IDs

Bereits beim Aufzeichnen von Makros hat man ausschließlich mit Objekten zu tun, die

über die GUI ID identifiziert werden. Die Zuordnung stellt dabei stets die Funktion

FindById sicher. Die Struktur der GUI IDs innerhalb einer GuiSession ist dabei

folgendermaßen aufgebaut:

wnd[0]/usr/cntlALV_CONTAINER/shellcont/shell

Beschreibt das Fenster der

Session, in dem sich das

Objekt befindet. Der Wert 0

verweist auf das

GuiMainWindow, alle

höheren Werte auf das

jeweils nächste

GuiModalWindow.

Dieser Teil beschreibt den

Bereich im jeweiligen

Fenster, in dem sich das

Objekt befindet. Die

Bereiche, wie in Abbildung 4

auf Seite 8 dargestellt, sind

folgendermaßen kodiert:

• GuiMenubar: mbar

• GuiToolbar: tbar

• GuiUserArea: usr

• GuiStatusbar: sbar

Dieser Wert entspricht dem

technischen Namen des

Objekts. Auch hier können

noch weitere hierarchische

Gliederungen auftreten, wie

auch in diesem Beispiel zu

sehen ist.

35

Page 26: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Der weitere Teil des Kapitels gehört nicht zur Leseprobe.

Page 27: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Über den Aufnahme-Button beginnt die Aufzeichnung aller durchgeführten Aktionen in

der SAP® GUI. Zum Abschluss der Aufzeichnung wird der Stopp-Button betätigt. Das

aufgenommene Script wird als Textdatei abgespeichert. Beim Betrachten der erstellten

Script-Datei kann der Code in folgende Inhalte gegliedert werden.

Abbildung 22: Abschnitte im Quellcode eines aufgenommenen Scripts durch den SAP® Script-Rekorder

Manche Funktionen in der SAP® GUI können nicht aufgezeichnet werden. Beispielsweise

können zwar Kontextmenüs geöffnet, jedoch deren Aktionen mit den enthaltenen

Einträgen nicht aufgenommen werden. Warum SAP® an dieser Stelle die Funktionen des

Rekorders einstellt, ist nicht näher bekannt. Möglicherweise handelt es sich hierbei auch

um einen Fehler in der Schnittstelle.

2.6 Auslesen von Daten aus Tabellen

Ein besonderes Augenmerk in Bezug auf eine langfristig funktionierende

Automatisierung sollte dem Export von Daten aus SAP® zur Weiterverarbeitung

gewidmet werden. Bei der von SAP® meist angebotenen Exportfunktion, wie sie

Abbildung 23 zeigt, können in der Struktur der Daten Unregelmäßigkeiten auftreten, die

sich besonders gravierend bei der anschließenden Verarbeitung auswirken können.

Schon eine verschobene Spalte oder eine ungewollte Leerzeile können dabei

maßgeblich stören.

38

Page 28: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Der weitere Teil des Kapitels gehört nicht zur Leseprobe.

Page 29: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

2.6.2 Daten im Table Control

Eine weitere gängige Darstellungsart für Daten in der SAP® GUI ist das Table Control, ein

Objekt der Klasse GuiTableControl, vorgestellt in 1.2.10 GuiTableControl. Obwohl es

einen wesentlich kleineren Funktionsumfang als das ALV Grid Control bietet und

schwieriger zu handeln ist, wird es noch in vielen Transaktionen mit langen Datensätzen

wie beispielsweise der Transaktion MD04 als Datenbrowser verwendet. Auf den ersten

Blick erscheinen beide Controls recht ähnlich, zum Auslesen müssen sie jedoch

unterschiedlich bedient werden.

Abbildung 29: Die Transaktion MD04 mit einem GuiTableControl (roter Rahmen)

44

Page 30: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Der weitere Teil des Kapitels gehört nicht zur Leseprobe.

Page 31: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

2.6.4 Auslesezeiten

Je größer die Anzahl der Datenfelder in einer auszulesenden Tabelle ist, desto länger ist

die hierfür benötigte Zeit. Um ein Gefühl für die Dauer eines solchen Vorgangs zu

vermitteln, wurde eine Zeitmessung während der Datenübertragung aus einem ALV Grid

View in eine CSV-Datei durchgeführt. Bei jeder der drei Messungen wurden die

Tabellendimensionen (Spalten und Reihen) variiert, die Anzahl der Datenfelder blieb

jedoch konstant bei 150.000.

Die Messung wurde an einem PC mit einer Taktung von 3,2 GHZ durchgeführt. Als

Messinstrument wurde in den Programmverlauf eine Stoppuhr implementiert, die auf

die Millisekunde exakt misst (siehe Anhang auf Seite X). Die folgende Tabelle zeigt die

Ergebnisse der drei Messungen.

Dimension

Datenfelder

Auslesezeit in [s]

Zeit pro Datensatz in [ms.]

3 x 50.000 150.000 175,252 1,17 ms.

5 x 30.000 150.000 169,649 1,13 ms.

15 x 10.000 150.000 173,649 1,16 ms. Tabelle 21: Ergebnisse der Zeitmessung während des Datenexports aus einem ALV Grid View

Die gemessenen Zeiten für den Export von 150.000 Datenfeldern bewegten sich

zwischen 169 und 175 Sekunden. Die kürzeste Zeit wurde bei der zweiten Messung

beobachtet. Die Dimension einer Tabelle scheint also keinen direkten Einfluss auf die

Dauer der Auslesezeit zu haben. Im Mittel kann beim Datenexport von Tabellen in dieser

Größenordnung mit einer Dauer von 1,2 Millisekunden pro Datenfeld kalkuliert werden.

49

Page 32: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Alternativen zum Auslesen von Tabellen

Ergänzend sei an dieser Stelle erwähnt, dass es eine wesentlich effizientere Methode

gibt, große Datenmengen aus SAP® Tabellen auszulesen. Hier bietet die Funktion

RFC_READ_TABLE aus der RFC Schnittstelle von SAP® wesentlich schnellere

Auslesezeiten. Diese Variante funktioniert für alle Tabellen, die über die Transaktion

ZE16 aufgerufen werden können. Für die übrigen ist die soeben dargestellte Methode

via GUI Scripting die richtige.

2.7 Exception-Handling in VBA® und der SAP® GUI

Exception-Handling wird ins Deutsche als „Behandlung von Ausnahmen“ übersetzt. Mit

Ausnahmen sind in der Softwareentwicklung Fehlersituationen gemeint, die in einem

Programm oder Script während der Ausführung entstehen können. Auf solche Fehler

sollte stets reagiert werden, was unter dem Begriff „Exception-Handling“, zu Deutsch

„Behandeln von Fehlern“, zu verstehen ist.

Exceptions treten immer erst zur Laufzeit ein, das heißt erst bei der Ausführung des

Programms oder Scripts. In der Regel treten Ausnahmen bei arithmetischen

Operationen, Typkonvertierungen, Verletzung von Arraygrenzen oder beim Zugriff auf

noch nicht erzeugte Objekte auf. Im folgenden Kapitel wird es neben den eben

beschriebenen Ausnahmen im Code selbst auch um solche Exceptions gehen, die

während eines automatisierten Vorgangs direkt in der SAP® GUI selbst auftreten können

und wie darauf reagiert werden kann.

50

Page 33: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

2.7.1 Programmablauf verfolgen

Zur Vorbereitung auf eine gute Fehlerbehandlung gilt es in erster Linie zu verstehen, was

der Quellcode macht, ihn zur Laufzeit zu beobachten und zu prüfen, ob der Ablauf wie

geplant stattfindet und ob alle Variablen die erwarteten Inhalte besitzen. Hierfür bietet

VBA® verschiedene Techniken, die meist in Kombination angewendet werden:

• Zeilenweise Ausführung: Der Code wird zeilenweise von Anfang an ausgeführt.

So lässt sich Schritt für Schritt oder besser Zeile für Zeile beobachten, wie sich

der Code verhält.

• Haltepunkt: Diese Funktion ermöglicht es, mit einem sogenannten Haltepunkt

den Ablauf des Programms an einer festgelegten Stelle gezielt zu stoppen.

• Überwachungs-Ausdrücke: Wenn die Inhalte von einzelnen Variablen

überwacht werden sollen, kann diese Funktion genutzt werden.

Code zeilenweise ausführen

Bisher wurde ein Codeabschnitt üblicherweise mit der F5-Taste oder dem

entsprechenden Toolbarsymbol gestartet. Das entspricht dem Menübefehl

„Ausführen“, „Sub/Userform ausführen“ und lässt die Anweisungen ohne

Unterbrechung (bis zum Auftreten eines Fehlers) laufen. Im Debuggen-Menü finden sich

jedoch noch viele Alternativen und Ergänzungen hierzu:

• Einzelschritt: Mit der Taste F8 kann der Code schrittweise ausgeführt werden.

Dabei wird stets die Zeile gelb gefärbt, die als nächstes ausgeführt wird.

• Prozedurschritt: Wenn in einer Prozedur weitere Unterprozeduren aufgerufen

werden, kann man sich deren Details ersparen, indem man diese Zeilen mit

Umschalt+F8 in einem Schritt bis zum Prozedurende ausführt. Mit F8 könnte man

auch solche Unterprozeduren weiter zeilenweise ausführen.

• Prozedur abschließen: Mit STRG+Umschalt+F8 kann man eine bereits

begonnene Prozedur bis zum Ende abschließen. Handelt es sich hierbei um eine

51

Page 34: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Unterprozedur, kehrt man anschließend automatisch zur übergeordneten

zurück.

• Ausführen bis Cursor-Position: Anstelle der Verwendung von vielen

Haltemarken lässt sich auch der Cursor als eine solche verwenden. Er muss hierzu

einfach an die gewünschte Zeile gestellt werden und anschließend kann mit

Strg+F8 der Code bis zur gewählten Position ausgeführt werden.

Code anhalten

Es gibt Varianten, den Code automatisch anzuhalten, wenn er ausgeführt wird:

• Haltepunkte: Dies sind temporäre Markierungen, an denen der Code

automatisch stoppt. Eine Zeile mit Haltepunkt wird in VBA® rot gekennzeichnet.

Ist der Compiler an diesem Punkt angelangt, wird die Zeile gelb hinterlegt. Mit

den zuvor beschriebenen Funktionen aus „Code zeilenweise ausführen“ könnte

nun ab dem Haltepunkt weiter schrittweise kompiliert werden.

• Stopp: Mit dieser VBA®-Anweisung kann ebenfalls an jeder beliebigen Stelle die

Codeausführung angehalten werden.

Während die Stopp-Anweisung wie jedes andere VBA®-Schlüsselwort dauerhaft im Code

enthalten bleibt, werden Haltepunkte nicht gespeichert. Diese können mit „Debuggen“,

„Alle Haltepunkte löschen“ auch komplett entfernt werden, ohne die Anwendung

schließen zu müssen.

52

Page 35: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Abbildung 33: Beispiel zur Verwendung eines Haltepunkts

In der obigen Abbildung ist ein dunkelrot hinterlegter Haltepunkt zu sehen, die

Codeausführung hat vor der markierten Zeile gestoppt. Bevor der Code weiter

ausgeführt wird, kann durch Überfahren einer Variablen mit der Maus im QuickInfo

deren Inhalt angezeigt werden, in Abbildung 33 beispielsweise von der Variablen

WinKennung.

Überwachungen hinzufügen

Da nicht alle Variablen ihren Inhalt anzeigen können, wenn man während einer

Laufzeitunterbrechung die Maus über ihrem Namen ruhen lässt, gibt es noch die

Möglichkeit, Überwachungen für Variablen zu definieren. Deren Ergebnisse werden in

einem eigenen Fenster gelistet und dürfen nicht nur einzelne Variablen, sondern ebenso

Funktionen, Berechnungen und vor allem Objekte enthalten.

Um einen bestimmten Wert zu überwachen, muss dieser zunächst markiert werden. Per

Rechtsklick wählt man aus dem Popup-Menü den Befehl „Überwachung hinzufügen“

aus.

53

Page 36: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Der weitere Teil des Kapitels gehört nicht zur Leseprobe.

Page 37: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

3 query panel: Ein Excel®- und Access®-Add-in für SAP® GUI Scripting

Im Zuge dieser Arbeit entstand ein mittlerweile sehr umfangreiches (2.050 LOC) Add-in

für Microsoft Excel® und Access®. Dieses Paket stellt einen erweiterten

Funktionsumfang für die Entwicklungsumgebung der beiden genannten Anwendungen

von Microsoft® dar.

Ein Entwickler kann mit Hilfe dieser Add-ins wesentlich schneller und übersichtlicher

programmieren. Die enthaltenen Methoden und Funktionen sind als Bausteine zu

verstehen, die je nach Bedarf mit entsprechenden Parametern genutzt werden können.

Oft benötigte und nützliche Programmabschnitte wurden optimiert und mit einem

ausgereiften Exception-Handling versehen.

Das Herzstück des Add-ins bilden die einzelnen Klassenmodule (siehe Abbildung 37:

Hierarchischer Aufbau des Add-ins). Darin sind alle wichtigen Funktionsbausteine

kategorisiert, mit denen wesentlich effizientere und übersichtlichere Programmabläufe

gestaltet werden können.

Abbildung 37: Hierarchischer Aufbau des Add-ins

57

Page 38: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Unterstützt werden die Funktionen von einer grafischen Oberfläche (frmReport), in der

alle Aktivitäten protokolliert werden und deren Fortschritt überwacht werden kann

(siehe Abbildung 38: Report-Fenster des Add-ins während der Laufzeit).

Abbildung 38: Report-Fenster des Add-ins während der Laufzeit

Im nachfolgenden Abschnitt werden die Aufgaben der in den Klassen enthaltenen

Funktionen und Methoden genau erläutert.

Der Abschnitt 3.2 belegt, wie effizient diese einzelnen Bausteine in einem Script

verwendet werden können. Verdeutlicht wird dies, indem umfangreiche

Codeabschnitte des Script-Rekorders durch eine einzige Funktion des Add-ins

substituiert werden und damit sowohl die Übersicht maximiert als auch die

Fehleranfälligkeit minimiert werden.

Im letzten Abschnitt wird beispielhaft der Weg zur Automatisierung eines

Arbeitsvorgangs aufgezeigt. Obwohl das dargestellte Projekt einfach und damit

überschaubar ist, enthält es alle wichtigen Schritte zu einem effizienten

Automatisierungs-Tool.

58

Page 39: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

3.1 Funktionsumfang der Klassen

Dieser Abschnitt gibt einen Überblick über alle Funktionen, die derzeit in query panel

enthalten sind. Jede Methode und Funktion wird mit Parameter und Rückgabewert –

sofern vorhanden – deklariert und anschließend beschrieben. In eckigen Klammern

gelegte Parameter gelten als optional und müssen daher nicht zwingend mitgegeben

werden. Insgesamt unterteilt sich der Funktionsumfang zum aktuellen Zeitpunkt in

sieben Kategorien, die jeweils als Klasse modelliert sind:

1. SAPGUI

2. RFC

3. Report

4. TimeAndDate

5. FilesAndFolders

6. Functionlib

7. Excel (nur in der Version für Excel® enthalten)

3.1.1 SAPGUI

Diese Bibliothek beinhaltet das Herzstück der Software. Alles was nötig ist, um mit der

SAP® GUI zu kommunizieren, ist in dieser Klasse enthalten. Alternativ zu diesen

Bausteinen kann auch direkt mit den öffentlichen Variablen gearbeitet werden.

Öffentliche Variablen

Um den vollen Funktionsumfang der SAP® GUI Scripting Schnittstelle auch im Add-in

anzubieten, werden alle wichtigen GUI Objekte in dieser Klasse öffentlich bereitgestellt:

• GuiApplication (siehe 1.2.1 GuiApplication)

• GuiConnection (siehe 1.2.2 GuiConnection)

• Session (siehe 1.2.3 GuiSession)

• MainWindow (siehe 1.2.5 GuiMainWindow & GuiModalWindow)

59

Page 40: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

OpenSession Paramter: [SID As String], [Client As Integer] Rückgabewert: Boolean

Diese Funktion erstellt eine neue Instanz, falls die SAP® GUI mit dem gewünschten

System (SID) und Mandant (Client) verbunden ist. Beide Parameter sind optional. Wird

keine SID angegeben, erscheint ein Auswahldialog, aus dem der Anwender aus allen

aktiven Verbindungen wählen kann. Ist der Parameter Client nicht deklariert, wird keine

Rücksicht auf den Mandanten eines Systems genommen. Als Rückgabewert gibt die

Funktion Auskunft darüber, ob eine neue Instanz erfolgreich erstellt werden konnte.

Nach erfolgreichem Verbindungsaufbau kann die erstellte Session über die

Objektvariable SAPGUI.Session und deren Hauptfenster über SAPGUI.MainWindow

angesteuert werden.

CloseSession

Mit dieser Methode wird eine zuvor erstellte Instanz geschlossen. Falls es sich dabei um

die letzte Instanz einer Verbindung handelt, wird diese zugleich getrennt. Auf die

Objektvariablen SAPGUI.Session und SAPGUI.MainWindow wird ein Nullverweis gelegt.

setGuiApplication Rückgabewert: Boolean

Per setGuiApplication wird die Objektvariable SAPGUI.GuiApplication mit der SAP® GUI

verbunden. Der Rückgabewert gibt Aufschluss über den Erfolg dieser Kopplung. Ist die

SAP® GUI zwar vorhanden, jedoch die Scriptingfunktion deaktiviert, ist der

Rückgabewert False. Eine Meldung mit dem Hinweis, dass die Scripting-Einstellungen

nicht aktiviert sind, erscheint zusätzlich im Report-Fenster des Add-ins.

setGuiConnection Paramter: [SID As String], [Client As Integer] Rückgabewert: Boolean

Über diese Funktion wird die Objektvariable SAPGUI.GuiConnection mit einer

bestehenden Verbindung der SAP® GUI verknüpft, falls eine SID als Parameter

angegeben wurde. Ist dies nicht der Fall, erscheint ein Auswahldialog mit allen

verfügbaren Verbindungen. Optional kann ebenfalls ein Mandant (Client) angegeben

60

Page 41: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

werden. Ist der Mandant nicht angegeben, wird er beim Verbindungsaufbau nicht

berücksichtigt.

ScriptingActive Rückgabewert: Boolean

Diese Funktion gibt Auskunft über die Scripting-Einstellungen im System. Ist Scripting

aktiviert, wird der Wert True zurückgegeben, andernfalls False.

ChooseConnection Rückgabewert: Boolean

Eine neue Verbindung kann auch über diesen Befehl hergestellt werden. Dabei erscheint

ein Auswahlfenster mit allen verfügbaren Verbindungen, die aktuell in dem System

bestehen. Die getroffene Auswahl wird anschließend der Objektvariable

SAPGUI.GuiConnection zugeordnet.

ActiveConnectionsCount Rückgabewert: Integer

Die Anzahl der aktiven Verbindungen kann mithilfe dieser Funktion ermittelt werden.

StartTransaction Parameter: Trans As String, [DoNotReport As Boolean = False] Rückgabewert: Boolean

Diese Funktion startet eine bestimmte Transaktion in der aktuellen Instanz

(SAPGUI.Session). Optional kann eine Meldung im Report-Fenster über den Parameter

DoNotReport verhindert werden. Diese Option kann beispielsweise bei sich oft

wiederholenden Transaktionsaufrufen genutzt werden, um eine Überflutung des

Report-Fensters zu vermeiden.

Auch hier gibt der Rückgabewert Auskunft über den Erfolg der Funktion. Gibt es eine

Transaktion beispielsweise nicht oder hat der Anwender keinen Zugriff darauf, ist der

Wert False.

61

Page 42: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

PressKey Parameter: Key As guiKey

Diese Methode sendet einen Tastaturbefehl an die verbundene Instanz. Die

Enumeration von guiKey sieht dabei folgendermaßen aus:

Enum guiKey keyEnter = 0 keyDetails = 2 keyZurück = 3 keyAusführen = 8 keyExportieren = 9 keyAbbrechen = 12 End Enum

Abbildung 39: Die Enumeration von guiKey.

InStrMainWindowText Parameter: SearchStr As String Rückgabewert: Boolean

Mit diesem Befehl lässt sich ermitteln, ob sich eine bestimmte Zeichenkette im

Fenstertext des Hauptfensters der jeweiligen Session (SAPGUI.MainWindow) befindet.

Bei allen Vergleichsfunktionen in query panel spielt die Groß- und Kleinschreibung der

Zeichenketten keine Rolle.

StatusBarText Rückgabewert: String

Mit StatusBarText lässt sich der Inhalt der StatusBar im Hauptfenster ermitteln (siehe

Abbildung 4: Die Aufteilung der SAP® GUI Oberfläche auf Seite 8).

InStrStatusBarText Parameter: SearchStr As String Rückgabewert: Boolean

Besitzt dieselbe Funktion wie InStrMainWindowText, nur dass hier die

Vergleichszeichenkette aus der StatusBar verwendet wird stammt.

WindowText Parameter: [Wnd As Integer = 1] Rückgabewert: String

Gibt den Titel eines bestimmten Fensters zurück. Standardmäßig ist das erste Fenster

hierarchisch unter dem Hauptfenster (1) definiert.

62

Page 43: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

WindowExists Parameter: [Wnd As Integer = 1] Rückgabewert: Boolean

Dieser Befehl prüft, ob es ein bestimmtes Fenster der aktuellen Instanz der SAP® GUI

existiert. Das Hauptfenster trägt dabei den Index 0, alle weiteren haben einen um eins

erhöhten Wert. Mit dieser Funktion kann beispielsweise geprüft werden, ob eine Warn-

oder Fehlermeldung von der SAP® GUI erzeugt wurde.

WindowClose Parameter: [Wnd As Integer = 1] Rückgabewert: Boolean

Dieser Befehl schließt ein bestimmtes Fenster. Der Parameterwert 0 stellt dabei das

MainWindow dar; jeder höhere Wert das nächste hierarchisch niedrigere Fenster. Der

Rückgabewert gibt Auskunft darüber, ob das Fenster erfolgreich geschlossen werden

konnte. Wenn das Fenster nicht existiert, wird der Wert False zurückgegeben.

setALVGridView Rückgabewert: Boolean

Über diesen Befehl kann eine Datentabelle als ALV-Gridview (siehe Abschnitt 2.6.1

Daten im ALV Grid Control) umgestellt werden. Der Rückgabewert gibt Auskunft über

den Erfolg der Umstellung.

ExportToCSV Parameter: ID As String, FileName As String, [FormatValues = True] Rückgabewert: Boolean

Diese Funktion exportiert ein GuiGridView oder ein GuiTableControl in das CSV-Format.

Der Parameter ID stellt dabei die SAP® GUI ID (siehe 2.4.1 Aufbau von SAP® GUI IDs)

des Objekts dar. Auch hier gibt der Rückgabewert Aufschluss über den Erfolg des

Exports.

ExportToXLSX Parameter: saveAs As String, [showWarnings = False] Rückgabewert: Boolean

Exportiert Daten in der SAP® GUI in das XLSX-Dateiformat von Microsoft® Office® Excel®.

Dieser Befehl nutzt dabei die Funktion der SAP® GUI selbst. Die Datenstruktur muss also

die Funktion zur Verfügung stellen, ansonsten wird der Rückgabewert False geliefert.

63

Page 44: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Bei dieser Art von Export wird von der SAP® GUI eine Formatierung der Tabelle

mitgeliefert.

ExportToList Parameter: saveAs As String, [showWarnings = False], [setGridView As Boolean = False] Rückgabewert: Boolean

Dieser Befehl nutzt ebenso die Export-Funktion der SAP® GUI. Dabei wird zwar eine XLS-

Datei erzeugt, die aber nicht wirklich das XLS-Format darstellt. Vielmehr handelt es sich

um eine Art CSV-Dateiformat speziell für Excel®. Auch hier wird keine Formatierung oder

ähnliches hinterlegt.

selectKeyFigures Parameter: KeyFigures As String Rückgabewert: Boolean

Hiermit können eine Reihe von Kennzahlen für die Datenanforderung gewählt werden.

Die einzelnen gewünschten Kennzahlen müssen dabei mit einem Komma getrennt

werden.

selectLayout Parameter: Layout As String Rückgabewert: Boolean

Falls vorhanden, wird ein bestimmtes Layout in einer Transaktion gewählt. Kann das

gewünschte Layout nicht gefunden werden, ist der Rückgabewert False.

clickButton Parameter: Button As guiButton Rückgabewert: Boolean

Mit diesem Befehl kann einer der Buttons in der GUI betätigt werden. Dabei sieht die

beliebig erweiterbare zugehörige Enumeration wie folgt aus:

Enum guiButton btnHaken = 0 btnFreigeben = 25 btnSpeichern = 11 End Enum

Abbildung 40: Die Enumeration von guiButton.

64

Page 45: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Die in der Liste enthaltenen Buttons stellen die im Folgenden aufgezeigten Buttons in

der SAP® GUI dar:

Abbildung 41: Schalflächen in der SAP® GUI

selectVariante Parameter: Variante As String Rückgabewert: Boolean

Diese Funktion wählt in einer Transaktions-Eingabemaske eine bestimmte Variante aus.

Kann diese im Katalog gefunden und ausgewählt werden, ist der Rückgabewert True,

andernfalls False.

Abbildung 42: Dialog zur Variantenwahl in der SAP® GUI

changeVerticalSection Parameter: VerticalSection As String Rückgabewert: Boolean

Dieser Befehl ändert den Aufriss in einer Datenansicht. Kann nicht nach der

gewünschten Spalte kategorisiert werden, wird der Wert False zurückgegeben.

65

Page 46: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

3.1.2 RFC

Diese Klasse bietet verschiedene Bausteine für die reibungslose Kommunikation per RFC

(Abk. für „Remote Function Call“). Eine Dokumentation dieser alternativen Schnittstelle

ist nicht Teil dieser Arbeit, wohl aber ein wichtiger und umfangreicher Teil des Add-ins

query panel. Genau wie bei der Klasse SAPGUI kann auch hier direkt mit den wichtigsten

öffentlichen Variablen gearbeitet werden:

Öffentliche Variablen

• RfcLogon

• RfcConnection

• RfcFunctions

• RfcDataTable

setRfcConnection Rückgabewert: Boolean

Über einen Auswahlbildschirm kann eine Verbindung mit einem beliebigen SAP® System

aufgebaut werden. Die Daten der angezeigten Systeme werden aus der SAPLOGON.ini

gezogen. Die Objektvariable RfcConnection repräsentiert die gewählte Verbindung nach

erfolgreichem Aufbau.

closeRfcConnection

Eine bereits hergestellte Verbindung kann über diese Methode wieder geschlossen

werden. Auf die Objektvariable RFC.Connection wird anschließend wieder ein

Nullverweis gelegt.

getTable Parameter: TableName As String, Fields As Variant, [Options As String] Rückgabewert: Boolean

Über diese Funktion kann der Inhalt einer beliebigen Tabelle abgerufen und in die

öffentliche Variable RfcDataTable überführt werden. Als Parameter werden der Name

der Tabelle, die benötigten Felder und die Filteroptionen benötigt. Wird nur ein Feld

benötigt, kann der Parameter Fields als einfache Zeichenkette angegeben werden, bei

66

Page 47: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

mehreren als String-Array. Die Filteroptionen müssen stets in Form von Open-SQL-

Statements angegeben werden. Diese unterscheiden sich geringfügig von der Syntax des

Standard-SQL. Anbei einige Exempel, wie gültige Statements auszusehen haben:

"WERKS = '0300' OR WERKS = '0021'" "(WERKS = '0300' OR WERKS = '0021') AND PRCTR LIKE 'RBG%'" "SPRAS = 'DE' AND PRCTR LIKE 'RBG%'" "ABWKZ > 0" "(WERKS = '0300' OR WERKS = '0021') AND SALK3 > '0'"

Abbildung 43: Beispiele für gültige Open-SQL-Statements

Insbesondere ist hier auch die richtige Platzierung von Leerzeichen funktionsrelevant.

Jeder Vergleichsoperator muss von genau einer Leerstelle geführt und gefolgt werden.

Schon kleinste Abweichungen vom Open-SQL-Standard verhindern eine erfolgreiche

Datenabfrage.

copyTable Parameter: DestinationTable As String, DeleteOldData As Boolean Rückgabewert: Boolean

Befinden sich Daten in dem Objekt RfcDataTable, so kann mit dieser Funktion deren

Inhalt in eine beliebige Access-Tabelle kopiert werden. Der Parameter DeleteOldData

bestimmt, ob die Zieltabelle vorher geleert wird, oder nicht.

updateTable Parameter: DestinationTable As String, stWHEREname As String, stWHEREcol As Integer, stSETname As String, stSETcol As Integer Rückgabewert: Boolean

Um nur bestimmte Werte in einer Tabelle zu aktualisieren, kann diese Funktion genutzt

werden. Ähnlich wie in dem SQL-Statement UPDATE muss hier eine WHERE-Anweisung

als Parameter angegeben werden, damit die Funktion weiß, welche Werte aktualisiert

werden sollen.

getTableValue Parameter: Row As Long, Col As Integer Rückgabewert: String

Liefert einen bestimmten Wert der Tabelle RfcDataTable als Zeichenkette zurück. Um

eine ordentliche Formatierung zu gewährleisten, wird auf das Ergebnis auch die

Funktion AdjustString aus der Klasse Functionlib angewendet.

67

Page 48: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

TableRowCount Rückgabewert: Long

TableRowCount liefert die Anzahl der Datensätze in RfcDataTable zurück.

3.1.3 Report

In dieser Klasse sind alle Bausteine zum Steuern des Report-Fensters enthalten. Neben

dem Hinzufügen und Bestätigen von Einträgen in diesem Fenster ist es auch möglich,

bestimmte Zeilen zu ändern und einen Fortschrittsbalken zu verwenden.

Abbildung 44: Das Report-Fenster von query panel während der Laufzeit

Add Parameter: Value As String

Um einen neuen Eintrag im Report-Fenster hinzuzufügen und gleichzeitig das Fenster

erscheinen zu lassen, kann dieser Befehl verwendet werden.

EditLastEntry Parameter: Value As String

Über diesen Befehl lässt sich der letzte Eintrag durch eine Zeichenkette ersetzen.

68

Page 49: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

AddLastEntry Parameter: Value As String

Dem letzten Eintrag kann durch diesen Befehl eine beliebige Zeichenkette angefügt

werden.

Confirm Parameter: Value As Boolean

Diese Methode bestätigt den letzten Eintrag wahlweise positiv (Daumen hoch) oder

negativ (Daumen runter).

setPercent Parameter: Percent As Double

Per setPercent kann der Fortschrittsbalken des Report-Fensters aktiviert und gesetzt

werden. Als Parameter ist ein Prozentwert zwischen 0 und 1 valide.

Clear

Dieser Befehl löscht alle Einträge aus dem Report-Fenster.

Hide [Parameter: Delay As Integer = 2]

Mit Hide kann das Report-Fenster geschlossen werden. Optional kann eine Verzögerung

in Sekunden angegeben werden. Wird kein Parameter mitgegeben, wird zwei Sekunden

gewartet, bevor das Fenster geschlossen wird. Um das Fenster sofort zu schließen, muss

der Parameter 0 gesetzt werden. Oft empfiehlt es sich aber dem Anwender einen kurzen

Moment zu geben, um ihm die letzten Geschehnisse aus dem Report-Fenster erkennen

zu lassen.

69

Page 50: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

3.1.4 TimeAndDate

Bei vielen Automatisierungen spielen Termine eine wichtige Rolle. Diese Klasse

unterstützt den Anwender hierbei mit allem, was nötig ist, um mit Zeit und Datum

korrekt zu rechnen. Insbesondere wird der bereits vorhandene Funktionsumfang in

Bezug auf die Berücksichtigung von Feier- und Werktagen erweitert.

Wait Parameter: [Sec As Double = 1]

Per Wait kann der Programmablauf für eine bestimmte Zeit angehalten werden. Sofern

kein Parameter explizit angegeben wurde, beträgt die Standardzeit eine Sekunde. Die

Wartezeit kann als Gleitkommazahl angegeben werden; damit sind exakte Wartezeiten

im Tausendstelsekunden-Bereich möglich.

isFeiertag Parameter: Datum As Date Rückgabewert: Boolean

Diese Funktion prüft, ob ein bestimmtes Datum auf einen Feiertag fällt. Dabei werden

neben den datumsfixen Feiertagen auch alle variablen Festtage, wie beispielsweise

Ostern, korrekt berechnet.

getFeiertag Parameter: Datum As Date Rückgabewert: String

Diese Funktion arbeitet ähnlich wie isFeiertag, jedoch entspricht hier der Rückgabewert

der exakten Bezeichnung des jeweiligen Feiertags. Handelt es sich um keinen Feiertag,

wird ein Leerstring zurückgegeben.

In der Funktion sind alle möglichen deutschen Feiertage hinterlegt. Je nach Bundesland,

für das man die Feiertage prüfen möchte, müssen die entsprechenden Tage im

Programmcode angepasst werden.

70

Page 51: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

isWorkday Parameter: Datum As Date, [SaturdayIsWorkday As Boolean = False] Rückgabewert: Boolean

isWorkday prüft, ob ein bestimmtes Datum ein Werktag ist. Über den Parameter

SaturdayIsWorkday kann angegeben werden, ob auch Samstage als Werktage gezählt

werden sollen oder nicht. Als Standard ist hier False festgelegt worden. Dieser

Parameter ist auch in allen folgenden Funktionen, die mit Werktagen rechnen,

einstellbar.

Diese Funktion berücksichtigt natürlich auch die geltenden Feiertage der Funktion

getFeiertag.

addWorkdays Parameter: Datum As Date, RW As Integer, [SaturdayIsWorkday As Boolean = False] Rückgabewert: Date

Um eine beliebige Anzahl von Werktagen zu einem Datum zu addieren oder von diesem

zusubtrahieren, kann diese Funktion verwendet werden. Ist der Parameter RW positiv,

so werden Tage hinzugezählt, ist er negativ, werden sie abgezogen.

lastWorkday Parameter: [SaturdayIsWorkday As Boolean = False] Rückgabewert: Date

Mit lastWorkday kann das Datum des letzten Werktages vor heute ermittelt werden.

countWorkdays Parameter: Von As Date, Bis As Date, [SaturdayIsWorkday As Boolean = False] Rückgabewert: Integer

Diese Funktion zählt die Arbeitstage zwischen zwei Daten und gibt die Differenz als

Ergebnis zurück.

getDate Parameter: [Msg As String], [Default As Date], [AskIfPast As Boolean = False] Rückgabewert: Date

Der Funktionsaufruf startet ein Eingabefenster, in dem ein Datum eingegeben werden

kann. Diese Zeichenkette wird anschließend auf korrekte Formatierung geprüft und

anschließend als Date zurückgegeben. Der Parameter AskIfPast kann dazu verwendet

71

Page 52: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

werden, eine Rückfrage anzuzeigen, ob das Datum wirklich verwendet werden soll,

sofern es in der Vergangenheit liegt.

KWDIN Parameter: Datum As Date Rückgabewert: Integer

Da die Excel-Funktion Application.WorksheetFunction.WeekNum die Kalenderwochen

teilweise nicht DIN-genau berechnet, wurde diese Funktion in die Klasse TimeAndDate

mit aufgenommen. Sie errechnet die Kalenderwochen exakt nach vorgeschriebener

DIN-Norm.

DateInKW Parameter: Jahr As Integer, KW As Integer, WT As VbDayOfWeek Rückgabewert: Date

Diese Funktion gibt das Datum eines bestimmten Wochentags in einer Kalenderwoche

zurück. Als Parameter muss das Jahr, die Kalenderwoche und der gewünschte Tag als

VbDayOfWeek (vbMonday, vbThuesday, …) angegeben werden.

FormatDateSQL Parameter: D As Date Rückgabewert: String

Um in Access nach einen Datum filtern zu können, muss mit der entsprechenden SQL-

Schreibweise gearbeitet werden. Bei diesem Sonderformat wird das Datum mit voran-

und nachgestellten Rauten dargestellt; außerdem werden Tag, Monat und Jahr durch

Schrägstriche getrennt: #24/12/2014#. Die Funktion formatiert ein beliebiges Datum

entsprechend diesen Bedingungen und gibt es als Zeichenkette zurück.

72

Page 53: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

3.1.5 FilesAndFolders

Diese Klasse bietet eine Auswahl an Methoden und Funktionen, die nötig sind, um

schnell und einfach mit lokalen Ordnern und Dateien zu arbeiten. Eine ganze Reihe an

Prüffunktionen verhindert mögliche Fehler beim Schreiben von Dateien in

automatisierten Vorgängen.

Download Parameter: URL As String, saveAs As String Rückgabewert: Boolean

Um aus dem Inter- oder Intranet eine beliebige Datei herunterzuladen und zu speichern,

kann diese Funktion verwendet werden. Ihr Rückgabewert gibt Auskunft über den Erfolg

des Vorgangs.

isDir Parameter: Dir As String Rückgabewert: Boolean

Um zu prüfen, ob ein bestimmtes Verzeichnis wirklich existiert, kann isDir genutzt

werden.

validDir Parameter: Dir As String Rückgabewert: Boolean

Mit dieser Funktion können sowohl die Existenz, als auch die Schreibrechte in einem

bestimmten Verzeichnis geprüft werden. Das Ergebnis wird als Wahrheitswert

zurückgegeben.

makeDir Parameter: Str As String Rückgabewert: Boolean

makeDir erstellt ein Verzeichnis und gibt bei Erfolg den Wert True zurück.

73

Page 54: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

saveAsName Parameter: [Str As String]

Mittels eines Speichern-Unter-Dialogs wird angeboten, die Arbeitsmappe zu speichern.

Optional kann ein Namensvorschlag als Parameter mit angegeben werden.

getFolder Parameter: [Msg As String] Rückgabewert: String

Diese Funktion startet einen Dialog zur Auswahl eines Ordners und gibt dessen Pfad als

Zeichenkette zurück. Optional kann eine Nachricht an den Anwender hinzugefügt

werden.

getValidFolder As String

Diese Funktion arbeitet ähnlich wie getFolder, mit dem Unterschied, dass in dem

ausgewählten Ordner Schreibrechte vorhanden sein müssen, um einen Rückgabewert

zu erhalten.

getFile Parameter: [Title As String] Rückgabewert: String

Über einen Auswahldialog kann der Anwender eine beliebige Datei wählen. Der Pfad

mitsamt Dateiname wird anschließend als Zeichenkette zurückgegeben. Optional kann

dem Dialog ein Titel gegeben werden.

checkFile Parameter: FName As String Rückgabewert: Boolean

Mit dieser Funktion kann geprüft werden, ob eine bestimmte Datei vor maximal fünf

Sekunden aktualisiert bzw. erstellt worden ist. Nur so kann beispielsweise der Erfolg

eines SAP®-Exports überprüft werden, da per Scripting hier kein Fehler abgefangen

werden kann.

74

Page 55: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

3.1.6 Functionlib

Diese Klasse enthält all jene Funktionen, die in keiner anderen Kategorie zugeordnet

werden konnte. Teilweise werden diese Funktionen von den weiteren Klassen

mitbenutzt.

WinUser Rückgabewert: String

In vielen Fällen ist nötig, zu prüfen, wer ein Script gerade ausführt. Diese Funktion gibt

hierfür den aktuell angemeldeten Windows®-Benutzer als Zeichenkette zurück.

DesktopDir Rückgabewert: String

Um beispielsweise schnell Daten auf dem Desktop speichern zu können, wird mit

DesktopDir dieser Pfad ermittelt.

RandomInteger Parameter: min As Integer, max As Integer Rückgabewert: Integer

Mit dieser Funktion kann eine Zufallszahl zwischen zwei beliebigen Grenzen erstellt

werden.

inArray Parameter: searchString As String, searchArray As Variant Rückgabewert: Boolean

Da es oft mühselig ist, herauszufinden, ob sich ein bestimmter Wert in einem Array

befindet, wurde diese Funktion modelliert.

AdjustString Parameter: ByVal Value As String Rückgabewert: String

Wendet die beschriebenen Funktionen DeleteSpacesLeftAndRight und

DeleteLeadingZeros auf eine beliebige Zeichenkette an, sofern es sich dabei nicht um ein

Datum oder eine Zeichenkette handelt.

75

Page 56: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

DeleteSpacesLeftAndRight Parameter: ByVal Value As String Rückgabewert: String

Befinden sich führende oder nachfolgende Leerzeichen in einer Zeichenkette, werden

diese von der Funktion gelöscht.

DeleteLeadingZeros Parameter: ByVal Value As String Rückgabewert: String

Bei Zeichenketten in SAP®, die eigentlich eine Zahl darstellen, werden in vielen Fällen

führende Nullen zum Auffüllen der Zeilen integriert. Diese Funktion löscht diese Nullen

und gibt auch hier den bereinigten Wert zurück.

3.1.7 Excel

Hier ist eine Sammlung an Funktionen zum Umgang mit Excel® Arbeitsmappen, Tabellen

und Zellen enthalten. Folglich befindet sich diese Bibliothek nur in der Excel®-Version

von query panel.

Öffentliche Variablen

Für den Funktionsumfang von OpenSheetLink werden zwei öffentliche Variablen

bereitgestellt; sie dienen für Verweise auf externe Arbeitsmappen und Tabellen:

• wbExt

• sheetExt

OpenSheetLink Parameter: File As String Rückgabewert: Boolean

Diese Funktion erstellt eine Verbindung zu einer beliebigen Excel®-Datei. Hierzu wird die

Arbeitsmappe geöffnet und es werden zwei öffentliche Variablen initialisiert: wbExt

verweist dabei auf die verlinkte Arbeitsmappe, sheetExt auf die erste Tabelle der

Arbeitsmappe. Der Rückgabewert gibt Auskunft über den erfolgreichen

Verbindungsaufbau.

76

Page 57: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

CloseSheetLink Rückgabewert: Boolean

Eine zuvor geschlossene Verbindung mit einer Arbeitsmappe kann mit dieser Methode

wieder getrennt werden. Beiden öffentlichen Variablen wbExt und sheetExt sind

anschließend wieder freigegeben.

CopySheetContent Parameter: ByVal movedSheet As Worksheet, ByVal moveAfter As Worksheet, [NewSheetName As String] Rückgabewert: Boolean

Aus einer verlinkten Tabelle kann mittels dieser Funktion in die Script-Mappe kopiert

werden. Optional kann im Parameter NewSheetName ein neuer Tabellenname

bestimmt werden.

OpenSheetLinkWithSearch Parameter: [WorkbookName As String], [SheetName As Variant = 1], [SearchInStr As Boolean = True] Rückgabewert: Boolean

Diese Funktion baut ebenso wie OpenSheetLink eine Verbindung zu einer anderen

Excel®-Tabelle auf. Die Erweiterung besteht daran, dass die Tabelle, auf die die Variable

sheetExt verweist, nicht die erste sein muss. Im Parameter SheetName kann ein

entsprechender Suchstring, also der Name der zu verlinkenden Tabelle, angegeben

werden. Wird dieser in der Arbeitsmappe gefunden, wird der Verweis von sheetExt nicht

auf die erste Tabelle, sondern auf das Suchergebnis gelegt.

lastRow Parameter: ByVal Sheet As Worksheet, ByVal Spalte As Long Rückgabewert: Long

Mit lastRow lässt sich die die Nummer der zuletzt beschriebenen Reihe in einer

bestimmten Spalte der Tabelle ermitteln.

lastCol Parameter: ByVal Sheet As Worksheet, ByVal Zeile As Long Rückgabewert: Long

lastCol ist das Pendant zur vorangegangenen Funktion lastRow und gibt die Nummer der

zuletzt beschriebenen Spalte in einer bestimmten Reihe einer Tabelle zurück.

77

Page 58: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

getSpeed Parameter: [Value As Boolean = True]

getSpeed deaktiviert alle Funktionen in Excel®, die bei komplexen und umfangreichen

Berechnungen stören: die automatische Zellenberechnung, alle Events und die

Aktualisierung des Bildschirms. Damit wird eine bessere Performance bei

umfangreichen Berechnungen erreicht.

Nach der Nutzung muss der Wert unbedingt wieder auf False gesetzt werden, um die

ordnungsgemäße Funktion von Excel® zu gewährleisten.

searchCol Parameter: ByVal Sheet As Worksheet, Str As String Rückgabewert: Long

Diese Funktion nutzt die Excel®-Suchfunktion in einer bestimmten Tabelle und gibt bei

Erfolg die Spalte der ersten Ergebniszelle zurück.

searchRow Parameter: ByVal Sheet As Worksheet, Str As String Rückgabewert: Long

Analog zu searchCol gibt diese Funktion die Reihe der ersten gefundenen Zelle zurück.

WorksheetExists Parameter: WorksheetName As String Rückgabewert: Boolean

Diese Funktion prüft, ob in der aktuellen Arbeitsmappe ein bestimmtes Worksheet

wirklich existiert und gibt das Ergebnis als Wahrheitswert zurück.

DeleteSheet Parameter: WorksheetName As String

Löscht eine Tabelle in der Arbeitsmappe ohne die übliche Rückfrage von Excel®. Existiert

das zu löschende Tabellenblatt nicht, wird keine Fehlermeldung angezeigt. Der

Programmablauf kann ungehindert fortgesetzt werden.

78

Page 59: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

convertToDate Parameter: Rng As Range

Dieser Methodenaufruf konvertiert den Inhalt eines bestimmten Bereichs (Range) als

Datum.

convertToText Parameter: Rng As Range

Ähnlich der vorherigen Methode konvertiert diese den Inhalt einer bestimmten Range

als reinen Text.

resizeExcel Parameter: [WindowState As Integer], [Top As Long], [Left As Long], [Height As Long], [Width As Long]

Diese Funktion ändert die Größe der Excel®-Anwendung. Der Parameter WindowState

kann als xlNormal, xlMaximized und xlMinimized festgelegt werden.

79

Page 60: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

3.2 Substitution von aufgenommenen Script-Befehlen durch Add-in-Funktionen

Hinter den Methoden und Funktionen des vorherigen Abschnitts verbergen sich teils

sehr umfangreiche Funktionen. Ebenfalls hat jede dieser Funktionen ein ausgereiftes

Exception-Handling implementiert, das verhindert, dass bei auftretenden Fehlern eine

Unterbrechung oder gar ein Absturz erfolgt.

Anhand zweier Beispiele wird verdeutlicht, wie einfach und übersichtlich ein mit query

panel erstelltes Script im Vergleich zu einem herkömmlich aufgenommenen aussehen

kann.

Starten einer Transaktion in der SAP® GUI

Ruft man eine beliebige Transaktion aus der SAP® GUI auf und hat dabei den Script-

Rekorder im Aufnahmemodus, erhält man beispielsweise die folgenden Codezeilen:

session.findById("wnd[0]/tbar[0]/okcd").text = "MD04" session.findById("wnd[0]").sendVKey 0

Abbildung 45: Aufgenommener Scirptcode beim Aufruf der Transaktion MD04

Im Grunde könnte man diese beiden Zeilen dazu nutzen, eine Transaktion in einem

Script aufzurufen um in dieser dann weitere Schritt durchzuführen. Doch welche

Probleme können hierbei entstehen? Unter welchen Umständen könnten diese Zeilen

nicht die gewünschte Transaktion starten?

1. Ist das angesteuerte GUI-Fenster noch in einer anderen Transaktion, so kann

über das Eingabefeld der GUI keine Transaktion neu aufgerufen werden. Man

müsste zunächst mit dem Abbrechen-Button ins Hauptmenü zurückkehren.

2. Hat der Benutzer keine Berechtigung für die aufzurufende Transaktion, erscheint

in der Statusbar eine entsprechende Meldung.

80

Page 61: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

In beiden Fällen ist alles, was nach den Zeilen aus Abbildung 45 passiert, hinfällig und

führt zu einer Reihe an Fehlern. Die GUI befindet sich nicht in der gewünschten

Transaktion.

Eine Lösung bietet die Funktion StartTransaction des Add-in query panel. Dank dessen

Rückgabewert erhält der Entwickler Aufschluss über den Erfolg bzw. Misserfolg des

Transaktionsaufrufs. Ein Script, das sich an den Funktionen von query panel bedient,

könnte beispielsweise so aussehen:

If qp.SAPGUI.StartTransaction("MD04") Then 'Weitere Anweisungen 'in der Transaktion MD04. Else 'Dieser Code wird ausgeführt, 'wenn die Transaktion nicht 'gestartet werden konnte. End If

Abbildung 46: Scriptcode zum Aufruf der Transaktion MD04 mit Erfolgsprüfung

Mittels einer Wenn-Dann-Sonst-Schleife wird geprüft, ob der Rückgabewert True oder

False ist. Entsprechend dem Ergebnis wird dann in die Abfrage verzweigt und der

passende Code ausgeführt. So kann vermieden werden, dass im Falle eines nicht

erfolgreichen Transaktionsstarts keine weiteren Befehle in der SAP® GUI ausgeführt

werden.

Eine Variante für eine Eingabemaske auswählen

In beinahe allen Eingabemasken von Transaktionen lassen sich sogenannte Varianten

erstellen und aufrufen. In Ihnen werden eingegebene Werte und Ansichten gesichert.

Um eine solche Variante per Scripting aufzurufen, würde man sich zunächst am

Scripting-Recorder bedienen und die entsprechenden Schritte aufnehmen. Das Ergebnis

könnte beispielsweise wie folgt aussehen:

81

Page 62: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Der weitere Teil des Kapitels gehört nicht zur Leseprobe.

Page 63: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

4 Résumé

Die vorhergehenden Kapitel hat dargelegt, wie man Schritt um Schritt bei der

Automatisierung eines Arbeitsvorgangs vorgeht. Um nun das vermittelte Wissen

effizient umsetzen zu können, wird noch vor allem eines benötigt: Übung. Es ist

unerlässlich, nach dem Prinzip „learning by doing“ mit zunächst einfachen Prozessen zu

beginnen um sich dann an komplexere Vorgänge zu wagen.

Nachfolgend vermittelt der Autor einige private Tipps aus der eigenen Praxis, um dem

Leser die dargelegten Fehler zu ersparen. Ebenfalls wird Stellung zu

sicherheitsbezogenen Fragen zum Thema SAP® GUI Scripting genommen. Im letzten

Punkt gibt es einen Überblick von themenbezogenen Netzwerken, auf denen man Hilfe

und Tipps finden kann.

4.1 Tipps aus der Praxis

Code stets ausführlich kommentieren! – Gerade im Scriptingbereich verwende ich

regelmäßig Teile aus Programmabschnitten, die bereits lange zuvor von mir entwickelt

wurden. Um sich auch nach dieser Zeit noch gut im eigenen Quellcode zurecht zu finden,

ist die konsequente Anwendung von Kommentaren im Programmcode sinnvoll. Sie

helfen, sich schnell wieder an teilweise lang vergangene Gedankenschritte zu erinnern

und sparen damit wertvolle Zeit bei Anpassungen oder der Fehlersuche.

Verantwortungsbewusst arbeiten! – Jeder Mensch macht Fehler. Ein Fehler in einem

automatisierten Ablauf bedeutet einen Fehler in jedem seiner Durchgänge. Daher ist es

nach der Implementierung unerlässlich, das Script zunächst ausgiebig in Testsystemen

zu beobachten, bevor man es in einem Produktivsystem einführt. Ein Programmierstil

nach dem „Try & Error“-Prinzip ist hier nur in einer Testumgebung zu empfehlen.

Klein anfangen – Bevor man sich an umfassende Datenverarbeitung in einem

Produktivsystem wagt, sollte man mit einfachen Prozessen beginnen.

90

Page 64: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Weiter denken – Wenn man eine neue Anwendung entwirft, sollte unbedingt

durchdacht werden, ob es noch weitere Gebiete gibt, in denen diese Verwendung finden

kann. Gibt es ähnliche Prozesse, in denen Arbeitsabläufe dieser Art stattfinden? Wie ist

die Anwendung zu gestalten, um mehr Möglichkeiten zu haben? Wo lohnt es sich

langfristig, den Programmablauf variabel zu gestalten?

4.2 Sicherheitsbezogene Fragen & Antworten

Kann ein Script ein SAP® System beschädigen?

Nein. Alle Änderungen, die durch ein Script durchgeführt werden, unterliegen

denselben Zugangsrichtlinien wie die des damit angemeldeten Benutzers.

Kann ein laufendes Script die Systemperformance beeinflussen?

Ja. Ein Script arbeitet immer mit der vollen Systemleistung. Daher ist während

dessen Ausführung in erster Linie der Compiler (meist Excel® oder Access®) voll

ausgelastet. Ein Zugriff auf dieses Programm wird während der Ausführung, wenn

überhaupt, nur sehr eingeschränkt möglich sein.

Kann ein Script auf Daten zugreifen, für das der Benutzer eigentlich keine Berechtigung

besitzt?

Nein. Ein Script unterliegt denselben Zugangsrichtlinien, wie die des angemeldeten

Benutzers.

Kann ein Script Daten auslesen, die man als Anwender nicht exportieren könnte?

Ja. Auch wenn der Export von bestimmten Daten in SAP® nicht erlaubt ist, ist es

möglich, diese aus der SAP® GUI auszulesen und zu speichern. Jedoch könnte ein

Anwender auch ohne Script einfach solche Daten speichern, beispielsweise über

einen einfachen Screenshot. Grundsätzlich gilt aber: Per SAP® GUI Scripting kann

91

Page 65: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

nur auf Daten zugegriffen werden, die am Bildschirm sichtbar gemacht werden

können.

Kann ein Script Interaktionen eines Benutzers mit der SAP® GUI aufzeichnen?

Ja. Jedoch wird der Benutzer hierüber benachrichtigt, es sei denn, die Funktion

wurde in den Systemeinstellungen deaktiviert (siehe hierzu Abschnitt 2.1.1

Aktivieren der Scripting-Schnittstelle in der SAP® GUI).

Kann ein Script die Eingabe von Passwörtern in der SAP® GUI ausspähen?

Nein. Alle Passworteingaben können von Script-Rekordern nicht erfasst werden.

Kann ein Script im Hintergrund ausgeführt werden, ohne dass der Benutzer es

mitbekommt?

Nein. Sobald ein Script ausgeführt wird, erhält der Benutzer hierüber eine

Nachricht, sofern diese Funktion nicht deaktiviert wurde (siehe hierzu 2.1.2

IntelliSense® mit den SAP® GUI Objekten in VBA® nutzen). Davon abgesehen

benötigt ein Script immer eine (sichtbare) SAP® GUI. Eine „heimliche“ Steuerung

der SAP® GUI im Hintergrund ist daher nicht möglich.

92

Page 66: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

4.3 Themenbezogene Netzwerke und Verweise

Wie bereits im Vorwort angemerkt, gab es vor dieser Arbeit zum Thema SAP® GUI

Scripting keine Literatur. Online existieren jedoch zwei interessante Communities, die

sich unter anderem auch mit SAP® GUI Scripting auseinandersetzen.

Das «SAP® Community Network»

Das SCN ist die offizielle Community der SAP® AG. Anwender, Entwickler,

Vertriebsmitarbeiter und Studenten nutzen das Netzwerk, um Hilfe zu erhalten, Ideen

zu teilen und sich auszutauschen. Mit dem Stand vom April 2012 gibt es 2,5 Millionen

Benutzer, die täglich etwa 3.000 Einträge erstellen (vgl. [Shau12]).

Die über 430 Foren in englischer Sprache bieten zu jedem Thema des Softwareangebots

von SAP® einen Platz zum Austauschen. Darunter natürlich auch zum Thema GUI

Scripting:

http://scn.sap.com/community/scripting-languages

Der «Tricktresor»

Der Tricktresor ist eine Sammlung aus nützlichen Tipps rund um das ERP-System der

SAP® AG. Die Datenbank ist hauptsächlich für kleinere Tricks aus dem Gebiet der

Programmierung aber auch anwendungsübergreifende Themen gedacht.

Ein Teil des Themengebiets „Programmierung“ bezieht sich dabei auch auf GUI Scripting.

Besonders im Forum auf der Social-Network-Plattform Xing erhält man viele

deutschsprachige Informationen über dieses Thema:

https://www.xing.com/net/prid95eebx/tricktresor/forums

93

Page 67: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Anhang

GuiMessageBoxOption Enumeration

Enumeration Wert Beschreibung

MSG_OPTION_OK 0 Die Message-Box wird nur mit einem Ok-Button angezeigt.

MSG_OPTION_YESNO 1 Der Dialog kann mit Ja oder Nein beantwortet werden.

MSG_OPTION_OKCANCEL 2 Es erscheint ein Ok- und Abbrechen-Button.

Tabelle 22: Die GuiMessageBoxOption Enumeration

GuiMessageBoxType Enumeration

Enumeration Wert Icon

MSG_TYPE_INFORMATION 0

MSG_TYPE_QUESTION 1

MSG_TYPE_WARNING 2

MSG_TYPE_ERROR 3

MSG_TYPE_PLAIN 4 Kein Symbol.

Tabelle 23: Die GuiMessageBoxType Enumeration

GuiMessageBoxResult Enumeration

Enumeration Wert Beschreibung

MSG_RESULT_CANCEL 0 Rückgabewert beim Klicken des Abbrechen-Buttons.

MSG_RESULT_OK 1 Rückgabewert beim Klicken des Ok-Buttons.

MSG_RESULT_YES 2 Rückgabewert beim Klicken des Ja-Buttons.

MSG_RESULT_NO 3 Rückgabewert beim Klicken des Nein-Buttons. Tabelle 24: Die GuiMessageBoxResult Enumeration

V

Page 68: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Der weitere Teil des Kapitels gehört nicht zur Leseprobe.

Page 69: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Abbildungsverzeichnis

Abbildung 1: Der Visual Basic® Editor (IDE) ............................................................................... 4

Abbildung 2: Hierarchische Darstellung der GUI-Objekte und deren Kinds-Objekte ................ 7

Abbildung 3: Die Kinds-Objekte des GuiMainWindow .............................................................. 7

Abbildung 4: Die Aufteilung der SAP® GUI Oberfläche .............................................................. 8

Abbildung 5: Die SAP® GUI in klassischer Ansicht ...................................................................... 8

Abbildung 6: Erstellen einer neuen Instanz in der SAP® GUI ................................................... 12

Abbildung 7: Die Kommandozeile der SAP® GUI ..................................................................... 12

Abbildung 8: Scripting-Optionen der SAP® GUI ....................................................................... 23

Abbildung 9: Intellisense-Funktion während der Eingabe von Programmcode ...................... 24

Abbildung 10: Der Weg zu den Verweisen im VBA®-Editor ..................................................... 25

Abbildung 11: Der Verweise-Manager in VBA® ....................................................................... 25

Abbildung 12: Der Verweise-Manager in VBA® mit aktivierter SAP® GUI Scripting API .......... 26

Abbildung 13: Programmcode zum Erstellen einer neuen Verbindung zu einem SAP® System

.......................................................................................................................................... 28

Abbildung 14: Programmcode zum Listen aller SAP® GUI Sessions ........................................ 30

Abbildung 15: Ergebnistabelle mit Auflistung verschiedener GUI Sessions und deren

Eigenschaften ................................................................................................................... 30

Abbildung 16: Programmcode zur Identifzierung und Verbindung zu einem SAP® System ... 31

Abbildung 17: Der SAP® Script-Rekorder mit erweiterten Einstellungsmöglichkeiten ........... 32

Abbildung 18: Die Analyzer-Funktion des Scripting Trackers .................................................. 33

Abbildung 19: Die Recorder-Funktion des Scripting-Trackers ................................................. 34

Abbildung 20: Scripting Tracker im Identifikations-Modus während der Identifizierung von

Objekten der SAP® GUI .................................................................................................... 37

Abbildung 21: Der SAP® Script-Rekorder ................................................................................. 37

Abbildung 22: Abschnitte im Quellcode eines aufgenommenen Scripts durch den SAP®

Script-Rekorder ................................................................................................................ 38

Abbildung 23: Das Auswahlfenster der Export-Funktion der SAP® GUI .................................. 39

Abbildung 24: SE16-Standardliste ............................................................................................ 40

Abbildung 25: ALV-Grid-Darstellung ........................................................................................ 40

XV

Page 70: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Abbildung 26: Die Benutzereinstellungen der SAP® GUI ......................................................... 41

Abbildung 27: Deklaration und Initialisierung eines GuiGridView-Objekts ............................. 41

Abbildung 28: Programmcode, um Dateninhalt aus einem GuiGridView in eine CSV-Datei zu

übertragen ........................................................................................................................ 43

Abbildung 29: Die Transaktion MD04 mit einem GuiTableControl (roter Rahmen) ................ 44

Abbildung 30: Programmcode, um Dateninhalt aus einem GuiTableControl in eine CSV-Datei

zu übertragen ................................................................................................................... 46

Abbildung 31: UML Aktivitätsdiagramm einer Funktion zur Formatierung von Zeichenketten

der SAP® GUI .................................................................................................................... 47

Abbildung 32: Programmcode zum Formatieren von Zeichenketten der SAP® GUI ............... 48

Abbildung 33: Beispiel zur Verwendung eines Haltepunkts .................................................... 53

Abbildung 34: Hinzufügen einer Variablen-Überwachung ...................................................... 54

Abbildung 35: Das Überwachungsausdrücke-Fenster während der Kompilierung ................. 54

Abbildung 36: Funktion zur Prüfung auf ein existierendes GuiModalWindow ....................... 55

Abbildung 37: Hierarchischer Aufbau des Add-ins .................................................................. 57

Abbildung 38: Report-Fenster des Add-ins während der Laufzeit ........................................... 58

Abbildung 39: Die Enumeration von guiKey. ........................................................................... 62

Abbildung 40: Die Enumeration von guiButton. ...................................................................... 64

Abbildung 41: Schalflächen in der SAP® GUI............................................................................ 65

Abbildung 42: Dialog zur Variantenwahl in der SAP® GUI ....................................................... 65

Abbildung 43: Beispiele für gültige Open-SQL-Statements ..................................................... 67

Abbildung 44: Das Report-Fenster von query panel während der Laufzeit ............................ 68

Abbildung 45: Aufgenommener Scirptcode beim Aufruf der Transaktion MD04 ................... 80

Abbildung 46: Scriptcode zum Aufruf der Transaktion MD04 mit Erfolgsprüfung .................. 81

Abbildung 47: Aufgenommener Scriptcode zur Auswahl einer bestimmten Variante ........... 82

Abbildung 48: Variantenauswahldialog eine Transaktion ....................................................... 82

Abbildung 49: Variantenkatalog der Transaktion /SIE/AD_ZPR_P_BW_930_GRID ................ 83

Abbildung 50: Scriptcode zur Auswahl einer Variante mit Erfolgsprüfung ............................. 83

Abbildung 51: Script zur Aktualisierung eines Eckstart- und Eckendtermins .......................... 86

Abbildung 52: Bereinigtes Script zur Anpassung eines Eckstart- und Eckendtermins............. 87

Abbildung 53: Substituiertes Script zur Anpassung eines Eckstart- und Eckendtermins ........ 87

Abbildung 54: Schleife zur Aktualisierung von mehreren Eckstart- und Eckendterminen ...... 88

XVI

Page 71: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Abbildung 55: Anwendung zur Aktualisierung von Eckstart- und Eckendterminen während

der Laufzeit ....................................................................................................................... 89

Abbildung 56: Klassenentwurf einer Stoppuhr mit millisekundengenauer Messung ............... X

Abbildung 57: Script zur zuverlässigen Aktualisierung von Eckstart- und Eckendterminen mit

Berücksichtigung aller Unregelmäßigkeiten. ................................................................... XII

XVII

Page 72: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Tabellenverzeichnis

Tabelle 1: Die wichtigsten Methoden der GuiApplication ......................................................... 9

Tabelle 2: Die wichtigsten Eigenschaften der GuiApplication ................................................. 10

Tabelle 3: Die wichtigsten Events der GuiApplication ............................................................. 10

Tabelle 4: Die wichtigsten Methoden der GuiConnection ....................................................... 11

Tabelle 5: Die wichtigsten Eigenschaften der GuiConnection.................................................. 11

Tabelle 6: Die wichtigsten Methoden der GuiSession ............................................................. 12

Tabelle 7: Die wichtigsten Eigenschaften der GuiSession ........................................................ 13

Tabelle 8: Die wichtigsten Events der GuiSession .................................................................... 13

Tabelle 9: Die wichtigsten Eigenschaften der GuiSessionInfo.................................................. 14

Tabelle 10: Die wichtigsten Methoden des GuiMainWindow und des GuiModalWindow ..... 16

Tabelle 11: Die wichtigsten Eigenschaften des GuiMainWindow und des GuiModalWindow 16

Tabelle 12: Die wichtigsten Methoden des GuiButton ............................................................ 16

Tabelle 13: Die wichtigsten Eigenschaften des GuiButton....................................................... 17

Tabelle 14: Die wichtigsten Eigenschaften der GuiComponent ............................................... 17

Tabelle 15: Die wichtigsten Methoden der GuiComponentCollection ..................................... 18

Tabelle 16: Die wichtigsten Eigenschaften der GuiComponentCollection ............................... 18

Tabelle 17: Die wichtigsten Methoden des GuiGridView ........................................................ 20

Tabelle 18: Die wichtigsten Eigenschaften des GuiGridView ................................................... 20

Tabelle 19: Die wichtigsten Methoden des GuiTableControls ................................................. 21

Tabelle 20: Die wichtigsten Eigenschaften des GuiTableControls ........................................... 22

Tabelle 21: Ergebnisse der Zeitmessung während des Datenexports aus einem ALV Grid View

.......................................................................................................................................... 49

Tabelle 22: Die GuiMessageBoxOption Enumeration ................................................................ V

Tabelle 23: Die GuiMessageBoxType Enumeration ................................................................... V

Tabelle 24: Die GuiMessageBoxResult Enumeration ................................................................. V

Tabelle 25: Die GuiErrorType Enumeration............................................................................... VI

Tabelle 26: Die GuiErrorType Enumeration (Fortsetzung von Tabelle 25) .............................. VII

Tabelle 27: Die GuiEventType Enumeration ............................................................................ VIII

Tabelle 28: Die GuiComponentType Enumeration .................................................................... IX

XVIII

Page 73: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Über den Autor

Maximilian Queck hat an der Ostbayerischen Technischen

Hochschule Regensburg an der Fakultät für Informatik und

Mathematik das Fach Wirtschaftsinformatik studiert. Im

Anschluss absolvierte er im Zuge dieser Arbeit den

Masterstudiengang Logistik.

Den Praxisbezug erhält er als Entwickler bei der Siemens AG am

Standort Regensburg.

XIX

Page 74: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

querypanel.de

XX

Page 75: Juni 2014 Automatisierung in der SAP® GUI per Scriptingmax.selmair.de/pdf/Selmair 2014 - Automatisierung in der SAP GUI per Scripting... · 0 Vorwort Hauptprodukt der SAP® AG ist

Urheberrechtshinweis

Alle Inhalte dieser Arbeit, insbesondere Texte, Fotografien und Grafiken, sind urheberrechtlich

geschützt. Das Urheberrecht liegt, soweit nicht ausdrücklich anders gekennzeichnet, bei dem

Autor Maximilian Queck.

Bitte kontaktieren Sie den Autor per E-Mail ([email protected]), falls Sie Inhalte

dieser Arbeit verwenden möchten.

Wer gegen das Urheberrecht verstößt, macht sich gem. § 106 ff. Urhebergesetz strafbar.

Inhaltskopien können durch Suchmaschinen ohne großen Aufwand gefunden und

nachverfolgt werden.

XXII