델파이6.0으로 만들어진 시스템에서 sap r/3 의 RFC Call 하여 데이타를 보여주는
화면을 델파이로 만들려고 합니다.
Sap GUI 6.2 설치하고 wtdlog.ocx , wtdfuncs.ocx 파일을 activex 컴포넌트에 생성하여
테스트해보기 위해서 아래와 같이 만들었습니다. RFC Call 하는 부분부터 모르겠습니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SAPLogonCtrl_TLB, OleCtrls, SAPFunctionsOCX_TLB, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
SAPFunctions1: TSAPFunctions;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
Comobj;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var VCon , VFunc : Variant;
begin
// parametry logowania SAPGUI
VCon := SAPFunctions1.Connection;
VCon.User := aaaaa;
VCon.SystemNumber := 00 ;
VCon.Client := '100';
VCon.ApplicationServer := 'XXX.XXX.XXX.XXX';
VCon.Password := 1234;
VCon.Language := 'KO';
if VCon.logon(0,true) then begin
ShowMessage('접속 성공');
end;
VFun := SAPFunctions1.add('Z_SD_GWIF_F4MATERIAL');
/ *****************************************
exports, import 하고 table 내용 받아서 보여주는 것을 어떻게 해야 할지
????????????????????????????????
*****************************************/
end;
end.
혹시 예제될만한 소스를 보내주신다면 정말 감사하겠습니다. 부탁드립니다
[답변]
SAP 의 RFC를 이용 하기위한 입맛에 꼭 맞는 예제는 실제 개발의 상당한 부분을
알지못하고는 제공이 불가능 합니다.
계략 어떻게 콜 하는지는 다음 예제로 알수 있을겁니다.
BAPI를 불러 material 재고 을 이동 하는 예제입니다.
Connection := Sap.SAPLogon.NewConnection;
Connection.ApplicationServer := _sap_app_server;
Connection.SystemNumber := _sap_system_no;
Connection.System := _sap_system;
Connection.Client := _sap_client;
Connection.User := _sap_user;
Connection.Password := _sap_password;
Connection.Language := _sap_language;
if Connection.LogOn(Sap.Handle,True) then
begin
Sap.SAPFunctions.Connection := Connection;
Func := Sap.SAPFunctions.Add('BAPI_GOODSMVT_CREATE');
Head := Func.Exports('goodsmvt_header');
Code := Func.Exports('goodsmvt_code');
Item := Func.Tables.Item('goodsmvt_item');
Ret := Func.Tables.Item('return');
Head.value('pstng_date') := FormatDateTime('yyyymmdd',Now());
Code.Value('gm_code') := _sap_gm_code;
Row := Item.Rows.Add;
Row.Value('plant') := _sap_plant ;//'P001';
Row.Value('stge_loc') := _sap_stge_loc ;//'C004';
Row.Value('move_type') := _sap_move_type ;//'311';
Row.Value('move_stloc') := _sap_move_stloc ;//'L401';
Row.Value('entry_uom_iso') := _sap_entry_uom_iso;//'EA';
Row.Value('material') := _part_no;
Row.Value('entry_qnt') := _qty;
if not Func.Call then
begin
// Eror -> Func.Exception;
end else
begin
if Ret.RowCount > 0 then
begin
if Ret.Value (1,'TYPE') = 'E' then
begin
Result := 'E:(RET)' + Ret.Value(1,'MESSAGE');
FuncBack := Sap.SAPFunctions.Add('BAPI_TRANSACTION_ROLLBACK');
FuncBack.Call;
end;
end else
begin
Result := Func.Imports('MaterialDocument').Value;
FuncCommit := Sap.SAPFunctions.Add('BAPI_TRANSACTION_COMMIT');
FuncCommit.Call;
end;
end;