首页 > 代码库 > LOG

LOG

即插即用^_^

 使用时:

ZLYLOG ‘ZLYTEST01‘ ‘01‘."FM开头

ZLYLOG ‘ZLYTEST01‘ ‘02‘."FM结尾

 

TABLE:ZLOGDATA

技术分享

 

 

INCLUDE ZLYLOG,复制,激活

TABLES:TFDIR,TRDIR,ENLFDIR,RS38L,RFCDES,T100,TLIBG.

"BEGIN
DATA:BEGIN OF LS_HEAD,
       NAME   TYPE RS38L_FNAM,
       ERDAT  TYPE ERDAT,
       ZEIT   TYPE UZEIT,
       INDX   TYPE NUMC2,
       FDNAME TYPE RS38L_PAR_,
       AREA   TYPE RS38L_AREA,
       ERNAM  TYPE UNAME,
     END OF LS_HEAD.
DATA:  LV_PNAME_GD         TYPE TFDIR-PNAME,
       LS_HEADER_GD        TYPE HEADER_FB,
       LT_TABLES_GD        TYPE RSFB_PARA,
       LT_IMPORT_GD        TYPE RSFB_PARA,
       LT_EXPORT_GD        TYPE RSFB_PARA,
       LT_CHANGE_GD        TYPE RSFB_PARA,
       LV_PROGNAME_GD      TYPE TRDIR-NAME,
       LV_PARANAME_GD(100).

FIELD-SYMBOLS: <LS_PARA>    TYPE RSFBPARA,
               <LV_PARAFLD> TYPE ANY,
               <LV_PARAVAL> TYPE ANY,
               <DYN_TABLE>  TYPE STANDARD TABLE,
               <LT_PARAFLD> TYPE ANY TABLE,
               <LT_PARAVAL> TYPE ANY TABLE.


DATA:LV_HEAD TYPE ZLOGDATA.

DATA:GT_TAB TYPE TABLE OF ZLOGDATA,
     GV_TAB LIKE LINE OF GT_TAB,
     GW_TAB LIKE LINE OF GT_TAB.

DATA:DY_TABLE TYPE REF TO DATA,
     DY_LINE  TYPE REF TO DATA.


INCLUDE MS38LCOM.
DATA: DOCUMENTATION LIKE FUNCT OCCURS 0 WITH HEADER LINE.

DATA: TESTSTEP(3) VALUE PBO.
DATA : BEGIN OF FDESC OCCURS 10,
         NAME(30),                     "Feldname
         TABLE(40),                    "Tabellenname
         TYPE(1),                      "Datentyp
         LENGTH(5),                    "L?nge
         ILENGTH(5),                   "Eingabel?nge
         HLENGTH    TYPE P,               "Eingabel?nge
         FTYPE(3),                     "Typ fdt_...
         VALUE      TYPE STRING,
         "I IMPORT
         "E EXPORT
         "C CHANGING
         "S STRUCTURE
         "Y TYPE
         "T TABLE
         NUMBER     TYPE I,                "Referenz, wessen Struktur
       END OF FDESC.

DATA: MAX_FIELD_LENGTH_PAI TYPE I,
      MAX_FIELD_LENGTH     TYPE I,         " Maximale Feldlaenge
      FDESC_INDEX          LIKE SY-TABIX,
      PARAM_VALUE(220),
      V_PARAM_VALUE(220),
      D100_IOHIDE.

DATA: STRUC_INFO_TABLE_ENTRY TYPE NF2TY_STRUC_INFO_TABLE_ENTRY,
      STRUC_INFO_TABLE       TYPE NF2TY_STRUC_INFO_TABLE,
      STRUC_INFO_TABLE_COPY  TYPE NF2TY_STRUC_INFO_TABLE.
INCLUDE: <ICON>.

FIELD-SYMBOLS: <F>.
DATA:GV_FLAG TYPE C.




*&---------------------------------------------------------------------*
*&      Form  IN_DESCRIBE_FIELDS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM IN_DESCRIBE_INTERFACE USING P_FNAME.
  REFRESH FDESC.
  CLEAR: MAX_FIELD_LENGTH, MAX_FIELD_LENGTH_PAI.

* --Importfelder : Name, L?nge und Typ bestimmen
  LOOP AT IF_IMPORT.
    AT LAST .
      GV_FLAG = X.
    ENDAT.

*    perform prm_write_header using text-130.
    PERFORM IN_DESCRIBE_FIELDS USING P_FNAME
                                     IF_IMPORT-PARAMETER
                                     IF_IMPORT-TYP
                                     IF_IMPORT-DBFIELD
                                     I
                                     TEXT-130.
  ENDLOOP.
* --Changefelder : Name, L?nge und Typ bestimmen
  LOOP AT IF_CHANGE.
    AT LAST .
      GV_FLAG = X.
    ENDAT.
    PERFORM IN_DESCRIBE_FIELDS USING P_FNAME
                                     IF_CHANGE-PARAMETER
                                     IF_CHANGE-TYP
                                     IF_CHANGE-DBFIELD
                                     C
                                     TEXT-132.
  ENDLOOP.
* --Exportfelder : Name, L?nge und Typ bestimmen
  IF GV_TAB-INDX = 02.
    LOOP AT IF_EXPORT.                   "keine neue Beschreibung wenn
      AT LAST .
        GV_FLAG = X.
      ENDAT.
      READ TABLE FDESC WITH KEY IF_EXPORT-PARAMETER.  "schon IMPORT
      IF SY-SUBRC = 0.                   "Schon Input-Parameter ?
        IF FDESC-FTYPE = I.            "nur Typ entsprechend ?ndern
          FDESC-FTYPE = IO.
        ELSEIF FDESC-FTYPE = IS.
          FDESC-FTYPE = IOS.
        ENDIF.
        MODIFY FDESC INDEX SY-TABIX.
      ELSE.
        PERFORM IN_DESCRIBE_FIELDS USING P_FNAME
                                         IF_EXPORT-PARAMETER
                                         IF_EXPORT-TYP
                                         IF_EXPORT-DBFIELD
                                         O
                                         TEXT-140.
      ENDIF.
    ENDLOOP.
  ENDIF.
* --Tablesfelder : Name, L?nge und Typ bestimmen
  LOOP AT IF_TABLES.
    AT LAST .
      GV_FLAG = X.
    ENDAT.
    PERFORM IN_DESCRIBE_FIELDS USING P_FNAME
                                     IF_TABLES-PARAMETER
                                     IF_TABLES-TYP
                                     IF_TABLES-DBSTRUCT
                                     T
                                     TEXT-160.
  ENDLOOP.
* --Exceptions : Nix zu Bestimmen
  LOOP AT IF_EXCEPT.
    CLEAR FDESC.
    FDESC-NAME = IF_EXCEPT-EXCEPTION.
    APPEND FDESC.
  ENDLOOP.

* Abtrennen
  CLEAR FDESC.
  FDESC-NAME = *.
  APPEND FDESC.
  MAX_FIELD_LENGTH = MAX_FIELD_LENGTH + 35.
  IF MAX_FIELD_LENGTH < 80.
    MAX_FIELD_LENGTH = 80.
  ENDIF.
  MAX_FIELD_LENGTH_PAI = MAX_FIELD_LENGTH_PAI + 35.
  IF MAX_FIELD_LENGTH_PAI < 80.
    MAX_FIELD_LENGTH_PAI = 80.
  ENDIF.


ENDFORM.                               " IN_DESCRIBE_FIELDS

*---------------------------------------------------------------------*
*       FORM IN_DESCRIBE_FIELDS                                       *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  P_PARAMETER                                                   *
*  -->  P_TYP                                                         *
*  -->  P_STRUC                                                       *
*  -->  P_KIND                                                        *
*---------------------------------------------------------------------*
FORM IN_DESCRIBE_FIELDS USING    P_FNAME
                                 P_PARAMETER
                                 P_TYP
                                 P_STRUC
                                 P_KIND
                                 P_TEXT.
  DATA: L_SLINE TYPE NF2TY_INFO_ENTRY.
  DATA: OFFSET    LIKE SY-FDPOS,
        D_TYPE(1) TYPE C VALUE I.
  DATA: O_PARAM_VALUE    LIKE PARAM_VALUE,
        RESULT_TEXT(250).
  FIELD-SYMBOLS: <F>, <F1>.

  CASE P_KIND.
    WHEN I.
      READ TABLE LT_IMPORT_GD ASSIGNING <LS_PARA> WITH KEY PARAMETER = P_PARAMETER.
    WHEN O.
      READ TABLE LT_EXPORT_GD ASSIGNING <LS_PARA> WITH KEY PARAMETER = P_PARAMETER.
    WHEN C.
      READ TABLE LT_CHANGE_GD ASSIGNING <LS_PARA> WITH KEY PARAMETER = P_PARAMETER.
    WHEN T.
      READ TABLE LT_TABLES_GD ASSIGNING <LS_PARA> WITH KEY PARAMETER = P_PARAMETER.
    WHEN OTHERS.
  ENDCASE.
  IF <LS_PARA>-STRUCTURE IS INITIAL.
    ASSIGN <LS_PARA>-PARAMETER TO <LV_PARAFLD>.
  ELSE.
    CREATE DATA DY_TABLE TYPE TABLE OF (<LS_PARA>-STRUCTURE).
    ASSIGN DY_TABLE->* TO <DYN_TABLE>.
    IF P_KIND = T.
      ASSIGN DY_TABLE->* TO <LV_PARAFLD>.
    ELSE.
      CREATE DATA DY_LINE LIKE LINE OF <DYN_TABLE>.
      ASSIGN DY_LINE->* TO <LV_PARAFLD>.
    ENDIF.

  ENDIF.

  CHECK <LV_PARAFLD> IS ASSIGNED.
  LOOP AT GT_TAB INTO GW_TAB WHERE NAME = GV_TAB-NAME AND ERDAT = GV_TAB-ERDAT
                             AND   ZEIT = GV_TAB-ZEIT AND ERNAM = GV_TAB-ERNAM
                             AND   AREA = GV_TAB-AREA AND FDNAME = <LS_PARA>-PARAMETER.
    MOVE-CORRESPONDING GW_TAB TO LS_HEAD.
    TRY .
        IMPORT LS_HEAD-FDNAME = <LV_PARAFLD> FROM DATABASE ZLOGDATA(FL) ID LS_HEAD IGNORING CONVERSION ERRORS .
      CATCH CX_SY_IMPORT_MISMATCH_ERROR.
*        MESSAGE ‘参数有变更‘ TYPE ‘S‘.
        MESSAGE S101(ZCRM_MSG).
*        EXIT.
    ENDTRY.

  ENDLOOP.

  CLEAR FDESC.
  PERFORM CB_CALLBACK_DESCRIBE USING <LV_PARAFLD> P_PARAMETER P_KIND.


  FDESC-NAME = P_PARAMETER.
  IF NOT P_TYP IS INITIAL.
    FDESC-TABLE = P_TYP.
    CASE P_TYP.
      WHEN I OR C OR N OR P OR F OR b OR s OR T
           OR D OR X OR STRING OR XSTRING.
        FDESC-VALUE = http://www.mamicode.com/.
        CONCATENATE ‘‘‘‘ P_TYP ‘‘‘‘ INTO FDESC-TABLE.
      WHEN TABLE OR STANDARD TABLE OR HASHED TABLE OR
           SORTED TABLE OR INDEX TABLE.
      WHEN ANY.
        CLEAR FDESC-TABLE.
      WHEN OTHERS.
    ENDCASE.
  ELSE.
    FDESC-TABLE = P_STRUC.
  ENDIF.
  READ TABLE STRUC_INFO_TABLE_ENTRY-TYPE_INFO INDEX 1 INTO L_SLINE.
  FDESC-TYPE = L_SLINE-STRUC_TYPE.
  IF L_SLINE-VLENGTH > 200.
    L_SLINE-VLENGTH = 200.
  ENDIF.
  IF FDESC-TYPE = y OR FDESC-TYPE = g.
*   Strings auf char 200
    L_SLINE-VLENGTH = 200.
  ENDIF.
  FDESC-LENGTH = L_SLINE-VLENGTH.
  FDESC-HLENGTH = L_SLINE-VLENGTH.
  FDESC-ILENGTH = L_SLINE-VLENGTH.
  IF L_SLINE-VLENGTH > MAX_FIELD_LENGTH.
    MAX_FIELD_LENGTH = L_SLINE-VLENGTH.
    MAX_FIELD_LENGTH_PAI = L_SLINE-VLENGTH.
  ENDIF.
  IF P_STRUC IS INITIAL.
    CASE FDESC-TYPE.
***JR 14.9.98
      WHEN h OR v OR IF_WB_CONSTANTS=>FLAG_STRUC OR u.
*      when ‘h‘ or ‘v‘ or ‘T‘ or IF_WB_CONSTANTS=>flag_struc or ‘u‘.
        CONCATENATE P_KIND FDESC-TYPE INTO FDESC-FTYPE.
      WHEN OTHERS.
        FDESC-FTYPE = P_KIND.
    ENDCASE.
  ELSE.
    CONCATENATE P_KIND S INTO FDESC-FTYPE.
  ENDIF.
  IF FDESC-VALUE IS INITIAL.
    IF FDESC-TYPE CA %hvu.
      FDESC-VALUE = http://www.mamicode.com/X.
    ELSE.
      FDESC-VALUE = http://www.mamicode.com/.
    ENDIF.
  ENDIF.

  APPEND FDESC.

  IF GV_FLAG = X.

    FORMAT COLOR 1 INTENSIFIED ON.
    ASSIGN SY-ULINE(MAX_FIELD_LENGTH) TO <F>.
    WRITE:/ <F>.
    WRITE :/ SY-VLINE, P_TEXT, 34 SY-VLINE,
           35 TEXT-131.
    POSITION MAX_FIELD_LENGTH.
    WRITE SY-VLINE.
    WRITE:/ <F>.

    GV_FLAG = ‘‘.

    LOOP AT FDESC WHERE FTYPE(1) = P_KIND.
      CHECK NOT FDESC-TYPE = l.        "Datenreferenz
      FDESC_INDEX = SY-TABIX.            "wird für Zugriff gehided
      D100_IOHIDE = I.                 "Hide für sp?teren Zugriff
      CLEAR PARAM_VALUE. CLEAR O_PARAM_VALUE.
      IF P_KIND = T OR P_KIND = C.
        D_TYPE = O.
      ENDIF.
      IF FDESC-VALUE = http://www.mamicode.com/X.
      ELSE.
        O_PARAM_VALUE = PARAM_VALUE = http://www.mamicode.com/FDESC-VALUE.
      ENDIF.

      IF PARAM_VALUE CO  . ENDIF.      ".+-E1234567890‘ AND
      IF ( FDESC-TYPE = I OR           " Integer
           FDESC-TYPE = F OR           " Float
           FDESC-TYPE = h ).           " Tabelle
* Die schreib er n?mlich hinten hin
*        offset = sy-fdpos.             "219 - FDESC-ILENGTH.
        SHIFT PARAM_VALUE LEFT BY SY-FDPOS PLACES.
        IF O_PARAM_VALUE CO  . ENDIF.
        SHIFT O_PARAM_VALUE LEFT BY SY-FDPOS PLACES.
      ELSE.
        OFFSET = 0.
      ENDIF.
      IF FDESC-ILENGTH > 0.
        ASSIGN PARAM_VALUE+OFFSET(FDESC-ILENGTH) TO <F1>.
      ENDIF.
*   perform te_set_input_prompter using <f1>.
      FORMAT RESET.
      IF FDESC-TYPE = u OR FDESC-TYPE = h OR FDESC-TYPE = v OR
         FDESC-TYPE = S OR FDESC-TYPE = IF_WB_CONSTANTS=>FLAG_STRUC OR
         FDESC-TYPE = r OR
         FDESC-FTYPE(1) = T.                            " ec ftype = T
* Nicht eingabebereit, da sowieso nicht komplett oder Typgerecht pflegb.
        IF FDESC-TYPE = h OR FDESC-FTYPE(1) = T.
*       Sonst gibt es bei 5 Byte Tabellen ‘0 Eint‘
*          ASSIGN PARAM_VALUE+OFFSET(25) TO <F1>.
          ASSIGN FDESC-VALUE TO <F1>.
          WRITE : / SY-VLINE, 3 FDESC-NAME, 34 SY-VLINE,
                  35 ICON_LIST AS ICON QUICKINFO TEXT-010 HOTSPOT ON,
                  38  <F1> HOTSPOT ON.
        ELSEIF FDESC-TYPE = r.
          IF FDESC-TABLE(7) = REF TO .                    "#EC NOTEXT
            ASSIGN PARAM_VALUE TO <F1>.
            WRITE : / SY-VLINE, 3 FDESC-NAME, 34 SY-VLINE,
                    35 ICON_OO_CLASS AS ICON QUICKINFO TEXT-010 HOTSPOT ON,
                    38  <F1> HOTSPOT ON.
          ELSE.
            WRITE : / SY-VLINE, 3 FDESC-NAME, 34 SY-VLINE,
                    35 ICON_OO_CLASS AS ICON QUICKINFO TEXT-158,
                    38  <F1>.
          ENDIF.
        ELSE.
          WRITE : / SY-VLINE, 3 FDESC-NAME, 34 SY-VLINE,
             35 ICON_DETAIL AS ICON QUICKINFO TEXT-010 HOTSPOT ON,
             38  <F1> HOTSPOT ON.
        ENDIF.
      ELSE.
        WRITE : / SY-VLINE, 3 FDESC-NAME, 34 SY-VLINE,
            35  <F1> INPUT ON.
      ENDIF.
      HIDE : FDESC_INDEX, D100_IOHIDE.
      POSITION MAX_FIELD_LENGTH.
      WRITE SY-VLINE.
    ENDLOOP.
    WRITE:/ <F>.
    FORMAT RESET.

  ENDIF.
ENDFORM.                               " IN_DESCRIBE_FIELDS
*&---------------------------------------------------------------------*
*&      Form  IN_IMPORT_INTERFACE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM IN_IMPORT_INTERFACE USING P_FUNCNAME.
  DATA ENHA_IMP TYPE RSFB_IMP.
  DATA ENHA_EXP TYPE RSFB_EXP.
  DATA ENHA_CHA TYPE RSFB_CHA.
  DATA ENHA_TBL TYPE RSFB_TBL.
  DATA ENHA_DOCU TYPE TABLE OF RSFDO.

  REFRESH: IF_IMPORT, IF_EXPORT, IF_CHANGE, IF_TABLES, IF_EXCEPT,
           DOCUMENTATION.

*ec Sept. 2004 wg. SFW, Switches sollen noch berücksichtigt werden
  CALL FUNCTION FUNCTION_IMPORT_DOKU
    EXPORTING
      FUNCNAME           = P_FUNCNAME
      WITH_ENHANCEMENTS  = X
    TABLES
      EXCEPTION_LIST     = IF_EXCEPT
      EXPORT_PARAMETER   = IF_EXPORT
      IMPORT_PARAMETER   = IF_IMPORT
      CHANGING_PARAMETER = IF_CHANGE
      TABLES_PARAMETER   = IF_TABLES
      DOKUMENTATION      = DOCUMENTATION
    EXCEPTIONS
      ERROR_MESSAGE      = 1
      FUNCTION_NOT_FOUND = 2
      INVALID_NAME       = 3
      OTHERS             = 4.
  LOOP AT DOCUMENTATION.
    MOVE-CORRESPONDING DOCUMENTATION TO PARAM_DOCU.
    APPEND PARAM_DOCU.
  ENDLOOP.

ENDFORM.                               " IN_IMPORT_INTERFACE
*---------------------------------------------------------------------*
*       FORM CB_CALLBACK_DESCRIBE                                     *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  P_VALUE                                                       *
*  -->  P_NAME                                                        *
*---------------------------------------------------------------------*
FORM CB_CALLBACK_DESCRIBE USING P_VALUE
                                P_NAME
                                P_KIND.
  DATA: L_TYPE_INFO TYPE  NF2TY_STRUC_INFO.
  DATA:S_TYPE_INFO LIKE LINE OF L_TYPE_INFO.
  DATA:LV_I TYPE N.
  FIELD-SYMBOLS:<F1> TYPE ANY TABLE.

  CALL FUNCTION RS_COMPLEX_OBJECT_TYPEINFO_GET
    EXPORTING
      OBJECT_NAME = P_NAME
      OBJECT      = P_VALUE
    IMPORTING
      TYPE_INFO   = L_TYPE_INFO
    EXCEPTIONS
      OTHERS      = 0.
  STRUC_INFO_TABLE_ENTRY-PARAM_NAME = P_NAME.
  STRUC_INFO_TABLE_ENTRY-TYPE_INFO  = L_TYPE_INFO.
  APPEND STRUC_INFO_TABLE_ENTRY TO STRUC_INFO_TABLE.

  READ TABLE L_TYPE_INFO INDEX 1 INTO S_TYPE_INFO.
  IF SY-SUBRC = 0 .
    FDESC-TYPE = S_TYPE_INFO-STRUC_TYPE.
    IF ( FDESC-TYPE = h OR FDESC-FTYPE(1) = T ) OR ( P_KIND = T AND FDESC-TYPE = % ).
      ASSIGN P_VALUE TO <F1>.
      DESCRIBE TABLE <F1> LINES LV_I.
      CONCATENATE LV_I 条目 INTO FDESC-VALUE.
    ENDIF.
  ENDIF.
ENDFORM.                    "cb_callback_describe









DEFINE ZLYLOG.

  LS_HEAD-NAME = &1.
  LS_HEAD-ERDAT = SY-DATUM.
  LS_HEAD-ZEIT = SY-UZEIT.
  LS_HEAD-INDX = &2.
  LS_HEAD-ERNAM = SY-UNAME.


    LS_HEADER_GD-NAME = &1.


*  read function-pool
    SELECT SINGLE PNAME
           FROM TFDIR
           INTO  LV_PNAME_GD
           WHERE FUNCNAME =  LS_HEADER_GD-NAME.
    CALL FUNCTION FUNCTION_INCLUDE_SPLIT
      EXPORTING
        PROGRAM   = LV_PNAME_GD
      IMPORTING
        GROUP     = LS_HEADER_GD-AREA
        NAMESPACE = LS_HEADER_GD-NAMESPACE.

    LS_HEAD-AREA = LS_HEADER_GD-AREA.
*  insert namespace (e.g. /AFS/)
    CONCATENATE LS_HEADER_GD-NAMESPACE LS_HEADER_GD-AREA
           INTO LS_HEADER_GD-AREA.
*  read parameter of function module
    CALL METHOD CL_FB_PARAMETER_DB=>READ
      IMPORTING
        TABLES = LT_TABLES_GD[]
        IMPORT = LT_IMPORT_GD[]
        EXPORT = LT_EXPORT_GD[]
        CHANGE = LT_CHANGE_GD[]
      CHANGING
        HEADER = LS_HEADER_GD.

    LV_PROGNAME_GD =  LS_HEADER_GD-NAME.
    TRANSLATE  LV_PROGNAME_GD USING  =.
    LV_PROGNAME_GD+30 = FT.

    LOOP AT  LT_IMPORT_GD ASSIGNING <LS_PARA>.
      CONCATENATE ( LV_PROGNAME_GD )%_I <LS_PARA>-PARAMETER
                   INTO LV_PARANAME_GD.
      ASSIGN (LV_PARANAME_GD) TO <LV_PARAFLD>.
      CHECK SY-SUBRC = 0.
      LS_HEAD-FDNAME = <LS_PARA>-PARAMETER.
      MOVE-CORRESPONDING LS_HEAD TO LV_HEAD.
      EXPORT LS_HEAD-FDNAME = <LV_PARAFLD> TO DATABASE ZLOGDATA(FL) FROM LV_HEAD ID LS_HEAD.
    ENDLOOP.

    IF &2 = 02.
      LOOP AT  LT_EXPORT_GD ASSIGNING <LS_PARA>.
        CONCATENATE ( LV_PROGNAME_GD )%_O <LS_PARA>-PARAMETER
                     INTO LV_PARANAME_GD.
        ASSIGN (LV_PARANAME_GD) TO <LV_PARAFLD>.
        CHECK SY-SUBRC = 0.
        LS_HEAD-FDNAME = <LS_PARA>-PARAMETER.
        MOVE-CORRESPONDING LS_HEAD TO LV_HEAD.
        EXPORT LS_HEAD-FDNAME = <LV_PARAFLD> TO DATABASE ZLOGDATA(FL) FROM LV_HEAD ID LS_HEAD.
      ENDLOOP.
    ENDIF.
    LOOP AT  LT_CHANGE_GD ASSIGNING <LS_PARA>.
      CONCATENATE ( LV_PROGNAME_GD )%_I <LS_PARA>-PARAMETER
                   INTO LV_PARANAME_GD.
      ASSIGN (LV_PARANAME_GD) TO <LV_PARAFLD>.
      CHECK SY-SUBRC = 0.
      LS_HEAD-FDNAME = <LS_PARA>-PARAMETER.
      MOVE-CORRESPONDING LS_HEAD TO LV_HEAD.
      EXPORT LS_HEAD-FDNAME = <LV_PARAFLD> TO DATABASE ZLOGDATA(FL) FROM LV_HEAD ID LS_HEAD.
    ENDLOOP.
    LOOP AT  LT_TABLES_GD ASSIGNING <LS_PARA>.
      CONCATENATE ( LV_PROGNAME_GD )%_I
                  <LS_PARA>-PARAMETER []
                  INTO LV_PARANAME_GD.
      ASSIGN (LV_PARANAME_GD) TO <LT_PARAFLD>.
      CHECK SY-SUBRC = 0.
      LS_HEAD-FDNAME = <LS_PARA>-PARAMETER.
      MOVE-CORRESPONDING LS_HEAD TO LV_HEAD.
      EXPORT LS_HEAD-FDNAME = <LT_PARAFLD> TO DATABASE ZLOGDATA(FL) FROM LV_HEAD ID LS_HEAD.
      CONCATENATE <LS_PARA>-PARAMETER [] INTO LV_PARANAME_GD.
    ENDLOOP.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*&      Form  PRM_SELECT_DETAIL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PRM_SELECT_DETAIL .
  READ TABLE FDESC INDEX FDESC_INDEX.
  CHECK FDESC-TYPE = % OR FDESC-TYPE = h OR FDESC-TYPE = T.
  CASE FDESC-FTYPE+0(1).
    WHEN I.
      READ TABLE LT_IMPORT_GD ASSIGNING <LS_PARA> WITH KEY PARAMETER = FDESC-NAME..
    WHEN C.
      READ TABLE LT_CHANGE_GD ASSIGNING <LS_PARA> WITH KEY PARAMETER = FDESC-NAME..
    WHEN O.
      READ TABLE LT_EXPORT_GD ASSIGNING <LS_PARA> WITH KEY PARAMETER = FDESC-NAME..
    WHEN T.
      READ TABLE LT_TABLES_GD ASSIGNING <LS_PARA> WITH KEY PARAMETER = FDESC-NAME..
    WHEN OTHERS.
  ENDCASE.

  CHECK <LS_PARA> IS ASSIGNED.

  CREATE DATA DY_TABLE TYPE TABLE OF (<LS_PARA>-STRUCTURE).
  ASSIGN DY_TABLE->* TO <DYN_TABLE>.
  IF FDESC-FTYPE+0(1) = T.
    ASSIGN <DYN_TABLE> TO <LV_PARAFLD>.
  ELSE.
    CREATE DATA DY_LINE LIKE LINE OF <DYN_TABLE>.
    ASSIGN DY_LINE->* TO <LV_PARAFLD>.
  ENDIF.

  LOOP AT GT_TAB INTO GW_TAB WHERE NAME = GV_TAB-NAME AND ERDAT = GV_TAB-ERDAT
                              AND   ZEIT = GV_TAB-ZEIT AND INDX = GV_TAB-INDX
                              AND   ERNAM = GV_TAB-ERNAM AND AREA = GV_TAB-AREA AND FDNAME = <LS_PARA>-PARAMETER.
    MOVE-CORRESPONDING GW_TAB TO LS_HEAD.
    TRY .
        IMPORT LS_HEAD-FDNAME = <LV_PARAFLD> FROM DATABASE ZLOGDATA(FL) ID LS_HEAD IGNORING CONVERSION ERRORS .
      CATCH CX_SY_IMPORT_MISMATCH_ERROR.
        MESSAGE 函数结构已变更 TYPE S.
    ENDTRY.

  ENDLOOP.
  CALL FUNCTION RS_COMPLEX_OBJECT_EDIT
    EXPORTING
      OBJECT_NAME          = FDESC-NAME
      MODE                 =  
      INSERT_TAB           = X
      UPPER_CASE           = X
      POPUP                =  
*     DISPLAY_ACCESSIBLE   = ‘ ‘
    CHANGING
      OBJECT               = <LV_PARAFLD>
    EXCEPTIONS
      OBJECT_NOT_SUPPORTED = 1.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  PRM_GET_INTERFACE_PARA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GV_TAB_NAME  text
*----------------------------------------------------------------------*
FORM PRM_GET_INTERFACE_PARA  USING    P_GV_TAB_NAME.
  LS_HEADER_GD-NAME = P_GV_TAB_NAME.
  SELECT SINGLE PNAME
        FROM TFDIR
        INTO  LV_PNAME_GD
  WHERE FUNCNAME =  LS_HEADER_GD-NAME.
  CALL FUNCTION FUNCTION_INCLUDE_SPLIT
    EXPORTING
      PROGRAM   = LV_PNAME_GD
    IMPORTING
      GROUP     = LS_HEADER_GD-AREA
      NAMESPACE = LS_HEADER_GD-NAMESPACE.

  LS_HEAD-AREA = LS_HEADER_GD-AREA.
*  insert namespace (e.g. /AFS/)
  CONCATENATE LS_HEADER_GD-NAMESPACE LS_HEADER_GD-AREA
         INTO LS_HEADER_GD-AREA.

  CALL METHOD CL_FB_PARAMETER_DB=>READ
    IMPORTING
      TABLES = LT_TABLES_GD[]
      IMPORT = LT_IMPORT_GD[]
      EXPORT = LT_EXPORT_GD[]
      CHANGE = LT_CHANGE_GD[]
    CHANGING
      HEADER = LS_HEADER_GD.

  LV_PROGNAME_GD =  LS_HEADER_GD-NAME.
ENDFORM.

 

 

REPORT ZLYLOGP,显示:

"
REPORT ZLYLOGP NO STANDARD PAGE HEADING.
INCLUDE ZLYLOG.
DATA:GT_SHOW TYPE TABLE OF ZLOGDATA.

DATA:GT_FIELDCAT TYPE LVC_T_FCAT.
DATA GS_FIELDCAT LIKE LINE OF GT_FIELDCAT.
DATA LS_LAYOUT TYPE LVC_S_LAYO.

DEFINE APPEND_FIELDCAT .
  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME = &1.
  GS_FIELDCAT-SCRTEXT_L = &2.
  GS_FIELDCAT-OUTPUTLEN = &3.
  GS_FIELDCAT-NO_ZERO = &4.
  APPEND GS_FIELDCAT TO GT_FIELDCAT."GT_FIELDCAT.
END-OF-DEFINITION.

SELECTION-SCREEN:BEGIN OF BLOCK BLK01 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:S_NAME FOR ZLOGDATA-NAME.
SELECT-OPTIONS:S_ERDAT FOR ZLOGDATA-ERDAT.
SELECT-OPTIONS:S_ZEIT FOR ZLOGDATA-ZEIT.
SELECT-OPTIONS:S_AREA FOR ZLOGDATA-AREA.
SELECT-OPTIONS:S_ERNAM FOR ZLOGDATA-ERNAM.
SELECTION-SCREEN END OF BLOCK BLK01.


START-OF-SELECTION.


  SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_TAB
      FROM ZLOGDATA
      WHERE NAME IN S_NAME
      AND   ERDAT IN S_ERDAT
      AND   ZEIT  IN S_ZEIT
      AND   AREA  IN S_AREA
      AND   ERNAM IN S_ERNAM.



  CHECK GT_TAB[] IS NOT INITIAL.

  GT_SHOW[] = GT_TAB[].

  SORT GT_SHOW BY RELID AREA NAME ERDAT ZEIT INDX ERNAM.
  DELETE ADJACENT DUPLICATES FROM GT_SHOW COMPARING RELID AREA NAME ERDAT ZEIT INDX ERNAM.


  PERFORM PRM_SHOW.

END-OF-SELECTION.



AT LINE-SELECTION.
  PERFORM PRM_SELECT_DETAIL.

TOP-OF-PAGE." DURING LINE-SELECTION.
  DATA:GV_STR TYPE STRING.
  DATA:GV_C(8) TYPE C.
  IF GV_TAB-INDX = 01.
    GV_C = 传入参数.
  ELSE.
    GV_C = 传出参数.
  ENDIF.
  CONCATENATE 函数组: GV_TAB-AREA 函数: GV_TAB-NAME 用户 GV_TAB-ERNAM INTO GV_STR SEPARATED BY  .
  WRITE:GV_STR,GV_TAB-ERDAT,GV_TAB-ZEIT, SPACE, GV_C.
  ULINE /0(135).
*&---------------------------------------------------------------------*
*&      Form  PRM_SHOW
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PRM_SHOW .
  PERFORM PRM_SET_FIELD.

  CALL FUNCTION REUSE_ALV_GRID_DISPLAY_LVC
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      IS_LAYOUT_LVC            = LS_LAYOUT
      IT_FIELDCAT_LVC          = GT_FIELDCAT[]
      I_CALLBACK_PF_STATUS_SET = PRM_SET_STATUS
      I_CALLBACK_USER_COMMAND  = PRM_USER_COMMAND
*     I_STRUCTURE_NAME         = ‘ZLOGDATA‘
      I_DEFAULT                = X
      I_SAVE                   = A
    TABLES
      T_OUTTAB                 = GT_SHOW
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  PRM_SET_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PRM_SET_FIELD .
  REFRESH GT_FIELDCAT.
*  LS_LAYOUT-CWIDTH_OPT    = ‘X‘. "优化列宽选项是否设置
  LS_LAYOUT-ZEBRA         = X.

  APPEND_FIELDCAT:
                  NAME               函数名称             30      X,
                  AREA               函数组               26     ‘‘,
                  ERDAT              日期                 10     X,
                  ZEIT               时间                 8     X,
                  ERNAM              用户名               16     X,
                  RTYPE              消息类型             8     ‘‘,
                  INDX               序号                 5     X,
                  RTMSG              消息内容             60     ‘‘.
ENDFORM.
FORM PRM_SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB..
  SET PF-STATUS ZSTAT EXCLUDING RT_EXTAB.
ENDFORM.                    "PRM_SET_STATUS
FORM PRM_USER_COMMAND USING P_UCOMM    LIKE SY-UCOMM
                        P_SELFIELD TYPE SLIS_SELFIELD.
*  DATA:LV_DYN TYPE SY-DYNNR VALUE SY-DYNNR.
  IF P_UCOMM = &IC1.
    READ TABLE GT_SHOW INTO GV_TAB INDEX P_SELFIELD-TABINDEX.
    IF SY-SUBRC = 0.
      PERFORM PRM_GET_INTERFACE_PARA USING GV_TAB-NAME.
      PERFORM IN_IMPORT_INTERFACE USING GV_TAB-NAME."GET IMPORT INTERFACE
*      PERFORM IN_DESCRIBE_INTERFACE USING GV_TAB-NAME."GET IDESC INTERFACE
      CALL SCREEN 9000."这个屏幕需要创建,空屏幕只包含一个PBO
      SET SCREEN 0500."这个是alv屏幕^_^
    ENDIF.
  ENDIF.
ENDFORM.                    "PRM_USER_COMMAND
*&---------------------------------------------------------------------*
*&      Module  STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_9000 OUTPUT.
*  SET PF-STATUS ‘xxxxxxxx‘.

*  SET TITLEBAR ‘xxx‘.
  LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.
  SET PF-STATUS SPACE.
  SUPPRESS DIALOG.
  PERFORM IN_DESCRIBE_INTERFACE USING GV_TAB-NAME."GET IDESC INTERFACE
ENDMODULE.

 

LOG