SAP中XML文件與內(nèi)表的相互轉(zhuǎn)換

SAP中XML文件與內(nèi)表的相互轉(zhuǎn)換

最近在做和銀行的對接,公司以前的業(yè)務(wù)并未涉及xml,于是將搜集的知識進(jìn)行整合迁筛,書寫一版簡單的范例以供參考差购。

XML模板定義

TCode:STRANS

創(chuàng)建xml文件模板,命名為ZXML*.

<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
<!--內(nèi)表變量名解取,可以為多個 -->
<tt:root name="itmara"/>

<tt:template>
    <Products>
    <!-- 循環(huán)體 name與內(nèi)表名一致-->
        <tt:loop name="line" ref="itmara">
            <Product>
                <matnr>
                <!-- ref的值應(yīng)為內(nèi)表中的字段名 -->
                  <tt:value ref="$line.matnr"/>
                </matnr>
                <maktx>
                  <tt:value ref="$line.maktx"/>
                </maktx>
            </Product>
        </tt:loop>
    </Products>

</tt:template>

</tt:transform>

創(chuàng)建測試程序

*&---------------------------------------------------------------------*
*& Report  ZSKGJ_DOWNLOAD_DETAIL
*&
*&---------------------------------------------------------------------*
*& 收款管家下載交易明細(xì)
*& 2017-08-14 13:58:11
*&---------------------------------------------------------------------*

REPORT  ZSKGJ_DOWNLOAD_DETAIL.

DATA:p_client TYPE REF TO IF_HTTP_CLIENT.
DATA:p_data TYPE string,
     l_bindata type xstring,
     l_cntbin TYPE sdokcntbins,

DATA:  BEGIN OF it_xml OCCURS 0,
         line(100) TYPE c,
       END OF it_xml.
DATA: w_xml TYPE string,
      w_len TYPE i,
      w_fname TYPE string.
DATA: BEGIN OF line  ,
        matnr LIKE mara-matnr ,
        maktx LIKE makt-maktx ,
      END OF line .
DATA: itab_matnr LIKE TABLE OF line.

START-OF-SELECTION.
  PERFORM getdata.
  PERFORM create_xml.
  PERFORM decod_xml.
*&---------------------------------------------------------------------*
*&      Form  GETDATA
*&---------------------------------------------------------------------*
*       查詢數(shù)據(jù)
*----------------------------------------------------------------------*
FORM GETDATA .
SELECT matnr maktx FROM makt
  INTO TABLE itab_matnr
  UP TO 4 ROWS
  WHERE spras = '1' .
ENDFORM.                    " GETDATA
*&---------------------------------------------------------------------*
*&      Form  CREATE_XML
*&---------------------------------------------------------------------*
*       內(nèi)表轉(zhuǎn)換為XML字符串
*----------------------------------------------------------------------*
FORM CREATE_XML .
*  此處即創(chuàng)建的XML模板,SOURCE為待轉(zhuǎn)換內(nèi)表,RESULT XML即返回的XML字符串
  CALL TRANSFORMATION zskgj_request
    SOURCE itmara = itab_matnr
    RESULT XML w_xml.

*  將XML轉(zhuǎn)換為binary络凿,再轉(zhuǎn)換為string,實現(xiàn)UTF-16轉(zhuǎn)為UTF-8,最終將UTF-8替換為GB2312
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      BUFFER               = l_bindata
    IMPORTING
     OUTPUT_LENGTH         = w_len
    TABLES
      BINARY_TAB           = l_cntbin
            .
  IF sy-subrc = 0.
    CLEAR w_xml.
    CALL FUNCTION 'SCMS_BINARY_TO_STRING'
    EXPORTING
    INPUT_LENGTH = w_len
    IMPORTING
    TEXT_BUFFER = w_xml
    OUTPUT_LENGTH = w_len
    TABLES
    BINARY_TAB = l_cntbin.
    IF sy-subrc = 0.
      REPLACE 'UTF-8' WITH 'GB2312' INTO w_xml.
    ENDIF.
  ENDIF.
ENDFORM.                    " CREATE_XML
*&---------------------------------------------------------------------*
*&      Form  DECOD_XML
*&---------------------------------------------------------------------*
*       解碼xml
*----------------------------------------------------------------------*
FORM DECOD_XML .
  DATA: lo_oref TYPE REF TO cx_st_error.
  DATA: lv_msg TYPE string.

  TRY .
    refresh itab_matnr.
    BREAK-POINT.
*    調(diào)用XML模板,數(shù)據(jù)源為XML字符串絮记,返回結(jié)果至內(nèi)表
    CALL TRANSFORMATION zskgj_request
    SOURCE XML w_xml
    RESULT itmara =  itab_matnr[].

  CATCH cx_st_error INTO lo_oref .
    CLEAR: lv_msg .
    lv_msg  = lo_oref->get_text( ) .
    WRITE: / 'Error message:',lv_msg.
ENDTRY.

ENDFORM.                    " DECOD_XML
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摔踱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子怨愤,更是在濱河造成了極大的恐慌派敷,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撰洗,死亡現(xiàn)場離奇詭異篮愉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)差导,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門试躏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人设褐,你說我怎么就攤上這事冗酿。” “怎么了络断?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵裁替,是天一觀的道長。 經(jīng)常有香客問我貌笨,道長弱判,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任锥惋,我火速辦了婚禮昌腰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膀跌。我一直安慰自己遭商,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布捅伤。 她就那樣靜靜地躺著劫流,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丛忆。 梳的紋絲不亂的頭發(fā)上祠汇,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機(jī)與錄音熄诡,去河邊找鬼可很。 笑死,一個胖子當(dāng)著我的面吹牛凰浮,可吹牛的內(nèi)容都是我干的我抠。 我是一名探鬼主播苇本,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼菜拓!你這毒婦竟也來了瓣窄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤尘惧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后递递,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喷橙,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年登舞,在試婚紗的時候發(fā)現(xiàn)自己被綠了贰逾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡菠秒,死狀恐怖疙剑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情践叠,我是刑警寧澤言缤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站禁灼,受9級特大地震影響管挟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弄捕,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一僻孝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧守谓,春花似錦穿铆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至平酿,卻和暖如春讯檐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背染服。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工别洪, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柳刮。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓挖垛,卻偏偏與公主長得像痒钝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子痢毒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,144評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理送矩,服務(wù)發(fā)現(xiàn),斷路器哪替,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法栋荸,類相關(guān)的語法,內(nèi)部類的語法凭舶,繼承相關(guān)的語法晌块,異常的語法,線程的語...
    子非魚_t_閱讀 31,632評論 18 399
  • 生活中有朋友戲稱我為“古人”,因為我所熱愛的小說身冀,電影钝尸,音樂等絕大部分事物,在他們眼里是極其古老的搂根。偏偏我還樂在其...
    今晚不打漁閱讀 4,204評論 37 61
  • 愛是一門藝術(shù)嗎珍促? 如果愛是一門藝術(shù),那就要求人們有這方面的知識并付出努力剩愧。 愛情不是一種與人的成熟程度無關(guān)踢星,只需要...
    自制力才是超能力閱讀 373評論 0 4