Цитата:
*&---------------------------------------------------------------------
*& Report ZOSPEKA *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT ZOSPEKA .
TYPE-POOLS: ixml.
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_SprutTP TYPE REF TO if_ixml_element,
l_element_TTPObjectList TYPE REF TO if_ixml_element,
l_element_TTPObject TYPE REF TO if_ixml_element,
l_element_TTPObjectAttrList TYPE REF TO if_ixml_element,
l_element_TTPObjectDocList TYPE REF TO if_ixml_element,
l_element_ChildList TYPE REF TO if_ixml_element,
l_element_TTPObjectLink TYPE REF TO if_ixml_element,
l_element_TTPObjectLinkAttrLit TYPE REF TO if_ixml_element,
l_element_TTPObjectLinkAttr TYPE REF TO if_ixml_element,
l_element_TTPObjectAttr TYPE REF TO if_ixml_element,
l_element_TTPObjectDocument 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_stpo TYPE TABLE OF stpo.
DATA: l_stpo TYPE stpo.
START-OF-SELECTION.
* Fill the internal table
SELECT * FROM stpo INTO TABLE lt_stpo
where stlnr like '00002856'.
* Sort internal table
SORT lt_stpo BY idnrk.
* Start filling xml dom object from internal table
LOOP AT lt_stpo INTO l_stpo.
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 materials
l_element_SprutTP = l_document->create_simple_element(
name = 'SprutTP'
parent = l_document ).
* Create element 'TTPObjectlist' as child of 'SprutTP'
l_element_TTPObjectList = l_document->create_simple_element(
name = 'TTPObjectList'
parent = l_element_SprutTP ).
ENDAT.
* Create element 'TTPObject' as child of 'TTPObjectlist'
l_element_TTPObject = l_document->create_simple_element(
name = 'TTPObject'
parent = l_element_TTPObjectList ).
* Create element 'TTPObjectAttrList' as child of 'TTPObject'
l_element_TTPObjectAttrList =
l_document->create_simple_element(
name = 'TTPObjectAttrList'
parent = l_element_TTPObject ).
* Create element 'TTPObjectDocList' as child of 'TTPObject'
l_element_TTPObjectDocList =
l_document->create_simple_element(
name = 'TTPObjectDocList'
parent = l_element_TTPObject ).
* Create element 'ChildList' as child of 'TTPObject'
l_element_ChildList =
l_document->create_simple_element(
name = 'ChildList'
parent = l_element_TTPObject ).
* Create attribute 'kod' of node 'TTPObject'
l_value = l_stpo-idnrk.
l_rc = l_element_TTPObject->set_attribute( name = 'Kod' value =
l_value ).
* Create element 'name' as child of 'TTPObject'
l_value = 'val'.
l_element_TTPObject->set_attribute(
name = 'Name'
value = l_value ).
* Create attribute 'ShowKod' of node 'TTPObject'
l_value = '1'.
l_rc = l_element_TTPObject->set_attribute( name =
'ShowKod'
value = l_value ).
* Create attribute 'KodClass' of node 'TTPObject'
l_value = 'SBED'.
l_rc = l_element_TTPObject->set_attribute( name =
'KodClass'
value = l_value ).
* Create element 'DateCreate' as child of 'TTPObject'
l_value = ''.
l_element_TTPObject->set_attribute(
name = 'DateCreate'
value = l_value ).
* Create element 'DateModify' as child of 'TTPObject'
l_value = ''.
l_element_TTPObject->set_attribute(
name = 'DateModify'
value = l_value ).
* Create element 'KodUserCreate' as child of 'TTPObject'
l_value = 'Технолог'.
l_element_TTPObject->set_attribute(
name = 'KodUserCreate'
value = l_value ).
* Create element 'KodUserModify' as child of 'TTPObject'
l_value = 'Технолог'.
l_element_TTPObject->set_attribute(
name = 'KodUserModify'
value = l_value ).
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( ).
* 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\spec8.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 файл заданной структуры, данный отчет пока с заглушками по полю Name, необходимо выгрузить из структуры rc29p поле ktext или из таблицы makt поле maktx, где makt-matnr=stpo-idnrk, ка это можно осуществить программно? Либо сделать всю выгрузку из данной структуры.
Поле с датой и временем необходимо преобразовать к виду число.месяц.год час:минута:секунда.
И необходимо организовать вложенную структуру:
Для номера спецификации stlnr выписываются idnrk с именами из структуры rc29p или таблицы makt.
У элемента ChildList создаются элементы TTPObjectLink с атрибутами KodObj, KodClass, KodLink, IsForwardLink, LinkOrder и элементы TTPObjectLinkAttrList(превышает допустимые 30 символов) и TTPObjectLinkAttr. У элемента TTPObjectLinkAttr атрибуты Kod и ValueAttr у которых может быть несколько значений QUANTITY и POSITION у поля Kod и значения их в поле ValueAttr. Как это можно сделать, подскажите, плз, хотя бы заглушками....очень надо