• DELPHI 调用SAP—RFC 示例


    DELPHI 调用SAP—RFC 示例


    Logon to the R3-system with the componente TSAPLogOnControl


    In this example the form TForm1 contains the following components:

    Component Function
    SAPLogOnControl1 SAP ActiveX-Component to logon to the system
    Button1 Button to start the 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

    (* define connection *)
    Connection:= SAPLogOnControl1.NewConnection;

    (* start LogOn *)
    if Connection.LogOn(0,false) = true then

    begin
    showmessage('Logon O.K.');
    Button1.Enabled:= true;
    end
    else
    begin
    ShowMessage('Error on Logon :-(((');
    SAPLogonControl1.Enabled:=true;
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin

    (* cut connection *)
    Connection.LogOff;

    ShowMessage('System LogOff...');
    SAPLogonControl1.Enabled:=true;
    Button1.enabled :=false;
    end;
    end.



    Example 2:

    Logon to the R3-system with the Component TSAPLogOnControl and SilentLogOn


    In this example the form TForm1 contains the following components:

    Component Function
    SAPLogOnControl1 SAP ActiveX-Component to logon to the system
    Button1 Button to cut the connection

    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

    (* define connection and it's parameters *)
    Connection := SAPLogoncontrol1.newConnection;

    (* In some GUI-versions the username *)
    (* must be written in uppercase !!! *)
    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('Logon O.K.');
    Button1.Enabled:= true;
    end
    else
    begin
    ShowMessage('Error on logon :-(((');
    SAPLogonControl1.Enabled:=true;
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin

    (* cut connection *)
    Connection.LogOff;

    ShowMessage('System LogOff...');
    SAPLogonControl1.Enabled:=true;
    Button1.Enabled :=false;
    end;
    end.

    Example 3:
    Read all costcenters with the function RFC_READ_TABLE

    In this example the form TForm1 contains the following components:

    Component function
    SAPFunctions1 SAP ActiveX-component to connect RFC/BAPI
    Grid Stringgrid to show the data's in the form
    Button1 Button to start the procedure

    unit logon1;

    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

    (* define function *)
    Funct := SAPFunctions1.add('RFC_READ_TABLE');

    (* tell the function what table should be read *)
    Funct.exports('QUERY_TABLE').value := 'CSKT';

    (* call the function *)
    if not Funct.call then

    (* on error show message *)
    showMessage(Funct.exception)

    else begin

    (* select table with the data's *)
    Table := Funct.tables.item('DATA');

    (* addjust the StringGrid *)
    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

    (* select first dataset *)
    txt := Table.value(r,1);

    (* Because the RCF-function returns only one *)
    (* string whitch contains all data's, the *)
    (* string must be cut to different parts *)
    grid.cells[0,r] := copy(txt,0,3); (* Client *)
    grid.cells[1,r] := copy(txt,9,10); (* CostCent-number *)
    grid.cells[2,r] := copy(txt,27,20); (* CostCent-description*)
    end;
    grid.visible := True;
    end;
    end;
    end.

    Example 4:
    Read all costcenters with the function RFC_READ_TABLE and logon with SilentLogOn

    In this example the form TForm1 contains the following components:

    Component Function
    SAPFunctions1 SAP ActiveX-component to connect RFC/BAPI
    SAPLogoncontrol1 SAP ActiveX-Component to logon to the system
    Grid Stringgrid to show the data's in the form
    Button1 Button to start the procedure

    unit logon1;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    ExtCtrls, OleCtrls, StdCtrls, SAPFunctionsOCX_TLB,
    Grids, SAPLogonCtrl_TLB;

    type
    TForm1 = class(TForm)
    SAPFunctions1: TSAPFunctions;
    Button2: TButton;
    Grid: TStringGrid;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    SAPLogonControl1: TSAPLogonControl;
    procedure Button2Click(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1 : TForm1 ;
    Table,Funct, Connection : VARIANT ;

    implementation

    {$R *.DFM}


    procedure TForm1.Button2Click(Sender: TObject);
    var txt : string ;
    r : integer ;

    begin
    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' ;

    if Connection.LogOn(0,true) = true then
    (* parameter "true" = SilentLogOn *)

    begin

    (* assign the existing connection to the *)
    (* component SAPFunctions1 *)
    SAPFunctions1.Connection := Connection;

    Funct := SAPFunctions1.add('RFC_READ_TABLE');
    Funct.exports('QUERY_TABLE').value := 'CSKT';
    if not Funct.call then
    showMessage(Funct.exception)
    else begin
    Table := Funct.tables.item('DATA');
    grid.rowCount := Table.rowcount + 1;
    grid.cells[0,0] := 'Client';
    grid.cells[1,0] := 'CostCent-No';
    grid.cells[2,0] := 'CostCent-Des.';
    for r := 1 to grid.rowCount -1 do begin
    txt := Table.value(r,1);
    grid.cells[0,r] := copy(txt,0,3);
    grid.cells[1,r] := copy(txt,9,10);
    grid.cells[2,r] := copy(txt,27,20);
    end;
    grid.visible := True;
    end;
    end;
    end;
    end.

    Example 5:

    Show detail of a material with the BAPI BAPI_MATERIAL_GET_DETAIL

    In this example the form TForm1 contains the following components:

    Component
    Function

    SAPFunctions1 SAP ActiveX-component to connect RFC/BAPI
    Panel1/Panel2 Elements to show the data's
    Button1 Button to start the 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

    (* define function *)
    funct := sapFunctions1.add('BAPI_MATERIAL_GET_DETAIL');

    (* hand over material-number *)
    (* On numeric values don't forget the leading zeros!!! *)
    funct.exports('MATERIAL').value := '000000000000017550';

    (* call the function *)
    if not funct.call then

    (* on error show message *)
    showMessage(funct.exception)

    else
    begin

    (* select table with the returned data's *)
    tab := funct.imports.item('MATERIAL_GENERAL_DATA');

    (* The variable TAB now contains the returned data's. The *)
    (* structure is like the structure BAPIMATDOA in the *)
    (* dictionary. We will show the 1. and 3. value of this *)
    (* structure *)
    Panel1.caption := tab.value(1);
    Panel2.caption := tab.value(3);
    end;
    end;
    end.

    Example 6:

    Create a purcaseorder with the BAPI BAPI_PO_CREATE

    In this example the form TForm1 contains the following components:

    Component Function

    SAPFunctions1 SAP ActiveX-component to connect RFC/BAPI
    Button1 Button to start the procedure
    Panel1 not 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 ist running, please wait.....';

    (* define function *)
    Funct := sapFunctions1.add('BAPI_PO_CREATE');

    (*** define tables, use structures of the dictionary ***)

    (* table for the purcaseorder header *)
    Header := funct.exports('PO_HEADER');

    (* table of the purcaseorder items *)
    POItems := funct.tables.item('PO_ITEMS');

    (* table of the schedules *)
    Schedules := funct.tables.item('PO_ITEM_SCHEDULES');

    (*** filling the PO_Header-table ***)

    (* purcasing document type *)
    Header.Value[2] := 'NB ' ;

    (* purcasing document category *)
    Header.Value[3] := 'F' ;

    (* purcasing organisation *)
    Header.Value[5] := '600' ;

    (* purcasing group *)
    Header.Value[6] := '610' ;

    (* vendor account number, on numeric values don't *)
    (* forget the leading zeroes!!! *)
    Header.Value[8] := '0099000123';

    (*** filling the PO_Items-table ***)

    (* add new row to the table *)
    ItemsRow := POItems.rows.add;

    (* item number of purcasing document *)
    ItemsRow.Value[2]:='00010';

    (* material-number, on numeric values don't forget *)
    (* the leading zeros !!! *)
    ItemsRow.Value[5]:='000000000000001161';

    (* storage location *)
    ItemsRow.Value[11]:='100';

    (* plant *)
    ItemsRow.Value[17]:='0001';

    (* netprice in purcasing document, *)
    (* in document currency *)
    ItemsRow.Value[21]:='10,00';

    (*** filling the PO_Items_Schedules-table ***)

    (* add new row to the table *)
    SchedulesRow := Schedules.rows.add;

    (* item number of purcasing document *)
    SchedulesRow.Value[1]:='00010';

    (* category of delivery date *)
    SchedulesRow.Value[3]:='1';

    (* item delivery date *)
    SchedulesRow.Value[4]:='30.05.2000';

    (* scheduled quantity *)
    SchedulesRow.Value[6]:='10';

    (*** call function ***)

    if not funct.call then

    (* on error show message *)
    showMessage(funct.exception)

    else
    begin

    (* show number of the purcaseorder *)
    MLDText:= funct.imports('PURCHASEORDER');
    MessageDlg('purcaseorder '+MLDText+' created.',
    MTInformation,[mbOK],0);
    end;
    end;

    end.

    Example 7:

    Show the details of material with the BusinessObject BUS1001

    In this example the form TForm1 contains the following components:

    Component Function
    SAPBAPIControl1 SAP ActiveX-Component to connect to BAPI
    Button1 Button to start the procedure
    Panel1 Element to display the material-description

    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');

    (* Call the object with the needed parameters *)
    MAT:= sapbapicontrol1.GetSAPObject('BUS1001','000000000000017550');

    (* Display material-description *)
    Panel1.Caption:=MAT.MATERIALDESCRIPTION;
    end;
    end;

    end.

    Example 8:

    Create an purchaseorder with the BusinessObject BUS2012

    In this example the form TForm1 contains the following components:

    Component Function
    SAPLogonControl1 SAP ActiveX-Component to logon to the system
    SAPBAPIControl1 SAP ActiveX-Component to connect to BAPI
    Button1 Button to start the procedure
    Button2 Button to logon
    Panel1-3 Elements to display messages

    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

    (* select BusinessObject *)
    Mat:= SAPBapiControl1.GetSAPObject('BUS2012');

    (* define structures *)
    Header := SAPBapiCcontrol1.dimAs (Mat,'CreateFromData','PoHeader');
    Schedul:= SAPBapiCcontrol1.dimAs (Mat,'CreateFromData','PoItemSchedules');
    Item := SAPBapiCcontrol1.dimAs (Mat,'CreateFromData','PoItems');
    Ret := SAPBapiCcontrol1.dimAs (Mat,'CreateFromData','Return');

    (* purchaseorder header data's *)
    Header.value ('DOC_TYPE') := 'NB';
    Header.value ('DOC_CAT') := 'F';
    Header.value ('PURCH_ORG'):= '10';
    Header.value ('PUR_GROUP'):= '10';
    Header.value ('VENDOR') := '0010000999';

    (* data for 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';

    (* schedules for 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';

    (* data for 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';

    (* schedules for 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';

    (* call the method CreateFromData *)
    Mat.CreateFromData (PoHeader := Header,
    SkipItemsWithError := ' ',
    PoItems := Item,
    PoItemSchedules := Schedul,
    Return := Ret);

    (* Errors are saved in the structure Ret *)
    if Ret.RowCount > 0 then
    begin
    Panel1.Caption:= Ret.Value (1,'TYPE');
    Panel2.Caption:= Ret.Value (1,'MESSAGE');
    end

    (* If the method was calles without errors, *)
    (* display the number of the purchaseorder *)
    else Panel2.Caption:= Mat.PurchaseOrder;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin

    (* Logon to the 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('Logon O.K.');
    Button1.Enabled:= true;

    (* assign the existing connection to the *)
    (* component SAPBapiControl1 *)
    SapBapiControl1.Connection:=Connection;
    end
    else
    begin
    ShowMessage('Error on logon :-(((');
    end;
    end;
    end.

  • 相关阅读:
    hdu 4283 You Are the One ( dp 2012 ACM/ICPC Asia Regional Tianjin Online )
    hdu 4268 Alice and Bob (贪心 2012 ACM/ICPC Asia Regional Changchun Online)
    2sat 讲解
    高斯消元 Java 高精度版 HDU 2449 Gauss Elimination
    poj 3207 Ikki's Story IV Panda's Trick (2sat)
    poj 2723 Get Luffy Out (2 sat + 二分)
    hdu 2604 Queuing (矩阵乘法 求递推式)
    poj 1753 Flip Game (高斯消元 + 枚举 自由变量)
    poj 3683 Priest John's Busiest Day (2sat 模版)
    vs2008新特性
  • 原文地址:https://www.cnblogs.com/mikemao/p/15736587.html
Copyright © 2020-2023  润新知