SAP 發(fā)布HTTP接口

SAP 發(fā)布HTTP接口

1.SE24創(chuàng)建類

創(chuàng)建類

在接口中填寫 IF_HTTP_EXTENSION 繼承該類并激活
image.png

實(shí)現(xiàn)繼承的HANDLE_REQUEST方法:IF_HTTP_EXTENSION~HANDLE_REQUEST
image.png

 METHOD if_http_extension~handle_request.
    DATA: lt_fields TYPE tihttpnvp,
          lv_data   TYPE string,
          lv_html   TYPE string.
    DATA:BEGIN OF it,
           modelcode TYPE zppt0002-zzxh,
           carcode   TYPE zppt0002-zcjnum,
           carname   TYPE zppt0002-zzmc,
           cencode   TYPE zppt0002-zzkbm,
           modelname TYPE zppt0002-zzmc,
           confnum   TYPE zppt0002-matnr,
           carcolor  TYPE zppt0002-zzys,
           motornum  TYPE zppt0002-zdjnum,
         END OF it.
    DATA:item LIKE TABLE OF it.
    DATA: start_date TYPE erdat,
          end_date   TYPE erdat,
          str1       TYPE string,
          str2       TYPE string,
          str3       TYPE string,
          key        TYPE string,
          value      TYPE string.

    DATA:lin TYPE sy-tabix.
    DATA: wa LIKE LINE OF lt_fields.

    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 the fields table and look for name "~query_string" -- this will contain the URL query
    READ TABLE lt_fields INTO wa WITH KEY name = '~query_string'.
    IF sy-subrc = 0.
      SPLIT wa-value AT '&' INTO str1 str2 str3.
      IF str2 IS INITIAL OR str3 IS INITIAL .
        start_date = sy-datum.
        end_date = sy-datum.
      ELSE.
        SPLIT str2 AT '=' INTO key value.
        start_date = value.
        CLEAR:key,value.
        SPLIT str3 AT '=' INTO key value.
        end_date = value.
      ENDIF.
    ENDIF.

*   獲取數(shù)據(jù)
    SELECT
      zppt0002~zzxh AS modelcode
      zppt0002~zcjnum AS carcode
      zppt0002~zzmc AS carname
      zppt0002~zzkbm AS cencode
      zppt0002~matnr AS confnum
      zppt0002~zzys AS carcolor
      zppt0002~zdjnum AS motornum
      INTO CORRESPONDING FIELDS OF TABLE item
      FROM zppt0002
      INNER JOIN zcxsz ON zcxsz~matnr = zppt0002~matnr
      WHERE zppt0002~ZODAT >= start_date AND zppt0002~ZODAT <= end_date AND zppt0002~ZSTATUS = 'Z05'.
    IF sy-subrc EQ 0.
      DESCRIBE TABLE item LINES lin.
*     拼接json字符串
      LOOP AT item INTO it.
        IF sy-tabix = 1.
          lv_html = '['.
        ENDIF.
        IF lin = sy-tabix.
          CONCATENATE lv_html '{'
                  '"modelCode":"' it-modelcode '",'
                  '"carCode":"' it-carcode  '",'
                  '"carName":"' it-carname '",'
                  '"cenCode":"' it-cencode '",'
                  '"modelName":"' it-carname '",'
                  '"confNum":"' it-confnum '",'
                  '"carColor":"' it-carcolor '",'
                  '"motorNum":"' it-motornum '"'
                  '}]'
             INTO lv_html.
        ELSE.

          CONCATENATE lv_html '{'
                    '"modelCode":"' it-modelcode '",'
                    '"carCode":"' it-carcode  '",'
                    '"carName":"' it-carname '",'
                    '"cenCode":"' it-cencode '",'
                    '"modelName":"' it-carname '",'
                    '"confNum":"' it-confnum '",'
                    '"carColor":"' it-carcolor '",'
                    '"motorNum":"' it-motornum '"'
                    '},'
               INTO lv_html. "SEPARATED BY space.
        ENDIF.
      ENDLOOP.

*     返回響應(yīng)
      server->response->set_cdata(
        EXPORTING
          data   = lv_html    " Character data
*        offset = 0    " Offset into character data
*        length = -1    " Length of character data
      ).
    ENDIF.
*   設(shè)置返回響應(yīng)格式為json
    CALL METHOD server->response->if_http_entity~set_content_type
      EXPORTING
        content_type = 'application/json'.



  ENDMETHOD.

2.定義服務(wù)棒动,SICF創(chuàng)建服務(wù)

image.png

設(shè)置服務(wù)的賬號(hào)及密碼


image.png

在處理器清單填寫上面我們實(shí)現(xiàn)的類


image.png

保存激活,測(cè)試服務(wù)
image.png

因我本地未配置SAP域名映射所以測(cè)試失敗
image.png

改為IP地址后測(cè)試通過


image.png

將接口地址開放到外部

通過nginx反向代理肝劲,進(jìn)行防火墻映射迁客。


image.png

到此結(jié)束整個(gè)接口開發(fā)郭宝。

后記

此處數(shù)據(jù)轉(zhuǎn)json,前期我采用轉(zhuǎn)換類cl_trex_json_serializer如下掷漱,但是其轉(zhuǎn)換后的json格式并不是標(biāo)準(zhǔn)的json格式粘室,key值缺少雙引號(hào)。比較簡單我直接進(jìn)行了拼接

DATA lc_json TYPE REF TO cl_trex_json_serializer. "json格式轉(zhuǎn)換
CREATE OBJECT lc_json.
  CALL METHOD lc_json->serialize_int
    EXPORTING
      data   = lt_vldata
    RECEIVING
      r_json = l_json_data.
  TRANSLATE l_json_data TO LOWER CASE.
  CONCATENATE l_url l_json_data INTO l_url.

后期尋找后卜范,解決方法是將該類復(fù)制修改其RECURSE方法組合形式就可以采用此種方式

image.png

借鑒資料
SAP發(fā)布REST/HTTP接口
SAP調(diào)用RestfulApi接口POST數(shù)據(jù)到外部系統(tǒng)
SAP的JSON沒有雙引號(hào)問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末衔统,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子海雪,更是在濱河造成了極大的恐慌锦爵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奥裸,死亡現(xiàn)場(chǎng)離奇詭異险掀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)湾宙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門樟氢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侠鳄,你說我怎么就攤上這事埠啃。” “怎么了伟恶?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵碴开,是天一觀的道長。 經(jīng)常有香客問我博秫,道長潦牛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任台盯,我火速辦了婚禮罢绽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘静盅。我一直安慰自己,他們只是感情好寝殴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布蒿叠。 她就那樣靜靜地躺著,像睡著了一般蚣常。 火紅的嫁衣襯著肌膚如雪市咽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天抵蚊,我揣著相機(jī)與錄音施绎,去河邊找鬼溯革。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谷醉,可吹牛的內(nèi)容都是我干的致稀。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼俱尼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼抖单!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起遇八,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤矛绘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后刃永,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體货矮,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年斯够,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了次屠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雳刺,死狀恐怖劫灶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掖桦,我是刑警寧澤本昏,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響梯皿,放射性物質(zhì)發(fā)生泄漏侨颈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一宿稀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赖捌,春花似錦祝沸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至卤唉,卻和暖如春涩惑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桑驱。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工竭恬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跛蛋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓痊硕,卻偏偏與公主長得像赊级,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寿桨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容