ABAP内表数据做层次XML输出

*& Report Z_BARRY_TEST_XML
*&---------------------------------------------------------------------*
*& 46C - ECC6 通用
*&---------------------------------------------------------------------*
REPORT z_barry_test_xml.
ebelp LIKE ekpo-ebelp ,
menge LIKE ekpo-menge ,
END OF ty_item .
TYPES tt_item TYPE STANDARD TABLE OF ty_item WITH DEFAULT KEY .
DATA: itab_item TYPE STANDARD TABLE OF ty_item WITH HEADER LINE ,
wa_item LIKE LINE OF itab_item.
ebeln LIKE ekko-ebeln ,
aedat LIKE ekko-aedat ,
item TYPE tt_item ,
END OF ty_po .
DATA: itab_po TYPE STANDARD TABLE OF ty_po WITH HEADER LINE .
ebeln LIKE ekko-ebeln ,
aedat LIKE ekko-aedat ,
ebelp LIKE ekpo-ebelp ,
menge LIKE ekpo-menge ,
END OF itab_all.
l_encoding TYPE REF TO if_ixml_encoding,
l_comment TYPE REF TO if_ixml_comment,
l_doc TYPE REF TO if_ixml_document,
l_root TYPE REF TO if_ixml_element,
l_po TYPE REF TO if_ixml_element,
l_pohead TYPE REF TO if_ixml_element,
l_item TYPE REF TO if_ixml_element,
l_element TYPE REF TO if_ixml_element,
l_attribute TYPE REF TO if_ixml_attribute,
l_ostream TYPE REF TO if_ixml_ostream,
l_factory TYPE REF TO if_ixml_stream_factory.
TYPES: BEGIN OF xml_line,
data(256) TYPE x,
END OF xml_line.
DATA: xml_table TYPE TABLE OF xml_line,
xml_size TYPE i.
DATA: l_rval TYPE i.
DATA: str TYPE string .
PERFORM getdata.
PERFORM create_xml.
PERFORM download.
*---------------------------------------------------------------------*
* FORM getdata *
*---------------------------------------------------------------------*
FORM getdata.
SELECT ekko~ebeln ekko~aedat ekpo~ebelp ekpo~menge
INTO TABLE itab_all
FROM ekko INNER JOIN ekpo ON ekko~ebeln = ekpo~ebeln
WHERE ekko~ebeln IN s_ebeln.
ON CHANGE OF itab_all-ebeln .
CLEAR itab_po-item .
CLEAR tmpebeln .
tmpebeln = itab_all-ebeln .
LOOP AT itab_all WHERE ebeln = tmpebeln .
wa_item-ebelp = itab_all-ebelp .
wa_item-menge = itab_all-menge .
APPEND wa_item TO itab_po-item .
ENDLOOP .
SORT itab_po-item BY ebelp.
itab_po-ebeln = itab_all-ebeln .
itab_po-aedat = itab_all-aedat .
APPEND itab_po .
ENDON .
ENDLOOP .
ENDFORM. "getdata
*---------------------------------------------------------------------*
* FORM create_xml *
*---------------------------------------------------------------------*
FORM create_xml.
CLASS cl_ixml DEFINITION LOAD.
l_ixml = cl_ixml=>create( ).
CALL METHOD l_ixml->create_encoding
EXPORTING
byte_order = 0
character_set = 'gb2312'
RECEIVING
rval = l_encoding.
CALL METHOD l_ixml->create_document
RECEIVING
rval = l_doc.
CALL METHOD l_doc->set_encoding
EXPORTING
encoding = l_encoding.
CALL METHOD l_doc->create_simple_element
EXPORTING
name = 'Root'
parent = l_doc
RECEIVING
rval = l_root.
CALL METHOD l_root->set_attribute
EXPORTING
name = 'ATTRIBUTE'
value = 'sample'
RECEIVING
rval = l_rval.
CALL METHOD l_doc->create_comment
EXPORTING
comment = '''上面ATTRIBUTE为属性示例'''
RECEIVING
rval = l_comment.
CALL METHOD l_root->append_child
EXPORTING
new_child = l_comment
RECEIVING
rval = l_rval.
EXPORTING
name = 'po'
parent = l_root
RECEIVING
rval = l_po.
EXPORTING
name = 'pohead'
parent = l_po
RECEIVING
rval = l_pohead.
CALL METHOD l_doc->create_simple_element
EXPORTING
name = 'ponumber'
parent = l_pohead
value = str
RECEIVING
rval = l_element.
str = itab_po-aedat .
CALL METHOD l_doc->create_simple_element
EXPORTING
name = 'podate'
parent = l_pohead
value = str
RECEIVING
rval = l_element.
USING 'pobody'
'poitem'
l_po.
ENDLOOP.
RECEIVING
rval = l_factory.
CALL METHOD l_factory->create_ostream_itable
EXPORTING
table = xml_table
RECEIVING
rval = l_ostream.
CALL METHOD l_doc->render
EXPORTING
ostream = l_ostream
recursive = 'X'.
CALL METHOD l_ostream->get_num_written_raw
RECEIVING
rval = xml_size.
ENDFORM. "create_xml
* FORM fill_itab *
*---------------------------------------------------------------------*
FORM fill_itab2xml TABLES intab
USING node1name TYPE string
node2name TYPE string
l_parent TYPE REF TO if_ixml_element.
DATA: BEGIN OF headtab OCCURS 0 ,
length TYPE i ,
decimals TYPE i,
type_kind TYPE c,
name(30) TYPE c,
END OF headtab.
DATA descr_ref TYPE REF TO cl_abap_structdescr.
FIELD-SYMBOLS: <comp_wa> TYPE abap_compdescr ,
<f_field> ,
<f_intab> TYPE ANY .
DATA: n TYPE i ,
str TYPE string ,
itemname TYPE string ,
text1 TYPE c ,
l_node TYPE REF TO if_ixml_element ,
l_item TYPE REF TO if_ixml_element .
descr_ref ?= cl_abap_typedescr=>describe_by_data( intab ).
LOOP AT descr_ref->components ASSIGNING <comp_wa>.
MOVE-CORRESPONDING <comp_wa> TO headtab.
APPEND headtab.
ENDLOOP.
CALL METHOD l_doc->create_simple_element
EXPORTING
name = node1name
parent = l_parent
RECEIVING
rval = l_node.
DESCRIBE TABLE headtab LINES n.
LOOP AT intab ASSIGNING <f_intab>.
CALL METHOD l_doc->create_simple_element
EXPORTING
name = node2name
parent = l_node
RECEIVING
rval = l_item.
DO n TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE <f_intab> TO <f_field>.
str = <f_field>.
READ TABLE headtab INDEX sy-index.
IF headtab-type_kind = 'I' OR headtab-type_kind = 'P'
OR headtab-type_kind = 'F'.
SEARCH str FOR '-'.
IF sy-subrc = 0 AND sy-fdpos <> 0.
SPLIT str AT '-' INTO str text1.
CONDENSE str.
CONCATENATE '-' str INTO str.
ELSE.
CONDENSE str.
ENDIF.
ELSE.
* SHIFT str LEFT DELETING LEADING '0' .
ENDIF.
itemname = headtab-name .
CALL METHOD l_doc->create_simple_element
EXPORTING
name = itemname
parent = l_item
value = str
RECEIVING
rval = l_element.
ENDDO.
ENDLOOP.
ENDFORM. "fill_itab2xml
* FORM download *
*---------------------------------------------------------------------*
FORM download.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = xml_size
filename = 'C:\46C.XML'
filetype = 'BIN'
TABLES
data_tab = xml_table.
ENDFORM. "download

ABAP内表数据做层次XML输出的更多相关文章
- ABAP内表数据和JSON格式互转
本程序演示ABAP内表数据如何转为JSON格式,以及JSON数据如何放入内表. 注:json字符串格式如:jsonstr = '[ {flag: "0",message: &quo ...
- ABAP 内表数据 与 Json串 相互转换
内表: A B C IMINGZHA HAIMINGZ AIMINGZH 1 2 3 4 5 6 Json串: [{a: "IMINGZHA", b: "HAIMIN ...
- ABAP 内表 详解
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Abap 内表的语法
ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据 不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的 内表支持循环对每行数据进行操作,也支持整体操作 ...
- REUSE_ALV_GRID_DISPLAY显示ALV,设置可编辑时,与内表数据同步问题
使用function module: REUSE_ALV_GRID_DISPLAY显示ALV,并设置alv某些列可编辑,可是编辑后发现对应的内表数据并没有随之改变.记得需要设置一个参数的值,怎么想也记 ...
- ABAP 内表与XML转换
1需求说明 在系统交互中需要将SAP内表转换为XML文件,发送给其他系统,并且将其他系统返回的XML文件转换为SAP内表. 2创建转换编辑器 事务代码:STRANS 选择简单转换 以图形方式编辑 右键 ...
- ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW-(以运单号为单位显示ALV然后保存输出)
*********************************************************************** * Title : ZSDF003 ...
- ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW
*********************************************************************** * Title : ZSDF002 ...
- ABAP 内表的行列转换-发货通知单-打印到Excel里
需要传入数据到Excel里的模板如上图所示 ********************** * 设计主要逻辑与原理说明 ...
随机推荐
- webstrom 中 plugins error 设置里 Languages & Frameworks里面没有JavaScript?
不知道哪里不对 js突然不支持高亮 于是在设置里面找language & frameworks里面的JavaScript 选项 但是竟然没有JavaScript选项. 还有plugins er ...
- Android学习(十) SQLite 基于SQL语句的操作方式
main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- 为什么JVM指定-Xmx参数后占用内存会变少?
嘿,你能顺便过来看看这个奇怪的事情吗?” 就是让我提供支持的这个事情,驱使我写下这篇博客的.这个特殊的问题是,不同工具给出的可用内存的报告是不一样的. 简而言之,工程师正在调查特定应用程序的内存使用. ...
- 【Excle数据透视表】如何得到数据透视表中某个汇总行的明细数据
例如: 现在想得到"北京 汇总"的明细数据,该怎么处理呢? 步骤 右键数据透视表任意单元格→数据透视表选项→启用显示明细数据→确定→单击"北京 汇总"行最后一个 ...
- Java注解基本介绍
注解(Annotation),又称元数据(MetaData),提供了一种在代码中添加信息的形式化的方法,将元数据和源代码结合在一起. 1. 外部配置文件如XML存在的问题: 代码复杂度较高,需要编写很 ...
- [linux]free命令详解-显示内存的使用情况
本文部分转载于https://blog.csdn.net/sunansheng/article/details/51942522 free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内 ...
- mongoDB DOS窗口显示中文
http://zhidao.baidu.com/question/157276582 由于mongodb后台的字符编码都是utf-8的,而中文windows cmd窗口使用的字符编码是GBK(属性-& ...
- ubuntu下设置静态ip
直接修改系统配置文件ubuntu的网络配置文件是:/etc/network/interfacesubuntu命令行修改网络配置方法前面auto eth?,让网卡开机自动挂载. 为网卡配置静态IP地址 ...
- ubuntu下USB连接Android手机
初始工作:将Android手机通过usb连接到电脑,之后点击VM-Removable Devices-google Android - Connect,即可. 若通过usb连接到电脑,Removabl ...
- 在Java中怎样高效的推断数组中是否包括某个元素
来自 http://www.hollischuang.com/archives/1269? 怎样检查一个数组(无序)是否包括一个特定的值?这是一个在Java中经经常使用到的并且非常实用的操作.同一时候 ...