2023년 4월 10일 월요일

[ABAP] RFC Destination 사용법(SAP RFC에서 외부 시스템 호출)

[ 원글 : https://blog.naver.com/dhysys/ ]


.NET [ https://blog.naver.com/dhysys/

http://help.sap.com 에서는 다음과 같이 나와있습니다.

In the SAP System, the ability to call remote functions is provided by the Remote Function Call (RFC) interface. This interface allows for remote calls between two SAP Systems (R/3 as of Release 2.1 and R/2 as of Release 5.0D), or between an SAP System and a non-SAP system.

 

server와 client에 대해서는..

RFC programs for non-SAP Systems can function as either the caller or the called program in an RFC communication.

There are two kinds of RFC programs: RFC client and RFC server programs:
The RFC client is the instance that calls up the RFC to execute the function which is provided by an RFC server. In the following, the functions that can be executed remotely will be called RFC functions, and the functions provided by the RFC API will be called RFC calls.

 

그렇다면! RFC Server를 이용하여 SAP 의 이벤트를 받고 싶다면 어떻게 하는지 알아보겠습니다.

 

시스템 구성

Windows Server 2003 Enterprise Edition with SP2

Visual Studio 2003

SAP .NET Connector 1.03

JAVA VM Version 5 Runtime engine

 

** SAP .NET Connecotr는 Visual Studio 2003, .NET Framework 1.1까지만 지원하고 있습니다. 더 이상 SAP에서는 SAP .NET Connector를 지원하지 않겠다고 합니다. 그 이상 버전에서 사용하고 싶으시면 WCF SAP Adapter를 이용하셔야 합니다.

 

사전 작업

SAP RFC Destination 설정과 RFC 함수 구현이 완료되어 있어야 됩니다.

 

실제 구현

SAP .NET Connector에는 RunTime과 Design Time으로 분리되며, Visual Studio 2003을 지원하기 위해서는 반드시 Design Time이 설치되어야 합니다. 설치 된 후 Visual Studio 2003에서 프로젝트를 추가 후 -> 새로운 항목 추가를 클릭하면 SAP Connector Class라는 항목을 확인할 수 있습니다.


SAP Connector Class를 선택 Name을 지정 후 Open을 클릭하면 SAP .NET Connector Wizard가 실행됩니다.



SAP Server를 선택 후 Next를 클릭합니다.



SAP 서버의 연결정보를 구성 후 Object TypeServer Stub으로 선택 후 Next를 클릭합니다.



RFC함수를 검색하여 ADD시킨 후 Next를 클릭합니다.


 


C#코드가 자동생성되는것을 확인할 수 있습니다.


 


Stub코드가 생성 된 후 Windows서버에서 SAP 이벤트를 수신받기 위해 Listener를 구성하여야 합니다. 일반적으로는 윈도우즈 서비스로 구성합니다.


 








프로젝트가 구성되었습니다.

프로젝트 구성이 완료되었으니 실제 소스를 구현합니다. 여기서는 콘솔 프로그램으로 작성하였습니다.

 

using문에 SAP.Connector를 추가합니다. (Wizard를 통해 Stub코드를 생성할때 SAP.Connector.dll은 자동 참조 됩니다.)



RFCServerConsole을 상속받아 구현하였습니다.








콘솔프로그램의 구현은 간단합니다. SAP의 Detination정보를 가지고 서비스를 대기하는 Listener입니다.

SAP에서 이벤트를 수신받았을때 수행되는 함수입니다. Wziard로 Stub을 생성 후 override하여 구현하면 됩니다.

여기서는 간단하게 X, Y값을 덧셈하는 로직입니다.

 

 

 

RFC Server와 (1) SAP .NET Connector C# Side에서 구성한 Listener와의 통신 접점 구성을 해주어야 합니다.

이 구성을 SAP는 RFC Destination을 생성한다고 합니다.

help.sap.com 참조: RFC Destination

 

트랜잭션 코드는 SM59입니다.



 Display and maintain RFC destinations 화면에서 "Create"버튼을 클릭하면 RFC Destination을 생성하는 화면이 나옵니다.



 Connection Type은 "T"를 선택합니다. 여기서 "T"는 TCP/IP 통신을 하겠다는 의미입니다.



 "Registration" 버튼을 클릭한 후 ProgramID를 구분할수 있는 값으로 지정합니다. 여기서는 "BIZTALK"으로 지정하였습니다.



 ProgramID를 지정후 툴바의 플로피 디스크 아이콘 (Save)을 클릭하여 저장합니다.



 BIZTALK이라는 이름으로 RFC Destination이 생성된것을 확인할 수 있습니다.



 RFC Destination이 생성되면 외부 시스템과의 통신이 원활하게 이루어지는지 테스트를 해보게 됩니다.

이때 SAP.NET Connector의 경우는 Console프로그램을 실행시켜 Listen을 하고 있는 상태이어야 합니다.

BizTalk SAP Adapter의 경우는 Receive Port를 생성하여 Enable 상태이어야 합니다.



 "Test Connection"을 클릭하였을때 정상적으로 서비스가 Listen 상태라면 통신이 원활하게 되고 있다는것을 확인하실수 있습니다.

연결 테스트가 되었다면 이제 RFC함수로가서 정상적으로 동작하는지 확인합니다.

 

RFC 개발화면 트랜잭션코드는 SE37입니다.



 여기서는 미리 생성한 RFC "Z_RFC_ADD"를 사용하도록 합니다.



 RFC함수의 내용은 보시는것 처럼 값(VALUE)를 전달하는 역할만 합니다.

툴바의 "Test or Execution" 아이콘을 클릭합니다.



 간단한 덧셈을 하는 내용입니다. 실제 덧셈을 하는 로직은 SAP.NET Connector로 구현한 Console 프로그램이나 BizTalk Server에서 구성된 로직이 되겠습니다. RFC함수는 값만 전달해주고 결과값을 돌려받습니다.

 

여기서 중요한것은 SAP에서 이벤트가 시작하여 그것이 외부시스템에서 수행 후 그 결과값을 받을 수 있다는것입니다.

 

간단한 값을 지정하고 어느 Destination을 통해 통신하는지를 지정 후 "Execute"를 클릭합니다.



 외부 시스템 서비스와 Destination 연결테스트가 정상적이며, 외부 서비스의 로직 구현이 정상이라면 결과물을 화면과 같이 받아 볼 수 있습니다.

 

(2) RFC Server SAP Side에서 구성한 RFC를 그대로 사용하도록 하겠습니다. 내용은 단순하게 덧셈을 하는것으로 잡았으며, MiniSAP이므로 실제 SAP와는 조금 차이 날 수 있습니다.



 SAP에서 RFC 구성이 완료되었으면 BizTalk Server측으로 넘어가도록 합니다.

BizTalk WCF SAP Adapter가 정상적으로 설치되었다면, Visual Studio를 실행하여 BizTalk 프로젝트를 생성합니다.

BizTalk 프로젝트에서 오른쪽 마우스 버튼을 클릭 Add -> Add Generated Items를 선택합니다.

 

Add Generated Items의 왼쪽 트리뷰에서 Consume Adapter Service을 선택합니다.


 







WCF Adapter Wizard화면이 나오면 BindingSAP로 지정합니다.

SAP로 지정 후 접근할 SAP의 주소 및 인증정보를 입력합니다.

 

SAP 접근 인증정보 입력







 

SAP 서버 정보 입력


 










 

설정이 완료된 후 Connect를 클릭하면 SAP 서버정보가 보입니다.



 Contract type Client로 지정 후 검색 또는 왼쪽 트리에서 필요한 RFC를 찾아서 추가합니다. OK를 클릭하면 Z_RFC_ADD 함수의 스키마가 생성됩니다.

 

RFC Server 방식은 수신 받은 이벤트를 가지고 로직을 실행 후 리턴값을 응답하는 구조입니다.

여기서는 Orchestration을 생성하여 C#으로 구성된 모듈(로직)을 호출하여 응답값을 리턴하도록 합니다.



 Expression Shape를 사용하여 C# 모듈을 호출합니다.

응답값을 리턴하기 위해서는 WCF.Action값이 필요합니다. Action값은 Schema에서 확인할 수 있습니다.



 

C# 모듈은 간단한 덧셈을 수행 후 Response Schema에 맞는 XML을 생성합니다.

BizTalk 프로젝트가 생성이 완료되면 빌드하여 배포하도록 합니다.

 

이제 RFC Server 이벤트를 수신받을 Receive Port를 생성합니다.







 

RFC Server의 방식은 수신을 받은 후 응답을 주는 형태이므로 Request Response Recieve Port로 생성합니다.



 

포트이름은 알아볼수 있는 내용으로 지정하시면 됩니다.



 Receive Location에서 Type은 WCF-Custom으로 선택합니다.

Handler를 선택 후 파이프라인은 Default XML 파이프라인으로 지정합니다.

Configure...을 클릭합니다.

















 

WCF-Custom 어댑터 설정화면이 나오면 Binding 탭에서 SAPBinding을 선택합니다.

















 

SAP 서버에 접근하는 인증정보를 입력합니다.

General 탭으로 다시 돌아와서 Address를 입력합니다. 앞서서 SAP Counsum Wizard에서 생성한 Address를 사용해보았는데 연결이 되지 않습니다. 사용자가 수정을 해야합니다.

















 

주소는 다음과 같은 포멧으로 만들어주면 됩니다.

sap://CLIENT=00;LANG=EN;@A/MINISAP/00?ListenerGwHost=MINISAP&ListenerGwServ=SAPGW00&ListenerProgramId=BIZTALK

 

설정이 완료 된 후 Receive PortEnable 상태로 변경합니다.



 

(2) RFC Server SAP Side에서 했던 Connection Test를 해서 연결이 올바르게 이루어지는지 확인합니다.




 Connection Test가 완료되었다면, 이제 실제로 SAP 에서 이벤트를 주어 RFC Server가 동작하는지 테스트 해보도록 합니다.




BizTalk Server와 관련해서 WCF Adapter 샘플을 제공하고 있습니다. 샘플은 다음링크에서 다운로드 받을 수 있습니다.

BizTalk Server 2006 R2 Code Samples

여기서 사용한 샘플 역시 여기서 다운로드 받아 약간의 수정을 통해 이용하였습니다.

 

WCF SAP Adapter을 테스트 하면서 생각되어진 장단점은 다음과 같습니다.

 

장점

(1) 이전 BizTalk Adapter로는 지원되지 않는 부분들을 지원하고 있습니다.

- RFC Server 지원

- SAP ECC Version 지원

 

(2) 마이크로소프트에서 돈?을 받고 파는 제품이기 때문에 문제 발생시 기술지원을 받을 수 있습니다.

 

(3) 마이크로소프트에서 만들어 내기 때문에 앞으로도 꾸준히 업데이트 되면서 BizTalk 이외의 다른제품에서도 사용할 수 있도록 나오게 되었습니다 . SSIS (SQL Server Integration Service), IIS (Internet Information Service), MOSS (Microsoft Office Share Point Server), W/S (XML Web Service) 등등

 

단점

(1) 현재 나와있는 BizTalk WCF Adapter v1.0은 버그가 보이고 있습니다. SAP를 연결하는데 같은 버전의 SAP라도 오류가 그때그때 달라지니.. 좀 난감할때가 있습니다. 아무래도 첫번째 버전의 모습을 보이고 있지만, 내년에 v2.0 으로 몇가지 어댑터와 추가기능이 추가되어서 나오면 좀더 사용할만한 어댑터가 되지 않을까 싶습니다.

 

(2) BizTalk Adapter로는 BizTalk으로 구매시 라이센스가 같이 들어오지만 BizTalk이 없이 사용할려고 할때에는 라이센스를 구매하셔야 합니다. SAP와 연계는 하고 싶지만 BizTalk은 너무 비싸서 구매에 망설여 진다면 WCF Adapter Pack만 구매해서 사용하시는것도 방법입니다.

 

(3) 설치시 몇까지 지켜줘야 될 사항들이 있습니다. SAP GUI에서 dll 복사 설치라던가.. 아직까지는 원 클릭 설치가 되지 않습니다. SAP GUI 버전도 좀 가리는것 같습니다.

 

(4) 여러번 Consume Adapter Wizard를 실행할 경우가 생기면 매번 인증정보와 서버정보를 입력해야 합니다. 이거 매우 반복성 작업이 되어버리는군요... 서버정보는 Configure a URI를 복사해서 사용하면 약간이나마 줄일 수 있습니다.



댓글 없음:

댓글 쓰기