将SAP订单以XML格式输出

 将订单信息从SAP中以XML格式导出上载到FTP服务器上,客户从FTP下载到本地ERP系统,读取相应的信息生成自己报表。以此实现了EDI功能,是个不错的方法。
*&---------------------------------------------------------------------*
*& Report  Z1766_TEST_XML
*&
*&---------------------------------------------------------------------*
REPORT  z1766_test_xml.
*DATA:itab_item TYPE TABLE OF z1crm_sales_item.
DATA: BEGIN OF s_head,
        order_id LIKE z1crm_sales_head-order_id,
        status_h  LIKE z1crm_sales_head-status_h,
        creat_date_h LIKE z1crm_sales_head-creat_date_h,
        creat_time_h LIKE z1crm_sales_head-creat_time_h,
        sold_to LIKE z1crm_sales_head-sold_to,
        ship_to LIKE z1crm_sales_head-ship_to,
        cont_total LIKE z1crm_sales_head-cont_total,
        zzroute LIKE z1crm_sales_head-zzroute,
        ship_cond LIKE z1crm_sales_head-ship_cond,
        pmnttrms LIKE z1crm_sales_head-pmnttrms,
       END OF s_head,
      itab_head   LIKE STANDARD TABLE OF s_head.
DATA: BEGIN OF s_item,
        itemcode LIKE z1crm_sales_item-number_int,
        pn_group  LIKE z1crm_sales_item-pn_group,
        matnr LIKE z1crm_sales_item-matnr,
        charg  LIKE z1crm_sales_item-charg,
        status_i LIKE z1crm_sales_item-status_i,
       END OF s_item,
      itab_item   LIKE STANDARD TABLE OF s_item.
DATA: BEGIN OF adminfo,
        object TYPE string,
        version TYPE string,
       END OF adminfo,
       adminfo_itab  LIKE STANDARD TABLE OF adminfo.
PARAMETERS:order_id LIKE z1crm_sales_head-order_id DEFAULT '8895100207'.
PARAMETERS: p_show AS CHECKBOX DEFAULT 'X'.
CONSTANTS:
  c_xml_root TYPE string VALUE 'BOM',
  c_xml_adminfo TYPE string VALUE 'AdmInfo',
  c_xml_documents TYPE string VALUE 'Documents',
  c_xml_document_lines TYPE string VALUE 'Document_Lines',
  c_xml_bo TYPE string VALUE 'BO'.
DATA:
  g_xml TYPE REF TO cl_xml_document.",
START-OF-SELECTION.
  REFRESH:itab_head,itab_item.
  SELECT * INTO CORRESPONDING FIELDS OF TABLE itab_head
  FROM z1crm_sales_head
    WHERE order_id = order_id.
  READ TABLE itab_head INTO s_head INDEX 1.
 
  SELECT number_int AS itemcode pn_group matnr charg status_i
  INTO CORRESPONDING FIELDS OF TABLE itab_item
   FROM z1crm_sales_item
    WHERE order_id = order_id.
  adminfo-object  = '17'.
  adminfo-version = '2'.
END-OF-SELECTION.
  DATA:
  mtd_name TYPE string,
  class_root TYPE REF TO if_ixml_node,
  class_bo TYPE REF TO if_ixml_node.
  CREATE OBJECT g_xml
    EXPORTING
      description = 'test'
      object_type = cl_xml_document=>c_bor_classtype.
*      object_name = s_head-mill.
* Simply generate sections of XML document
* First create root section
  g_xml->set_data( name       = c_xml_root
                  dataobject = '' ).
  class_root = g_xml->find_node( name   = c_xml_root ).
  g_xml->set_data( name       = c_xml_bo
                parent_node = class_root
                  dataobject = '' ).
  class_bo =  g_xml->find_node( name   = c_xml_bo ).
* All other sections will be under the root (see parent_node)
  DEFINE set_section_data.
    g_xml->set_data( name = &1
                     parent_node = class_bo
                     dataobject  = &2 ).
  END-OF-DEFINITION.
  set_section_data:
    'AdmInfo' '',
    'Object' adminfo-object ,
    'Version'  adminfo-version ,
    'Documents'  s_head    ,
    'Document_Lines' itab_item .
*  LOOP AT itab_item INTO s_item.
*    set_section_data:
*    'row' s_item.
*  ENDLOOP.
 

* Now display resulting XML-file or export it into workstation file
  mtd_name = order_id.
  IF p_show = 'X'.
    g_xml->display( ).
    EXIT.
  ENDIF.
  DATA:
    user_action TYPE i,
    path TYPE string,
    full_path TYPE string,
    file_name TYPE string.
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      default_extension    = 'xml'
      default_file_name    = mtd_name
      file_filter          = cl_gui_frontend_services=>filetype_xml
    CHANGING
      filename             = file_name
      path                 = path
      fullpath             = full_path
      user_action          = user_action
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  CHECK user_action = cl_gui_frontend_services=>action_ok.
  DATA:
    localfile TYPE localfile.
  localfile = full_path.
  g_xml->export_to_file( filename = localfile ).
 
执行结果:
   xml version="1.0" ?>
-  < BOM >
-  < BO >
   < AdmInfo  />
   < Object > 17 Object>
   < Version > 2 Version>
-  < Documents >
   < ORDER_ID > 8895100207 ORDER_ID>
   < STATUS_H > A STATUS_H>
   < CREAT_DATE_H > 2009-07-09 CREAT_DATE_H>
   < CREAT_TIME_H > 16:00:24 CREAT_TIME_H>
   < SOLD_TO > 0006000056 SOLD_TO>
   < SHIP_TO > 0006000056 SHIP_TO>
   < CONT_TOTAL > 1*20GP*22.00 CONT_TOTAL>
   < ZZROUTE > B3US79 ZZROUTE>
   < SHIP_COND > 11 SHIP_COND>
   < PMNTTRMS > N030 PMNTTRMS>
   Documents>
-  < Document_Lines >
-  < item >
   < ITEMCODE > 0000000010 ITEMCODE>
   < PN_GROUP > GZ0300 PN_GROUP>
   < MATNR > 43250003 MATNR>
   < CHARG > 0000000003 CHARG>
   < STATUS_I > A010 STATUS_I>
   item>
-  < item >
   < ITEMCODE > 0000000020 ITEMCODE>
   < PN_GROUP > GZ0300 PN_GROUP>
   < MATNR > 43250003 MATNR>
   < CHARG > 0000000003 CHARG>
   < STATUS_I > A010 STATUS_I>
   item>
-  < item >
   < ITEMCODE > 0000000030 ITEMCODE>
   < PN_GROUP > GZ0300 PN_GROUP>
   < MATNR > 43255002 MATNR>
   < CHARG > 0000000093 CHARG>
   < STATUS_I > A010 STATUS_I>
   item>
-  < item >
   < ITEMCODE > 0000000040 ITEMCODE>
   < PN_GROUP > GZ0300 PN_GROUP>
   < MATNR > 43255002 MATNR>
   < CHARG > 0000000093 CHARG>
   < STATUS_I > A010 STATUS_I>
   item>
   Document_Lines>
   BO>
生成XML文件ABAP程序 REPORT zams_xml_dom_create . TYPE-POOLS: ixml. CLASS cl_ixml DEFINITION LOAD. 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_ArchiveBatch TYPE REF TO if_ixml_element, l_element_BatchNumber TYPE REF TO if_ixml_element, l_element_TotalFiles TYPE REF TO if_ixml_element, l_element_TotalVolumes TYPE REF TO if_ixml_element, l_element_TotalPieces TYPE REF TO if_ixml_element, l_element_Entries TYPE REF TO if_ixml_element, l_element_Entry TYPE REF TO if_ixml_element, l_element_RecordsCombiningType TYPE REF TO if_ixml_element, l_element_FilePath TYPE REF TO if_ixml_element, l_element_SourceFileName TYPE REF TO if_ixml_element, l_element_ClassificationCode TYPE REF TO if_ixml_element, l_element_ElectronicRecordCode TYPE REF TO if_ixml_element, l_value TYPE string, l_name type string. DATA: l_xml_table TYPE TABLE OF xml_line, l_xml_size TYPE i, l_rc TYPE i. START-OF-SELECTION. *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 ArchiveBatch l_element_ArchiveBatch = l_document->create_simple_element( name = 'ArchiveBatch' parent = l_document ). * clear l_value. * l_value = '"http://www.w3.org/2001/XMLSchema-instance"'. * l_rc = l_element_ArchiveBatch->set_attribute( name = 'xmlns: *xsi' * value = l_value ). * * clear l_value. * concatenate '"D:\dev\vs\projects\AMS\DotNet\Sinopec.Ams.' * 'Integration\bin\Debug\config\AmsIntegration.xsd"' * into l_value. * l_name = 'xsi:noNamespaceSchemaLocation'. * l_rc = l_element_ArchiveBatch->set_attribute( name = l_name *value = l_value ). *BatchNumber l_element_BatchNumber = l_document->create_simple_element( name = 'BatchNumber' value = '20100609001' parent = l_element_ArchiveBatch ). *TotalFiles l_element_TotalFiles = l_document->create_simple_element( name = 'TotalFiles' value = '5' parent = l_element_ArchiveBatch ). *TotalVolumes l_element_TotalVolumes = l_document->create_simple_element( name = 'TotalVolumes' value = '3' parent = l_element_ArchiveBatch ). *TotalPieces l_element_TotalPieces = l_document->create_simple_element( name = 'TotalPieces' value = '5' parent = l_element_ArchiveBatch ). *Entries l_element_Entries = l_document->create_simple_element( name = 'Entries' parent = l_element_ArchiveBatch ). *Entry1 l_element_Entry = l_document->create_simple_element( name = 'Entry' parent = l_element_Entries ). *Entry1下面的子项 *RecordsCombiningType l_element_RecordsCombiningType = l_document->create_simple_element( name = 'RecordsCombiningType' value = 'Volume' parent = l_element_Entry ). *FilePath l_element_FilePath = l_document->create_simple_element( name = 'FilePath' value = '全宗001/目录001/案卷001/档案一.docx' parent = l_element_Entry ). *SourceFileName l_element_SourceFileName = l_document->create_simple_element( name = 'SourceFileName' value = '档案一' parent = l_element_Entry ). *ClassificationCode l_element_ClassificationCode = l_document->create_simple_element( name = 'ClassificationCode' value = 'wenshu' parent = l_element_Entry ). *ElectronicRecordCode l_element_ElectronicRecordCode = l_document->create_simple_element( name = 'ElectronicRecordCode' value = 'BJSH-001' parent = l_element_Entry ). *Entry1 * 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( ). * Saving the XML document l_xml_size = l_ostream->get_num_written_raw( ). CALL METHOD cl_gui_frontend_services=>gui_download EXPORTING bin_filesize = l_xml_size filename = 'c:\temp\metas.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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值