RFC 란?
Remote Function Call 은 독점적 인 SAP SE 인터페이스입니다. RFC (Remote Function Call)는 SAP 시스템 간의 통신을위한 표준 SAP 인터페이스입니다. RFC는 원격 시스템에서 실행될 함수를 호출합니다. [1] 원격 함수 호출은 SAP 소프트웨어 및 ABAP 프로그래밍과 연관 될 수 있으며 서버에서 반환 된 데이터를 사용 하는 외부 프로그램 ( PHP , ASP , Java 또는 C , C ++ 과 같은 언어로 작성)에 대한 방법을 제공 합니다. 데이터 트랜잭션은 서버에서 데이터를 가져 오는 것에 만 국한되지 않지만 서버 레코드에도 데이터를 삽입 할 수 있습니다. SAP는 RFC 호출에서 클라이언트 또는 서버로 작동 할 수 있습니다.
[출처] 위키피디아
1. SAP .Net Connector 프로잭트에 참조 추가
Sap .net Connettor를 설치, 압축을 풀게되면 아래 두개의 dll이 생기게됩니다. 운영하려 는 환경에 맞게 32비트 또는 64비트용 dll을 참조하여 주시기 바랍니다.
- SAP .Net Connector의 경우 버젼 등의 정보가 각 시스템별로 상이 할 수 있으므로 되도록 고객사측으로부터 전달받는것이 좋습니다.
(구글에 Sap .NET Connector를 검색하면 다운로드 페이지가 많으므로, 별도로 첨부하지는 않습니다.)
- 참조시켜야하는 dll
sapnco.dll
sapnco_utils.dll
2. 편의상 Sap연동관련 설정값을 app.config (또는 Web.config)에 추가합니다.
1
2
3
4
5
6
7
8
9
10 |
<appSettings>
<add key="NAME" value="QA"/>
<add key="SAP_USERNAME" value="username"/>
<add key="SAP_PASSWORD" value="password"/>
<add key="SAP_CLIENT" value="100"/>
<add key="SAP_APPSERVERHOST" value="servername"/>
<add key="SAP_SYSTEMNUM" value="0"/>
<add key="SAP_LANGUAGE" value="EN"/>
<add key="SAP_POLLSIZE" value="10"/>
</appSettings> |
cs |
3. app.config (또는 Web.config)에 SAP 연동할 서버의 Destination 정보를 설정하여줍니다.
1
2
3
4
5
6
7
8
9
10
11 |
<configuration>
<SAP.Middleware.Connector>
<ClientSettings>
<DestinationConfiguration>
<destinations>
<add NAME="SapConnection" USER="userid" PASSWD="password" CLIENT="110" LANG="KO" ASHOST="123.123.123.123" SYSNR="00" MAX_POOL_SIZE="10" POOL_SIZE="5" IDLE_TIMEOUT="600"/>
</destinations>
</DestinationConfiguration>
</ClientSettings>
</SAP.Middleware.Connector>
</configuration> |
cs |
3. RFC 호출 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 |
public string CallRFC()
{
RfcDestination rfcDest = null;
IRfcFunction rfcFunc = null;
string strReturn = "";
string strStatus = "OK";
try
{
PERNR = "EmpNo";
ENAME = "USERNAME";
BUKRS = "COMPANYCODE";
NO_MASK = "";
SPRAS = "";
//파라메터 셋팅
rfcStructInvoke.SetValue("PERNR", PERNR);
rfcStructInvoke.SetValue("LOGID", LOGID);
rfcStructInvoke.SetValue("ENAME", ENAME);
rfcStructInvoke.SetValue("SCRNO", SCRNO);
rfcDest = RfcDestinationManager.GetDestination("SapConnection");
rfcFunc = rfcDest.Repository.CreateFunction(g_RFCName);
IRfcStructure rfcStructInvoke = rfcFunc.GetStructure("IS_PARM");
//Invoke
rfcFunc.Invoke(rfcDest);
IRfcStructure rfcStruct = rfcFunc.GetStructure("E_RETURN");
strStatus = rfcStruct.GetValue("Status").ToString();
RfcTable rfcResultTable1 = rfcFunc.GetTable("T_Return");
strReturn = rfcResultTable1.Metadata.LineType[0].Result;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
rfcDest = null;
rfcFunc = null;
}
return strReturn;
} |
cs |