為什么多個網(wǎng)站域名有同個網(wǎng)站備案活動策劃
- 需求背景
? ? ? ?項目經(jīng)理說每次OA下單都需要調(diào)用一次SAP的接口獲取數(shù)據(jù),導(dǎo)致效率太慢了,能否把SAP的數(shù)據(jù)保存到OA的數(shù)據(jù)庫表里,這樣OA可以直接從數(shù)據(jù)庫表里獲取數(shù)據(jù)效率快很多。思來想去,提供了兩個方案。
- ?在集群SAP節(jié)點下增加一個SQL Server數(shù)據(jù)庫,通過ABAP技術(shù)把SAP數(shù)據(jù)寫進SAP節(jié)點下的SQL Server,然后做集群下的主從復(fù)制,將SAP下的SQL Server復(fù)制到OA節(jié)點下的SQL Server。
- OA對外發(fā)布保存數(shù)據(jù)的接口,供SAP調(diào)用,SAP傳入數(shù)據(jù),OA接口保存。
項目經(jīng)理經(jīng)決定采用了方案2.
- OA對外發(fā)布API的方式很多,本文采用建模引擎發(fā)布RESTFul API 的方式
- 步驟一:OA系統(tǒng)對外發(fā)布RESTful API
- 建模引擎操作在接口管理處新增一個RESTful接口,如圖1.1所示,給新建的RESTful接口授權(quán),如圖1.2所示。
圖 1.1
圖 1.2
下載API文檔,如圖1.3所示
圖1.3
使用POSTMAN測試
Tips1:設(shè)置請求頭,如圖1.4所示
圖1.4
Tips2:設(shè)置請求體,先整理data報文,如圖1.5所示,raw正文的數(shù)據(jù)即便是留著在那里也不會有影響,把整理好的data報文復(fù)制到表單格式的參數(shù)里,如圖1.6所示。
圖1.5
圖1.6
測試結(jié)果如圖1.7所示
圖1.7
建模表單處查看數(shù)據(jù),實現(xiàn)效果如圖1.8所示
圖1.8
- SAP系統(tǒng)調(diào)用OA發(fā)布RESTful API
DATA(lv_send_data)?=?/ui2/cl_json=>serialize(?data??????=?ls_postcompress????=?abap_falsepretty_name?=?/ui2/cl_json=>pretty_mode-camel_case?).DATA(lv_url)?=?`http://ip:port/api/cube/restful/interface/saveOrUpdateModeData/SAPStckSyn`.cl_http_client=>create_by_url(?EXPORTING?url????=?lv_urlIMPORTING?client?=?DATA(lo_http_client)?).
//設(shè)置請求頭lo_http_client->request->set_header_field(?name?=?'Content-Type'?value?=?'application/x-www-form-urlencoded;?charset=utf-8'?).//設(shè)置請求方式lo_http_client->request->set_method(?if_http_request=>co_request_method_post?).//設(shè)置請求體表單lo_http_client->request->set_form_field(?name?=?'datajson'?value?=?lv_send_data?).//發(fā)送請求調(diào)用OA RESTful APIlo_http_client->send(?EXCEPTIONS?http_communication_failure?=?1http_invalid_state?????????=?2??).IF?sy-subrc?NE?0.lo_http_client->get_last_error(?IMPORTING?message?=?DATA(lv_send_msg)?code?=?DATA(lv_send_code)?).ENDIF.//獲取服務(wù)器響應(yīng)lo_http_client->receive(?EXCEPTIONS?http_communication_failure?=?1http_invalid_state?????????=?2http_processing_failed?????=?3?).IF?sy-subrc?EQ?0.DATA(lv_response)?=?lo_http_client->response->get_cdata(?).ELSE.lo_http_client->get_last_error(?IMPORTING?message?=?DATA(lv_rece_msg)?code?=?DATA(lv_rece_code)?).ENDIF.//將服務(wù)器響應(yīng)Json報文轉(zhuǎn)換成SAP結(jié)構(gòu)/ui2/cl_json=>deserialize(?EXPORTING?json?=?lv_responsepretty_name?=?/ui2/cl_json=>pretty_mode-camel_caseCHANGING?data?=?ls_success_receive?).IF?ls_success_receive-status?NE?`1`.MESSAGE?'SAP庫存同步OA失敗'?TYPE?'S'?DISPLAY?LIKE?'E'.ENDIF.
??