AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Kommunikation mit SAP GUI ohne BAPI oder RFC
Thema durchsuchen
Ansicht
Themen-Optionen

Kommunikation mit SAP GUI ohne BAPI oder RFC

Ein Thema von Snaky · begonnen am 8. Mai 2011 · letzter Beitrag vom 11. Mai 2011
Antwort Antwort
Seite 1 von 2  1 2      
Snaky

Registriert seit: 9. Feb 2005
26 Beiträge
 
#1

Kommunikation mit SAP GUI ohne BAPI oder RFC

  Alt 8. Mai 2011, 23:47
Hallo DP,

ich würde gern ein Programm schreiben, welches mit der GUI von SAP kommuniziert und diese steuert. Ich kann keine RFCs oder BAPIs nutzen, da ich externer Auditer bin und es sich damit nicht um mein eigenes System handelt.
Ziel ist es diverse Transaktionen durchzuführen und Daten auomatisiert in lokale Dateien zu extrahieren. (z.B. den Export der Daten aus RSPARAM (Transakion SA38)).
Mein erster Ansatz war via Postmessage und Sendmessage Befehle an die GUI zu schicken. Dies hat auch wunderbar geklappt, sodass ich z.B. die SA38 eifach aufrufen kann. Das Problem ist nun, dass ich von Edit Feldern in SAP, welche z.B. für die Eingrenzung von Abfragen oder zur Eingabe des Programmnamens dienen, kein handle finden kann. (z.B. über Winspy) Wenn ich es richtig sehe, liegen die Komponenten in eine Art Frame. Hat jemand von euch schon einmal etwas ähnliches versucht oder kennt einen alternativen Lösungsweg? Wie gesagt: Es ist wichtig, dass ich Kommunikation mit dem SAP System nur über die SAP Gui durchführen kann. Für diese erhalte ich vom Kunden einen Benutzer.

Wenn euch irgendetwas einfällt, dann schreibt es. Ich erwarte keinen Code - würde mich über Ideen freuen.

Viele Grüße
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Kommunikation mit SAP GUI ohne BAPI oder RFC

  Alt 9. Mai 2011, 09:02
Wenn es eingebetteter HTML-Code oder Java-Edits sind müssen die auch kein eigenes Handle haben. Eventuell kannst Du den Frame selekttieren und die Edits mit Tabs anfahren. Die Werte kannst Du dann mit Strg-A+Strg+C ins Clipboard holen und entssprechend auch Werte eintragen. Ist allerdings ein ziemliches herumprobieren.

Grüße
Martin Schaefer
  Mit Zitat antworten Zitat
Snaky

Registriert seit: 9. Feb 2005
26 Beiträge
 
#3

AW: Kommunikation mit SAP GUI ohne BAPI oder RFC

  Alt 9. Mai 2011, 14:01
Hallo Martin,

danke für deine schnelle Antwort. Ich habe auch schon überlegt die einzlnen Edits mittels Postmessage(window, WM_KEydown...) zu befüllen. Die Extraktion der Daten ist nicht das Problem. SAP bietet die Möglichkeiten Daten direkt in XLS, TXT, HTML etc. zu exportieren.

Das Problem mit den Post/Sendmessage ist leider nur, dass man schwer sicherstellen kann, dass alle Events verarbeitet worden sind. Also folgendes:

Code:
Procedure BefehlSenden(Befehl : string); //Befehl:= 'RSPARAM' (Beispiel)
var
i : integer;
Window : hwnd;
Begin
window := findwindow('SAP_FRONTEND_SESSION', nil);
for i = 1 to length(Befehl) -1 do postmessage(window,WM_KEYDOWN,ord(upcase(Befehl[i])), mapvirtualkey(0,ord(upcase(Befehl[i])));

End;
Ich werde es heute Abend mal testen. Ich habe nur das Gefühl, dass ich spätestens bei Mehrfachselektionen an meine Grenzen stoßen werde mit dieser Methode. Wie stelle ich sicher, dass die SAP GUI keine Messages verschluckt?
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Kommunikation mit SAP GUI ohne BAPI oder RFC

  Alt 9. Mai 2011, 14:09
Ja das ist sicherlich etwas leidlich, aber ich sehe im Moment nur den Weg zwischen de Messages etwas Zeit zu lassen und eventuell nach dem Tab jedesmal Ctr-A Ctrl-C zu senden, damit Du zumindest einen Eingabewert/Vorgabewert im Clipboard vergleichen kannst und damit auf das richtige er falsche Edit schließen.

Grüße
Martin Schaefer
  Mit Zitat antworten Zitat
BlackbirdBerlin

Registriert seit: 15. Okt 2009
Ort: 10318 Berlin
91 Beiträge
 
Delphi 7 Architect
 
#5

AW: Kommunikation mit SAP GUI ohne BAPI oder RFC

  Alt 9. Mai 2011, 14:23
...
Ziel ist es diverse Transaktionen durchzuführen und Daten auomatisiert in lokale Dateien zu extrahieren. (z.B. den Export der Daten aus RSPARAM (Transakion SA38))...
Hi Snaky,
die RSPARAM ist nur eine Struktur, die im Gegensatz zu einer transparenten Tabelle keine Daten enthält. Zumindest nicht in tabellarischer Form.
Welche Programme ( SAP-Standard? ) willst Du denn mit SA38 ausführen, um deren Ergebnis zu extrahieren?
Kannst Du ggf. mit deinem User bestehende RFC-Bausteine aufrufen ( z.B. rfc_get_table_entries )?

Außerdem gibt es eine Komponente, mit der man die SAP-GUI fernsteuern kann / konnte.
Damit kann man direkt Eingabefelder per Namen anspringen, dort Wert eintragen und auslesen...

Delphi-Quellcode:
    Sap := TSapEvent.Create( Application.MainForm );
    bOK := Sap.Connect( frmHaupt.edHost.Text, frmHaupt.edHostID.Text, 2050);   // SapGuiMerlin or SapGuiFullMenu
    OKCheck(bOK, 'Verbindung erstellen');

    Sap.RowDimension := 24;
    Sap.RowListDimension := 24;
    Sap.ColumnDimension := 80;
    Sap.ColumnListDimension := 80;
    Sap.SetSizeFlag := True;
    OKCheck(bOK, 'Verbindung einstellen');

    Application.ProcessMessages;
    
    iCtrl := Sap.FindByField('RSYST-MANDT', 0, 2);   // Mandant (index 1);
    bOK := Sap.SetControlValue(iCtrl, frmHaupt.edMandant.Text);
    OKCheck(bOK, 'Mandant einstellen');

    Application.ProcessMessages;
    
    iCtrl := Sap.FindByField('RSYST-BNAME', 0, 2);   // Benutzer (index 3);
    bOK := Sap.SetControlValue(iCtrl, frmHaupt.edBenutzer.Text );
    OKCheck(bOK, 'Benuter einstellen');

    Application.ProcessMessages;
    
    iCtrl := Sap.FindByField('RSYST-BCODE', 0, 3);   // Kennwort (index 5);
    bOK := Sap.SetControlValue(iCtrl, frmHaupt.edPasswort.Text);
    OKCheck(bOK, 'Passwort einstellen');

    Application.ProcessMessages;
    
    iCtrl := Sap.FindByField('RSYST-LANGU', 0, 2);   // Sprache (index 7);
    bOK := Sap.SetControlValue(iCtrl, 'd');
    OKCheck(bOK, 'Sprache einstellen');

    bOK := Sap.SetCursorByControl(iCtrl);
    OKCheck(bOK, 'Cursor positionieren');
Die Unit/das Control hieß SapAutoGuiOcx_TLB glaube ich aus meinem alten Code zu entnehmen.
Damit kannst Du fast beliebige Aktionen in der SAP-Gui durchführen, inkl. der Auswertung, was jeweil nach einem "Tastendruck" passiert ist...

Habe ich vor vielen Jahren mal verwendet, um Massendaten automatisiert aus lokalen Datenbanken in SAP zu erfassen und dabei das Laufzeitverhalten auszuwerten...

HTH,
Tim
Tim
  Mit Zitat antworten Zitat
Snaky

Registriert seit: 9. Feb 2005
26 Beiträge
 
#6

AW: Kommunikation mit SAP GUI ohne BAPI oder RFC

  Alt 9. Mai 2011, 16:21
Hallo Tim,

hast du die Komponente und könntest mir die per Mail schicken oder mir einen Link schicken wo ich sie herunterladen kann? Ich bin mir nicht sicher ob ich RFC Calls bei jedem Mandanten durchführen kann (hinsichtlich Berechtigungen).

RSPARAM ist nur ein Beispiel. In diesem Zusammenhang exportiere ich die RSPARAM in eine XLS Datei und prüfe diverse Einstellungen die darin enthalten sind. (z.B. Passworteinstellungen, RECCLIENT etc.) Ich prüfe allerdings diverse Tabellen (u.a. T000, T001, USR40...usw.) Grundsätzlich möchte ich das was ich jetzt händisch aus dem System ziehe durch mein Programm sequentiell machen, sodass ich am Ende des Tages die exportierten Daten in XLS, Html, txt Form im Programmordner habe.

Grüße
  Mit Zitat antworten Zitat
BlackbirdBerlin

Registriert seit: 15. Okt 2009
Ort: 10318 Berlin
91 Beiträge
 
Delphi 7 Architect
 
#7

AW: Kommunikation mit SAP GUI ohne BAPI oder RFC

  Alt 9. Mai 2011, 17:02
Hi Snaky,
die Komponente habe ich momentan nicht griffbereit. Leider.
Irgendwie liegen da zig Rechnerwechsel und Neuinstallationen zwischen.

Ich glaube aber, sie war bei 'ner SAP-GUI Installation dabei, oder irgendwo
frei zu bekommen. Bemüh' mal GOOGLE...

Für 'nen Tabellenexport böte sich eher der RFC-Baustein an, den ich Dir
genannt habe, bzw. besser noch RFC_READ_TABLE oder BBP_RFC_READ_TABLE.
Um wieviele Tabellen dreht es sich denn?
Und unterstützt dich der Kunde beim Datenbeschaffen denn nicht?

VG, Tim
Tim
  Mit Zitat antworten Zitat
Snaky

Registriert seit: 9. Feb 2005
26 Beiträge
 
#8

AW: Kommunikation mit SAP GUI ohne BAPI oder RFC

  Alt 9. Mai 2011, 18:11
Hi Tim,

ich nehme an du meinst die OCX Dateien die im Frontend Ordner der SAP Installation vorliegen!? Wenn ich diese in Delphi hinzufügen möchte bekomme ich einen OLE Error. (Keine Ahnung woran das liegt...)

Es gibt Fälle in denen ich den Kunden die Tabellen und Reportergebnisse erzeugen lasse und mir zuschicken lasse. Im Normalfall ist es aber so, dass ich einen SAP User mit umfangreichen Leseberechtigungen bekomme (u.a. SE16 und SA38). Dies ist mir auch lieber, da ich so die Sicherheit habe, dass die Daten nicht mehr manipuliert wurden sondern direkt aus dem System stammen. Mit einem externen Programm RFCs in einem fremden SAP System durchzuführen halte ich für kritisch, zumal ich nicht weiß in wie weit dort Restriktionen vorhanden sind. Deswegen möchte ich ja mit der SAP Gui ausschließlich kommunizieren sodass diese sämtliche Kommunikation mit Datenbank Server und SAP Server übernimmt.

Am Ende stelle ich mir vor, dass ich die SAP Gui über mein Programm so steuere, dass Sie mir automatisch alle Reports und Tabellen über die vorhandene Funktion (z.B. in SAP Menü->System->Liste->Speicher->in lokale Datei->Tabellenkalkulation) extrahiert sodass ich diese danach über meine Auswertungen lokal weiterverarbeiten kann.

Ich habe schon viel gegoogelt und auch viel gefunden, nur wird dort immer davon ausgegangen, dass es das eigene SAP System ist, was die Sache natürlich extrem vereinfacht.
  Mit Zitat antworten Zitat
BlackbirdBerlin

Registriert seit: 15. Okt 2009
Ort: 10318 Berlin
91 Beiträge
 
Delphi 7 Architect
 
#9

AW: Kommunikation mit SAP GUI ohne BAPI oder RFC

  Alt 9. Mai 2011, 18:53
Hi Snaky,

schau Dir mal die Doku unter http://help.sap.com/printdocu/core/p...f/BCFESRFC.pdf an.
Das müsste das Control sein, das ich damals genutzt habe. Seite 38ff und 220ff.
Wo es die Delhpi-Unit dazu gibt, weiß ich allerdings nicht mehr...

Grüße,
Tim
Tim
  Mit Zitat antworten Zitat
Snaky

Registriert seit: 9. Feb 2005
26 Beiträge
 
#10

AW: Kommunikation mit SAP GUI ohne BAPI oder RFC

  Alt 9. Mai 2011, 21:18
Hi,

danke für den Link...ist eine sehr interesssante Lektüre und das sieht auch genau nach dem aus was ich benötige. Die Komponenten die du meinst sind wahrscheinlich die ActiveX Komponenten wdtfuncs.ocx, wdtlogon.ocx etc. Wenn ich diese in Delphi installieren möchte sagt er mir das die librfc32.dll nicht intalliert ist. Die befindet sich aber in meinem System32 Ordner. Ich tippe mal das er ein Problem damit hat, dass ich eine 64bit Windows Version habe. Habe schon versucht das Ding manuell per regsvr32.exe zu installieren...ohne Efolg! Habe grad leider keinen Rechner mit 32Bit System parat...sonst würde ich es da mal testen.

Geändert von Snaky ( 9. Mai 2011 um 21:47 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz