Der Beginn einer wunderbaren Freundschaft von Stefan Schnell



Ähnliche Dokumente
PowerShell mit ABAP nutzen

Download von Programmen

Generischer Excel-Upload

Includes/ Programme generieren

10.6 Programmier-Exits für Workitems

Bankleitzahlen einlesen

SAP-Daten per HTML anzeigen

Standardtext ins PDF-Format konvertieren

Doppelklick auf eine Klasse verzweigt in den Class Builder (Transaktion SE24).

Unterprogramme auslagern

B Synopsis der Programmiersprachen ABAP, VB und Java

SAP und bunte Bilder geht das?

Der ausgewählte Text wird markiert und ausgegraut, so dass er nicht erneut ausgewählt werden kann.

Welche Redefinitionen gibt es?

A.4 Beispiel zum -Versand über Smart Forms

Programmieren für Fortgeschrittene Einführung in die Programmiersprache ABAP

Wählt man einen Wert aus, so wird dieser in das Selektionsbild übernommen und der Docking- Container wird wieder verkleinert.

The app the crashes, before the breakpoint is reached: Code to the event:

BTree.dll - Balancierte und verkettete Bäume. Ecofor. BTree.dll. Realisiert mit Microsoft Visual Studio /9

Erzeugung eines Dokuments

In diesem Beispiel wird ein ALV-Grid aufgerufen, das jede Sekunde einen anderen Eintrag aus einer Tabelle anzeigt.

Exporting ALV to Memory2

ajanzen.com ALV-Grid-Anzeige mit eingabebereiten Zellen

Die in diesem Fall als Template verwendete Excel-Datei muss mithilfe der Transaktion OAER in das Business Objects Repository geladen werden!

Kurzbeschreibung. Quelltext

Unified-E Standard WebHttp Adapter

Tricktresor. von Stefan Schnell. Vorgeplänkel. Nachgeplänkel. Jetzt wird geschrieben. Aktivierung des ALV-Grid. Tabellen lesen mit SAP GUI Scripting

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Modul 122 VBA Scribt.docx

6 OLE2 und MS Office Integration

1. Schritt: Anlegen des Musters

Magic Filter. Magic Filter. Code

Dynamische Webseiten mit PHP. Oder: LAMP - The open way

EXCEL VBA Cheat Sheet

ASP: Active Server Pages

Massengenehmigung mit der UWL(Universal- Worklist) 18 December B. Sc. Alexander Graf

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Informatik - Übungsstunde

Autosumme in ALV-Grid Version 1

Übung 4 ABAP. Übung Business Process Management" (MW31.2) Lisa Wenige SS2016

Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern

Tipps und Hinweise zum Bezug der Beitragssatzdatei V5.0

Tipps & Tricks. Eine Standardfunktionalität ist das Erstellen von Grafischen Basisobjekten auf dem Patran Viewport.

Kapitel zu bearbeitende Aufgaben: 6.1 bis :

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Informationsverarbeitung im Bauwesen

ajanzen.com Schnell programmierte ALV-GRID-Anzeige mit geänderten Spaltenüberschriften

Grundlagen der Informatik

Eclipse Modeling Framework Modellgetriebene Softwareentwicklung Prof. Andreas Schmidt

ajanzen.com Aufruf eines Pop-Up-Containers

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Generic Object Services

Benchmark: Sicherheitslücken & Compliance-

Analysis Add-On Data Lineage

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Dokumentation anzeigen (2)

Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn. Testen. Tutorial im Rahmen des Software(technik)praktikums SS 2012

Hands-on für UI5-Anwendung auf HANA

REPORT Z_NEBP_RAHMEN.

Informatik für Mathematiker und Physiker Woche 7. David Sommer

Softwaretechnik WS 16/17. Übungsblatt 01

Datenbankablage für ArchiveLink einrichten

NILS HARTMANN OLIVER ZEIGERMANN EINSTIEG IN. React.

Angewandte Mathematik und Programmierung

Programmierung und Angewandte Mathematik

FIVE1 GmbH & Co. KG SAP Partner Port Altrottstraße Walldorf T: FIVE1 GmbH & Co. KG Essence of quality

Excel VBA. Teil Zusammenfassung! Was wir können sollten! V

Objektorientiertes Programmieren II

Algebraische Spezifikation von Software und Hardware II

Thomas Sillmann. Swift im Detail HANSER

ALV-Grid und Excel. * * * * * Erweiterung der Toolbar um einen Button Export -> Excel * * * *

OpenOffice.org Workshop

Teil I Das R/3-System - Struktur, Komponenten und Bedienung 1

Use of the LPM (Load Program Memory)

NoSQL mit Postgres 15. Juni 2015

ajanzen.com ALV-Anzeige mit eigenen Spaltenüberschriften und aktiven Standardfunktionen

Klassen und Objekte (1)

13. Java Klassen. Lernziele. Klassen - Technisch. Definition: Klassen

Saim Sert & Mukayıl Kılıç

C#Objektorientierte. Aleksandra Maj. Programmiersprachen. Programmiersprachen am Beispiel C# Referat im Rahmen des Seminars. 15.

tdaten=record name : string; alter: integer; groesse:real; end;

Kommunikation. Björn und Georg

OpenOffice.org. Ad-hoc-Generierung der API- Dokumentation

Pyro - Python Remote Objects

Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn

HelvePic32 Breadboard. Internet Data Logger

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

Softwareschnittstellen

Forefront TMG Scripting mit VBScript und Powershell

SmallTalk - Eine kurze Einführung

Klausur SS 2014 EDV Anwendungen im Bauwesen. Name: Vorname: Matr.-Nr:

ajanzen.com Umgang mit zur Laufzeit erstellen Selektions-, Sortier- und IF-Bedingungen

Übungsstunde: Informatik 1 D-MAVT

Microservices. - Integration der Benutzeroberfläche - Version: Orientation in Objects GmbH. Weinheimer Str.

Ausnahmen-Behandlung

Transkript:

Der Beginn einer wunderbaren Freundschaft von Stefan Schnell Polyglottes programmieren, also programmieren in mehreren Sprachen, ist ein eher ungewöhnliches Szenario. Programmiersprachen bieten im Regelfall einen breiten Umfang, so dass ein Integrationsszenario mit einer weiteren Programmiersprache oftmals gar nicht notwendig ist. Jedoch kann hin und wieder der Wunsch oder sogar die Notwendigkeit entstehen, aus funktionalen oder schlichten ökonomischen Erwägungen, ein solches Integrationsszenario aufzubauen. Sei es weil die verwendete Programmiersprache kein adäquates Äquivalent liefert oder weil eine solche Implementierung zu aufwendig wäre. In dieser beispielhaften Anleitung beschreibe ich die nahtlose Integration von VBScript in ABAP. Zum einen eröffnen wir uns damit die Möglichkeit auf einfachem Wege auf den Präsentationsserver zuzugreifen und zum anderen können wir die VBScript -Sourcen direkt in die ABAP Development Workbench integrieren. 1. Wir beginnen damit, dass wir ein Include anlegen. 2. In dieses Include wird folgende VBScript -Source implementiert: '-Begin----------------------------------------------------------------- '-Directives---------------------------------------------------------- Option Explicit '-Function plus------------------------------------------------------- Function plus(val1, val2) plus = val1 + val2 '-Function minus------------------------------------------------------ Function minus(val1, val2) minus = val1 - val2 '-Function plusminus-------------------------------------------------- Function plusminus(val1, val2, val3) Dim res res = plus(val1, val2) plusminus = minus(res, val3) '-End------------------------------------------------------------------- Es handelt sich hier um drei Funktionen, eine Additions-, eine Subtraktions- und eine Kombinationsfunktion aus beiden. Am Ende das Aktivieren nicht vergessen. Ein Check führt selbstredend zu Fehlern. Sollte es beim Aktivieren zu Fehlern kommen, diese einfach ignorieren. Seite 1 von 7

3. Im nächsten Schritt legen wir eine Funktionsgruppe an. In dieser Funktionsgruppe sammeln wir alle Funktionen die unmittelbar mit der VBScript - Verarbeitung in Verbindung stehen. 4. Nun legen wir in dieser neuen Funktionsgruppe einen Funktionsbaustein an. 5. Die Definition des Funktionsbausteins sieht wie folgt aus: Seite 2 von 7

Es wird folgender ABAP -Sourcecode implementiert: "-Begin----------------------------------------------------------------- Function ZREADVBCODE. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" VALUE(I_INCLNAME) TYPE SOBJ_NAME *" EXPORTING *" VALUE(E_STRINCL) TYPE STRING *"---------------------------------------------------------------------- "-Variables--------------------------------------------------------- Data restadir Type TADIR. Data tabincl Type Table Of String. Data lineincl Type String Value ''. Data strincl Type String Value ''. "-Main-------------------------------------------------------------- Select Single * From TADIR Into restadir Where OBJ_NAME = I_InclName. If sy-subrc = 0. Read Report I_InclName Into tabincl. If sy-subrc = 0. Loop At tabincl Into lineincl. If lineincl <> ''. EndLoop. "-Trim leading and trailing spaces------------------------ Condense lineincl. "-If line is no comment----------------------------------- If lineincl+0(1) <> ''''. Concatenate strincl lineincl cl_abap_char_utilities=>cr_lf Into strincl. lineincl = ''. E_strIncl = strincl. EndFunction. "-End------------------------------------------------------------------- Dieser Funktionsbaustein beinhaltet die Möglichkeit des Lesens von ABAP -Programmen via Read Report. Die so eingelesenen Informationen werden als String-Ergebnis geliefert. Seite 3 von 7

6. Last but not least legen wir ein ABAP -Programm an. 7. Es wird folgender ABAP -Sourcecode implementiert: "-Begin----------------------------------------------------------------- Program zvbscript. "-Type pools-------------------------------------------------------- Type-Pools OLE2. "-Variables--------------------------------------------------------- Data ScriptCtrl Type OLE2_OBJECT. Data Result Type Integer. Data InclCode Type String Value ''. "-Main-------------------------------------------------------------- Create Object ScriptCtrl 'MSScriptControl.ScriptControl'. If sy-subrc = 0 And ScriptCtrl-Handle <> 0 And ScriptCtrl-Type = 'OLE2'. "-Allow to display UI elements---------------------------------- Set Property Of ScriptCtrl 'AllowUI' = 1. "-Intialize the VBScript language------------------------------- Set Property Of ScriptCtrl 'Language' = 'VBScript'. "-Read Visual Basic Script code from include file--------------- Call Function 'ZREADVBCODE' Seite 4 von 7

Exporting I_InclName = 'ZVBSCRIPT001' Importing E_strIncl = InclCode. "Include ZVBSCRIPT001. Call Method Of ScriptCtrl 'AddCode' Exporting #1 = InclCode. If sy-subrc = 0. Call Method Of ScriptCtrl 'Eval' = Result Exporting #1 = 'plusminus(32, 16, 8)'. Write: / Result. "Result = 40 "-Free the object----------------------------------------------- Free Object ScriptCtrl. "-End------------------------------------------------------------------- Das Programm instanziert die Klasse MSScriptControl und erhält damit Zugriff auf die VBScript - Funktionalitäten. Es werden die Eigenschaften AllowUI und Language entsprechend gesetzt. Dann wird mittels des Funktionsbausteines zreadvbcode das Include mit dem VBScript -Sourcecode eingelesen. Mit AddCode wird dieser dem Objekt bekannt gemacht und mit der Methode Eval wird die Funktion plusminus aufgerufen. 8. Das Resultat liefert das gewünschte Ergebnis. Seite 5 von 7

Fazit Wir wir sehen, ist eine nahtlose Integration der Scriptsprache VBScript in ABAP möglich. Sowohl die Implementierung des VBScript -Sourcecodes als auch die Ausführung des VBScript -Codes sind ohne Systembrüche möglich. Alles lässt sich über die ABAP Development Workbench realisieren. Und dies ist erst der Beginn einer wunderbaren Freundschaft. Mit diesem Ansatz lassen sich nun ohne Probleme weitere Sprachen einbinden. Z.B. kann über die Komponente ActiveXPoSH von SAPIEN die vollständige PowerShell -Funktionalität bereitgestellt werden und damit der ebenso vollständige Zugriff auf das Microsoft dotnet -Framework. So lassen sich auf selbigem Wege z.b. Visual Basic -Funktionen implementieren siehe die weiteren Aussichten. Weiter Aussichten Sonnig 1. Include mit VB#-Source: '-Begin----------------------------------------------------------------- '-Directives---------------------------------------------------------- Option Strict On '-Imports------------------------------------------------------------- Imports System Imports Microsoft.VisualBasic '-VBCode-------------------------------------------------------------- Namespace nvbcode Public Class cvb Public Shared Function Hello1() As String Return "Hello World!" Public Function Hello2(ByVal Name As String) As String Return "Hello " & Name & "!" Public Sub Hello3(ByVal Name As String) MsgBox(Name, MsgBoxStyle.OkOnly, "Hello") End Sub End Class End Namespace '-End------------------------------------------------------------------- 2. Das ABAP -Programm dazu: "-Begin----------------------------------------------------------------- Program zvbsharp. "-TypePools--------------------------------------------------------- Type-Pools OLE2. "-Constants-------------------------------------------------------- Constants OUTPUT_CONSOLE Type i Value 0. Constants OUTPUT_WINDOW Type i Value 1. Constants OUTPUT_BUFFER Type i Value 2. "-Variables--------------------------------------------------------- Data PS Type OLE2_OBJECT. Data Result Type i Value 0. Data strresult Type String Value ''. Data tabresult Type Table Of String. Data PSCode Type String Value ''. Data InclCode Type String Value ''. Seite 6 von 7

"-Macros------------------------------------------------------------ Define _. Concatenate PSCode &1 cl_abap_char_utilities=>cr_lf Into PSCode. End-Of-Definition. "-Main-------------------------------------------------------------- Create Object PS 'SAPIEN.ActiveXPoSH'. If sy-subrc = 0 And PS-Handle <> 0 And PS-Type = 'OLE2'. Call Method Of PS 'Init' = Result Exporting #1 = 0. If Result = 0. Call Method Of PS 'IsPowerShellInstalled' = Result. If Result <> 0. Set Property Of PS 'OutputMode' = OUTPUT_BUFFER. "-Read Visual Basic code from include file------------------ Call Function 'ZREADVBCODE' Exporting I_InclName = 'ZVBSHARP001' Importing E_strIncl = InclCode. "-PowerShell Begin------------------------------------------ _ '$VBCode = @"'. "Include ZVBSHARP001. _ InclCode. _ '"@;'. _ 'Add-Type -TypeDefinition $VBCode -Language VisualBasic'. _ '$VB = new-object nvbcode.cvb'. _ '[nvbcode.cvb]::hello1()'. _ '$VB.Hello2("Stefan")'. _ '$VB.Hello3("Stefan")'. _ 'Remove-Variable VB'. _ 'Remove-Variable VBCode'. "-PowerShell End------------------------------------------ Call Method Of PS 'Execute' Exporting #1 = PSCode. Call Method Of PS 'OutputString' = strresult. Split strresult At cl_abap_char_utilities=>cr_lf Into Table tabresult. Loop At tabresult Into strresult. Write: / strresult. EndLoop. Free Object PS. "-End------------------------------------------------------------------- Urheberrechte SAP und ABAP sind eingetragene Warenzeichen und Eigentum der SAP AG Microsoft, VBScript, dotnet, PowerShell und Visual Basic sind eingetragene Warenzeichen und Eigentum von Microsoft SAPIEN ist Eigentum von SAPIEN Seite 7 von 7