Программа описанная ниже, позволяет выгрузить в XML или ODS (с предварительной выгрузкой в промежуточную таблицу), основные данные признака BW вместе с данными его атрибутов, в формате готовом для загрузки в XML.
Структура для выгрузки в PCM
Транзакция для редактирования Simple transformation STRANS
Используемая трансформация в программе ZID
<xsl:transform version="1.0" xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform" > <xsl:template">http://www.w3.org/1999/XSL/Transform" > <xsl:template</a> match="/"> <xsl:copy-of select="."/> </xsl:template> </xsl:transform>
Полный текст программы:
*&---------------------------------------------------------------------* *& Report ZZXMLTST2TEST *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZZXMLTST2TEST. SELECTION-SCREEN BEGIN OF BLOCK rad1 WITH FRAME TITLE text-001. target(32) lower case obligatory, " наименование целевого измерения в PCM model(32) lower case obligatory DEFAULT 'Test 2'. " Наименование целевой модели PCM SELECT-OPTIONS atrvs for atrvsel. " атрибуты признака подлежащие выгрузке в PCM SELECTION-SCREEN BEGIN OF BLOCK rad2 WITH FRAME TITLE text-002. PARAMETERS: Diskname(3) obligatory DEFAULT 'C:/',path(255) lower case obligatory DEFAULT 'pcm.xml'. " путь выгрузки файла *-------------- DATA DATA : ParentChildRecord type TABLE OF ZPARENTCHILDRECORD WITH HEADER LINE. " таблица со структурой для выгрузки в PCM * так как структура таблиц с основными данными признаков * может быть разной, для унификации доступа определим динамические таблицы * через FIELD-SYMBOLS * field symbols to access the dynamic table <dyn_wa>, " рабочай область <dyn_field>, " поле <dyn_field2>. " поле 2 dy_line TYPE REF TO data, xfc TYPE lvc_s_fcat, ifc TYPE lvc_t_fcat. * additional data charname = p_table. IN charname WITH '/'. a(100) TYPE c, END OF itab. formstring type string, tststrv type string. f(255) TYPE c, END OF upl. *------------------ Fetch Data *******Creates a dynamic internal table********* * получаем список атрибутов: loop at atrvs. fieldlist-name = atrvs-low. append fieldlist. * get data PERFORM get_data. * PERFORM write_out TABLES fieldlist. * stage 1 - get char values ASSIGN COMPONENT charname " сами значения признака OF STRUCTURE <dyn_wa> TO <dyn_field>. EXIT. * cter2 = <dyn_field>+0(4). * if cter2 eq '0000'. * SHIFT <dyn_field> LEFT DELETING LEADING '0'. * ENDIF. "WRITE: <dyn_field>. ParentChildRecord-DimensionName = target. ParentChildRecord-ParentName = target. ParentChildRecord-ChildName = <dyn_field>. ParentChildRecord-AttributeFlag = '8'. ParentChildRecord-ConsolidationType = '+'. APPEND ParentChildRecord. chartlist-name = <dyn_field>. " формируем список значений атрибутов как отдельный лист APPEND chartlist. * stage 2 - FORMING ATTRIBUTES target2 = target. ParentChildRecord-DimensionName = target. ParentChildRecord-ParentName = atrvstr. ParentChildRecord-ChildName = fieldlist-name. ParentChildRecord-AttributeFlag = '15'. ParentChildRecord-ConsolidationType = 'OR'. APPEND ParentChildRecord. * stage 3 - atributes values OF STRUCTURE <dyn_wa> TO <dyn_field>. EXIT. "WRITE: <dyn_field>. ParentChildRecord-DimensionName = target. ParentChildRecord-ParentName = fieldlist-name. ParentChildRecord-ChildName = <dyn_field>. ParentChildRecord-AttributeFlag = '15'. ParentChildRecord-ConsolidationType = '+'. APPEND ParentChildRecord. LOOP at ParentChildRecord. * stage 4 - atributes values mapping ASSIGN COMPONENT charname " сами значения признака OF STRUCTURE <dyn_wa> TO <dyn_field2>. EXIT. OF STRUCTURE <dyn_wa> TO <dyn_field>. EXIT. ParentChildRecord2-DimensionName = target. ParentChildRecord2-ParentName = <dyn_field>. ParentChildRecord2-ChildName = chartlist-name. ParentChildRecord2-AttributeFlag = '12'. ParentChildRecord2-ConsolidationType = '+'. APPEND ParentChildRecord2. *XML formig *------------------- XML CALL TRANSFORMATION ('ZID') SOURCE Action = ParentChildRecord2[] RESULT XML xml_out. *------------------- EDIT XML into formstring. REPLACE ALL OCCURRENCES OF '<asx:abap xmlns:asx="<a href="http://www.sap.com/abapxml"">http://www.sap.com/abapxml"</a> version="1.0"><asx:values><ACTION>' IN xml_out WITH formstring. IN xml_out WITH '</Action></PPAData>'. IN xml_out WITH 'ParentChildRecord'. IN xml_out WITH 'ConsolidationType'. IN xml_out WITH 'ParentName'. IN xml_out WITH 'ChildName'. IN xml_out WITH 'AttributeFlag'. IN xml_out WITH 'DimensionName'. *------------- Convert to TABLE CALL FUNCTION 'Z_EFI_CONVERT_STRING_TO_TABLE' EXPORTING i_string = xml_out i_tabline_length = 100 et_table = itab. *-------------- Download CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filetype = 'BIN' filename = fullpath data_tab = itab. EXEC SQL. TRUNCATE TABLE "ZPARENTCHILD" LOOP at ParentChildRecord2. temptab-DIMENTIONNAME = ParentChildRecord2-DimensionName. temptab-PARENTNAME = ParentChildRecord2-ParentName. temptab-CHILDNAME = ParentChildRecord2-ChildName. temptab-ATTRIBUTEFLAG = ParentChildRecord2-AttributeFlag. temptab-CONSOLIDATIONTYP = ParentChildRecord2-ConsolidationType. ******FORMES *write 'hello'. *&---------------------------------------------------------------------* *& Form get_structure *&---------------------------------------------------------------------* FORM get_structure. xdetails TYPE abap_compdescr. * Get the structure of the table. ref_table_des ?= cl_abap_typedescr=>describe_by_name( p_table ). idetails[] = ref_table_des->components[]. CLEAR xfc. xfc-fieldname = xdetails-name . * Correction by Paul Robert Oct 28, 2009 17:04 * xfc-datatype = xdetails-type_kind. xfc-datatype = 'CHAR'. xfc-datatype = 'NUMC'. xfc-datatype = 'DATE'. xfc-datatype = 'PACK'. xfc-datatype = xdetails-type_kind. xfc-inttype = xdetails-type_kind. xfc-intlen = xdetails-length. xfc-decimals = xdetails-decimals. *&---------------------------------------------------------------------* *& Form create_dynamic_itab *&---------------------------------------------------------------------* FORM create_dynamic_itab. * Create dynamic internal table and assign to FS CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = ifc i_length_in_byte = 'X' "added by Paul Robert Oct 28, 2009 17:04 IMPORTING ep_table = dy_table. * Create dynamic work area and assign to FS CREATE DATA dy_line LIKE LINE OF <dyn_table>. *&---------------------------------------------------------------------* *& Form get_data *&---------------------------------------------------------------------* FORM get_data. * Select Data from table. FROM (p_table). *&---------------------------------------------------------------------* *& Form write_out *&---------------------------------------------------------------------* *FORM write_out TABLES fieldlist. * LOOP AT <dyn_table> INTO <dyn_wa>. * " DO. * ASSIGN COMPONENT 'fieldlist-name' * OF STRUCTURE <dyn_wa> TO <dyn_field>. * IF sy-subrc <> 0. * EXIT. * ENDIF. * WRITE: <dyn_field>. * * " ENDDO. * ENDLOOP. *ENDFORM. "write_out