2017년 1월 30일 월요일

ZBDCTOOL_FROM_TXT

REPORT ZBDCTOOL LINE-COUNT LINE-SIZE 80
       NO STANDARD PAGE HEADING.
*-----------------------------------------------------------------------
* BDC Data Upload by Recording
*-----------------------------------------------------------------------
*  |*            ; comment
*  |*FIELDNAME   ; field name
*  |*Description ;
*  |STARTDATA    ; data start
*  |
*  |
*  |ENDDATA      ; data end
*-----------------------------------------------------------------------
TABLESAPQI,
        TSTCT,
        DFIES,
        X031L,
        T100.
*
DATABDC_PARAMS LIKE CTU_PARAMS.
DATADYNFLOW  LIKE BDCDATA OCCURS WITH HEADER LINE.
DATASAV_DF   LIKE BDCDATA OCCURS WITH HEADER LINE.
DATABDC_DATA LIKE BDCDATA OCCURS WITH HEADER LINE.
DATAPRG_DYN(50)ICODE(30).
*
DATAUPLOAD(12)    VALUE '<Processing>',
      TESTING(14)   VALUE '<Test Display>',
      TESTONE(10)   VALUE '<Test One>',
      SESSION(17)   VALUE '<Process Session>',
      MAKETEMP(15)  VALUE '<Make Template>',
      CLIP(7)       VALUE '<Paste>'.
*
DATABEGIN OF ALPHA,
        X1 TYPE HEXTYP VALUE 65,
        X2 TYPE HEXTYP VALUE 32,
      END   OF ALPHA.
DATA  READTYPE.
DATA  F_TEST.    "ok_code for test
DATADYN_TABIX LIKE SY-TABIX,
      DYN_ORDER LIKE SY-TABIX.
* function code for test
DATABEGIN OF MOD_FCODE OCCURS 10,
        F_TEST,
        TABIX LIKE SY-TABIX,
      END   OF MOD_FCODE.
*
DATABEGIN OF FTEXT OCCURS 10,
        OUTPUTLEN LIKE DFIES-OUTPUTLEN,
        SCRTEXT_S(14),
        SCRTEXT_M(24),
        SCRTEXT_L LIKE DFIES-SCRTEXT_L,
        LINENO(4),
        TABIX LIKE SY-TABIX,
      END   OF FTEXT.
*
DATABEGIN OF FNAM OCCURS 10,
        FNAM LIKE BDCDATA-FNAM,
        ORDER LIKE SY-TABIX,
      END   OF FNAM.
*
DATABEGIN OF FORD OCCURS 10,
        FNAM  LIKE BDCDATA-FNAM,
        ORDER LIKE SY-TABIX,
      END   OF FORD.
*
DATANODATA VALUE '/'.
DATAMESSTAB LIKE BDCMSGCOLL OCCURS WITH HEADER LINE.
DATAL_MSTRING(512).
DATA  CCODE(2).
DATA  TRAN_SUBRC TYPE SY-SUBRC.
DATAFILENAME     LIKE RLGRAP-FILENAME,
      FILETYPE     LIKE RLGRAP-FILETYPE VALUE 'ASC',
      ACT_FILENAME LIKE RLGRAP-FILENAME,
      FILESIZE TYPE I.
* Recording
SELECTION-SCREEN BEGIN OF BLOCK RECO0 WITH FRAME TITLE T_RECO0.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T_GRPID.
PARAMETERS:   P_GRPID LIKE APQI-GROUPID.
PARAMETERS:   P_MANDT LIKE APQI-MANDANT OBLIGATORY DEFAULT SY-MANDT.
SELECTION-SCREEN END   OF LINE.
* Created on
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T_CREDT.
PARAMETERSP_CREDT LIKE APQI-CREDATE.
SELECTION-SCREEN END   OF LINE.
* Created by
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T_CREUR.
PARAMETERSP_CREUR LIKE APQI-CREATOR.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN ULINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T_RFILE.
PARAMETERSP_RFILE(128MEMORY ID DLP.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN END   OF BLOCK RECO0.
*
SELECTION-SCREEN BEGIN OF BLOCK FSRC0 WITH FRAME TITLE T_FSCR0.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS P_FRPC RADIOBUTTON GROUP FSRC.
SELECTION-SCREEN COMMENT  3(15T_FRPC.
SELECTION-SCREEN END   OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS P_FRSR RADIOBUTTON GROUP FSRC.
SELECTION-SCREEN COMMENT 3(15T_FRSR.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T_FNAME.
PARAMETERSP_FNAME LIKE RLGRAP-FILENAME
*                         DEFAULT 'C:\SAPWorkdir\MAT.TXT'
                         MEMORY ID DLF.
SELECTION-SCREEN END   OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERSX_DEFLT  AS CHECKBOX DEFAULT ' '.
SELECTION-SCREEN COMMENT 3(70T_DEFLT.
SELECTION-SCREEN END   OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T_NULTXT.
PARAMETERSX_NULIND   DEFAULT '!'.
SELECTION-SCREEN END   OF LINE.
SELECTION-SCREEN END   OF BLOCK FSRC0.
*
SELECTION-SCREEN BEGIN OF BLOCK SESS0 WITH FRAME TITLE T_SESS0.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERSX_TRAN RADIOBUTTON GROUP BTYP.
SELECTION-SCREEN COMMENT 3(20T_TRAN.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T_DMODE.
PARAMETERSDMODE LIKE CTU_PARAMS-DISMODE DEFAULT 'N'.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T_UMODE.
PARAMETERSUMODE LIKE CTU_PARAMS-UPDMODE DEFAULT 'S'.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERSX_SES RADIOBUTTON GROUP BTYP.
SELECTION-SCREEN COMMENT 3(20T_SES.
SELECTION-SCREEN END   OF LINE.
PARAMETERSBDCGROUP(12).
PARAMETERSUSERNAME LIKE SY-UNAME DEFAULT SY-UNAME OBLIGATORY.
SELECTION-SCREEN END   OF BLOCK SESS0.
PARAMETERSCONDENS AS CHECKBOX DEFAULT 'X'.
*
DATABEGIN OF XDAT OCCURS 0,
        DAT(1024),
      END   OF XDAT.
*
RANGESR_GRPID FOR APQI-GROUPID,
        R_CREDT FOR APQI-CREDATE,
        R_CREUR FOR APQI-CREATOR.
*
DATAAPQITAB LIKE APQI OCCURS WITH HEADER LINE,
      RECORDING_TYPE LIKE APQI-DATATYP VALUE '%BDC'.
*
DATAINDATA(1024OCCURS WITH HEADER LINE.
*
DATALEN TYPE I,
      N   TYPE I,
      O   TYPE I,
     SEQ  TYPE I,
     DAT(128),
     CH.
*
DATABEGIN OF TAB,
*         t TYPE x VALUE '09',
         T TYPE C,
      END   OF TAB.
*
DATABDC_VALUE(128OCCURS WITH HEADER LINE,
      BDC_INDEX      TYPE I,
      BDC_COUNT      TYPE I.
DATA  TRANCODE LIKE TSTC-TCODE.
DATAFIELDNAME,
      START,
      END,
      DATA.
*
DATALIKE D020S,
      F LIKE D021S OCCURS WITH HEADER LINE,
      E LIKE D022S OCCURS WITH HEADER LINE,
      LIKE D023S OCCURS WITH HEADER LINE.
*
DATABEGIN OF DYNP,
        PROG LIKE D020S-PROG,
        DNUM LIKE D020S-DNUM,
      END OF DYNP.
*
DATAP_EXCELP_TAB.
TABLESSSCRFIELDS.
DATAG_FNAME LIKE RLGRAP-FILENAME,
      G_MASK(20)   VALUE ',*.*,*.*.',
      G_MODE_OPEN  VALUE 'O',
      G_TITLE(30)  VALUE 'FileUploadDialog'.
*
* for excel
TYPE-POOLSOLE2.
*
DATAXL_ROW    TYPE I,
      XL_COLUMN TYPE I.
DATAE_FONT(20VALUE '굴림',
      E_SIZE TYPE VALUE 12.
DATAE_SHEET_NO   TYPE VALUE 1,
      E_SHEET_NAME(20VALUE 'TEST',
      XL_TITLE(100).
*
* Automation EXCEL
DATAEXCEL TYPE OLE2_OBJECTBOOKS  TYPE OLE2_OBJECT,
      BOOK  TYPE OLE2_OBJECTSHEETS TYPE OLE2_OBJECT,
      SHEET TYPE OLE2_OBJECTCELLS  TYPE OLE2_OBJECT,
      CELL  TYPE OLE2_OBJECTAPPL   TYPE OLE2_OBJECT,
      FONT  TYPE OLE2_OBJECT.
*
AT SELECTION-SCREEN OUTPUT.
*
  GET PARAMETER ID 'DLP' FIELD P_RFILE.
  GET PARAMETER ID 'DLF' FIELD P_FNAME.
*
INITIALIZATION.
*
*  bdcgroup = 'ZBDCGROUP'.
  USERNAME SY-UNAME.
  T_DMODE  'Run mode'.
  T_UMODE  'Update mode'.
  T_TRAN   'Call transaction'.
  T_SES    'Generate session'.
  T_GRPID  'Recording'.
  T_CREDT  'Created on'.
  T_CREUR  'Created by'.
  T_FRPC   'From PC'.
  T_FRSR   'From Server'.
  T_FNAME  'Path: file name of the BDC data'.
  T_FSCR0  'BDC data'.
  T_RECO0  'Selection for Recording'.
  T_SESS0  'Processing type'.
  T_DEFLT  'Default Value - Use no space RECORDING field value'.
  T_NULTXT 'Null indicator'.
  T_RFILE  'External recording file'.
*
  GET PARAMETER ID 'DLP' FIELD P_RFILE.
  GET PARAMETER ID 'DLF' FIELD P_FNAME.
*
START-OF-SELECTION.
*
  DATAL_TAB(10)L_CHAR_TAB(10).
*
  MOVE '\X\09' TO L_TAB.
*
  CALL FUNCTION 'STPU1_HEX_TO_CHAR'
    EXPORTING
      HEX_STRING  L_TAB
    IMPORTING
      CHAR_STRING L_CHAR_TAB.
*
  MOVE L_CHAR_TAB TO TAB.
*
  IF P_GRPID IS INITIAL AND
     P_RFILE IS INITIAL.
    MESSAGE S208(00WITH
       'Enter the Recording name or Ext.Recording file name'.
    EXIT.
  ENDIF.
*
  IF X_SES 'X' AND BDCGROUP IS INITIAL.
    MESSAGE S208(00WITH 'Enter the BDCGROUP Name'.
    LEAVE LIST-PROCESSING.
  ENDIF.
*
  IF NOT P_GRPID IS INITIAL.
    PERFORM SET_SELECT_OPTIONS.
    SELECT FROM APQI INTO TABLE APQITAB
             WHERE GROUPID  IN R_GRPID
               AND CREDATE  IN R_CREDT
               AND DATATYP  RECORDING_TYPE
               AND MANDANT  P_MANDT
               AND CREATOR  IN R_CREUR
             ORDER BY CREDATE DESCENDING CRETIME DESCENDING.
  ENDIF.
  IF NOT P_RFILE IS INITIAL AND SY-DBCNT 0.
    PERFORM UPLOAD_THE_RECORDING.
  ENDIF.
*
  DESCRIBE TABLE APQITAB LINES SY-TFILL.
  IF SY-TFILL 0.
    MESSAGE S208(00WITH 'Not found recording !'.
    EXIT.
  ENDIF.
*
  FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
*
  LOOP AT APQITAB.
    WRITE/1 SY-VLINE,
             (6APQITAB-MANDANT,  SY-VLINE,
            (12APQITAB-GROUPID,  SY-VLINE,
            (10APQITAB-CREDATE,  SY-VLINE,
             (8APQITAB-CRETIME,  SY-VLINE,
            (12APQITAB-CREATOR,  SY-VLINE,
             (5APQITAB-TRANSCNTSY-VLINE,
             (5APQITAB-MSGCNT,   SY-VLINE.
    APQI APQITAB.
    HIDEAPQI-GROUPIDAPQI-QIDAPQI-MANDANTAPQITAB.
  ENDLOOP.
  ULINE.
  CLEAR APQITAB.
*
*
TOP-OF-PAGE.
*
  FORMAT COLOR COL_HEADING.
  ULINE.
  WRITE/1 SY-VLINE,
           (6'Client',     SY-VLINE,
          (12'Recording',  SY-VLINE,
          (10'Date',       SY-VLINE,
           (8'Time',       SY-VLINE,
          (12'Created by'SY-VLINE,
           (5'Trans',      SY-VLINE,
           (5'Scrn',       SY-VLINE.
  ULINE.
*
AT LINE-SELECTION.
*
  IF SY-LSIND 1.
    CHECK NOT APQI-GROUPID IS INITIAL.
    CLEAR ICODE.
    PERFORM PUT_SCREEN_TEMPLATE.
    CLEAR ICODE.
  ELSEIF SY-LSIND 2.
    CLEAR ICODE.
    GET CURSOR FIELD ICODE.
*
    IF ICODE 'UPLOAD' OR ICODE 'TESTING' OR ICODE 'TESTONE'.
      PERFORM UPLOAD_DATA.
      DESCRIBE TABLE INDATA LINES SY-TFILL.
      IF SY-TFILL > 0.
        PERFORM MAKE_BDC_DATA.
      ENDIF.
    ELSEIF ICODE 'SESSION'.
      PERFORM PROCESS_SESSION.
    ELSEIF ICODE 'MAKETEMP'.
      PERFORM MAKE_TEMPLATE_IN_EXCEL.
*      PERFORM save_recording.
    ELSEIF ICODE 'CLIP'.
      PERFORM PASTE_FROM_CLIP.
      DESCRIBE TABLE INDATA LINES SY-TFILL.
      MOVE 'UPLOAD' TO ICODE.
      IF SY-TFILL > 0.
        PERFORM MAKE_BDC_DATA.
      ENDIF.
    ENDIF.
  ENDIF.
*
*&---------------------------------------------------------------------*
*&      Form  put_screen_template
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PUT_SCREEN_TEMPLATE.
*
  DATAL_ALPHA(2)L_HEX(10)L_X1(4)L_X2(4)L_CHAR(10).
*
  REFRESHFTEXTFNAM.
  CLEAR FNAM.
  CLEAR DYN_ORDER.
*
  ALPHA-X1 65.
  ALPHA-X2 32.
*
  IF ICODE IS INITIAL AND NOT P_GRPID IS INITIAL.
    CALL FUNCTION 'BDC_OBJECT_READ'
      EXPORTING
        QUEUE_ID  APQI-QID
        DATATYPE  RECORDING_TYPE
*       TRANS     = apqi-TRANS
      TABLES
        DYNPROTAB DYNFLOW
      EXCEPTIONS
        NOT_FOUND 1
        OTHERS    99.
    IF SY-SUBRC <> 0.
      MESSAGE S208(00WITH 'Cannot get the Recoreing info.'.
      EXIT.
    ENDIF.
  ENDIF.
*
  NEW-PAGE LINE-SIZE 120.
*
  WRITE /1  UPLOAD  COLOR HOTSPOT.
  IF X_TRAN 'X'.
    WRITETESTONE    COLOR HOTSPOT.
  ENDIF.
  WRITETESTING      COLOR HOTSPOT.
  WRITECLIP         COLOR HOTSPOT QUICKINFO 'From Clipboard'.
  WRITEMAKETEMP     COLOR HOTSPOT.
*
  ULINE.
  FORMAT COLOR COL_HEADING INTENSIFIED OFF.
* Recording Name
  WRITE AT /1(SY-LINSZ'Recording   :',
             15  APQI-GROUPID.
*
  ULINE.
*
  LOOP AT DYNFLOW.
    DYN_TABIX SY-TABIX.
*   tcode line
    IF DYNFLOW-DYNBEGIN 'T'.         " Tcode
      TSTCT-TCODE DYNFLOW-FNAM.
      TRANCODE    TSTCT-TCODE.
      SELECT SINGLE FROM TSTCT WHERE SPRSL SY-LANGU
                                   AND TCODE TSTCT-TCODE.
      FORMAT COLOR COL_KEY.
      WRITE AT /1(SY-LINSZ'Transaction :'.
      WRITE:     15 TSTCT-TCODE,
                    TSTCT-TTEXT.
      ULINE.
*   start screen
    ELSEIF DYNFLOW-DYNBEGIN 'X'.
      PRG_DYN    DYNP-PROG DYNFLOW-PROGRAM.
      PRG_DYN+41 DYNP-DNUM DYNFLOW-DYNPRO.
      IMPORT DYNPRO H F E ID DYNP.
      CONDENSE PRG_DYN.
      FORMAT COLOR COL_GROUP.
      WRITE AT /1(SY-LINSZSPACE,
              PRG_DYN.
    ELSE.
      IF DYNFLOW-FNAM(4NE 'BDC_' OR
         DYNFLOW-FNAM 'BDC_OKCODE'.
*       NOT use default and have value
*       Increase Column order
        IF DYNFLOW-FNAM NE 'BDC_OKCODE'.
          IF NOT X_DEFLT 'X' AND DYNFLOW-FVAL NE SPACE ).
            IF ALPHA-X2 32.
              ALPHA-X1 ALPHA-X1 + 1.
              IF ALPHA-X1 > 90.
                IF ALPHA-X2 32.
                  ALPHA-X1 ALPHA-X2 65.
                ENDIF.
              ENDIF.
            ELSE.
              ALPHA-X2 ALPHA-X2 + 1.
              IF ALPHA-X2 > 90.
                ALPHA-X1 ALPHA-X1 + 1.
                ALPHA-X2 65.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.
*
        CLEAR DFIES-FIELDTEXT.
        IF DYNFLOW-FNAM 'BDC_OKCODE'.
          DFIES-FIELDTEXT 'F_CODE'.
          FORMAT COLOR COL_GROUP.
        ELSE.
          FORMAT COLOR COL_NORMAL.
          PERFORM GET_FIELDNAME.
        ENDIF.
*
        WRITEALPHA-X1 TO L_X1,
               ALPHA-X2 TO L_X2.
        CONCATENATE '\X\' L_X1
                    '\X\' L_X2 INTO L_HEX.

        CALL FUNCTION 'STPU1_HEX_TO_CHAR'
          EXPORTING
            HEX_STRING  L_HEX
          IMPORTING
            CHAR_STRING L_CHAR.
*
        MOVE L_CHAR TO L_ALPHA.
*
        WRITE/6 DYNFLOW-FNAM(25COLOR COL_POSITIVE,
               31 DFIES-FIELDTEXT(30).
        IF DYNFLOW-FNAM 'BDC_OKCODE'.
          DATALEN TYPE IPOS TYPE I.
        ELSEIF X_DEFLT 'X' AND DYNFLOW-FVAL NE SPACE ).
          WRITE 61(5'.'.
        ELSE.
          WRITE:61(5L_ALPHA COLOR COL_TOTAL.
          ADD TO FNAM-ORDER.
          MOVE DYNFLOW-FNAM  TO FNAM-FNAM.
          APPEND FNAM.
        ENDIF.
*
        IF ICODE 'TESTING'.
          READ TABLE SAV_DF INDEX DYN_TABIX.
          DYNFLOW-FVAL SAV_DF-FVAL.
        ENDIF.
*
        IF DYNFLOW-FNAM 'BDC_OKCODE'.
          WRITE66 DYNFLOW-FVAL.
*          len = STRLEN( dynflow-fval ).
          LEN 6.
          POS 66 + LEN + 1.
          WRITE AT POS(1F_TEST
            QUICKINFO 'Test Function'
            INPUT COLOR COL_NEGATIVE.
        ELSE.
          WRITE66 DYNFLOW-FVAL.
        ENDIF.
        HIDEDYN_TABIX.
*
      ENDIF.
    ENDIF.
  ENDLOOP.
ENDFORM.                               " put_screen_template
*&---------------------------------------------------------------------*
*&      Form  upload_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UPLOAD_DATA.
*
  IF P_FRPC 'X'.
    PERFORM CALL_OPEN_DIALOG.
    IF SY-SUBRC 0.
      PERFORM SET_EXTENSION.
      IF P_EXCEL 'X'.
        PERFORM UPLOAD_EXCEL.
      ELSEIF P_TAB 'X'.
        PERFORM WS_UPLOAD.
      ENDIF.
    ENDIF.
  ELSE.
    DATAOPEN_MSG(80).
    OPEN DATASET P_FNAME FOR INPUT IN TEXT MODE
                         ENCODING DEFAULT MESSAGE OPEN_MSG.
    IF SY-SUBRC NE 0.
      MESSAGE S453(00WITH 'Data Open error :' OPEN_MSG.
      EXIT.
    ENDIF.
*
    MESSAGE S453(00WITH 'Reading...' SPACE.
    DO.
      READ DATASET P_FNAME INTO INDATA.
      IF SY-SUBRC NE 0EXITENDIF.
      APPEND INDATA.
    ENDDO.
    CLOSE DATASET P_FNAME.
  ENDIF.
*
  SET PARAMETER ID 'DLF' FIELD P_FNAME.
*
ENDFORM.                               " upload_data
*&---------------------------------------------------------------------*
*&      Form  make_bdc_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAKE_BDC_DATA.
*
  PERFORM READ_INPUT_VALUE_FROM_LIST.
*
  CLEAR BDC_COUNT.
  CLEAR:STARTENDDATAFIELDNAME.
*
  IF ICODE 'UPLOAD' OR ICODE 'TESTONE' OR ICODE 'CLIP'.
    NEW-PAGE LINE-SIZE 255.
  ENDIF.
*
  LOOP AT INDATA.
    IF INDATA(1'*'.                "comment row
      CONTINUE.
    ENDIF.
*
    IF INDATA(9'STARTDATA'.        "data start row
      START 'X'.
      DATA  'X'.
      IF FIELDNAME SPACE.
        FORD[] FNAM[].
      ENDIF.
      CLEAR FIELDNAME.
    ENDIF.
*
    IF INDATA(7'ENDDATA'.          "data finished row
      END 'X'.
    ENDIF.
*
    IF INDATA(9'FIELDNAME'.
      FIELDNAME 'X'.
    ENDIF.
*
    CHECK DATA      'X' OR
          FIELDNAME 'X'.
*
    LEN STRLENINDATA ).
    CLEARN,O,SEQ,DAT.
    REFRESH BDC_VALUE.
    DO.
      IF => LEN.
        EXIT.
      ENDIF.
*
      CH INDATA+N(1).
      IF CH TAB.
        SEQ SEQ + 1.
        PERFORM MOVE_BDC.
        ADD TO N.
        CLEARODAT.
      ELSE.
        DAT+O(1INDATA+N(1).
        ADD TOON.
      ENDIF.
    ENDDO.
*
    SEQ SEQ + 1.
    PERFORM MOVE_BDC.
    CLEAR DAT.
*
    IF DATA 'X'.
      PERFORM APPEND_TO_BDC.
    ENDIF.
*
    IF END 'X' OR
      ICODE NE 'UPLOAD' AND ICODE NE 'CLIP' )
        AND START 'X' ).
      EXIT.
    ENDIF.
  ENDLOOP.
*
  PERFORM CLOSE_BDC_GROUP.
*
  IF START IS INITIAL.
    WRITE'ERROR :' COLOR COL_NEGATIVE,
             'I Can''t found the ''STARTDATA'' tag.'.
  ENDIF.
*
  IF SY-SUBRC 0.
    IF ICODE 'UPLOAD' OR
         ICODE 'CLIP' AND X_SES 'X'.
      WRITE/ SESSION COLOR HOTSPOT.
      ULINE.
      WRITE'BDC session created.',
             / SY-ULINE,
             / 'BDC session :'BDCGROUP,
             / 'BDC Count   :'BDC_COUNT.
    ELSEIF ICODE 'TESTING'.
      PERFORM PUT_SCREEN_TEMPLATE.
      SY-LSIND SY-LSIND 1.
    ENDIF.
  ENDIF.
*
  REFRESH INDATA.
*
ENDFORM.                               " make_bdc_data
*&---------------------------------------------------------------------*
*&      Form  move_bdc
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MOVE_BDC.
*
  CLEAR FORD.
*
  CHECK SEQ > 1.
  IF DATA 'X'.  "DATA line
    BDC_VALUE DAT.
    IF CONDENS 'X'.
      CONDENSE BDC_VALUE.
    ENDIF.
    APPEND BDC_VALUE.
  ELSEIF FIELDNAME 'X'.
    BDC_VALUE DAT.
    CONDENSE BDC_VALUE.
    READ TABLE FNAM WITH KEY FNAM BDC_VALUE.
    IF SY-SUBRC 0.
      FORD-ORDER FNAM-ORDER.
      FORD-FNAM  FNAM-FNAM.
      APPEND FORD.
*      MODIFY fnam INDEX sy-tabix TRANSPORTING order.
    ELSE.
      FORD-FNAM  BDC_VALUE.
      FORD-ORDER SEQ 1.
      APPEND FORD.
    ENDIF.
  ENDIF.
ENDFORM.                               " move_bdc
*&---------------------------------------------------------------------*
*&      Form  append_to_bdc
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM APPEND_TO_BDC.
*
  CLEARBDC_VALUEBDC_INDEX.
  REFRESH BDC_DATA.
*
  LOOP AT DYNFLOW.
*
    MOVE SY-TABIX TO DYN_TABIX.
*
    IF DYNFLOW-DYNBEGIN 'T'.
      CONTINUE.
    ENDIF.
*
    BDC_DATA DYNFLOW.
    IF BDC_DATA-DYNBEGIN 'X' OR     "Start of Screen
       BDC_DATA-FNAM(4)  'BDC_'.    "BDC_... fields
*     delete okcode for test
      READ TABLE MOD_FCODE WITH KEY TABIX DYN_TABIX.
      IF SY-SUBRC AND MOD_FCODE-F_TEST NODATA.
        MOVE '/N' TO BDC_DATA-FVAL.
      ENDIF.
*
      APPEND BDC_DATA.
      CONTINUE.
    ENDIF.
*
    IF X_DEFLT 'X' AND NOT BDC_DATA-FVAL IS INITIAL.
      APPEND BDC_DATA.
      CONTINUE.
    ENDIF.
*
    ADD TO BDC_INDEX.
    READ TABLE FORD INDEX BDC_INDEX.
    IF SY-SUBRC 0.
      READ TABLE BDC_VALUE INDEX FORD-ORDER.
      IF SY-SUBRC NE 0.
        CLEAR BDC_VALUE.
      ENDIF.
    ENDIF.
    IF BDC_VALUE '!'.                " null field
      CONTINUE.
    ENDIF.
*
    BDC_DATA-FVAL BDC_VALUE.
    APPEND BDC_DATA.
  ENDLOOP.
*
  IF ICODE 'TESTING'.
    CLEAR BDC_INDEX.
    REFRESH SAV_DF.
    CLEAR SAV_DF.
    LOOP AT DYNFLOW INTO SAV_DF.
      IF SAV_DF-DYNBEGIN 'T'.
        APPEND SAV_DF.
        CONTINUE.
      ENDIF.
*
      IF SAV_DF-DYNBEGIN 'X' OR
         SAV_DF-FNAM(4)  'BDC_'.
        APPEND SAV_DF.
        CONTINUE.
      ENDIF.
*
      IF X_DEFLT 'X' AND NOT SAV_DF-FVAL IS INITIAL.
        APPEND SAV_DF.
        CONTINUE.
      ENDIF.
*
      ADD TO BDC_INDEX.
      READ TABLE FORD INDEX BDC_INDEX.
      IF SY-SUBRC 0.
        READ TABLE BDC_VALUE INDEX FORD-ORDER.
        IF SY-SUBRC NE 0.
          BDC_VALUE '!!'.
        ENDIF.
      ELSE.
        BDC_VALUE '!!'.
      ENDIF.
      IF BDC_VALUE X_NULIND OR       " null field
         BDC_VALUE '!!'.
        SAV_DF-FVAL '<Null>'.
        APPEND SAV_DF.
        CLEAR SAV_DF.
        CONTINUE.
      ENDIF.
      SAV_DF-FVAL BDC_VALUE.
      APPEND SAV_DF.
    ENDLOOP.
  ENDIF.
*
  ADD TO BDC_COUNT.
*
  IF BDC_COUNT AND ICODE 'UPLOAD'.
    PERFORM OPEN_BDC_GROUP.
  ENDIF.
*
  IF X_SES 'X'.
    IF ICODE 'UPLOAD' OR ICODE 'CLIP'.
      PERFORM BDC_INSERT.
    ENDIF.
  ELSEIF ICODE 'TESTONE' OR ICODE 'UPLOAD'
                           OR ICODE 'CLIP'.
    CCODE(1TAB.
    TRANSLATE INDATA USING CCODE.
    FORMAT COLOR COL_KEY INTENSIFIED OFF.
    WRITE/(5BDC_COUNT INDATA(120).
*   call transaction
    PERFORM CALL_TRANSACTION.
  ENDIF.
ENDFORM.                               " append_to_bdc
*&---------------------------------------------------------------------*
*&      Form  open_bdc_group
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM OPEN_BDC_GROUP.
*
  CHECK X_SES 'X'.
*
  CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
      CLIENT              SY-MANDT
      GROUP               BDCGROUP
      USER                USERNAME
      KEEP                'X'
    EXCEPTIONS
      CLIENT_INVALID      1
      DESTINATION_INVALID 2
      GROUP_INVALID       3
      GROUP_IS_LOCKED     4
      HOLDDATE_INVALID    5
      INTERNAL_ERROR      6
      QUEUE_ERROR         7
      RUNNING             8
      SYSTEM_LOCK_ERROR   9
      USER_INVALID        10
      OTHERS              11.
*
  IF SY-SUBRC NE 0.
    MESSAGE E435(00WITH 'BDC GROUP Open Error !'.
  ENDIF.
*
ENDFORM.                               " open_bdc_group
*&---------------------------------------------------------------------*
*&      Form  close_bdc_group
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CLOSE_BDC_GROUP.
*
  CHECK X_SES 'X'.
  CHECK ICODE 'UPLOAD' OR ICODE 'CLIP'.
  CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
      NOT_OPEN    1
      QUEUE_ERROR 2
      OTHERS      3.
*
ENDFORM.                               " close_bdc_group
*&---------------------------------------------------------------------*
*&      Form  set_select_options
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_SELECT_OPTIONS.
*
  IF P_GRPID CP '*'.
    R_GRPID-OPTION 'CP'.
    R_GRPID-SIGN 'I'.
    R_GRPID-LOW P_GRPID.
    APPEND R_GRPID.
  ELSEIF P_GRPID NE SPACE.
    R_GRPID-OPTION 'EQ'.
    R_GRPID-SIGN 'I'.
    R_GRPID-LOW P_GRPID.
    APPEND R_GRPID.
  ENDIF.
*
  IF NOT P_CREDT IS INITIAL.
    R_CREDT-OPTION 'EQ'.
    R_CREDT-SIGN 'I'.
    R_CREDT-LOW P_CREDT.
    APPEND R_CREDT.
  ENDIF.
*
  IF NOT P_CREUR IS INITIAL.
    R_CREUR-OPTION 'EQ'.
    R_CREUR-SIGN 'I'.
    R_CREUR-LOW P_CREUR.
    APPEND R_CREUR.
  ENDIF.
ENDFORM.                               " set_select_options
*&---------------------------------------------------------------------*
*&      Form  PROCESS_SESSION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PROCESS_SESSION.
*
  SET PARAMETER ID 'MPN' FIELD BDCGROUP.
*
  CALL TRANSACTION 'SM35' AND SKIP FIRST SCREEN.

ENDFORM.                               " PROCESS_SESSION
*&---------------------------------------------------------------------*
*&      Form  GET_FIELDNAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_FIELDNAME.
*
  DATAT_LINE_NR(4).
*
  CLEAR FTEXT.
*
  F-ITYP '2'.
  F-FNAM DYNFLOW-FNAM.
  READ TABLE WITH KEY FNAM F-FNAM
                        ITYP F-ITYP.
*
*  IF sy-subrc = 0 AND f-stxt NE space.
*    dfies-fieldtext = f-stxt.
*    EXIT.
*  ENDIF.
*
  IF DYNFLOW-FNAM CA '-'.
    X031L-TABNAME   DYNFLOW-FNAM(SY-FDPOS).
    SY-FDPOS SY-FDPOS + 1.
    X031L-FIELDNAME DYNFLOW-FNAM+SY-FDPOS.
  ELSE.
    CLEAR SY-FDPOS.
    CLEAR X031L-FIELDNAME.
    X031L-FIELDNAME DYNFLOW-FNAM+SY-FDPOS.
  ENDIF.
*
  CLEAR T_LINE_NR.
  IF X031L-FIELDNAME CA '('.
    T_LINE_NR X031L-FIELDNAME+SY-FDPOS.
    X031L-FIELDNAME X031L-FIELDNAME(SY-FDPOS).
  ENDIF.
*
  READTYPE 'X'.
  CLEAR DFIES.
*
  DO.
    CALL 'C_DD_READ_FIELD'
         ID 'TYPE'      FIELD READTYPE
         ID 'TABNAME'   FIELD X031L-TABNAME
         ID 'FIELDNAME' FIELD X031L-FIELDNAME
         ID 'LANGUAGE'  FIELD SY-LANGU.
    IF SY-SUBRC 0EXITENDIF.
    IF READTYPE SPACEEXITENDIF.
    CLEAR READTYPE.
  ENDDO.
*
  MOVE DFIES-OUTPUTLEN TO FTEXT-OUTPUTLEN.
  MOVE DFIES-SCRTEXT_S TO FTEXT-SCRTEXT_S.
  MOVE DFIES-SCRTEXT_M TO FTEXT-SCRTEXT_M.
  MOVE DFIES-SCRTEXT_L TO FTEXT-SCRTEXT_L.
  MOVE DYN_TABIX       TO FTEXT-TABIX.
  MOVE T_LINE_NR       TO FTEXT-LINENO.
  APPEND FTEXT.
*
ENDFORM.                               " GET_FIELDNAME
*&---------------------------------------------------------------------*
*&      Form  BDC_INSERT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BDC_INSERT.
*
  CALL FUNCTION 'BDC_INSERT'
    EXPORTING
      TCODE          TRANCODE
    TABLES
      DYNPROTAB      BDC_DATA
    EXCEPTIONS
      INTERNAL_ERROR 1
      NOT_OPEN       2
      QUEUE_ERROR    3
      TCODE_INVALID  4
      OTHERS         5.
*
  IF SY-SUBRC NE 0.
    MESSAGE E435(00WITH 'BDC INSERT Error !'.
  ENDIF.
ENDFORM.                               " BDC_INSERT
*&---------------------------------------------------------------------*
*&      Form  CALL_TRANSACTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALL_TRANSACTION.
*
  DATAW_DMODE LIKE CTU_PARAMS-DISMODE VALUE 'A'.
*
  IF ICODE 'UPLOAD'.
    W_DMODE DMODE.
  ENDIF.
*
  REFRESH MESSTAB.
*
  BDC_PARAMS-DISMODE  W_DMODE.
  BDC_PARAMS-UPDMODE  UMODE.
  BDC_PARAMS-CATTMODE SPACE.
  BDC_PARAMS-DEFSIZE  'X'.
  BDC_PARAMS-RACOMMIT SPACE.
  BDC_PARAMS-NOBINPT  SPACE.
  BDC_PARAMS-NOBIEND  SPACE.
*
  CALL TRANSACTION TRANCODE USING BDC_DATA
                     OPTIONS    FROM BDC_PARAMS
*                   MODE     w_dmode
*                   UPDATE   umode
                   MESSAGES INTO MESSTAB.
*
  TRAN_SUBRC SY-SUBRC.
*
  PERFORM WRITE_MESSAGE TABLES MESSTAB.
*
ENDFORM.                               " CALL_TRANSACTION
*&---------------------------------------------------------------------*
*&      Form  WRITE_MESSAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_MESSTAB  text
*----------------------------------------------------------------------*
FORM WRITE_MESSAGE TABLES   P_MESSTAB STRUCTURE MESSTAB.
*
  DATAMSG_TYPE(10).
*
  LOOP AT P_MESSTAB.
    SELECT SINGLE FROM T100 WHERE SPRSL P_MESSTAB-MSGSPRA
                              AND   ARBGB P_MESSTAB-MSGID
                              AND   MSGNR P_MESSTAB-MSGNR.
    CASE P_MESSTAB-MSGTYP.
      WHEN 'E'.
        FORMAT COLOR COL_NEGATIVE  INTENSIFIED OFF.
        MOVE '<EEEEE>' TO MSG_TYPE.
      WHEN 'W'.
        FORMAT COLOR COL_TOTAL     INTENSIFIED ON.
        MOVE '<WWWWW>' TO MSG_TYPE.
      WHEN 'S'.
        FORMAT COLOR COL_POSITIVE  INTENSIFIED OFF.
        MOVE '<SSSSS>' TO MSG_TYPE.
      WHEN 'I'.
        FORMAT COLOR COL_NORMAL    INTENSIFIED OFF.
        MOVE '<IIIII>' TO MSG_TYPE.
      WHEN 'A'.
        FORMAT COLOR COL_GROUP     INTENSIFIED ON.
        MOVE '<AAAAA>' TO MSG_TYPE.
        IF P_MESSTAB-MSGNR '359' AND
           P_MESSTAB-MSGID '00'.
          CONTINUE.
        ENDIF.
      WHEN 'X'.
        FORMAT COLOR COL_GROUP     INTENSIFIED ON.
        MOVE '<XXXXX>' TO MSG_TYPE.
      WHEN OTHERS.
        FORMAT COLOR COL_BACKGROUND INTENSIFIED ON.
        MOVE '<?????>' TO MSG_TYPE.
    ENDCASE.
*
    IF SY-SUBRC 0.
      L_MSTRING T100-TEXT.
      IF L_MSTRING CS '&1'.
        REPLACE '&1' WITH P_MESSTAB-MSGV1 INTO L_MSTRING.
        REPLACE '&2' WITH P_MESSTAB-MSGV2 INTO L_MSTRING.
        REPLACE '&3' WITH P_MESSTAB-MSGV3 INTO L_MSTRING.
        REPLACE '&4' WITH P_MESSTAB-MSGV4 INTO L_MSTRING.
      ELSE.
        REPLACE '&' WITH P_MESSTAB-MSGV1 INTO L_MSTRING.
        REPLACE '&' WITH P_MESSTAB-MSGV2 INTO L_MSTRING.
        REPLACE '&' WITH P_MESSTAB-MSGV3 INTO L_MSTRING.
        REPLACE '&' WITH P_MESSTAB-MSGV4 INTO L_MSTRING.
      ENDIF.
      CONDENSE L_MSTRING.
      WRITE/11 MSG_TYPEP_MESSTAB-MSGID(4),
                           P_MESSTAB-MSGNRL_MSTRING(120).
    ELSE.
      WRITE/11 MSG_TYPEP_MESSTAB-MSGID(4),
                           P_MESSTAB-MSGNR.
    ENDIF.
  ENDLOOP.
  IF TRAN_SUBRC NE 0.
    IF F_TEST IS INITIAL.
      FORMAT COLOR COL_NEGATIVE  INTENSIFIED OFF.
      WRITE/11 'TRAN_SUBRC:'TRAN_SUBRC.
    ELSE.
      FORMAT COLOR COL_TOTAL  INTENSIFIED OFF.
      WRITE/11 '<TESTMODE>:'TRAN_SUBRC.
    ENDIF.
  ENDIF.
ENDFORM.                               " WRITE_MESSAGE
*&---------------------------------------------------------------------*
*&      Form  SAVE_RECORDING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SAVE_RECORDING.
*
*  APPEND apgitab TO xdat.
*
*  LOOP AT dynflow.
*    xdat = dynflow. APPEND xdat.
*  ENDLOOP.
*
*  CALL FUNCTION 'DOWNLOAD'
*    EXPORTING
*      filename     = filename
*      filetype     = filetype
*    IMPORTING
*      act_filename = act_filename
*      filesize     = filesize
*    TABLES
*      data_tab     = xdat.
*
*  IF filesize > 0.
*    MESSAGE i208(00) WITH 'Donwload finished.'.
*  ENDIF.
  MESSAGE I208(00WITH 'Not Supported.'.
ENDFORM.                               " SAVE_RECORDING
*&---------------------------------------------------------------------*
*&      Form  UPLOAD_THE_RECORDING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UPLOAD_THE_RECORDING.
*
  MESSAGE I398(00WITH 'Not Supported.'.
*
  EXIT.
*
  FILENAME P_RFILE.
*
  CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
      FILENAME         FILENAME
      FILETYPE         'ASC'
    IMPORTING
      FILELENGTH       FILESIZE
    TABLES
      DATA_TAB         XDAT
    EXCEPTIONS
      FILE_OPEN_ERROR  1
      FILE_WRITE_ERROR 2.
*
  IF FILESIZE 0.
    CALL FUNCTION 'UPLOAD'
      EXPORTING
        FILENAME     FILENAME
        FILETYPE     FILETYPE
      IMPORTING
        ACT_FILENAME ACT_FILENAME
        FILESIZE     FILESIZE
      TABLES
        DATA_TAB     XDAT.
  ENDIF.
  P_RFILE ACT_FILENAME.
  SET PARAMETER ID 'DLP' FIELD P_RFILE.
*
*  IF filesize > 0.
*    LOOP AT xdat.
*      IF sy-tabix = 1.
*        apqitab = xdat.
*        IF apqitab-datatyp = '%BDC'.
*          APPEND apqitab.
*        ENDIF.
*        CONTINUE.
*      ENDIF.
*      dynflow = xdat.    APPEND dynflow.
*    ENDLOOP.
*    CLEAR p_grpid.
*  ENDIF.
*  REFRESH xdat.
ENDFORM.                               " UPLOAD_THE_RECORDING
*----------------------------------------------------------------------
*&---------------------------------------------------------------------*
*&      Form  call_open_dialog
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALL_OPEN_DIALOG .
*
  IF P_FNAME <> SPACE.
    MOVE P_FNAME TO G_FNAME.
    SET PARAMETER ID 'GR9' FIELD G_FNAME"Upload path
  ELSE.

  ENDIF.
*
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      DEF_FILENAME     G_FNAME
      MASK             G_MASK
      MODE             G_MODE_OPEN
      TITLE            G_TITLE
    IMPORTING
      FILENAME         G_FNAME
    EXCEPTIONS
      INV_WINSYS       01
      NO_BATCH         02
      SELECTION_CANCEL 03
      SELECTION_ERROR  04.
*
  IF SY-SUBRC AND G_FNAME <> SPACE.
    P_FNAME G_FNAME.
    SET PARAMETER ID 'GR9' FIELD G_FNAME"Upload path
  ELSE.
  ENDIF.
*
ENDFORM.                    " call_open_dialog
*&---------------------------------------------------------------------*
*&      Form  set_extension
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_EXTENSION .
  DATAL_LEN TYPE I,
        L_PF_FILE LIKE DRAW-FILEP,
        L_EXT(30).

  L_PF_FILE P_FNAME.

  CALL FUNCTION 'CV120_SPLIT_FILE'
    EXPORTING
      PF_FILE          L_PF_FILE
    IMPORTING
*     PFX_FILE         =
*     PFX_EXTENSION    = L_EXTENSION
      PFX_DOTEXTENSION L_EXT.

  TRANSLATE L_EXT TO UPPER CASE.

  IF L_EXT '.TXT'.
    CLEAR P_EXCEL.
    MOVE 'X' TO P_TAB.
  ELSEIF L_EXT '.XLS' OR
         L_EXT '.XLSX'.
    CLEAR P_TAB.
    MOVE 'X' TO P_EXCEL.
  ELSE.
    CLEARP_EXCELP_TAB.
  ENDIF.

*  L_LEN = STRLEN( P_FNAME ).
*  IF L_LEN > 4.
*    L_LEN = L_LEN - 4.
*    EXT = P_FNAME+L_LEN(4).
*    TRANSLATE EXT TO UPPER CASE.
*    IF EXT = '.TXT'.
*      CLEAR P_EXCEL.
*      MOVE 'X' TO P_TAB.
*    ELSEIF EXT = '.XLS' OR
*           EXT = '.XLSX'.
*      CLEAR P_TAB.
*      MOVE 'X' TO P_EXCEL.
*    ELSE.
*      CLEAR: P_EXCEL, P_TAB.
*    ENDIF.
*  ENDIF.
*
ENDFORM.                    " set_extension
*&---------------------------------------------------------------------*
*&      Form  WS_UPLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WS_UPLOAD .
*
  DATAACT_FILENAME LIKE RLGRAP-FILENAME,
        F_LEN TYPE I.
*
  REFRESH INDATA.
*
  CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
      FILENAME                P_FNAME
      FILETYPE                'ASC'
    IMPORTING
      FILELENGTH              F_LEN
    TABLES
      DATA_TAB                INDATA
    EXCEPTIONS
      CONVERSION_ERROR        1
      INVALID_TABLE_WIDTH     2
      INVALID_TYPE            3
      NO_BATCH                4
      GUI_REFUSE_FILETRANSFER 5
      UNKNOWN_ERROR           6
      OTHERS                  7.
*
  IF SY-SUBRC NE 0.
    MESSAGE I398(00WITH 'Data Open error'.
  ENDIF.
ENDFORM.                    " WS_UPLOAD
*&---------------------------------------------------------------------*
*&      Form  UPLOAD_EXCEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UPLOAD_EXCEL .
*
  DATA EXDAT LIKE ALSMEX_TABLINE OCCURS WITH HEADER LINE.
  DATA E_SRT_COL   TYPE VALUE 1,
         E_SRT_ROW   TYPE VALUE 1,
         E_END_COL   TYPE VALUE 26,
         E_END_ROW   TYPE VALUE 65536.
*
* UPLOAD EXCEL FILE
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                P_FNAME
      I_BEGIN_COL             E_SRT_COL
      I_BEGIN_ROW             E_SRT_ROW
      I_END_COL               E_END_COL
      I_END_ROW               E_END_ROW
    TABLES
      INTERN                  EXDAT
    EXCEPTIONS
      INCONSISTENT_PARAMETERS 1
      UPLOAD_OLE              2.
*
  IF SY-SUBRC <> 0.
    MESSAGE I398(00WITH 'Data Upload Error !'.
  ENDIF.
*
ENDFORM.                    " UPLOAD_EXCEL
*&---------------------------------------------------------------------*
*&      Form  paste_from_clip
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PASTE_FROM_CLIP .
*
  DATAFILE_TABLE TYPE FILETABLE,
        RC TYPE I,
        FILEDAT TYPE STRING.
  DATAFILE_TABLE_CLIP TYPE STANDARD TABLE OF FILE_TABLE.
*
  DATABEGIN OF FILE_TAB OCCURS 1,
      ZEILE(500TYPE C,
      END OF FILE_TAB.
*
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_IMPORT
    IMPORTING
      DATA                 FILE_TABLE_CLIP
    EXCEPTIONS
      CNTL_ERROR           1
      ERROR_NO_GUI         2
      NOT_SUPPORTED_BY_GUI 3
      OTHERS               4.
  IF SY-SUBRC 3.
    MESSAGE E888(DB)EXIT.
  ELSEIF SY-SUBRC <> 0.
    MESSAGE E889(DB)EXIT.
  ENDIF.

  INDATA[] FILE_TABLE_CLIP[].
*
ENDFORM.                    " paste_from_clip
*&---------------------------------------------------------------------*
*&      Form  read_input_value_from_list
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM READ_INPUT_VALUE_FROM_LIST .
*
  REFRESH MOD_FCODE.
*
  DO.
    CLEARF_TESTDYN_TABIX.
    READ LINE SY-INDEX FIELD VALUE F_TEST DYN_TABIX.
    IF SY-SUBRC NE 0.
      EXIT.
    ENDIF.
    IF F_TEST NODATA.
      MOVE F_TEST    TO MOD_FCODE-F_TEST.
      MOVE DYN_TABIX TO MOD_FCODE-TABIX.
      APPEND MOD_FCODE.
    ENDIF.
  ENDDO.
*
  CLEAR F_TEST.
  DESCRIBE TABLE MOD_FCODE LINES SY-TFILL.
  IF SY-TFILL > 0.
    MOVE 'X' TO F_TEST.
  ENDIF.
ENDFORM.                    " read_input_value_from_list
*&---------------------------------------------------------------------*
*&      Form  make_template_in_excel
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAKE_TEMPLATE_IN_EXCEL .
*
  CREATE OBJECT EXCEL 'EXCEL.APPLICATION'.
*
  CALL METHOD OF
      EXCEL
      'APPLICATION' APPL.
  SET PROPERTY OF APPL 'STANDARDFONT' E_FONT.
  SET PROPERTY OF APPL 'STANDARDFONTSIZE' E_SIZE.
*
  CALL METHOD OF
      EXCEL
      'WORKBOOKS' BOOKS.
  CALL METHOD OF BOOKS 'ADD' BOOK.  "ADD, OPEN
*
  CALL METHOD OF
      BOOK
      'sheets' SHEETS.
  CALL METHOD OF
      SHEETS
      'item' SHEET
    EXPORTING
      #1     1.
  CALL METHOD OF
      SHEET
      'Activate'.
*
  CALL METHOD OF
      SHEET
      'cells' CELLS.
*
  LOOP AT DYNFLOW.
*
    MOVE SY-TABIX TO DYN_TABIX.
*
    IF DYNFLOW-DYNBEGIN 'T'.         " Tcode
*     Write Header Title to Excel
      MOVE DYNFLOW-FNAM TO E_SHEET_NAME.
      SET PROPERTY OF SHEET 'NAME' E_SHEET_NAME" Name of Sheet

      CONCATENATE '*' TSTCT-TTEXT '(TCODE:' TRANCODE ')/'
                  'Recording:' APQI-GROUPID
                  '(' X_DEFLT ')' INTO XL_TITLE.
*
      PERFORM XL_PUT_TO_CELL USING XL_TITLE.
      PERFORM XL_PUT_TO_CELL USING '*Text:'.
      PERFORM XL_PUT_TO_CELL USING 'FIELDNAME'.
*
      PERFORM XL_PUT_TO_CELL USING 4  'STARTDATA'.
      PERFORM XL_PUT_TO_CELL USING 24 'ENDDATA'.
      XL_ROW 2.
      XL_COLUMN 1.
    ELSEIF DYNFLOW-DYNBEGIN SPACE.
*      e_size = 9.
*      SET PROPERTY OF sheet 'STANDARDFONTSIZE' = e_size.
      IF DYNFLOW-FNAM(4NE 'BDC_'.
        IF NOT X_DEFLT 'X' AND DYNFLOW-FVAL NE SPACE ).
          ADD TO XL_COLUMN.
*
          READ TABLE FTEXT WITH KEY TABIX DYN_TABIX.
          IF SY-SUBRC 0.
            IF FTEXT-LINENO NE SPACE.
              CONCATENATE FTEXT-SCRTEXT_M FTEXT-LINENO INTO
FTEXT-SCRTEXT_M.
            ENDIF.
            PERFORM XL_PUT_TO_CELL USING XL_ROW XL_COLUMN
FTEXT-SCRTEXT_M.
          ENDIF.
*
          XL_ROW XL_ROW + 1.
          PERFORM XL_PUT_TO_CELL USING XL_ROW XL_COLUMN DYNFLOW-FNAM.
*
          XL_ROW XL_ROW + 1.
          IF DYNFLOW-FVAL NE SPACE.
            PERFORM XL_PUT_TO_CELL USING XL_ROW XL_COLUMN DYNFLOW-FVAL.
          ENDIF.
          XL_ROW XL_ROW 2.

        ENDIF.
      ENDIF.
    ENDIF.
  ENDLOOP.
*
  SET PROPERTY OF EXCEL 'VISIBLE' 1.
*
  FREE OBJECT CELLS.
  FREE OBJECT SHEET.
  FREE OBJECT SHEETS.
  FREE OBJECT BOOK.
  FREE OBJECT BOOKS.
  FREE OBJECT APPL.
  FREE OBJECT EXCEL.
*
ENDFORM.                    " make_template_in_excel
*
FORM XL_PUT_TO_CELL USING ROW COL VALUE.
* here you get the CELL object
  CALL METHOD OF
      CELLS
      'ITEM' CELL
    EXPORTING
      #1     ROW
      #2     COL.
* here you use the CELL object
  SET PROPERTY OF CELL 'VALUE' VALUE" write VALUE to the excel cell
  GET PROPERTY OF CELL 'FONT'  FONT.
*
  IF ROW 1.
    SET PROPERTY OF FONT 'BOLD' 1.
    SET PROPERTY OF FONT 'SIZE' 14.
  ELSE.
    SET PROPERTY OF FONT 'BOLD' 0.
    SET PROPERTY OF FONT 'SIZE' 9.
  ENDIF.
*
  FREE OBJECT CELL.
  FREE OBJECT FONT.
*
ENDFORM.                    "FILL_CELL

댓글 없음:

댓글 쓰기