- Preparação Delphi
Para este exemplo será necessário importar no Delphi os ActiveX Controls SAP Logon Control e SAP Remote Function Call Control, conforme as imagens abaixo:
- Informações necessárias
Para chamar no SAP a RFC será necessário alguns parâmetros, que podem ser obtidos conforme as telas das imagens abaixo:
- Servidor de aplicação
- Nº da instância
- ID sist.
- Mandante
- Usuário
- Senha
- Idioma de logon
- Exemplo
Para o download do projeto de exemplo clique aqui.
Form de exemplo:
Código fonte de exemplo:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SAPLogonCtrl_TLB, Grids, SAPFunctionsOCX_TLB;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
grid: TStringGrid;
grid2: TStringGrid;
SAPLogonControl1: TSAPLogonControl;
SAPFunctions1: TSAPFunctions;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
procedure AutoSizeGrid(Grid: TStringGrid);
public
{ Public declarations }
end;
var
Form1: TForm1;
Connection, Funct, Table: Variant;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
(* define connection and it's parameters *)
Connection := SAPLogoncontrol1.newConnection;
Connection.ApplicationServer := '127.0.0.1'; //Servidor de aplicação
Connection.SystemNumber := '00'; //Nº da instância
Connection.System := 'ECP'; //ID sist.
(* In some GUI-versions the username *)
(* must be written in uppercase !!! *)
Connection.Client := '000'; //Mandante
Connection.User := AnsiUpperCase(Edit1.text); //Usuário
Connection.Password := Edit2.text; //Senha
Connection.Language := 'PT' ; //Idioma de logon
Button1.Enabled := False;
if Connection.LogOn(0, True) = true then
(* parameter "true" : SilentLogOn *)
begin
ShowMessage('Logon O.K.');
Button2.Enabled := True;
Button3.Enabled := True;
end
else
begin
ShowMessage('Error on logon :-(((');
Button1.Enabled := True;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
(* cut connection *)
Connection.LogOff;
ShowMessage('System LogOff...');
Button1.Enabled := True;
Button2.Enabled := False;
Button3.Enabled := False;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
txt: string;
r, c: integer;
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.ColCount := 3;
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;
AutoSizeGrid(grid);
grid2.rowCount := Table.rowcount + 1;
grid2.ColCount := Table.columncount;
for r := 1 to grid2.RowCount -1 do begin
for c := 1 to grid2.ColCount do begin
grid2.cells[c - 1,r] := Table.value(r, c);
end;
end;
AutoSizeGrid(grid2);
end;
end;
procedure TForm1.AutoSizeGrid(Grid: TStringGrid);
const
ColWidthMin = 10;
var
C, R, W, ColWidthMax: integer;
begin
for C := 0 to Grid.ColCount - 1 do begin
ColWidthMax := ColWidthMin;
for R := 0 to (Grid.RowCount - 1) do begin
W := Grid.Canvas.TextWidth(Grid.Cells[C, R]);
if W > ColWidthMax then
ColWidthMax := W;
end;
Grid.ColWidths[C] := ColWidthMax + 5;
end;
end;
end.
- Considerações
Este exemplo foi baseado nas informações contidas nas páginas:
- http://www.joachim-lentz.homepage.t-online.de/intro.htm
- http://www.joachim-lentz.homepage.t-online.de/examples.htm
Olá!
ResponderExcluirUtilizo SAP.Functions para fazer chamadas no SAP em Delphi, porém preciso conectar com SNC. Teria alguma experiência em relação a isso para compartilhar?
Desde já muito obrigada!
Olá,
ResponderExcluirInfelizmente não tive nenhuma experiência.