Einzelnen Beitrag anzeigen

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, 15: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