Foro -Documentación -Código fuente -Contacto -Empleo

Buscar

Traducir

Amazon

Z_ALV_SHDB_DOC PDF Imprimir E-mail
Usar puntuación: / 0
MaloBueno 
Código fuente - Informativos
Sábado, 05 de Junio de 2004 01:38
Información sobre datos batch input

REPORT z_alv_shdb_doc.
*---------------------------------------------------------------------*
* This report generates and displays a documentation for a SHDB record*
*---------------------------------------------------------------------*
* Author : Michel PIOUD                                               *
* Email : 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
   HomePage : http://www.geocities.com/mpioud *
*---------------------------------------------------------------------*
* Macro definition
 DEFINE m_append.
  ADD 1 TO g_j.
   gt_data-colx = g_i.
   gt_data-colj = g_j.
  APPEND gt_data.
  CLEAR gt_data.
 END-OF-DEFINITION.

CONSTANTS c_%bdc(4) VALUE '%BDC'. 

TABLES apqi.                           " Queue info definition

SELECTION-SCREEN :
  SKIP, BEGIN OF LINE, COMMENT 10(20) v_1 FOR FIELD p_grpid."#EC NEEDED
* SHDB Group name
PARAMETERS p_grpid LIKE apqi-groupid OBLIGATORY.
SELECTION-SCREEN END OF LINE.

DATA::
* SHDB Queue identification (unique key)
   p_qid LIKE apqi-qid,

  BEGIN OF gs_field,
     ddtext LIKE dd04v-ddtext,
    TYPE LIKE dd03l-datatype,
     length LIKE dd03l-leng,
     decimal LIKE dd03l-decimals,
     tab_control LIKE dd03l-checktable,
  END OF gs_field,

* Data to display
  BEGIN OF gt_data OCCURS 0,
     colx TYPE i,
     colj TYPE i,
     col0(40),
     col1(100),
     col2(100),
     col3(3),
     col4(3),
     col5(4),
     col6(40),
     color(4),
     box,
  END OF gt_data,

   g_descript(100),                      " Work field (column 3)
   g_prog TYPE progname,
   g_i TYPE i,
   g_j TYPE i,
* Internal table of data from SHDB record
   gt_dynprotab LIKE bdcdata OCCURS 0 WITH HEADER LINE.

*---------------------------------------------------------------------*
INITIALIZATION.

   v_1 = 'SHDB record'. 

*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_grpid.

  PERFORM f_choose_shdb USING 'GROUPID' 
                               'P_GRPID' 
                     CHANGING p_grpid.

   CHECK NOT p_grpid IS INITIAL.

  SELECT qid INTO p_qid FROM apqi UP TO 2 ROWS
                       WHERE groupid = p_grpid
                         AND mandant = sy-mandt
                         AND datatyp = c_%bdc.
  ENDSELECT.

   CHECK sy-dbcnt = 2.

  PERFORM f_choose_shdb USING 'QID' '' 
                     CHANGING p_qid.

*---------------------------------------------------------------------*
AT SELECTION-SCREEN.

  IF NOT p_qid IS INITIAL.
*   SHDB record exists ?
    SELECT qid INTO p_qid FROM apqi UP TO 1 ROWS
                         WHERE qid = p_qid
                           AND groupid = p_grpid
                           AND mandant = sy-mandt
                           AND datatyp = c_%bdc.
    ENDSELECT.
     CHECK SY-SUBRC NE 0.
  ENDIF.
* SHDB record exists ?
  SELECT qid INTO p_qid FROM apqi UP TO 1 ROWS
                       WHERE groupid = p_grpid
                         AND mandant = sy-mandt
                         AND datatyp = c_%bdc.
  ENDSELECT.
   CHECK SY-SUBRC NE 0.
* Recording & is not available
   MESSAGE i627(ms) WITH p_grpid.
  STOP.

*---------------------------------------------------------------------*
START-OF-SELECTION.

* Read SHDB record
  CALL FUNCTION 'BDC_OBJECT_READ' 
       EXPORTING
             queue_id = p_qid
       TABLES
             dynprotab = gt_dynprotab
       EXCEPTIONS
             not_found = 1
             system_failure = 2
             invalid_datatype = 3
             OTHERS = 4.

  IF SY-SUBRC >< 0.
*   Recording & is not available
     MESSAGE s627(ms) WITH p_qid.
    EXIT.
  ENDIF.

  CLEAR apqi.
  SELECT * FROM apqi UP TO 1 ROWS WHERE qid = p_qid
                                    AND datatyp = c_%bdc
                                    AND mandant = sy-mandt.
  ENDSELECT.

   CHECK SY-SUBRC EQ 0.

* SHDB properties
  CLEAR g_descript.
  WRITE apqi-credate TO g_descript DD/MM/YY.
  CONCATENATE 'Created on :' g_descript '-' 
         INTO g_descript SEPARATED BY space.
  WRITE apqi-cretime TO g_descript+22.
  CONCATENATE g_descript 'by' apqi-creator
         INTO g_descript SEPARATED BY space.

  ADD 1 TO g_i.
   gt_data-col0 = 'Object name'. 
   gt_data-col1 = apqi-groupid.
   gt_data-col2 = g_descript.
   gt_data-color = 'C110'. 
   m_append.

  LOOP AT gt_dynprotab.
    CLEAR g_descript.
    CASE gt_dynprotab-dynbegin.
      WHEN 'T'.                         " New transaction
        PERFORM transaction.
      WHEN 'X'.                         " New dynpro
        PERFORM dynpro.
      WHEN space.                      " Dynpro field
        IF gt_dynprotab-fnam(10) = 'BDC_OKCODE'. 
          PERFORM okcode.
        ELSEIF gt_dynprotab-fnam(10) = 'BDC_CURSOR'. 
          PERFORM cursor.
        ELSEIF gt_dynprotab-fnam(10) = 'BDC_SUBSCR'. 
          PERFORM subscr.
        ELSE.
          PERFORM f_field.
        ENDIF.
    ENDCASE.
  ENDLOOP.

  PERFORM f_display.

*---------------------------------------------------------------------*
*    Form COMPLETE                                                    *
*---------------------------------------------------------------------*
FORM complete USING u_field TYPE c.

  DATA :
     l_table LIKE dd03l-tabname,        " Table name
     l_field LIKE dd03l-fieldname,      " Field Name
     l_temp LIKE dd03l-fieldname,                           "#EC NEEDED

     lt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE,
     lt_dd04v LIKE dd04v OCCURS 0 WITH HEADER LINE.

  CLEAR gs_field.

  SPLIT u_field AT '-'  INTO l_table l_field.
  IF l_table(1) = '*'. 
    SHIFT l_table.
  ENDIF.

  IF l_field CA '('. 
    SPLIT l_field AT '('  INTO l_field l_temp.
  ENDIF.

* Get text for field
  CALL FUNCTION 'FIELDNAME_ROLLNAME_TEXT' 
       EXPORTING
             i_as4local = 'A' 
             i_fieldname = l_field
             i_tabname = l_table
       TABLES
             e_dd03l = lt_dd03l
             e_dd04v = lt_dd04v
       EXCEPTIONS
             error_in_parameters = 1
             not_found = 2
             OTHERS = 3.

   CHECK SY-SUBRC EQ 0.
  CLEAR : lt_dd03l,  lt_dd04v,  gs_field.
  READ TABLE lt_dd03l INDEX 1.
  READ TABLE lt_dd04v INDEX 1.
   MOVE lt_dd03l-leng TO gs_field-length.
   MOVE lt_dd03l-datatype TO gs_field-type.
   MOVE lt_dd03l-checktable TO gs_field-tab_control.
   MOVE lt_dd04v-ddtext TO gs_field-ddtext.
   MOVE lt_dd03l-decimals TO gs_field-decimal.

ENDFORM.                               " COMPLETE
*---------------------------------------------------------------------*
*       Form  TRANSACTION
*---------------------------------------------------------------------*
FORM transaction.

* Read transaction text
  SELECT SINGLE ttext INTO g_descript FROM tstct
                                     WHERE tcode = gt_dynprotab-fnam
                                       AND sprsl = sy-langu.
  IF SY-SUBRC NE 0.
*   Read transaction text
    SELECT ttext INTO g_descript FROM tstct UP TO 1 ROWS
                                WHERE tcode = gt_dynprotab-fnam.
    ENDSELECT.
    IF SY-SUBRC NE 0.
       g_descript = 'Text of transaction unkowned'.           "#EC *
    ENDIF.
  ENDIF.

  ADD 1 TO g_i.
  CLEAR g_j.
   gt_data-col0 = 'Transaction'. 
   gt_data-col1 = gt_dynprotab-fnam.
   gt_data-col2 = g_descript.
   gt_data-color = 'C100'. 
   m_append.

   gt_data-col0 = 'Name'. 
   gt_data-col1 = 'Value'. 
   gt_data-col2 = 'Description'. 
   gt_data-col3 = 'Lng'. 
   gt_data-col4 = 'Dec'. 
   gt_data-col5 = 'Type'. 
   gt_data-col6 = 'TbCtrl'.                                  "#EC *
   gt_data-color = 'C100'. 
   m_append.

ENDFORM.                               " TRANSACTION
*---------------------------------------------------------------------*
*       Form  DYNPRO
*---------------------------------------------------------------------*
FORM dynpro.

* Read dynpro text
  SELECT SINGLE dtxt INTO g_descript FROM d020t
                    WHERE prog = gt_dynprotab-program
                      AND dynr = gt_dynprotab-dynpro
                      AND lang = sy-langu.
  IF SY-SUBRC NE 0.
*   Read dynpro text
    SELECT dtxt INTO g_descript FROM d020t UP TO 1 ROWS
               WHERE prog = gt_dynprotab-program
                 AND dynr = gt_dynprotab-dynpro.
    ENDSELECT.
    IF SY-SUBRC NE 0.
       g_descript = 'Unkowned'.                               "#EC *
    ENDIF.
  ENDIF.

  IF g_j = 2.
    ADD 1 TO g_i.
  ELSE.
     m_append.
  ENDIF.
   gt_data-col0 = gt_dynprotab-program.
   g_prog = gt_dynprotab-program.
   gt_data-col1 = gt_dynprotab-dynpro.
   gt_data-col2 = g_descript.
   m_append.

ENDFORM.                               " DYNPRO
*---------------------------------------------------------------------*
*       Form  OKCODE
*---------------------------------------------------------------------*
FORM okcode.

  DATA l_code LIKE sy-tcode.

   l_code = gt_dynprotab-fval.
  IF l_code(1) EQ '='. 
    SHIFT l_code LEFT.
  ENDIF.

* Read OKcode text
  SELECT text INTO gt_data-col2 UP TO 1 ROWS
              FROM rsmptexts
             WHERE progname = g_prog
               AND sprsl = sy-langu
               AND obj_code = l_code.
  ENDSELECT.
  IF SY-SUBRC NE 0.
*   Read OKcode text
    SELECT text INTO gt_data-col2 UP TO 1 ROWS
                FROM rsmptexts
               WHERE progname = g_prog
                 AND obj_code = l_code.
    ENDSELECT.
  ENDIF.

   gt_data-col0 = gt_dynprotab-fnam.
   gt_data-col1 = gt_dynprotab-fval.
   m_append.

ENDFORM.                               " OKCODE
*---------------------------------------------------------------------*
*       Form  cursor
*---------------------------------------------------------------------*
FORM cursor.

  IF gt_dynprotab-fval CA '-'. 
    PERFORM complete USING gt_dynprotab-fval.
  ENDIF.

   CHECK gt_dynprotab-fval CA '-'. 

   gt_data-col0 = gt_dynprotab-fnam.
   gt_data-col1 = gt_dynprotab-fval.
   gt_data-col2 = gs_field-ddtext(60).
   m_append.

ENDFORM.                               " CURSOR
*---------------------------------------------------------------------*
*       Form  subscr
*---------------------------------------------------------------------*
FORM subscr.

  DATA : l_prog TYPE progname,
          l_dynp TYPE dynnr.

   l_prog = gt_dynprotab-fval.
   l_dynp = gt_dynprotab-fval+40(4).

* Read Subscr text
  SELECT SINGLE dtxt INTO g_descript FROM d020t
                    WHERE prog = l_prog
                      AND dynr = l_dynp
                      AND lang = sy-langu.
  IF SY-SUBRC NE 0.
*   Read Subscr text
    SELECT dtxt INTO g_descript FROM d020t UP TO 1 ROWS
               WHERE prog = l_prog
                 AND dynr = l_dynp.
    ENDSELECT.
    IF SY-SUBRC NE 0.
       g_descript = 'Unkwoned'.                               "#EC *
    ENDIF.
  ENDIF.
  CONDENSE gt_dynprotab-fval.
   gt_data-col0 = gt_dynprotab-fnam.
   gt_data-col1 = gt_dynprotab-fval.
   gt_data-col2 = g_descript.
   m_append.

ENDFORM.                               " SUBSCR
*---------------------------------------------------------------------*
*       Form  F_FIELD
*---------------------------------------------------------------------*
FORM f_field.

  IF gt_dynprotab-fnam CA '-'. 
    PERFORM complete USING gt_dynprotab-fnam.
  ENDIF.

   CHECK gt_dynprotab-fnam CA '-'. 

   gt_data-col0 = gt_dynprotab-fnam.
   gt_data-col1 = gt_dynprotab-fval(40).
   gt_data-col2 = gs_field-ddtext(60).
  WRITE gs_field-length+3(3) TO gt_data-col3 NO-ZERO RIGHT-JUSTIFIED.
  WRITE gs_field-decimal+3(3) TO gt_data-col4 NO-ZERO RIGHT-JUSTIFIED.
   gt_data-col5 = gs_field-type.
   gt_data-col6 = gs_field-tab_control.
   m_append.

ENDFORM.                               " F_FIELD
*---------------------------------------------------------------------*
*       FORM F_DISPLAY                                                *
*---------------------------------------------------------------------*
FORM f_display.

   TYPE-POOLS:  slis.                    " Generic list types

  DATA :
     ls_layout TYPE slis_layout_alv,
     ls_print TYPE slis_print_alv,
     ls_fieldcat TYPE slis_fieldcat_alv,
     lt_fieldcat TYPE slis_t_fieldcat_alv,
     lt_sort	 TYPE slis_t_sortinfo_alv,
     ls_sort TYPE slis_sortinfo_alv,
     ls_grid_settings TYPE lvc_s_glay,
     lt_excluding TYPE slis_t_extab.

   ls_grid_settings-top_p_only = 'X'. 

   ls_layout-group_change_edit = 'X'. 
   ls_layout-colwidth_optimize = 'X'. 
   ls_layout-zebra = 'X'. 
   ls_layout-cell_merge = 'X'. 
   ls_layout-detail_popup = 'X'. 
   ls_layout-get_selinfos = 'X'. 
   ls_layout-no_colhead = 'X'. 
   ls_layout-no_sumchoice = 'X'. 
   ls_layout-no_totalline = 'X'. 
   ls_layout-info_fieldname = 'COLOR'. 
   ls_layout-box_fieldname = 'BOX'. 

   ls_print-no_print_selinfos = 'X'.    " Display no selection infos
   ls_print-no_print_listinfos = 'X'.    " Display no listinfos

* Exclude CUA functions
  APPEND '&OUP'  TO lt_excluding.
  APPEND '&ODN'  TO lt_excluding.
  APPEND '&ILT'  TO lt_excluding.

* Build field catalog
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' 
       EXPORTING
             i_program_name = sy-cprog
             i_internal_tabname = 'GT_DATA' 
             i_inclname = sy-cprog
       CHANGING
             ct_fieldcat = lt_fieldcat.

   ls_fieldcat-just = 'R'. 
  MODIFY lt_fieldcat FROM ls_fieldcat
   TRANSPORTING just WHERE fieldname = 'COL3'  OR fieldname = 'COL4'. 

   ls_fieldcat-tech = 'X'. 
  MODIFY lt_fieldcat FROM ls_fieldcat
   TRANSPORTING tech WHERE fieldname = 'COLX'  OR fieldname = 'COLJ' 
                       OR fieldname = 'COLOR'  OR fieldname = 'BOX'. 

* Build sort table
  CLEAR ls_sort.
   ls_sort-fieldname = 'COLX'. 
   ls_sort-up = 'X'. 
   ls_sort-group = 'UL'.             " Underline
  APPEND ls_sort TO lt_sort.

  CLEAR ls_sort.
   ls_sort-fieldname = 'COLJ'. 
   ls_sort-up = 'X'.              " Sort
  APPEND ls_sort TO lt_sort.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 
       EXPORTING
             i_interface_check = ' ' 
             i_buffer_active = ' ' 
             i_callback_program = sy-cprog
             i_grid_settings = ls_grid_settings
             is_layout = ls_layout
             it_fieldcat = lt_fieldcat
             it_excluding = lt_excluding
             it_sort = lt_sort
             i_default = ' ' 
             i_save = 'A' 
             is_print = ls_print
       TABLES
             t_outtab = gt_data
       EXCEPTIONS
             program_error = 1
             OTHERS = 2.

  IF SY-SUBRC <> 0.
     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.
*---------------------------------------------------------------------*
*      Form  F_CHOOSE_SHDB
*---------------------------------------------------------------------*
FORM f_choose_shdb USING u_value1 TYPE fieldname
                          u_value2 TYPE dynfnam
                CHANGING u_val.

  TYPES::
    BEGIN OF ty_s_values,
       qid TYPE apq_quid,
       groupid TYPE apq_grpn,
       creator TYPE apq_mapn,
       credate TYPE apq_crda,
       cretime TYPE apq_crti,
       transcnt TYPE apq_tran,
       msgcnt TYPE apq_reco,
    END OF ty_s_values.

  DATA::
     lt_values TYPE TABLE OF ty_s_values,
     Lt_return TYPE HRRETURN_TAB WITH HEADER LINE,
     l_progname TYPE SY-REPID,
     l_dynnum TYPE sy-dynnr.

   l_progname = SY-REPID.
   l_dynnum = sy-dynnr.

  IF u_value1 = 'GROUPID'. 
    SELECT *
      FROM apqi
      INTO CORRESPONDING FIELDS OF TABLE lt_values
     WHERE datatyp = c_%bdc
       AND mandant = sy-mandt.
  ELSE.
    SELECT *
      FROM apqi
      INTO CORRESPONDING FIELDS OF TABLE lt_values
     WHERE datatyp = c_%bdc
       AND mandant = sy-mandt
       AND groupid = p_grpid.
  ENDIF.

* F4 help
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' 
       EXPORTING
             retfield = u_value1
             dynpprog = l_progname
             dynpnr = l_dynnum
             dynprofield = u_value2
             value_org = 'S' 
       TABLES
             value_tab = lt_values
             return_tab = lt_return
       EXCEPTIONS
             parameter_error = 1
             no_values_found = 2
             OTHERS = 3.
  IF SY-SUBRC <> 0.
     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

   CHECK NOT lt_return[] IS INITIAL.
  READ TABLE lt_return INDEX 1.
   u_val = lt_return-fieldval.

ENDFORM.                               " F_CHOOSE_SHDB
***************** END OF PROGRAM Z_ALV_SHDB_DOC ***********************

Comentarios
Buscar
¡Sólo los usuarios registrados pueden escribir comentarios!

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 
home search