SAP对接外围系统
1 NCO3.0 远程模式
1.1 SE37创建接口,编写业务逻辑代码,在属性开启远程启用的模块,
1.2外围系统调用SAP接口引用文件sapnco_utils/sapnco/rscp4n/libicudecnumber/根据操作系统配置对应32位,64位文件
1.3配置外围系统连接RFC登录信息
1.4 调用接口.
Set Func = FuncCox.Add("ZZXMXB") "接口名称
Func.Exports("I_VBELN") = JD "输入参数
Set ITAB = Func.Tables("GT_ITABN") "输出参数
接口的输入和输出会是字段或结构或表。根据实际业务设计输入输出参数。数据格式需要根SAP格式一致。
2 SOAMANAGER 创建web服务
2.1 SE37创建接口,编写业务逻辑代码,不用开启远程启用模块。
2.2定义服务
2.3 SR3以上的版本,则通过以下步骤得到WSDL: T-CODE:SOAMANAGER
2.4在web服务定义看到定义的服务,点击定义服务激活。获取WSDL URL. 在外围系统调用url
2.5输入输出参数
2.6外部系统调用SAP创建webserver。
url = url. //接口地址
data = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:sap-com:document:sap:rfc:functions\"><soapenv:Header/>"+ "<soapenv:Body>"
+ "<urn:ZGET_MOUDLE_PATH>"
+ "<I_ALUMS>" + req.body.ALUMS + "</I_ALUMS>"
+ "<I_WERKS>" + req.body.WERKS + "</I_WERKS> "
+ "</urn:ZGET_MOUDLE_PATH>"
+ "</soapenv:Body>"
+ "</soapenv:Envelope>";
2 SOAMANAGER 调用外部web服务
2.7外部软件创建web服务,
T-CODE:SOAMANAGER
2.8调用外部webserver
REPORT ztest01.
PARAMETERS:s_land1 TYPE t001-land1.
DATA:helloworld(200) TYPE c.
DATA:webservice TYPE REF TO zco_sap_to_db_web_service_soap. "WebService代理类
DATA:gt_input TYPE zadd_db_soap_in, "输入参数
gt_output TYPE zadd_db_soap_out. "输出参数
DATA:lo_sys_exception TYPE REF TO cx_ai_system_fault,
lo_app_exception TYPE REF TO cx_ai_application_fault.
DATA: json_ser TYPE REF TO cl_trex_json_serializer,
json_des TYPE REF TO cl_trex_json_deserializer.
DATA: jsonstr TYPE string.
DATA : BEGIN OF it_t001 OCCURS 0 ,
butxt TYPE t001-butxt,
ort01 TYPE t001-ort01,
END OF it_t001.
START-OF-SELECTION.
"SELECT * INTO CORRESPONDING FIELDS OF TABLE it_t001 FROM t001 WHERE land1 = s_land1.
CREATE OBJECT json_ser
EXPORTING
data = it_t001[].
CALL METHOD json_ser->serialize.
CALL METHOD json_ser->get_data
RECEIVING
rval = jsonstr.
DATA :xstring TYPE xstring.
TRY.
CREATE OBJECT webservice
EXPORTING
logical_port_name = 'ZPMISERVER'."为此WebService创建的逻辑端口。
CATCH cx_ai_system_fault .
MESSAGE '出错了' TYPE 'S’.
ENDTRY.
gt_input-obj = '123456'.
TRY.
CALL METHOD webservice->add_db
EXPORTING
input = gt_input
IMPORTING
output = gt_output.
CATCH cx_ai_system_fault INTO lo_sys_exception .
"message ‘出错了 systemai’ type ‘S’.
WRITE lo_sys_exception->errortext.
CATCH cx_ai_application_fault INTO lo_app_exception .
WRITE / .
WRITE lo_app_exception->textid.
ENDTRY.
WRITE '插入SQL数据库成功'.
3.SICF创建web服务
METHOD if_http_extension~handle_request.
DATA: lt_fields TYPE tihttpnvp,
lv_header_query TYPE string,
lv_data TYPE string,
lv_html TYPE string,
lv_resdata TYPE string,
cpcodepage TYPE cpcodepage,
json_ser TYPE REF TO cl_trex_json_serializer,
json_des TYPE REF TO cl_trex_json_deserializer.
DATA oref TYPE REF TO cx_root.
DATA: eeror_flag TYPE char1,
return_code TYPE flag,
message TYPE zservmessage.
FIELD-SYMBOLS: <fs_field> LIKE LINE OF lt_fields.
" get HEADER fields
server->request->get_header_fields(
CHANGING
fields = lt_fields " Header fields
).
lv_data = server->request->if_http_entity~get_cdata( ).
* READ TABLE lt_fields
* WITH KEY name = '~query_string'
* ASSIGNING <fs_field>.
* IF sy-subrc NE 0.
* lv_html = '{"response":{}}'.
* else.
DATA: zweixin_req TYPE REF TO zweixin_request_cl.
* TRANSLATE lv_data TO LOWER CASE.
CONDENSE lv_data NO-GAPS.
/ui2/cl_json=>deserialize( EXPORTING json = lv_data pretty_name = /ui2/cl_json=>pretty_mode-camel_case CHANGING data = zweixin_req ).
* 根据URL指定查询内容
IF zweixin_req IS NOT INITIAL.
IF zweixin_req->interfaceid IS NOT INITIAL.
CASE zweixin_req->interfaceid.
WHEN ' ZGET_MOUDLE_INDEPOT01'. 获取接口
CALL FUNCTION 'ZGET_MOUDLE_INDEPOT01' “对应的接口
EXPORTING
indata = lv_data
IMPORTING
outdata = lv_html.
WHEN OTHERS.
lv_html = '{"Interfaceid": "' && zweixin_req->interfaceid && '","ResData":{"Message":"Failed","Data":[]}'.
ENDCASE.
ENDIF.
ENDIF.
"response the request
CALL METHOD server->response->if_http_entity~set_content_type
EXPORTING
content_type = 'application/json'.
* DATA: len TYPE i.
* DATA xstr TYPE xstring.
* CALL FUNCTION 'ECATT_CONV_STRING_TO_XSTRING'
* EXPORTING
* im_string = lv_html
* im_encoding = 'UTF-8'
* IMPORTING
* ex_xstring = xstr.
*
* len = xstrlen( xstr ).
* CALL METHOD server->response->append_data
* EXPORTING
* data = xstr
* offset = 0
* length = len.
server->response->set_cdata(
EXPORTING data = lv_html " Character data
).
ENDMETHOD.
外部系统调用web服务
url = url ;//web服务
data='{\"interfaceid\":\"ZGET_MOUDLE_INDEPOT01\",\"reqdata\":{\"alums\":\"'+req.body.ALUMS+'\"}}';
4.POSTMAN 外部断点调试接口
4.1POSTNMAN 配置SAP开通账号密码
4.2 SAP配置外部断点账号密码,对应接口打上外部断点
4.3执行激发断点
文章来自于网络,如果侵犯了您的权益,请联系站长删除!