Skip to Content
0
Former Member
Jul 21, 2008 at 03:02 PM

Problem when I copy Data from App server to IT - Dynamically

41 Views

Hello Friends,

I have developed a program to copy the data in a table to APp Server and its workign fine. The program is Dynamic and I pass the table name on the selection screen. IT had problems when writing to APP server for data Type P but that is now solved and am able to write. but Ma having problem in the other way. I mean copying the same data to IT from Application server.

Below is the code

Ster.

REPORT ywmm_table_dump.

TABLES :
        dd03l.
* Type spool declaration
TYPE-POOLS :
        abap, slis.

DATA : i_table_data1  TYPE REF TO data,
       i_table_final  TYPE REF TO data.
DATA : it_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE.
DATA : i_fcat   TYPE STANDARD TABLE OF lvc_s_fcat,
       l_fcat   LIKE lvc_s_fcat OCCURS 0 WITH HEADER LINE,
       l_dr_line         TYPE   REF TO data,
       l_v_as4vers       TYPE as4vers.


FIELD-SYMBOLS: <f_field> TYPE ANY.

DATA : BEGIN OF i_output OCCURS 0.
DATA :  sdata(10000) TYPE c.
DATA : END OF i_output.
DATA line_cursor TYPE lvc_s_fcat-intlen.

FIELD-SYMBOLS: <f_table_data1>     TYPE STANDARD TABLE,
               <f_wa_table_data1>  TYPE ANY,


               <f_table_final>     TYPE STANDARD TABLE,
               <f_wa_table_final>  TYPE ANY.

SELECTION-SCREEN: BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
PARAMETERS: rb_copy RADIOBUTTON GROUP map DEFAULT 'X',
            rb_rest RADIOBUTTON GROUP map.

SELECTION-SCREEN: END   OF BLOCK bl1.

SELECTION-SCREEN: BEGIN OF BLOCK bl2 WITH FRAME TITLE text-002.
PARAMETERS: p_table  TYPE tabname OBLIGATORY,
            p_plfld TYPE dd03l-fieldname.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_bkfile TYPE localfile OBLIGATORY.
SELECTION-SCREEN: END   OF BLOCK bl2.

*Start of Selection
SELECT *
  FROM dd03l
  INTO TABLE it_dd03l
 WHERE tabname   = p_table
   AND as4local = 'A'
   AND   as4vers = l_v_as4vers
   AND   ( comptype = 'E' OR comptype = space ).

PERFORM get_data.
IF rb_copy = 'X'.
  PERFORM backup.
ELSEIF rb_rest = 'X'.
  PERFORM database_update.
ENDIF.
*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
FORM get_data.

  CLEAR   i_fcat.
  REFRESH i_fcat.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
       EXPORTING
            i_structure_name = p_table  " Table Name
       CHANGING
            ct_fieldcat      = i_fcat
       EXCEPTIONS
            OTHERS           = 1.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
  EXPORTING
    it_fieldcatalog = i_fcat
  IMPORTING
    ep_table        = i_table_data1.
  IF sy-subrc = 0.
    ASSIGN i_table_data1->* TO <f_table_data1>.
  ELSE.
    WRITE: 'Error creating internal table'.
  ENDIF.

  IF rb_copy = 'X'.

    SELECT  * FROM (p_table) INTO CORRESPONDING FIELDS OF
              TABLE <f_table_data1> UP TO 20 ROWS.

  ELSEIF rb_rest = 'X'.

    CREATE DATA l_dr_line LIKE LINE OF <f_table_data1>.
    ASSIGN l_dr_line->* TO <f_wa_table_data1>.
*Get Data from Application Server

* Opening the dataset P_BKFILE given in the selection screen
    TRANSLATE p_bkfile TO LOWER CASE.
    OPEN DATASET p_bkfile FOR INPUT IN TEXT MODE." ENCODING DEFAULT.
    IF sy-subrc NE 0.
*    MESSAGE:
    ELSE.
      DO.
* Reading the file from application server
*        READ DATASET p_bkfile INTO <f_wa_table_data1>.
        READ DATASET p_bkfile INTO i_output.
        IF sy-subrc = 0.
*          APPEND <f_wa_table_data1> TO <f_table_data1>.
          APPEND i_output.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
* Closing the dataset
      CLOSE DATASET p_bkfile.
    ENDIF.

****
    LOOP AT i_output.        *" Problem is here*
      MOVE  i_output TO <f_wa_table_data1>. " dyn table using p_table
      APPEND <f_wa_table_data1> TO <f_table_data1>.
    ENDLOOP.

  ENDIF.
ENDFORM.                    " get_data

*&---------------------------------------------------------------------*
*&      Form  backup
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM backup.

  TRANSLATE p_bkfile TO LOWER CASE.

  OPEN DATASET p_bkfile FOR OUTPUT IN TEXT MODE.

  IF sy-subrc NE 0.
    WRITE: text-017.
    STOP.
  ELSE.

    LOOP AT <f_table_data1> ASSIGNING <f_wa_table_data1>.
      CLEAR : line_cursor.
      LOOP AT i_fcat INTO l_fcat.
        IF l_fcat-inttype EQ 'P'.
          ASSIGN COMPONENT l_fcat-fieldname
              OF STRUCTURE <f_wa_table_data1> TO <f_field>
              TYPE     l_fcat-inttype
              DECIMALS l_fcat-decimals.
        ELSE.
          ASSIGN COMPONENT l_fcat-fieldname
              OF STRUCTURE <f_wa_table_data1> TO <f_field>
              TYPE     l_fcat-inttype.
        ENDIF.
*        WRITE <f_field> TO i_output-sdata+line_cursor(l_fcat-intlen).
*        line_cursor = line_cursor + l_fcat-intlen.
        WRITE <f_field> TO i_output-sdata+line_cursor(l_fcat-dd_outlen).
        line_cursor = line_cursor + l_fcat-dd_outlen.
      ENDLOOP.
      APPEND i_output.
    ENDLOOP.

    LOOP AT i_output.
      TRANSFER i_output TO p_bkfile.
    ENDLOOP.

  ENDIF.
  CLOSE DATASET p_bkfile.

ENDFORM.                    " backup