페이지 트리

 

 

 

SAP 연동

메시지 정의서

 

 

 

 

 

 

 

 

2 024 02 01

비아이매트릭스 기술연구소

 

 

 

. 개정 이력

 

버전

변경 일자

제 개정 내용

작성자

1.0

2021.03.08

최초 작성

박나미

1.1

2021 .03.15

메시지 형식 변경

박나미

1.2

2021. 0 3.16

오류 메시지 추가

박나미

1 .3

2021. 0 3.22

콤보 박스 옵션 사용하도록 추가

개행 처리 및 IN 파싱 오류 처리

박나미

1.4

2021.03.22

Table 형태의 input 설정 방법

박나미

1.5

2021.04.05

RFC CRUD 기능 사용 방법

박나미

1 .6

2021.04.08

1. SAP의 CRUD Table에 대한 스키마 정보를 MTX_META 테이블에 insert 시키는 sql 문 작성 Tool

2. RFC CRUD 실행 시 일반 파라메터 설정 기능 추가

박나미

1 .7

2021.04.16

RFC CRUD 실행 시 오류 처리를 위한 ERROR 파라메터 추가

박나미

1.8

2021.05.04

SAP RFC 호출 후 Return 값을 다중으로 받을 수 있는 구조 추가

박나미

2.0

2024.02.01

자체 RFC 연동 방식으로 기능 고도화

Exception 기능 미 구현 ( 구현 예정)

박나미

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. SAP Function 호출 후 결과 TABLE 반환에 필요한 메시지 정의

 

I - Matrix , I - AUD 보고서 쿼리 설정 화면에 프로시저 형태의 호출 메시지를 작성합니다.

해당 요청 메시지에 따른 결과는 JDBC 형식의 Result Set 으로 변환하여 반환합니다.

하나의 Function 실행에 따른 결과 Table 1 개만 반환됩니다.

       요청 메시지 명세

항목명(영문)

항목명(국문)

항목 구분

항목 설명

FUNCTION_NAME

Sap Function 이름

필수

호출할 Sap Function 선택

TABLE_NAME

결과 테이블 이름

필수

리턴받을 테이블 선택

없을 시 빈값 (“”) 처리

INPUT_PARAMS

요청 파라메터

선택

Sap Function 실행 시 import 파라메터가 있으면 설정.

       매개변수명 : “ 형식으로 설정

       값을 보고서 내에서 :VN_ , :VS_ 설정 가능

       매개변수의 값이 여러 개 일때는 ; 로 구분하여 설정

각 매개변수의 값 개수는 동일하게 맞춰야 하며 값이 없을 시에는 빈 값( “”) 처리

       Table일 경우 매개변수명 앞에 <@T@> 를 붙인 후 작성한다.

OUTPUT_PARAMS

응답 컬럼

선택

리턴받을 테이블에서 실제 조회하고 싶은 컬럼들 설정.

전체 컬럼을 모두 조회할 때는 설정 안함.

       Name : 조회할 테이블의 컬럼명

       Index : 조회 시 표시할 컬럼 순서.

 

 

 

 

 

 

 

 

 

       요청 메시지 형태

       { } 로 쌓여 있는 부분은 값이 없을 시 설정하지 않음

       리턴테이블명이 없으면 공백으로 설정

       INPUT_PARAMS의 매개변수의 값이 여러 개이면 ; 로 구분하여 설정

-           T able 형태의 값 설정 시 [ ] 로 묶어서 값을 설정한다.

       I-AUD 보고서에서 멀티 콤보박스 값 사용 시 구분자 ; 로 변환하여 전달

 

 

 

EXEC_RFC ( Function명 ”,” 리턴테이블명 ”,” INPUT_ PARAMS ”,{” 매개변수명 ”,” ”,” 매개변수명 ”,” ”……..},” OUTPUT_PARAMS ”,{” 컬럼명 ”,” 컬럼순서 ”,” 컬럼명 ”,” 컬럼순서 ”})

 

 

 

Import Parameter 값이 여러 개 일 때 예시

EXEC_RFC("ZXNSC_NEW_RFCCALL_TEST","IT_RESULT","INPUT_PARAMS","INPUT1",["PARAM1":'ABCD',"PARAM2":"1.21","PARAM3":"100000"],"IT_INPUT",["PARAM1":"EFGH";"IJKL";"MNOP","PARAM2":"2.32";"3.43";"4.54","PARAM3":”20”;”30”;”40”],"OUTPUT_PARAMS","PARAM1","2","PARAM2","1","PARAM3","3")

 

Import Parameter의 값이 하나 일 때 예시

EXEC_RFC("ZXNSC_RFC_EXEC_SAMPLE","FIELDS","INPUT_PARAMS","STRUCT","ZXNSC_RFC_RESULT","PARAM1","3","PARAM2","ADD3","PARAM3","TEST2012DDSSDD","OUTPUT_PARAMS","FIELDNAME","2","FIELDTEXT","1","OFFSET","3")

 

Output Parameter의 값을 설정하지 않을 때 예시

EXEC_RFC("ZXNSC_NEW_RFCCALL_TEST,"IT_RESULT","INPUT_PARAMS","INPUT1",["PARAM1":"ABCD","PARAM2":"1.21","PARAM3":"100000"],"<@T@>IT_INPUT",["PARAM1":"EFGH";"IJKL";"MNOP","PARAM2":"2.32";"3.43";"4.54","PARAM3":"20";"30";"40"],"OUTPUT_PARAMS")

 

리턴 테이블이 없을 때 예시

EXEC_RFC("ZXNSC_NEW_RFCCALL_TEST","","INPUT_PARAMS","INPUT1",["PARAM1":"ABCD","PARAM2":"1.21","PARAM3":"100000"],"<@T@>IT_INPUT",["PARAM1":"EFGH","PARAM2":"2.32","PARAM3":"20"],"OUTPUT_PARAMS")

 

 

 

 

  1. CRUD 기능

I - Matrix , I - AUD 보고서 에서 CRUD용 SAP RFC 호출하는 기능입니다

리턴값을 CRUD 성공 결과 count SAP 에서 전달 시에만 Return 값을 설정하여 받을 수 있다. 기본은 Return 값을 공백으로 설정한다.

해당 기능은 Meta 를 수동으로 만들어서 사용해야 되기 때문에 이 기능은 가능하면 사용하지 않고 Multi Result (Procedure Call 형태) 형태로 사용해도 동일 결과를 받을 수 있다.

2-1. i-Matrix

       DB Bot – DB Upload Plan을 사용

       SAP RFC에서 CRUD에 사용하는 Table의 메타 정보를 Repository DB에 insert 합니다.

       추가해야 될 Repository Table 정보

       MTX_META_RELATION

       MTX_META_OBJECT

       MTX_META_ATTR

       make_Insert_MetaData_SQL.jar 를 실행하여 테이블의 컬럼 정보가 있는 엑셀 파일들을 읽어서 자동으로 MTX_META 에 insert할 SQL 을 생성한다.

       D B Upload Plan 을 실행한다.

  1. 첫번째로 S Q L 을 추가한다.

       아래와 같이 메시지를 추가한다.

CRUD_RFC(RFC 함수명 , Return , CRUD import 매개변수명)

       매개변수가 Table 구조이면 매개변수명 앞에 <@T@> 를 삽입한다.

  1. 두번째부터 Repostiory Meta 에 생성한 테이블 항목별 CRUD 실행값을 설정한다.

       CRUD import 매개변수에 설정한 명칭 순서대로 TABLE 또는 일반 파라메터를 추가하여 CRUD 값을 설정한다.

       일반 파라메터는 key:value 형태로 설정

E x) 파라미터명1:값1 , 파라미터명2:값2 , 파라미터명n:값n 로 설정

       오류에 대한 설정이 없을 시에는 공백으로 작성

  1. 실행 버튼을 작성한 해당 PLAN 을 실행시킨다.

 

 

 

 

 

 

 

 

 

2-2. i-AUD

       I-AUD 디자이너를 실행한다.

       CRUD 에 필요한 import 항목별 Grid 를 생성한다.

       디자인에서 필드를 추가한다 . 각 항목별 CRUD 에 필요한 컬럼 항목을 작성한다.

       Grid Row Append 하는 Button 을 만든다 .

-           보고서 작성은 사용자에 편의대로 작성하셔서 만드시면 됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

       Script Editor를 실행시킨다.

  1. Server Script 를 작성한다.

       S QL 을 작성한다

CRUD_RFC( FUNC_NAME , RETURN , CRUD import 매개변수명)

       매개변수가 Table 구조이면 매개변수명 앞에 <@T@> 를 삽입한다.

       기존과 동일한 방식으로 connection 객체에 선언한다.

var INPUT1_TABLE = req.getTable("DataGrid");

var IT_INPUT_TABLE = req.getTable("DataGrid2");

var stmt;

……….

………..

stmt = con.PreparedStatement(sql);

stmt.setString(1 , "ZXNSC_NEW_RFCCALL_TEST"); // function

stmt.setString(2 ,""); // return

stmt.setObject(3 , INPUT1_TABLE.toSapDataTable()); // crud g rid data

stmt.setObject(4 , IT_INPUT_TABLE.toSapDataTable()); // crud grid data

stmt.executeUpdate();

 

 

 

 

  1. 작성한 Server Script를 저장한다.

 

[Server Script Sample]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# 일반 파라메터 설정 예시

sql = “CRUD_RFC(FUNC_NAME , RETURN, “PARAM2”)”;

stmt = con.PreparedStatement(sql);

stmt.setString(1 , “Z_TEST”) ;

stmt.setString(2 , “”);

stmt.setString(3 , “test1”);

stmt.setString(4 , “test2”);

stmt.executeUpdate();

[ Meta 테이블 Insert SQL문 자동 생성 방법]

  1. CRUD 테이블에 해당하는 컬럼 정보가 있는 엑셀 파일들을 SAP 프로그램으로 생성한다.

-           SAP 프로그램 중에서 테이블명을 입력하면 컬럼 정보가 엑셀 파일로 생성된다.

-           엑셀파일명칭은 RFC 명_ _ 테이블명.XLS ( 구분자 __ )

  1. MTX_META 테이블에 필요한 Meta data sql 을 생성해주는 모듈을 실행시킨다.

-           j ava –jar make_Insert_MetaData_SQL.jar

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. 실행 완료 후 생성된 sql 파일을 Matrix 서버의 Repository DB에 insert 한다.
  2. Upload Plan에서 생성한 테이블을 CRUD 에 맞게 설정한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Multi Result (Procedu re Call 형태)설정 방법

SAP을 실행 후 전달받은 결과를 여러 건 동시에 처리할 수 있는 기능입니다.

JDBC PrepareCall 형태로 registerOutParameter를 여러 개 설정하여 전달받는다.

 

3-1. 설정 방법( i-Matrix / i-AUD 공통)

       I-AUD 디자이너를 실행한다.

       Server Script 를 작성한다.

-           Server Script 이름 맨 앞에 @ 를 붙여준 후에 명칭을 작성한다.

Ex) @SapCallable

-           Template 중에서 Proceduer Call을 참고한다.

-           S ql 작성은 아래와 같이 설정한다.

      I ndex 기준으로 설정 할 때

{call RFC_함수명 (outParameterName , ….. , inputParameterName, … )}

      Name 기준으로 설정 할 때

{call RFC_함수명}

-           registerOutParameter를 설정 시 SQL Type 종류는 다음과 같다.

-           실행시에 해당 설정값을 의미없는 int형 값으로 주어도 무방하다.

SQL T ype

설정값

SQL T ype

설정값

Table DataSet( Array) 구조

-10

DOUBLE

8

STRING (VARCHAR)

12

FLOAT

6

NUMERIC

2

BOOLEAN

16

DATE

91

 

 

 

 

 

 

 

 

 

 

 

 

 

O utput , input 설정 예시

       I ndex 기준으로 설정 할 때

var req = Matrix.getRequest();

var res = Matrix.getResponse();

var conn = Matrix.getConnection();

try{

conn.Connect("DBBEE56A722B7F472BA9E746EE412F6D17");

var sql = " {call /IAPPS/IAC_INF_APPRDETAIL (E_FLOWHD,ET_FIDOC,E_RETMSG,E_RETTYP, I_FLOWCODE,I_FLOWNO,I_FLOWCNT,I_LOGIN_ID)} ";

 

// set output parameters

var stmt = conn.PrepareCall(sql);

stmt.registerOutParameter(1, -10); 

stmt.registerOutParameter(2, -10); 

stmt.registerOutParameter(3, 12); 

stmt.registerOutParameter(4, 12);

 

// set input parameters

stmt.setString(5 ,req.getParam("VS_PARAM1")); stmt.setString(6 ,req.getParam("VS_PARAM2"));

stmt.setString(7 ,req.getParam("VS_PARAM3"));

stmt.setString(8 ,req.getParam("VS_PARAM4"));

 

stmt.execute(); // 실행

var E_FLOWHD_DATA = stmt.getDataTable(1);

var ET_FIDOC_DATA = stmt.getDataTable(2);

var E_RETMSG_DATA = stmt.getString(3);

var E_RETTYP_DATA = stmt.getString(4);

 

//set response dataset

res.getDataSet().AddTable(E_FLOWHD_DATA, "E_FLOWHD_GRID");

res.getDataSet().AddTable(ET_FIDOC_DATA, "ET_FIDOC_GRID");

//create manual datatable

var table = res.getDataSet().CreateTable("RETERROR");

table.AddColumn("E_RETMSG", false);

table.AddColumn("E_RETTYP", false);

var row = table.AppendRow();

row.setData("E_RETMSG", E_RETMSG_DATA);

row.setData("E_RETTYP", E_RETTYP_DATA);

} catch(e){…….}

 

 

 

 

 

       Name 기준으로 설정 할 때

 

var req = Matrix.getRequest();

var res = Matrix.getResponse();

var conn = Matrix.getConnection();

 

var INPUT1_TABLE = req.getTable("DataGrid");

var IT_INPUT_TABLE = req.getTable("DataGrid2");

 

try{

conn.Connect("DBBEE56A722B7F472BA9E746EE412F6D17");

sql = " {call ZXNSC_NEW_RFCCALL_TEST} ";

// set output parameters

var stmt = conn.PrepareCall(sql);

stmt.registerOutParameter("IT_RESULT", -10); 

stmt.registerOutParameter("IT_INPUT", -10); 

 

// set input parameters

stmt.setObject("INPUT1" , INPUT1_TABLE. toSapDataTable() );

stmt.setObject ("IT_INPUT" , IT_INPUT_TABLE.toSapDataTable() );

 

stmt.execute(); // 실행

 

var IT_RESULT_DATA = stmt.getDataTable(1);

var IT_INPUT_DATA = stmt.getDataTable(2);

 

//set response dataset

res.getDataSet().AddTable(IT_RESULT_DATA, "IT_RESULT_GRID");

res.getDataSet().AddTable(IT_INPUT_DATA, "IT_INPUT_GRID");

 

conn.DisConnect();

conn = null;

}catch (e){

if(conn != null){conn.DisConnect();conn = null;}

}

 

3-2. Client 설정 방법

3-2-1. i-Matrix

       i-AUD Designer 에서 Server Script 작성 후 해당 Script 를 호출하여 설정한다 .

       실행 버튼에 해당하는 매크로를 아래 예시처럼 작성한다.

       I nput pa rameter 설정

구분

key

value

일반 변수

Server Script에 설정한 R equest parameter name

Range(이름정의 변수명) . Value

Table(구조체)

Server Script 에 설정한 setObject parameter name

Range(셀 지정) , True

……

Set mxmodule = Application.COMAddIns.Item(" iMATRIX6.ExcelModule ").Object

'Server Script 호출 준비

Set svc = mxmodule.xapi.GetServerScript()

'ServerScript 에 전달할 input parameter( 변수명 , 변수값 ) 추가

'svc.AddParam "VS_PARAM1", Range("VS_PARAM1").Value

 

'TABLE 추가

    svc.AddTable "INPUT1", Range("A2:C3"), True

    svc.AddTable "IT_INPUT", Range("A7:C10"), True

 

    'ServerScript 실행 (i-AUD 보고서 code, ServerScript Code)

    Set result = svc.Execute("REP612DC32FF2F2412BB4F6AB68FEE98A51", "@SapCallable")

 

    ' 실행 결과 확인

    If result.code <> 0 Then

        MsgBox " 실행 오류 발생 " & result.Message

    Else

 

        ' 데이터 출력 ( server script 에 작성한 output data set 이름 정의 ) Recordset

        Range("A13").CopyFromRecordset result.GetRecordset("IT_RESULT_GRID")

 

        ' 데이터 출력 ( server script 에 작성한 output data set 이름 정의 ) Recordset

        Range("H13").CopyFromRecordset result.GetRecordset("IT_INPUT_GRID")

 

        'table 명을 모를 경우

        'table count 확인

        For idx = 1 To result.TableCount

            Set rs = result.GetRecordset(idx - 1)

            Debug.Print rs.RecordCount, rs.Fields.Count

        Next

 

    End If

…………….

구분

내용

result . GetRecordset(“ 이름 ”)

i-AUD ServerScript에서 res.getDataSet().AddTable 로 설정한 name

       output pa rameter 설정

 

[매크로 예시]

 

 

 

3-2 -2 . i-AUD

       I-AUD D esigner 에서 작성한 Server Script 를 기준으로 Client Script 를 작성한다.

       버튼을 통한 Server Script 실행 시 예시는 다음과 같다.

 

       output pa rameter 표현

구분

내용

R esponse로 설정한 Table

Grid로 만들어 놓은 Form response 로 전달한 Dataset 을 설정

 

[Client Script 예시]

 

 

var ET_FIDOC_GRID;

var E_FLOWHD_GRID;

var RETERROR;

 

……..

 

var OnButtonClick  = function(sender, args){

 

    if (args.Id == "RUN"){

Matrix.RunScript(" null " ,"@SapCallable" ,function(p){

 

                                if(p.Success == false){

                                   Matrix.Alert(p.Message);

                                   return;

                               }

                               var  ds = p.DataSet;

 

         ET_FIDOC_GRID.SetDataSet(ds.GetTable("E_FLOWHD_GRID").ToDataSet());

  E_FLOWHD_GRID.SetDataSet(ds.GetTable("ET_FIDOC_GRID").ToDataSet());

  RETERROR.SetDataSet(ds.GetTable("RETERROR").ToDataSet());

 

        });

 

}

};

 

……………………