ABAP--C语言调用SAP的RFC的代码样例
2008-03-01 10:20
519 查看
C语言代码
#include <stdlib.h>
#include <stdio.h>
#include "sapnwrfc.h"
RFC_RC SAP_API stfc_connection_impl(RFC_CONNECTION_HANDLE rfcHandle, RFC_FUNCTION_HANDLE funcHandle, RFC_ERROR_INFO* errorInfo){
RFC_RC rc = RFC_OK;
SAP_UC requtext[256], buf[256];
rc = RfcGetString(funcHandle, cU("REQUTEXT"), requtext, 256, NULL, errorInfo);
printfU(cU("Got request for STFC_CONNECTION./nREQUTEXT = %s/n/n"), requtext);
sprintfU(buf, cU("STFC_CONNECTION called with REQUTEXT = %s"), requtext);
rc = RfcSetString(funcHandle, cU("ECHOTEXT"), buf, strlenU(buf), errorInfo);
return rc;
}
int mainU(int argc, SAP_UC** argv){
RFC_RC rc = RFC_OK;
RFC_CONNECTION_PARAMETER loginParams[1];
RFC_ERROR_INFO errorInfo;
RFC_CONNECTION_HANDLE connection;
RFC_FUNCTION_DESC_HANDLE z_perform_callback, stfc_connection;
RFC_FUNCTION_HANDLE functionContainer;
SAP_UC data[256];
loginParams[0].name = cU("dest"); loginParams[0].value = cU("SPJ");
connection = RfcOpenConnection(loginParams, 1, &errorInfo);
if (connection == NULL){
printfU(cU("Error during logon: %s/n"), errorInfo.message);
printfU(cU("Please check that the sapnwrfc.ini file is in the current/nworking directory and the logon parameters are ok./n"));
return 1;
}
/* Note: In the following all error handling is omitted for simplicity. */
z_perform_callback = RfcGetFunctionDesc(connection, cU("Z_PERFORM_CALLBACK"), &errorInfo);
stfc_connection = RfcGetFunctionDesc(connection, cU("STFC_CONNECTION"), &errorInfo);
// The stfc_connection_impl function will be called from R/3 during the RfcInvoke step below!
rc = RfcInstallServerFunction(NULL, stfc_connection, stfc_connection_impl, &errorInfo);
functionContainer = RfcCreateFunction(z_perform_callback, &errorInfo);
rc = RfcSetString(functionContainer, cU("INPUT_DATA"), cU("Original Request"), 16, &errorInfo);
rc = RfcInvoke(connection, functionContainer, &errorInfo);
rc = RfcGetString(functionContainer, cU("OUTPUT_DATA"), data, 256, NULL, &errorInfo);
RfcCloseConnection(connection, NULL);
printfU(cU("Response from Z_PERFORM_CALLBACK: OUTPUT_DATA = %s/n"), data);
return 0;
}
ABAP代码
FUNCTION z_perform_callback.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(INPUT_DATA) TYPE CHAR255
*" EXPORTING
*" VALUE(OUTPUT_DATA) TYPE CHAR255
*"----------------------------------------------------------------------
DATA: error_message(120),
request LIKE sy-lisel,
echo LIKE sy-lisel.
CONCATENATE 'Z_PERFORM_CALLBACK called with INPUT_DATA =' input_data
INTO request SEPARATED BY space.
CALL FUNCTION 'STFC_CONNECTION' DESTINATION 'BACK'
EXPORTING
requtext = request
IMPORTING
echotext = echo
* RESPTEXT =
EXCEPTIONS
system_failure = 1 MESSAGE error_message
communication_failure = 2 MESSAGE error_message
.
IF sy-subrc NE 0.
CONCATENATE 'Error during callback:' error_message INTO output_data
SEPARATED BY space.
ELSE.
CONCATENATE 'Response from STFC_CONNECTION: ECHOTEXT =' echo INTO output_data
SEPARATED BY space.
ENDIF.
ENDFUNCTION.
#include <stdlib.h>
#include <stdio.h>
#include "sapnwrfc.h"
RFC_RC SAP_API stfc_connection_impl(RFC_CONNECTION_HANDLE rfcHandle, RFC_FUNCTION_HANDLE funcHandle, RFC_ERROR_INFO* errorInfo){
RFC_RC rc = RFC_OK;
SAP_UC requtext[256], buf[256];
rc = RfcGetString(funcHandle, cU("REQUTEXT"), requtext, 256, NULL, errorInfo);
printfU(cU("Got request for STFC_CONNECTION./nREQUTEXT = %s/n/n"), requtext);
sprintfU(buf, cU("STFC_CONNECTION called with REQUTEXT = %s"), requtext);
rc = RfcSetString(funcHandle, cU("ECHOTEXT"), buf, strlenU(buf), errorInfo);
return rc;
}
int mainU(int argc, SAP_UC** argv){
RFC_RC rc = RFC_OK;
RFC_CONNECTION_PARAMETER loginParams[1];
RFC_ERROR_INFO errorInfo;
RFC_CONNECTION_HANDLE connection;
RFC_FUNCTION_DESC_HANDLE z_perform_callback, stfc_connection;
RFC_FUNCTION_HANDLE functionContainer;
SAP_UC data[256];
loginParams[0].name = cU("dest"); loginParams[0].value = cU("SPJ");
connection = RfcOpenConnection(loginParams, 1, &errorInfo);
if (connection == NULL){
printfU(cU("Error during logon: %s/n"), errorInfo.message);
printfU(cU("Please check that the sapnwrfc.ini file is in the current/nworking directory and the logon parameters are ok./n"));
return 1;
}
/* Note: In the following all error handling is omitted for simplicity. */
z_perform_callback = RfcGetFunctionDesc(connection, cU("Z_PERFORM_CALLBACK"), &errorInfo);
stfc_connection = RfcGetFunctionDesc(connection, cU("STFC_CONNECTION"), &errorInfo);
// The stfc_connection_impl function will be called from R/3 during the RfcInvoke step below!
rc = RfcInstallServerFunction(NULL, stfc_connection, stfc_connection_impl, &errorInfo);
functionContainer = RfcCreateFunction(z_perform_callback, &errorInfo);
rc = RfcSetString(functionContainer, cU("INPUT_DATA"), cU("Original Request"), 16, &errorInfo);
rc = RfcInvoke(connection, functionContainer, &errorInfo);
rc = RfcGetString(functionContainer, cU("OUTPUT_DATA"), data, 256, NULL, &errorInfo);
RfcCloseConnection(connection, NULL);
printfU(cU("Response from Z_PERFORM_CALLBACK: OUTPUT_DATA = %s/n"), data);
return 0;
}
ABAP代码
FUNCTION z_perform_callback.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(INPUT_DATA) TYPE CHAR255
*" EXPORTING
*" VALUE(OUTPUT_DATA) TYPE CHAR255
*"----------------------------------------------------------------------
DATA: error_message(120),
request LIKE sy-lisel,
echo LIKE sy-lisel.
CONCATENATE 'Z_PERFORM_CALLBACK called with INPUT_DATA =' input_data
INTO request SEPARATED BY space.
CALL FUNCTION 'STFC_CONNECTION' DESTINATION 'BACK'
EXPORTING
requtext = request
IMPORTING
echotext = echo
* RESPTEXT =
EXCEPTIONS
system_failure = 1 MESSAGE error_message
communication_failure = 2 MESSAGE error_message
.
IF sy-subrc NE 0.
CONCATENATE 'Error during callback:' error_message INTO output_data
SEPARATED BY space.
ELSE.
CONCATENATE 'Response from STFC_CONNECTION: ECHOTEXT =' echo INTO output_data
SEPARATED BY space.
ENDIF.
ENDFUNCTION.
相关文章推荐
- ABAP--C语言调用SAP的RFC的代码样例
- ABAP--C语言调用SAP的RFC的代码样例
- ABAP--C语言调用SAP的RFC的代码样例
- ABAP--C语言调用SAP的RFC的代码样例
- ABAP--C语言调用SAP的RFC的代码样例
- .NET连接SAP系统专题:C#调用RFC代码(三)
- .NET连接SAP系统专题:C#调用RFC代码(三)
- .NET连接SAP系统专题:C#调用RFC代码(三)
- .net 调用SAP RFC的几种方法
- ABAP--HR的工资计算样例代码
- VB调用SAP的RFC
- ABAP--调用SAP的单位转换函数进行单位转换
- SAP ABAP子程序SUBMIT调用的方法
- ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
- ABAP--如何使用REUSE_ALV_GRID_DISPLAY函数删除内表数据(样例代码,感谢依风提供)
- ABAP--在SAP中设计自动刷新的报表代码
- .net 调用SAP RFC函数获取数据的两种方式
- SAP-ABAP 通过公司代码和日期,去对应的会计期间和年度函数:G_PERIOD_GET
- java后台调用 SAP RFC 第二种方法
- C语言调用python代码 - 2