设为首页 收藏本站
查看: 722|回复: 0

[经验分享] SAP XML 到 内表

[复制链接]

尚未签到

发表于 2015-9-19 10:56:04 | 显示全部楼层 |阅读模式
  report ztest2.



type-pools: IXML,ABAP.
types: begin of XML_LINE,
        DATA(256) type X,
       end of XML_LINE.
data: L_IXML            type ref to IF_IXML,
      L_STREAMFACTORY   type ref to IF_IXML_STREAM_FACTORY,
      L_OSTREAM         type ref to IF_IXML_OSTREAM,
      L_RENDERER        type ref to IF_IXML_RENDERER,
      L_DOCUMENT        type ref to IF_IXML_DOCUMENT.
data: L_ELEMENT_FLIGHTS type ref to IF_IXML_ELEMENT,
      L_ELEMENT_AIRLINE type ref to IF_IXML_ELEMENT,
      L_ELEMENT_FLIGHT  type ref to IF_IXML_ELEMENT,
      L_ELEMENT_DUMMY   type ref to IF_IXML_ELEMENT,
      L_VALUE           type STRING.
data: L_XML_TABLE       type table of XML_LINE,
      L_XML_SIZE        type I,
      L_RC              type I.
data: LT_SPFLI          type table of SPFLI.
data: L_SPFLI           type SPFLI.

start-of-selection.
*   Fill the internal table
  select * from SPFLI into table LT_SPFLI.

*   Sort internal table
  sort LT_SPFLI by CARRID.

* 生成XML数据
  loop at LT_SPFLI into L_SPFLI.

    at first.
*       Creating a ixml factory
      L_IXML = CL_IXML=>CREATE( ).
*       Creating the dom object model
      L_DOCUMENT = L_IXML->CREATE_DOCUMENT( ).
*       Fill root node with value flow
      L_ELEMENT_FLIGHTS  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME = 'flow'
                  PARENT = L_DOCUMENT ).


      L_RC = L_ELEMENT_FLIGHTS->SET_ATTRIBUTE( NAME = 'KEY' VALUE = 'gsgs-cgdd' ).
      L_RC = L_ELEMENT_FLIGHTS->SET_ATTRIBUTE( NAME = 'DES' VALUE = '广深公司-采购订单').
      L_RC = L_ELEMENT_FLIGHTS->SET_ATTRIBUTE( NAME = 'BAPI' VALUE ='ZBAPI_MM_RK_AFTER_APP' ).

      L_ELEMENT_AIRLINE  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME = 'customform'
                  PARENT = L_ELEMENT_FLIGHTS  ).
    endat.

    at new CONNID.

      L_ELEMENT_FLIGHT  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                  NAME = 'fd'
                  PARENT = L_ELEMENT_AIRLINE  ).

      L_VALUE = L_SPFLI-CONNID.
      L_RC = L_ELEMENT_FLIGHT->SET_ATTRIBUTE( NAME = 'n' VALUE =
'flight' ).
    endat.

    L_VALUE = L_SPFLI-DEPTIME.
    L_ELEMENT_DUMMY  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT(
                NAME = 'V'
                VALUE = L_VALUE
                PARENT = L_ELEMENT_FLIGHT ).
  endloop.
*   Creating a stream factory
  L_STREAMFACTORY = L_IXML->CREATE_STREAM_FACTORY( ).
*   Connect internal XML table to stream factory
  L_OSTREAM = L_STREAMFACTORY->CREATE_OSTREAM_ITABLE( TABLE =
L_XML_TABLE ).
*   Rendering the document
  L_RENDERER = L_IXML->CREATE_RENDERER( OSTREAM  = L_OSTREAM
                                        DOCUMENT = L_DOCUMENT ).
  L_RC = L_RENDERER->RENDER( ).

*************************************************************
*   将xml数据导出到本地
*   取得XML数据大小
  L_XML_SIZE = L_OSTREAM->GET_NUM_WRITTEN_RAW( ).
*   将xml数据导出到本地
*  call method CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
*    exporting
*      BIN_FILESIZE = L_XML_SIZE
*      FILENAME     = 'E:\flights.xml'
*      FILETYPE     = 'BIN'
*    changing
*      DATA_TAB     = L_XML_TABLE
*    exceptions
*      others       = 24.
*  if SY-SUBRC <> 0.
*    message id SY-MSGID type SY-MSGTY number SY-MSGNO
*               with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*  endif.
************************************************************

****************************************************
*--将XML数据导入到内表
  data XMLDATA type XSTRING .
  data: RESULT_XML type standard table of SMUM_XMLTB .
  data: RETURN type standard table of BAPIRET2 .
  data: WA_XML type SMUM_XMLTB.

*如果需要上载XML可以用一下方法
  call function 'GUI_UPLOAD'
    exporting
      FILENAME   = 'C:\Documents and Settings\Administrator\桌面\SAP.XML'
      FILETYPE   = 'BIN'
    importing
      FILELENGTH = L_XML_SIZE
    tables
      DATA_TAB   = L_XML_TABLE.

*--将XML数据导入到内表
  call function 'SCMS_BINARY_TO_XSTRING'
    exporting
      INPUT_LENGTH = L_XML_SIZE
    importing
      BUFFER       = XMLDATA
    tables
      BINARY_TAB   = L_XML_TABLE
    exceptions
      FAILED       = 1
      others       = 2.

  call function 'SMUM_XML_PARSE'
    exporting
      XML_INPUT = XMLDATA
    tables
      XML_TABLE = RESULT_XML
      RETURN    = RETURN.

  loop at RESULT_XML into WA_XML .
  endloop.



************************************************

**************************************************
*将XML转换成字符串
  data: W_STRING type XSTRING.
  data LS_XML type STRING.

*将XML转换成字符串
  call function 'SDIXML_DOM_TO_XML'
    exporting
      DOCUMENT      = L_DOCUMENT
    importing
      XML_AS_STRING = W_STRING
      SIZE          = L_XML_SIZE
    tables
      XML_AS_TABLE  = L_XML_TABLE
    exceptions
      NO_DOCUMENT   = 1
      others        = 2.
  if SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  endif.

* 将Xstring转换成二进制
*  call function 'SCMS_XSTRING_TO_BINARY'
*    exporting
*      BUFFER        = W_STRING
*    importing
*      OUTPUT_LENGTH = L_XML_SIZE
*    tables
*      BINARY_TAB    = L_XML_TABLE.

  call function 'SCMS_BINARY_TO_STRING'
    exporting
      INPUT_LENGTH = L_XML_SIZE
    importing
      TEXT_BUFFER  = LS_XML
    tables
      BINARY_TAB   = L_XML_TABLE
    exceptions
      FAILED       = 1
      others       = 2.

  if SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  endif.
****************************************************************

*******************************************************************
** 用XSLT的方式解析、生成XML
*  data LT_TABLE type standard table of CHAR2048.
*  data: GT_RESULT_XML type ABAP_TRANS_RESBIND_TAB,
*        GS_RESULT_XML type ABAP_TRANS_RESBIND.
*data   lo_oref   TYPE REF TO cx_root.
*  try.
*      call transformation ID "此ID是transformation,也可以用事务代码strans自定义一个transformation
*        source xml LT_TABLE
*        result (GT_RESULT_XML) .
*
*    catch CX_ST_ERROR into LO_OREF.
**      LS_MSG-MSGTYP = 'E'.
**      LS_MSG-MSGNO  = '000'.
**      LS_MSG-MSGTXT = LO_OREF->GET_TEXT( ).
**      append LS_MSG to C_MSGOUT.
*  endtry.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115740-1-1.html 上篇帖子: SAP-BOE Universe 开发周期 下篇帖子: 【转贴】学SAP Basis 9 年来的一点心得
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表