2017년 1월 30일 월요일

ZBDCTOOL_FROM_TXT

REPORT ZBDCTOOL LINE-COUNT 0 LINE-SIZE 80
       NO STANDARD PAGE HEADING.
*-----------------------------------------------------------------------
* BDC Data Upload by Recording
*-----------------------------------------------------------------------
*  |*            ; comment
*  |*FIELDNAME   ; field name
*  |*Description ;
*  |STARTDATA    ; data start
*  |
*  |
*  |ENDDATA      ; data end
*-----------------------------------------------------------------------
TABLES: APQI,
        TSTCT,
        DFIES,
        X031L,
        T100.
*
DATA: BDC_PARAMS LIKE CTU_PARAMS.
DATA: DYNFLOW  LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA: SAV_DF   LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA: BDC_DATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA: PRG_DYN(50), ICODE(30).
*
DATA: UPLOAD(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>'.
*
DATA: BEGIN OF ALPHA,
        X1 TYPE HEXTYP VALUE 65,
        X2 TYPE HEXTYP VALUE 32,
      END   OF ALPHA.
DATA  READTYPE.
DATA  F_TEST.    "ok_code for test
DATA: DYN_TABIX LIKE SY-TABIX,
      DYN_ORDER LIKE SY-TABIX.
* function code for test
DATA: BEGIN OF MOD_FCODE OCCURS 10,
        F_TEST,
        TABIX LIKE SY-TABIX,
      END   OF MOD_FCODE.
*
DATA: BEGIN 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.
*
DATA: BEGIN OF FNAM OCCURS 10,
        FNAM LIKE BDCDATA-FNAM,
        ORDER LIKE SY-TABIX,
      END   OF FNAM.
*
DATA: BEGIN OF FORD OCCURS 10,
        FNAM  LIKE BDCDATA-FNAM,
        ORDER LIKE SY-TABIX,
      END   OF FORD.
*
DATA: NODATA VALUE '/'.
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: L_MSTRING(512).
DATA  CCODE(2).
DATA  TRAN_SUBRC TYPE SY-SUBRC.
DATA: FILENAME     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(31) T_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(31) T_CREDT.
PARAMETERS: P_CREDT LIKE APQI-CREDATE.
SELECTION-SCREEN END   OF LINE.
* Created by
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) T_CREUR.
PARAMETERS: P_CREUR LIKE APQI-CREATOR.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN ULINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) T_RFILE.
PARAMETERS: P_RFILE(128) MEMORY 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(15) T_FRPC.
SELECTION-SCREEN END   OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS P_FRSR RADIOBUTTON GROUP FSRC.
SELECTION-SCREEN COMMENT 3(15) T_FRSR.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) T_FNAME.
PARAMETERS: P_FNAME LIKE RLGRAP-FILENAME
*                         DEFAULT 'C:\SAPWorkdir\MAT.TXT'
                         MEMORY ID DLF.
SELECTION-SCREEN END   OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: X_DEFLT  AS CHECKBOX DEFAULT ' '.
SELECTION-SCREEN COMMENT 3(70) T_DEFLT.
SELECTION-SCREEN END   OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) T_NULTXT.
PARAMETERS: X_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.
PARAMETERS: X_TRAN RADIOBUTTON GROUP BTYP.
SELECTION-SCREEN COMMENT 3(20) T_TRAN.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) T_DMODE.
PARAMETERS: DMODE LIKE CTU_PARAMS-DISMODE DEFAULT 'N'.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) T_UMODE.
PARAMETERS: UMODE LIKE CTU_PARAMS-UPDMODE DEFAULT 'S'.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: X_SES RADIOBUTTON GROUP BTYP.
SELECTION-SCREEN COMMENT 3(20) T_SES.
SELECTION-SCREEN END   OF LINE.
PARAMETERS: BDCGROUP(12).
PARAMETERS: USERNAME LIKE SY-UNAME DEFAULT SY-UNAME OBLIGATORY.
SELECTION-SCREEN END   OF BLOCK SESS0.
PARAMETERS: CONDENS AS CHECKBOX DEFAULT 'X'.
*
DATA: BEGIN OF XDAT OCCURS 0,
        DAT(1024),
      END   OF XDAT.
*
RANGES: R_GRPID FOR APQI-GROUPID,
        R_CREDT FOR APQI-CREDATE,
        R_CREUR FOR APQI-CREATOR.
*
DATA: APQITAB LIKE APQI OCCURS 0 WITH HEADER LINE,
      RECORDING_TYPE LIKE APQI-DATATYP VALUE '%BDC'.
*
DATA: INDATA(1024) OCCURS 0 WITH HEADER LINE.
*
DATA: LEN TYPE I,
      N   TYPE I,
      O   TYPE I,
     SEQ  TYPE I,
     DAT(128),
     CH.
*
DATA: BEGIN OF TAB,
*         t TYPE x VALUE '09',
         T TYPE C,
      END   OF TAB.
*
DATA: BDC_VALUE(128) OCCURS 0 WITH HEADER LINE,
      BDC_INDEX      TYPE I,
      BDC_COUNT      TYPE I.
DATA  TRANCODE LIKE TSTC-TCODE.
DATA: FIELDNAME,
      START,
      END,
      DATA.
*
DATA: H LIKE D020S,
      F LIKE D021S OCCURS 0 WITH HEADER LINE,
      E LIKE D022S OCCURS 0 WITH HEADER LINE,
      M LIKE D023S OCCURS 0 WITH HEADER LINE.
*
DATA: BEGIN OF DYNP,
        PROG LIKE D020S-PROG,
        DNUM LIKE D020S-DNUM,
      END OF DYNP.
*
DATA: P_EXCEL, P_TAB.
TABLES: SSCRFIELDS.
DATA: G_FNAME LIKE RLGRAP-FILENAME,
      G_MASK(20)   VALUE ',*.*,*.*.',
      G_MODE_OPEN  VALUE 'O',
      G_TITLE(30)  VALUE 'FileUploadDialog'.
*
* for excel
TYPE-POOLS: OLE2.
*
DATA: XL_ROW    TYPE I,
      XL_COLUMN TYPE I.
DATA: E_FONT(20) VALUE '굴림',
      E_SIZE TYPE I VALUE 12.
DATA: E_SHEET_NO   TYPE I VALUE 1,
      E_SHEET_NAME(20) VALUE 'TEST',
      XL_TITLE(100).
*
* Automation EXCEL
DATA: EXCEL TYPE OLE2_OBJECT, BOOKS  TYPE OLE2_OBJECT,
      BOOK  TYPE OLE2_OBJECT, SHEETS TYPE OLE2_OBJECT,
      SHEET TYPE OLE2_OBJECT, CELLS  TYPE OLE2_OBJECT,
      CELL  TYPE OLE2_OBJECT, APPL   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.
*
  DATA: L_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(00) WITH
       'Enter the Recording name or Ext.Recording file name'.
    EXIT.
  ENDIF.
*
  IF X_SES = 'X' AND BDCGROUP IS INITIAL.
    MESSAGE S208(00) WITH '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(00) WITH 'Not found recording !'.
    EXIT.
  ENDIF.
*
  FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
*
  LOOP AT APQITAB.
    WRITE: /1 SY-VLINE,
             (6) APQITAB-MANDANT,  SY-VLINE,
            (12) APQITAB-GROUPID,  SY-VLINE,
            (10) APQITAB-CREDATE,  SY-VLINE,
             (8) APQITAB-CRETIME,  SY-VLINE,
            (12) APQITAB-CREATOR,  SY-VLINE,
             (5) APQITAB-TRANSCNT, SY-VLINE,
             (5) APQITAB-MSGCNT,   SY-VLINE.
    APQI = APQITAB.
    HIDE: APQI-GROUPID, APQI-QID, APQI-MANDANT, APQITAB.
  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.
*
  DATA: L_ALPHA(2), L_HEX(10), L_X1(4), L_X2(4), L_CHAR(10).
*
  REFRESH: FTEXT, FNAM.
  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(00) WITH 'Cannot get the Recoreing info.'.
      EXIT.
    ENDIF.
  ENDIF.
*
  NEW-PAGE LINE-SIZE 120.
*
  WRITE : /1  UPLOAD  COLOR 5 HOTSPOT.
  IF X_TRAN = 'X'.
    WRITE: TESTONE    COLOR 5 HOTSPOT.
  ENDIF.
  WRITE: TESTING      COLOR 5 HOTSPOT.
  WRITE: CLIP         COLOR 5 HOTSPOT QUICKINFO 'From Clipboard'.
  WRITE: MAKETEMP     COLOR 5 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 M ID DYNP.
      CONDENSE PRG_DYN.
      FORMAT COLOR COL_GROUP.
      WRITE AT : /1(SY-LINSZ) SPACE,
              6 PRG_DYN.
    ELSE.
      IF DYNFLOW-FNAM(4) NE '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.
*
        WRITE: ALPHA-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(25) COLOR COL_POSITIVE,
               31 DFIES-FIELDTEXT(30).
        IF DYNFLOW-FNAM = 'BDC_OKCODE'.
          DATA: LEN TYPE I, POS TYPE I.
        ELSEIF ( X_DEFLT = 'X' AND DYNFLOW-FVAL NE SPACE ).
          WRITE 61(5) '.'.
        ELSE.
          WRITE:61(5) L_ALPHA COLOR COL_TOTAL.
          ADD 1 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'.
          WRITE: 66 DYNFLOW-FVAL.
*          len = STRLEN( dynflow-fval ).
          LEN = 6.
          POS = 66 + LEN + 1.
          WRITE AT POS(1) F_TEST
            QUICKINFO 'Test Function'
            INPUT COLOR COL_NEGATIVE.
        ELSE.
          WRITE: 66 DYNFLOW-FVAL.
        ENDIF.
        HIDE: DYN_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.
    DATA: OPEN_MSG(80).
    OPEN DATASET P_FNAME FOR INPUT IN TEXT MODE
                         ENCODING DEFAULT MESSAGE OPEN_MSG.
    IF SY-SUBRC NE 0.
      MESSAGE S453(00) WITH 'Data Open error :' OPEN_MSG.
      EXIT.
    ENDIF.
*
    MESSAGE S453(00) WITH 'Reading...' SPACE.
    DO.
      READ DATASET P_FNAME INTO INDATA.
      IF SY-SUBRC NE 0. EXIT. ENDIF.
      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:START, END, DATA, FIELDNAME.
*
  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 = STRLEN( INDATA ).
    CLEAR: N,O,SEQ,DAT.
    REFRESH BDC_VALUE.
    DO.
      IF N => LEN.
        EXIT.
      ENDIF.
*
      CH = INDATA+N(1).
      IF CH = TAB.
        SEQ = SEQ + 1.
        PERFORM MOVE_BDC.
        ADD 1 TO N.
        CLEAR: O, DAT.
      ELSE.
        DAT+O(1) = INDATA+N(1).
        ADD 1 TO: O, N.
      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 5 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.
*
  CLEAR: BDC_VALUE, BDC_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 = 0 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 1 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 1 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 1 TO BDC_COUNT.
*
  IF BDC_COUNT = 1 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(1) = TAB.
    TRANSLATE INDATA USING CCODE.
    FORMAT COLOR COL_KEY INTENSIFIED OFF.
    WRITE: /(5) BDC_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(00) WITH '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.
*
  DATA: T_LINE_NR(4).
*
  CLEAR FTEXT.
*
  F-ITYP = '2'.
  F-FNAM = DYNFLOW-FNAM.
  READ TABLE F 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 = 0. EXIT. ENDIF.
    IF READTYPE = SPACE. EXIT. ENDIF.
    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(00) WITH 'BDC INSERT Error !'.
  ENDIF.
ENDFORM.                               " BDC_INSERT
*&---------------------------------------------------------------------*
*&      Form  CALL_TRANSACTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALL_TRANSACTION.
*
  DATA: W_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.
*
  DATA: MSG_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_TYPE, P_MESSTAB-MSGID(4),
                           P_MESSTAB-MSGNR, L_MSTRING(120).
    ELSE.
      WRITE: /11 MSG_TYPE, P_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(00) WITH 'Not Supported.'.
ENDFORM.                               " SAVE_RECORDING
*&---------------------------------------------------------------------*
*&      Form  UPLOAD_THE_RECORDING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UPLOAD_THE_RECORDING.
*
  MESSAGE I398(00) WITH '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 = 0 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 .
  DATA: L_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.
    CLEAR: P_EXCEL, P_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 .
*
  DATA: ACT_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(00) WITH 'Data Open error'.
  ENDIF.
ENDFORM.                    " WS_UPLOAD
*&---------------------------------------------------------------------*
*&      Form  UPLOAD_EXCEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UPLOAD_EXCEL .
*
  DATA : EXDAT LIKE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
  DATA : E_SRT_COL   TYPE I VALUE 1,
         E_SRT_ROW   TYPE I VALUE 1,
         E_END_COL   TYPE I VALUE 26,
         E_END_ROW   TYPE I 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(00) WITH 'Data Upload Error !'.
  ENDIF.
*
ENDFORM.                    " UPLOAD_EXCEL
*&---------------------------------------------------------------------*
*&      Form  paste_from_clip
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PASTE_FROM_CLIP .
*
  DATA: FILE_TABLE TYPE FILETABLE,
        RC TYPE I,
        FILEDAT TYPE STRING.
  DATA: FILE_TABLE_CLIP TYPE STANDARD TABLE OF FILE_TABLE.
*
  DATA: BEGIN OF FILE_TAB OCCURS 1,
      ZEILE(500) TYPE 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.
    CLEAR: F_TEST, DYN_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 1 1 XL_TITLE.
      PERFORM XL_PUT_TO_CELL USING 2 1 '*Text:'.
      PERFORM XL_PUT_TO_CELL USING 3 1 'FIELDNAME'.
*
      PERFORM XL_PUT_TO_CELL USING 4  1 'STARTDATA'.
      PERFORM XL_PUT_TO_CELL USING 24 1 'ENDDATA'.
      XL_ROW = 2.
      XL_COLUMN = 1.
    ELSEIF DYNFLOW-DYNBEGIN = SPACE.
*      e_size = 9.
*      SET PROPERTY OF sheet 'STANDARDFONTSIZE' = e_size.
      IF DYNFLOW-FNAM(4) NE 'BDC_'.
        IF NOT ( X_DEFLT = 'X' AND DYNFLOW-FVAL NE SPACE ).
          ADD 1 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

댓글 없음:

댓글 쓰기