2009년 6월 9일 화요일

DCom 이용하기

SAP 에서 RFC 통신을 이용하여 Web와 데이터를 공유하도록 지원한다.

 

Web와 데이터를 공유하는 방식중 jdk 를 이용하는 방법과 DCom connector 을 이용하는 방법

 

jdk를 이용하여 JAVA 또는 C#이나 .net을 이용하는 방법이 있는데

 

여기서는 DCom을 이용하는 방법을 정리한다.

 

SAP 640 이하버전은 SAP 싸이트를 이용하여 DCom connector를 다운 받아

 

Dll을 생성하여 사용할수 있다.

 

Dcom connector 생성 방법은 따로 설명할 예정이다 (알아두면 편리한것)

 

여기서는 web와의 연결 방법에 대하여 이야기 하겠다.

 

DCom Connector를 사용하기 위해 가장기본이 되는 거는 Web 서비시를 하는 곳에

 

SAP GUI가 깔려 있어야 편하다.

 

우선 Dcom connector에서 생성한 Dll 파일을 구성요소 서비스에 등록한다 (이부분도 따로 설명 하겠다 - 알아두면 편리한것)

 

등록한 Dcom connector의 이름을 이용하여 객체를 생성한다.

 

객체 생성은 기존의 방식과 동일하나 파라미터로 넘겨주는 내용만 맞추면 된다.

 

      Set obj = server.CreateObject("구성요소 서비스에 등록된 DCom connector 이름")

      obj.Destination = "연결한 SAP 서버 이름" // 또는 IP

      obj.Client = "Client 번호"

      obj.UserID = "RFC 통신을 위한 ID"

      obj.Password = "UserID 의 암호"

      obj.Language = "KO" // 사용할 언어

 

위 내용의 대부분은 SAP을 연결하기 위한 SAP GUI에 설정된 내용과 동일하다.

 

이제 생성된 객체를 이용하여 특정의 Function을 호출하는 방법을 보면

 

        Call obj.Zxxxx_xxxx(a, b, c, d, return, sA, Table) // Zxxxx_xxxx 호출 function, a, b, c, d 전송 파라미터, return, sA 구조체, Table 필요 데이터

 

Call 을 이용하여 function을 호출하면 바로 데이터를 얻을수 있다. 참 간단하지 않은가.

 

여기서 주의 할 점이 있다. Table 및 전송 또는 리턴되는 데이터 형을 어떻게 선언할 것인가.

 

Table은 RecodeSet으로 설정하여야 한다.

 

METADATA TYPE="typelib" FILE="C:\program Files\Common Files\System\ado\msado15.dll

 

RecodeSet으로 선언하기 위해서는 반듯이 METADATA TYPE가 선언되어 사용해야 한다.

 

        Dim table   // table 선언

        Set table = Server.Create("ADODB.Recordset")  // 객채 생성

        obj.DimAS "Zxxxx_xxxx", "Table", table   // 형 변환

 

DimAS라는 Function 이 나온다 이전에 생성한 Dll의 .h 파일을 보면 DimAS는 Zxxxx_xxxx Function 에서 사용하는

 

Table 이라는 형태로 table의 형을 변환하여 보내준다.

 

여기서 주의 해야할 점은 "Zxxxx_xxx" 와 "Table"은 SAP에 정의된 이름과 동일해야 한다.

 

그럼 구조체는 어떻게 정의 할 것인가. 사실 구조체는 따로 정의할 필요가 없다. Dim 으로 선언하여 사용하면 된다.

 

다만 구조체 내부의 데이터를 읽어 올때만 틀려진다.

 

위 코드 내용중 sA를 구조체를 선언하였다.

 

sA의 값을 받기 위해서는

 

         Dim sA

         ....

         ....

         response.write(sA("구조체 내부 변수명"))

 

이런식으로 받아 오면 된다.

 

전체 Code

 

      Dim table, obj, a, b, c, d, return, sA

 

     Set obj = server.CreateObject("구성요소 서비스에 등록된 DCom connector 이름")

      obj.Destination = "연결한 SAP 서버 이름"

      obj.Client = "Client 번호"

      obj.UserID = "RFC 통신을 위한 ID"

      obj.Password = "UserID 의 암호"

      obj.Language = "KO"

 

      Set table = Server.Create("ADODB.Recordset")

      obj.DimAS "Zxxxx_xxxx", "Table", table  

 

      a = "a"

      b = "b"

      c = "c"

      d = "d"

      Call obj.Zxxxx_xxxx(a, b, c, d, return, sA, table)

     

      response.write(return)

      response.write(sA("aa"))

      response.write(sA("bb"))

      response.write(sA("cc"))

      response.write(table("aa"))

      response.write(table("bb"))

      response.write(table("cc"))

 

여기서 주의할 점은 Table 에 데이터가 하나도 없으면 table에는 NULL 이 넘어오기 때문에

 

table에 대이터가 있는지 없는지 먼져 Check 하도록 return 에 Table 데이터의 유무 또는 데이터 수량을 리턴하여 사용하는 것이 편하다.

 

출처 : Tong - 공원님의 ┣ ★ 먹고사는일(Web)통

댓글 없음:

댓글 쓰기