ABAP连接WEBSocket Server示例
=>Reference
- Introduction to ABAP Channels
- ABAP Channels Examples
- ABAP Channels Part 1: WebSocket Communication Using ABAP Push Channels
- RS_APC_WSP_EXCHANGE_MESSAGE
- 创建SAP WebSocket Server使用外部系统连接示例
1.搭建一个外部WebSocket服务端
- 下载安装nodejs:nodejs download
- 全局安装nodejs wscat工具:npm install -g wscat
- 运行一个nodejs WebSocket服务器:wscat -l 8000(注意是字母L,将在本地8000端口启动websocket服务监听)
- WebSocket连接地址:ws://10.22.20.232:8000(10.22.20.232 为本地网卡地址)
2.代码实现
- 新建一个report程序加入如下代码:
SELECTION-SCREEN BEGIN OF BLOCK part8 WITH FRAME TITLE TEXT-008. PARAMETERS: abs_uri TYPE string DEFAULT 'ws://10.22.20.232:8000' LOWER CASE. PARAMETERS: hfield TYPE string LOWER CASE, protocol TYPE string LOWER CASE. PARAMETERS: timeout TYPE i DEFAULT 10, keepluw AS CHECKBOX. SELECTION-SCREEN END OF BLOCK part8. SELECTION-SCREEN BEGIN OF BLOCK part11 WITH FRAME TITLE TEXT-011. PARAMETERS: user TYPE string LOWER CASE, passwd TYPE string LOWER CASE ##NO_TEXT. SELECTION-SCREEN END OF BLOCK part11. DATA: lx_apc_error TYPE REF TO cx_apc_error. DATA: gv_text TYPE string. DATA: gv_event_type TYPE string. DATA: gv_pbo_text TYPE string. DATA: lo_producer_sapgui TYPE REF TO if_amc_message_producer_text. DATA: lv_conn_handle TYPE apc_connection_attach_handle. DATA: det_apid TYPE apc_application_id. DATA: lv_conn_state TYPE i. DATA: lv_conn_status TYPE c. "is connected = 'X' CLASS lcl_amc_receiver DEFINITION FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES: if_amc_message_receiver_text. ENDCLASS. CLASS lcl_amc_receiver IMPLEMENTATION. METHOD if_amc_message_receiver_text~receive. SET USER-COMMAND 'RECEIVE'. ENDMETHOD. ENDCLASS. CLASS lcl_apc_handler DEFINITION FINAL CREATE PUBLIC . PUBLIC SECTION. INTERFACES: if_apc_wsp_event_handler, if_apc_wsp_event_handler_pcp. CLASS-METHODS: screen_update IMPORTING i_text TYPE string. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS lcl_apc_handler IMPLEMENTATION. METHOD screen_update. TRY. IF lo_producer_sapgui IS BOUND. lo_producer_sapgui->send( i_text ). ENDIF. CATCH cx_amc_error INTO DATA(lx_amc_error). DATA(lv_text) = lx_amc_error->get_text( ) ##needed. ENDTRY. ENDMETHOD. METHOD if_apc_wsp_event_handler~on_open. gv_event_type = 'on_open'. IF lv_conn_handle IS NOT INITI