一、发布webservice
1.se37 创建webservice服务
2.TCODE:SOAMANAGER
3.定义服务banding:
输入服务名称,点击下一步:
生成WSDL:
url输入浏览器和sap登录验证信息,测试wsdl:
至此,webservice发布完成。
二、调用webservice
创建webservice使用者
选择Service Consumer
这里测试用配置个本地对象
生成代理类:
激活所有对象
Se80企业服务,可以看到代理类信息:
再次回到TCODE:SOAMANAGER,配置代理类的逻辑端口:
注意这次搜索”消费者代理”:
这里选择基于WSDL配置,后面步骤会比较多,(我测试过其他几个选项都不行):
逻辑端口:逻辑端口是指逻辑意义上用于区分服务的端口,如TCP/IP协议中的服务端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。由于物理端口和逻辑端口数量较多,为了对端口进行区分,将每个端口进行了编号,这就是端口号。简单来说,ip地址是用来区分主机,端口号是用来区分主机上的不同服务
一直下一步直到完成
Ping web服务
程序中调用:
DATA:lo_cx_root TYPE REF TO cx_root.
DATA:l_prox_e TYPE REF TO zco_sap_service_port_type.
DATA:lo_sys_exception TYPE REF TO cx_ai_system_fault,
cx_ai_application_fault TYPE REF TO cx_ai_application_fault
IF l_prox_e IS INITIAL.
TRY.
CREATE OBJECT l_prox_e
EXPORTING
logical_port_name = ‘ZLP01’.
CATCH cx_ai_system_fault INTO lo_sys_exception.
IF lo_sys_exception->errortext IS NOT INITIAL.
output-msgty = ‘E’.
output-msgtx = lo_sys_exception->errortext.
APPEND output.CLEAR:output.
EXIT.
ENDIF.
CATCH cx_ai_application_fault INTO cx_ai_application_fault.
ENDTRY.
ENDIF.
invoke_flow_request-in0 = lv_json.
TRY.
CALL METHOD l_prox_e->invoke_flow
EXPORTING
invoke_flow_request = invoke_flow_request
IMPORTING
invoke_flow_response = invoke_flow_response.
CATCH cx_ai_system_fault INTO lo_sys_exception.
IF lo_sys_exception->errortext IS NOT INITIAL.
output-msgty = ‘E’.
output-msgtx = lo_sys_exception->errortext.
APPEND output.CLEAR:output.
EXIT.
ENDIF.
CATCH cx_ai_application_fault INTO cx_ai_application_fault.
ENDTRY.