BAPI / RFC mit Delphi |
||||||||||||||||||||||||||||
Beispiele
|
||||||||||||||||||||||||||||
![]() |
Anmeldung an das R3-System mit der Komponente
TSAPLogOnControl
In diesem Beispiel enthält das Fenster TForm1 folgende Komponenten:
Komponente | Funktion |
SAPLogOnControl1 | SAP ActiveX-Komponente zur Anmeldung an das System |
Button1 | Button zum Starten der Procedure |
unit s_logon;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, OleCtrls, SAPLogonCtrl_TLB, StdCtrls,Grids ;
type
TForm1 = class(TForm)
SAPLogonControl1: TSAPLogonControl;
Panel1: TPanel;
StaticText1: TStaticText;
Button1: TButton;
procedure SAPLogonControl1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
Connection :variant;
implementation
{$R *.DFM}
procedure TForm1.SAPLogonControl1Click(Sender: TObject);
begin
(* Verbindung definieren *)
Connection:= SAPLogOnControl1.NewConnection;
(*LogOn durchführen *)
if Connection.LogOn(0,false) = true then
begin
showmessage('Anmeldung wurde erfolgreich durchgeführt.');
Button1.Enabled:= true;
end
else
begin
ShowMessage('Anmeldung wurde nicht durchgeführt :-(((');
SAPLogonControl1.Enabled:=true;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
(* Verbindung trennen *)
Connection.LogOff;
ShowMessage('System LogOff...');
SAPLogonControl1.Enabled:=true;
Button1.enabled :=false;
end;
end.
![]() |
Anmeldung an das R3-System mit der Komponente
TSAPLogOnControl im SilentLogOn
In diesem Beispiel enthält das Fenster TForm1 folgende Komponenten:
Komponente | Funktion |
SAPLogOnControl1 | SAP ActiveX-Komponente zur Anmeldung an das System |
Button1 | Button zum trennen der Verbindung |
unit s_logon;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, OleCtrls, SAPLogonCtrl_TLB, StdCtrls,Grids ;
type
TForm1 = class(TForm)
SAPLogonControl1: TSAPLogonControl;
Panel1: TPanel;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
StaticText1: TStaticText;
Button1: TButton;
procedure SAPLogonControl1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
Connection :variant;
implementation
{$R *.DFM}
procedure TForm1.SAPLogonControl1Click(Sender: TObject);
begin
(* Verbindung und deren Parameter definieren *)
Connection := SAPLogoncontrol1.newConnection;
(* Bei einigen GUI-Versionen muß der UserName in *)
(* Großbuchstaben übergeben werden!!!!
*)
Connection.User := AnsiUpperCase(Edit1.text);
Connection.System
:= 'IDS';
Connection.Client
:= '800';
Connection.ApplicationServer := 'SAPIDES';
Connection.SystemNumber := '00';
Connection.Password :=
Edit2.text;
Connection.Language := 'DE' ;
SAPLogonControl1.Enabled := false;
if Connection.LogOn(0,true) = true then
(* Parameter "true" : SilentLogOn *)
begin
ShowMessage('Anmeldung wurde erfolgreich durchgeführt.');
Button1.Enabled:= true;
end
else
begin
ShowMessage('Anmeldung wurde nicht durchgeführt :-(((');
SAPLogonControl1.Enabled:=true;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
(* Verbindung trennen *)
Connection.LogOff;
ShowMessage('System LogOff...');
SAPLogonControl1.Enabled:=true;
Button1.Enabled :=false;
end;
end.
![]() |
Beispiel 3:
Auslesen aller Kostenstellen mit der Funktion RFC_READ_TABLE
In diesem Beispiel enthält das Fenster TForm1 folgende Komponenten:
Komponente | Funktion |
SAPFunctions1 | SAP ActiveX-Komponente zum Ansprechen von RFC/BAPI |
Grid | Stringgrid zum Anzeigen der Daten im Formular |
Button1 | Button zum Starten der Procedure |
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ExtCtrls, OleCtrls, StdCtrls, SAPFunctionsOCX_TLB, Grids;
type
TForm1 = class(TForm)
SAPFunctions1: TSAPFunctions;
Button1: TButton;
Grid: TStringGrid;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1 : TForm1 ;
Table,Funct : VARIANT ;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var txt : string ;
r : integer ;
begin
(* Funktion definieren
*)
Funct := SAPFunctions1.add('RFC_READ_TABLE');
(* Der Funktion
übergeben, welche Tabelle gelesen werden soll *)
Funct.exports('QUERY_TABLE').value := 'CSKT';
(* Funktion ausführen
*)
if not Funct.call then
(* Bei
Fehler Message anzeigen *)
showMessage(Funct.exception)
else begin
(* Tabelle
mit den Daten selektieren *)
Table := Funct.tables.item('DATA');
(* Anzeige
im StringGrid anpassen *)
grid.rowCount := Table.rowcount + 1;
grid.cells[0,0] := 'Client';
grid.cells[1,0] := 'Kostenstelle';
grid.cells[2,0] := 'Bezeichnung';
for r := 1 to grid.rowCount -1 do begin
(*
Aktuellen Datensatz selektieren *)
txt := Table.value(r,1);
(*
Da die Function nur einen String übergibt *)
(* der alle Daten beinhaltet, muß dieser in *)
(* die einzelnen Abschnitte unterteilt werden *)
grid.cells[0,r] := copy(txt,0,3); (* Client
*)
grid.cells[1,r] := copy(txt,9,10); (* KoSt-Nr. *)
grid.cells[2,r] := copy(txt,27,20); (* KoSt-Bez.*)
end;
grid.visible := True;
end;
end;
end.
![]() |
Beispiel 4:
Auslesen aller Kostenstellen mit der Funktion RFC_READ_TABLE und Anmeldung mit SilentLogOn
In diesem Beispiel enthält das Fenster TForm1 folgende Komponenten:
Komponente | Funktion |
SAPFunctions1 | SAP ActiveX-Komponente zum Ansprechen von RFC/BAPI |
SAPLogoncontrol1 | SAP ActiveX-Komponente zur Anmeldung an das R3-System |
Grid | Stringgrid zum Anzeigen der Daten im Formular |
Button1 | Button zum Starten der Procedure |
![]() |
Anzeigen der Materialstammdaten mit dem BAPI BAPI_MATERIAL_GET_DETAIL
In diesem Beispiel enthält das Fenster TForm1 folgende Komponenten:
Komponente |
Funktion |
SAPFunctions1 | SAP ActiveX-Komponente zum Ansprechen von RFC/BAPI |
Panel1/Panel2 | Elemente zum Anzeigen der Daten |
Button1 | Button zum Starten der Procedure |
unit material;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ExtCtrls, OleCtrls, SAPFunctionsOCX_TLB;
type
TForm1 = class(TForm)
SAPFunctions1: TSAPFunctions;
Panel1: TPanel;
Panel2: TPanel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
funct, tab, connection: variant;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
(* Funktion definieren
*)
funct := sapFunctions1.add('BAPI_MATERIAL_GET_DETAIL');
(* Materialnummer übergeben
*)
(* Bei num. Werten
die führenden Nullen nicht vergessen! *)
funct.exports('MATERIAL').value := '000000000000017550';
(* Funktion ausführen
*)
if not funct.call then
(* Bei
Fehler Message anzeigen *)
showMessage(funct.exception)
else
begin
(* Tabelle
mit den ausgelesenen Daten selektieren *)
tab := funct.imports.item('MATERIAL_GENERAL_DATA');
(* In der Variablen TAB sind jetzt die gelesenen Daten enthalten.
*)
(* Die Struktur der Variablen TAB entspricht der Struktur
*)
(* BAPIMATDOA aus dem Dictionary
*)
(* Aus dieser Struktur werden der 1. und 3. Wert angezeigt
*)
Panel1.caption := tab.value(1);
Panel2.caption := tab.value(3);
end;
end;
end.
![]() |
Bestellung anlegen mit dem BAPI BAPI_PO_CREATE
In diesem Beispiel enthält das Fenster TForm1 folgende Komponenten:
Komponente | Funktion |
SAPFunctions1 | SAP ActiveX-Komponente zum Ansprechen von RFC/BAPI |
Button1 | Button zum Starten der Procedure |
Panel1 | nicht relevant! |
unit PO_Create;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, OleCtrls, SAPFunctionsOCX_TLB, ExtCtrls;
type
TForm1 = class(TForm)
SAPFunctions1: TSAPFunctions;
Button1: TButton;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
Funct,
Header,
POItems,
Schedules,
ItemsRow,
SchedulesRow: Variant;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var MLDText : String;
begin
Button1.Enabled:=false;
Panel1.Caption := 'RFC wurde gestartet, bitte warten.....';
(* Function definieren *)
Funct := sapFunctions1.add('BAPI_PO_CREATE');
(*** Tabellen definieren, Strukturen aus Dictionary benutzen ***)
(* Bestellkopfdaten *)
Header := funct.exports('PO_HEADER');
(* Tabelle der Bestellpositionen *)
POItems := funct.tables.item('PO_ITEMS');
(* Tabelle der Einteilungen *)
Schedules := funct.tables.item('PO_ITEM_SCHEDULES');
(*** PO_Header-Tabelle füllen ***)
(* Einkaufsbelegart *)
Header.Value[2] := 'NB ' ;
(* Typ des Einkaufsbelegs *)
Header.Value[3] := 'F' ;
(* Einkaufsorganisation *)
Header.Value[5] := '600' ;
(* Einkäufergruppe *)
Header.Value[6] := '610' ;
(* Kontonummer des Lieferanten, führende Nullen
beachten!!! *)
Header.Value[8] := '0099000123';
(*** PO_Items-Tabelle füllen ***)
(* Neue Zeile in die Tabelle einfügen *)
ItemsRow := POItems.rows.add;
(* Positionsnummer des Einkaufsbelegs *)
ItemsRow.Value[2]:='00010';
(* Materialnummer, bei num. Werten die führenden Nullen
beachten !!! *)
ItemsRow.Value[5]:='000000000000001161';
(* Lagerort *)
ItemsRow.Value[11]:='100';
(* Werk *)
ItemsRow.Value[17]:='0001';
(* Nettopreis im Einkaufsbeleg in Belegwährung *)
ItemsRow.Value[21]:='10,00';
(*** PO_Items_Schedules-Tabelle füllen ***)
(* Neue Zeile in die Tabelle einfügen *)
SchedulesRow := Schedules.rows.add;
(* Positionsnummer des Einkaufsbelegs *)
SchedulesRow.Value[1]:='00010';
(* Datumstyp des Lieferdatums *)
SchedulesRow.Value[3]:='1';
(* Lieferdatum der Position *)
SchedulesRow.Value[4]:='30.05.2000';
(* Einteilungsmenge *)
SchedulesRow.Value[6]:='10';
(*** Function ausführen ***)
if not funct.call then
(* Bei Fehler Message anzeigen *)
showMessage(funct.exception)
else
begin
(* Belegnummer des Einkaufsbelegs ausgeben *)
MLDText:= funct.imports('PURCHASEORDER');
MessageDlg('Bestellung wurde mit der Nummer '+MLDText+' angelegt.',
MTInformation,[mbOK],0);
end;
end;
end.
![]() |
Materialstammdaten anzeigen mit dem BusinessObject BUS1001
In diesem Beispiel enthält das Fenster TForm1 folgende Komponenten:
Komponente | Funktion |
SAPBAPIControl1 | SAP ActiveX-Komponente zum Anmelden an das R3-System |
Button1 | Button zum Starten der Procedure |
Panel1 | Element zum ausgeben des Materialkurztextes |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, OleCtrls, SAPBAPIControlLib_TLB, ExtCtrls;
type
TForm1 = class(TForm)
SAPBAPIControl1: TSAPBAPIControl;
Button1: TButton;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
Connection,MAT : Variant;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Connection:= SAPBapiControl1.Connection;
if Connection.Logon then
begin
ShowMessage('LogOn');
(* Das BusinessObjekt mit den nötigen *)
(* Parametern aufrufen *)
MAT:= sapbapicontrol1.GetSAPObject('BUS1001','000000000000017550');
(* Ausgabe des Materialkurztextes *)
Panel1.Caption:=MAT.MATERIALDESCRIPTION;
end;
end;
end.
![]() |
Bestellung anlegen mit dem BusinessObject BUS2012 und SilentLogOn
In diesem Beispiel enthält das Fenster TForm1 folgende Komponenten:
Komponente | Funktion |
SAPBAPIControl1 | SAP ActiveX-Komponente zum Anmelden an das R3-System |
SAPBAPIControl1 | SAP ActiveX-Komponente zur Anmeldung an das R3-System |
Button1 | Button zum Starten der Procedure |
Button2 | Button zum anmelden an das System |
Panel1-3 | Elemente zum ausgeben der Meldungen |
unit best;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, OleCtrls, SAPBAPIControlLib_TLB, ExtCtrls, Grids,
SAPLogonCtrl_TLB;
type
TForm1 = class(TForm)
SAPBAPIControl1: TSAPBAPIControl;
Button1: TButton;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Button2: TButton;
SAPLogonControl1: TSAPLogonControl;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
Connection,Mat,Header,Ret,Schedul,Item : Variant;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
(* BusinessObject auswählen *)
Mat:= SAPBapiControl1.GetSAPObject('BUS2012');
(* Strukturen definieren *)
Header := SAPBapiCcontrol1.dimAs (Mat,'CreateFromData','PoHeader');
Schedul:= SAPBapiCcontrol1.dimAs (Mat,'CreateFromData','PoItemSchedules');
Item := SAPBapiCcontrol1.dimAs (Mat,'CreateFromData','PoItems');
Ret := SAPBapiCcontrol1.dimAs (Mat,'CreateFromData','Return');
(* Bestellkopfdaten *)
Header.value ('DOC_TYPE') := 'NB';
Header.value ('DOC_CAT') := 'F';
Header.value ('PURCH_ORG'):= '10';
Header.value ('PUR_GROUP'):= '10';
Header.value ('VENDOR') := '0010000999';
(* Positionsdaten Position 00010 *)
Item.Rows.Add;
Item.Value (1,'PO_ITEM') := '00010';
Item.Value (1,'PUR_MAT') := '000000000000000017';
Item.Value (1,'STORE_LOC') := '100';
Item.Value (1,'PLANT') := '1000';
Item.Value (1,'NET_PRICE') := '10,00';
(* Einteilungsdaten Position 00010 *)
Schedul.Rows.Add;
Schedul.Value (1,'PO_ITEM') := '00010';
Schedul.Value (1,'DEL_DATCAT') := '1';
Schedul.Value (1,'DELIV_DATE') := '20.09.2000';
Schedul.Value (1,'QUANTITY') := '10';
(* Positionsdaten Position 00020 *)
Item.Rows.Add;
Item.value (2,'PO_ITEM') := '00020';
Item.value (2,'PUR_MAT') := '000000000000001161';
Item.value (2,'STORE_LOC') := '100';
Item.value (2,'PLANT') := '1000';
Item.value (2,'NET_PRICE') := '10,00';
(* Einteilungsdaten Position 00020 *)
Schedul.Rows.Add;
Schedul.Value (2,'PO_ITEM') := '00020';
Schedul.Value (2,'DEL_DATCAT') := '1';
Schedul.Value (2,'DELIV_DATE') := '20.09.2000';
Schedul.Value (2,'QUANTITY') := '10';
(* Methode CreateFromData ausführen *)
Mat.CreateFromData (PoHeader
:= Header,
SkipItemsWithError:= ' ',
PoItems := Item,
PoItemSchedules := Schedul,
Return := Ret);
(* Fehler werden in der Struktur Ret abgelegt *)
if Ret.RowCount > 0 then
begin
Panel1.Caption:= Ret.Value (1,'TYPE');
Panel2.Caption:= Ret.Value (1,'MESSAGE');
end
(* Wurde die Methode fehlerfrei ausgeführt, *)
(* Belegnummer ausgeben *)
else Panel2.Caption:= Mat.PurchaseOrder;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
(* Anmeldung an das System *)
Connection
:= SAPLogoncontrol1.newConnection;
Connection.User
:=
Ansiuppercase(Edit1.text);
Connection.System
:= 'IDS';
Connection.Client
:= '800';
Connection.ApplicationServer := 'SAPIDES';
Connection.SystemNumber := '00';
Connection.Password :=
Edit2.text;
Connection.Language := 'DE' ;
SAPLogonControl1.Enabled := false;
if Connection.LogOn(0,true) = True then
begin
ShowMessage('Anmeldung wurde erfolgreich durchgeführt.');
Button1.Enabled:= true;
(* Der Komponente SAPBapiControl die bestenende
*)
(* Verbindung zuordnen *)
SapBapiControl1.Connection:=Connection;
end
else
begin
ShowMessage('Anmeldung wurde nicht durchgeführt :-(((');
end;
end;
end.
![]() |