Icon_history

hi
i need to add icon_history symbol in the alv grid
could you please help in this
<b><REMOVED BY MODERATOR></b>
Message was edited by:
        Alvaro Tejada Galindo

Suresh,
You need to create the PF-Status in the menu painter and then call the same in the I_CALLBACK_PF_STATUS_SET event of your ALV function module.
KC

Similar Messages

  • ALV buttons

    Hi all
    I need to add a button/icon at the end of each row of an ALV. When the user clicks on a button it will send a mail.
    Can you help me? Specially on the first issue.
    Many thanks.

    hi check this code this is also works as same except the mail part,this will trigger a workflow log .plz go trought he code below and revert back to me for any clarifications.
    *& Report yi_amra_yiamraber                                            *
    report yi_amra_yiamraber no standard page heading.
    tables: yiamra_ber,SWW_WI2OBJ.
    include <icon>.
    include <symbol>.
    type-pools: slis.
    class cl_gui_resources definition load.
    constants: con_true     type char1 value 'X',
               con_on       type char1 value '1',
               con_off      type char1 value '0',
               con_exit like sy-ucomm value 'EXIT',
               con_back like sy-ucomm value 'BACK',
               con_canc like sy-ucomm value 'CANC'.
    data: g_okcode                 type sy-ucomm,
          g_container_d0100        type ref to cl_gui_custom_container,
          g_container_name_d0100   type scrfname value 'D0100_CONTAINER',
          g_grid_d0100             type ref to cl_gui_alv_grid.
    DATA: objkey LIKE sweinstcou-objkey.
    DATA: ls_ibfobject TYPE  sibflporb.
    data : v_WI_ID type SWW_WI2OBJ-WI_ID.
    DATA BEGIN OF GT_yiamra_ber OCCURS 0 .
            INCLUDE STRUCTURE yiamra_ber .
    DATA cellstyles TYPE lvc_t_styl.
    DATA text(28) TYPE c.
    DATA printer(10)   TYPE c.
    DATA workflow(13)  TYPE c.
    DATA END OF GT_yiamra_ber .
    DATA  ls_style     TYPE lvc_s_styl.
    DATA:  X_FIELDCAT  TYPE LVC_S_FCAT.
    DATA:L_POS TYPE I VALUE 1.
    data: gs_layout TYPE lvc_s_layo.
    SELECT-OPTIONS LFDNR FOR yiamra_ber-LFDNR.
    SELECT-OPTIONS POSNR FOR yiamra_ber-POSNR.
    SELECT-OPTIONS UNAME FOR yiamra_ber-UNAME.
    SELECT-OPTIONS ROLLE FOR yiamra_ber-ROLLE.
    SELECT-OPTIONS PRCTR FOR yiamra_ber-PRCTR.
    SELECT-OPTIONS PRCTRGRP FOR yiamra_ber-PRCTRGRP.
    SELECT-OPTIONS KOSTL FOR yiamra_ber-KOSTL.
    SELECT-OPTIONS KOSTLGRP FOR yiamra_ber-KOSTLGRP.
    SELECT-OPTIONS ABREC FOR yiamra_ber-ABRECHNST.
    SELECT-OPTIONS ANFORD FOR yiamra_ber-ANFORDERER.
    SELECT-OPTIONS DATUMU FOR yiamra_ber-DATUMNEU.
    SELECT-OPTIONS DATUMA FOR yiamra_ber-DATUMANF.
    SELECT-OPTIONS STATUS FOR yiamra_ber-STATUS.
    SELECT-OPTIONS DATUM FOR yiamra_ber-DATUMADM.
    SELECT-OPTIONS DATUMB FOR yiamra_ber-DATUMBEG.
    SELECT-OPTIONS DATUME FOR yiamra_ber-DATUMEND.
    class Definition.
    CLASS lcl_event_handler DEFINITION .
      PUBLIC SECTION .
        METHODS:
    *To control button clicks
        handle_button_click
        FOR EVENT button_click OF cl_gui_alv_grid
        IMPORTING es_col_id
                  es_row_no.
    *PRIVATE SECTION.
       METHODS:
         perform_copy_checks
            IMPORTING
               er_data_changed TYPE REF TO cl_alv_changed_data_protocol.
    ENDCLASS.                    "lcl_event_handler DEFINITION
    *&       Class (Implementation)  lcl_event_handler
           Text
    CLASS lcl_event_handler IMPLEMENTATION.
    METHOD handle_button_click .
        PERFORM handle_button_click USING es_col_id
                                          es_row_no.
      ENDMETHOD.
    ENDCLASS.               "lcl_event_handler
    Display Data
    start-of-selection.
    end-of-selection.
    call screen 0100.
    *&      Module  d0100_set_status  OUTPUT
          text
    module d0100_set_status output.
      perform d0100_set_status.
    endmodule.                             " d0100_set_status  OUTPUT
    *&      Module  d0100_prepare_container  OUTPUT
          text
    module d0100_prepare_container output.
      perform d0100_prepare_container.
    endmodule.                             " d0100_prepare_container  OUTPUT
    *&      Module  d0100_exit  INPUT
          text
    module d0100_exit input.
      perform d0100_exit changing g_okcode.
    endmodule.                             " d0100_exit  INPUT
    *&      Module  d0100_fcode  INPUT
          text
    module d0100_fcode input.
      perform d0100_fcode changing g_okcode.
    endmodule.                             " d0100_fcode  INPUT
    *&      Form  d0100_set_status
          text
    form d0100_set_status.
      set pf-status 'D0100' .
      set titlebar 'D0100'.
      SELECT * FROM yiamra_ber
      INTO corresponding fields of TABLE GT_yiamra_ber
      WHERE  LFDNR IN LFDNR
      AND POSNR   IN POSNR
      AND UNAME  IN UNAME
      AND ROLLE In ROLLE
      AND PRCTR IN PRCTR
      AND PRCTRGRP IN PRCTRGRP
      AND KOSTL IN KOSTL
      AND KOSTLGRP IN KOSTLGRP
      AND ABRECHNST  IN ABREC
      AND  ANFORDERER IN  ANFORD
      AND   DATUMNEU  IN DATUMU
      AND  DATUMANF IN  DATUMA
      AND  STATUS IN  STATUS
      AND   DATUMADM IN DATUM
      AND   DATUMBEG IN  DATUMB
      AND   DATUMEND IN  DATUME.
      loop at gt_yiamra_ber.
      CONCATENATE GT_yiamra_ber-lfdnr GT_yiamra_ber-posnr INTO objkey.
            ls_ibfobject-catid = 'BO'.
            ls_ibfobject-typeid = 'YIAMRAROLL'.
            ls_ibfobject-instid = objkey.
    clear v_WI_ID.
    select single WI_ID from SWW_WI2OBJ into v_WI_ID where INSTID = objkey.
           IF sy-subrc = 0.
        ls_style-fieldname = 'WORKFLOW'.
        ls_style-style = cl_gui_alv_grid=>mc_style_button.
        INSERT ls_style INTO TABLE GT_yiamra_ber-cellstyles.
    GT_yiamra_ber-anfordern = icon_workflow_event_producer.
    GT_yiamra_ber-printer = icon_print.
        GT_yiamra_ber-workflow = ICON_HISTORY.
        endif.
         ls_style-fieldname = 'TEXT' .
        ls_style-style = cl_gui_alv_grid=>mc_style_button .
        INSERT ls_style INTO TABLE gt_yiamra_ber-cellstyles.
        GT_yiamra_ber-text = ICON_DISPLAY_TEXT.
        MODIFY GT_yiamra_ber
          INDEX sy-tabix
          TRANSPORTING cellstyles Text workflow.
    endloop.
    endform.                               " d0100_set_status
    *&      Form  d0100_prepare_container
          text
    form d0100_prepare_container.
      data: ls_vari type disvariant,
            lt_fcat type lvc_t_fcat.
      DATA gr_event_handler TYPE REF TO lcl_event_handler .
    DATA IT_UI_FUNCTIONS TYPE UI_FUNCTIONS.
    APPEND '&DETAIL' TO IT_UI_FUNCTIONS.
      if g_container_d0100 is initial.
        create object g_container_d0100
                      exporting container_name = g_container_name_d0100.
        create object g_grid_d0100
                      exporting i_parent = g_container_d0100.
        CREATE OBJECT gr_event_handler .
        SET HANDLER gr_event_handler->handle_button_click FOR g_grid_d0100 .
        perform d0100_set_grid_vari changing ls_vari.
        perform d0100_set_grid_fcat changing lt_fcat.
       perform d0100_set_grid_fcat1 changing lt_fcat.
      call method g_grid_d0100->INIT_TOOLBAR
        EXPORTING
          IT_TOOLBAR_EXCLUDING = IT_UI_FUNCTIONS.
        call method g_grid_d0100->set_table_for_first_display
          EXPORTING
            is_layout       = gs_layout
            IT_TOOLBAR_EXCLUDING = IT_UI_FUNCTIONS
          CHANGING
            it_outtab       = gt_yiamra_ber[]
            it_fieldcatalog = lt_fcat.
        call method cl_gui_control=>set_focus
          EXPORTING
            control = g_grid_d0100.
      endif.
    endform.                               " d0100_prepare_container
    *&      Form  d0100_exit
          text
    form d0100_exit changing c_okcode type sy-ucomm.
      data: l_okcode like sy-ucomm.
      l_okcode = c_okcode.
      clear c_okcode.
      case l_okcode.
        when con_exit or con_back or con_canc.
          call method g_grid_d0100->free.
          call method g_container_d0100->free.
          call method cl_gui_cfw=>flush.
          clear g_container_d0100.
          clear g_grid_d0100.
          set screen 0.
          leave screen.
      endcase.
    endform.                               " d0100_exit
    *&      Form  d0100_fcode
          text
    form d0100_fcode changing c_okcode type sy-ucomm.
      data: l_okcode like sy-ucomm.
      l_okcode = c_okcode.
      clear c_okcode.
      call method cl_gui_cfw=>dispatch.
      case l_okcode.
        when con_exit or con_back or con_canc.
          call method g_container_d0100->free.
          call method cl_gui_cfw=>flush.
          clear g_container_d0100.
          clear g_grid_d0100.
          set screen 0.
          leave screen.
      endcase.
    endform.                               " d0100_fcode
    *&      Form  d0100_set_grid_fcat
          text
    form d0100_set_grid_fcat changing ct_fcat type lvc_t_fcat.
      data: ls_fcat type lvc_s_fcat.
      gs_layout-stylefname = 'CELLSTYLES'.
    *+++ STEP 1: retrieve the fieldcatalog
    call function 'LVC_FIELDCATALOG_MERGE'
       EXPORTING
         i_structure_name       = 'YIAMRA_BER'
       CHANGING
         ct_fieldcat            = ct_fcat[]
       EXCEPTIONS
         inconsistent_interface = 1
         program_error          = 2
         others                 = 3.
    if sy-subrc eq 0.
    *+++ STEP 2: modify the fieldcatalog.
       loop at ct_fcat into ls_fcat.
      clear ls_fcat.
      ls_fcat-fieldname = 'LFDNR' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'LFDNR' .
      APPEND LS_FCAT TO CT_FCAT.
    clear ls_fcat.
      ls_fcat-fieldname = 'POSNR' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'POSNR' .
      APPEND LS_FCAT TO CT_FCAT.
       clear ls_fcat.
      ls_fcat-fieldname = 'UNAME' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'UNAME' .
      APPEND LS_FCAT TO CT_FCAT.
        clear ls_fcat.
      ls_fcat-fieldname = 'ROLLE' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'ROLLE' .
      APPEND LS_FCAT TO CT_FCAT.
          clear ls_fcat.
      ls_fcat-fieldname = 'PRCTR' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'PRCTR' .
      APPEND LS_FCAT TO CT_FCAT.
            clear ls_fcat.
      ls_fcat-fieldname = 'PRCTRGRP' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'PRCTRGRP' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'KOSTL' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'KOSTL' .
      APPEND LS_FCAT TO CT_FCAT.
                clear ls_fcat.
      ls_fcat-fieldname = 'KOSTLGRP' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'KOSTLGRP' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'ABRECHNST' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'ABRECHNST' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'ANFORDERER' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'ANFORDERER' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'DATUMNEU' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'DATUMNEU' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'DATUMANF' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'DATUMANF' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'STATUS' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'STATUS' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'DATUMADM' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'DATUMADM' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'DATUMBEG' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'DATUMBEG' .
      APPEND LS_FCAT TO CT_FCAT.
                clear ls_fcat.
      ls_fcat-fieldname = 'DATUMEND' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'DATUMEND' .
      APPEND LS_FCAT TO CT_FCAT.
      clear ls_fcat.
      ls_fcat-fieldname = 'WORKFLOW' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'WORKFLOW'.
      ls_fcat-icon = 'X'.
      APPEND LS_FCAT TO CT_FCAT.
        clear ls_fcat.
      ls_fcat-fieldname = 'TEXT' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'TEXT' .
      ls_fcat-icon = 'X'.
      APPEND LS_FCAT TO CT_FCAT.
         modify ct_fcat from ls_fcat.
       endloop.
    endif.
    endform.                               " d0100_set_grid_fcat
    *&      Form  d0100_set_grid_vari
          text
    form d0100_set_grid_vari changing cs_vari type disvariant.
    *+++ allow layout maintenance
    *+++ note report is compelling
    cs_vari-report      = .
    cs_vari-handle      = .
    cs_vari-log_group   = .
    cs_vari-username    = .
    cs_vari-variant     = .
    cs_vari-text        = .
    cs_vari-dependvars  = .
    endform.                               " d0100_set_grid_vari
    *&      Form  handle_button_click
          text
         -->P_ES_COL_ID  text
         -->P_ES_ROW_NO  text
    FORM handle_button_click  USING    P_ES_COL_ID TYPE lvc_s_col
                                       P_ES_ROW_NO TYPE lvc_s_roid.
    DATA: objkey LIKE sweinstcou-objkey.
      DATA: ls_ibfobject TYPE  sibflporb.
      DATA:  BEGIN OF ls_output OCCURS 0 .
            INCLUDE STRUCTURE yiamra_ber .
    DATA cellstyles TYPE lvc_t_styl.
    DATA text(28) TYPE c.
    DATA printer(10)   TYPE c.
    DATA workflow(13)  TYPE c.
    DATA END OF ls_output.
      READ TABLE GT_yiamra_ber INDEX p_es_row_no-row_id INTO ls_output.
      IF sy-subrc <> 0.
        RETURN.
      ENDIF.
      case  P_ES_COL_ID-fieldname.
        when 'TEXT'.
          IF GT_yiamra_ber-rolle IS NOT INITIAL.
            CALL FUNCTION 'Y_I_AMRA_ROLLE_TEXT'
              EXPORTING
                i_rolle = GT_yiamra_ber-rolle.
          endif.
        when 'WORKFLOW'.
          clear: objkey.
          IF sy-subrc = 0 AND p_es_col_id-fieldname = 'WORKFLOW'.
            CONCATENATE ls_output-lfdnr ls_output-posnr INTO objkey.
            ls_ibfobject-catid = 'BO'.
            ls_ibfobject-typeid = 'YIAMRAROLL'.
            ls_ibfobject-instid = objkey.
            CALL FUNCTION 'SWI_WF_CONNECTIONS_DISPLAY'
              EXPORTING
                ibf_object         = ls_ibfobject
              EXCEPTIONS
                not_found          = 1
                no_authority       = 2
                no_workflows_found = 3
                OTHERS             = 4.
            IF sy-subrc <> 0.
              MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
            ENDIF.
          endif.
      endcase.
    ENDFORM.                    " handle_button_click

  • Regarding  object oriented

    Hi,
    I am new to the  oops concept..
    i know  how to write methods...
    can any one guide to use these oops concept in  *REPORTS*,&
    hw can  i  implement (inheritance, polymorphism,& other concepts..)
    can any one give sample report for  using all oops concepts
    how can  implement the methods in Reports..
    Thanks& Regards
    Spandana

    hi if you wants to use oo in reports than u can go for alv.there you can get alot of options for using oo.
    as  a sample look into the below report whcih used 00 for events and displaying the list.
    *& Report yi_amra_yiamraber                                            *
    report yi_amra_yiamraber no standard page heading.
    tables: yiamra_ber,SWW_WI2OBJ.
    include <icon>.
    include <symbol>.
    type-pools: slis.
    class cl_gui_resources definition load.
    constants: con_true    type char1 value 'X',
              con_on      type char1 value '1',
              con_off      type char1 value '0',
              con_exit like sy-ucomm value 'EXIT',
              con_back like sy-ucomm value 'BACK',
              con_canc like sy-ucomm value 'CANC'.
    data: g_okcode                type sy-ucomm,
          g_container_d0100        type ref to cl_gui_custom_container,
          g_container_name_d0100  type scrfname value 'D0100_CONTAINER',
          g_grid_d0100            type ref to cl_gui_alv_grid.
    DATA: objkey LIKE sweinstcou-objkey.
    DATA: ls_ibfobject TYPE  sibflporb.
    data : v_WI_ID type SWW_WI2OBJ-WI_ID.
    DATA BEGIN OF GT_yiamra_ber OCCURS 0 .
            INCLUDE STRUCTURE yiamra_ber .
    DATA cellstyles TYPE lvc_t_styl.
    DATA text(28) TYPE c.
    DATA printer(10)  TYPE c.
    DATA workflow(13)  TYPE c.
    DATA END OF GT_yiamra_ber .
    DATA  ls_style    TYPE lvc_s_styl.
    DATA:  X_FIELDCAT  TYPE LVC_S_FCAT.
    DATA:L_POS TYPE I VALUE 1.
    data: gs_layout TYPE lvc_s_layo.
    class Definition.
    CLASS lcl_event_handler DEFINITION .
      PUBLIC SECTION .
        METHODS:
    *To control button clicks
        handle_button_click
        FOR EVENT button_click OF cl_gui_alv_grid
        IMPORTING es_col_id
                  es_row_no.
    *PRIVATE SECTION.
       METHODS:
         perform_copy_checks
           IMPORTING
               er_data_changed TYPE REF TO cl_alv_changed_data_protocol.
    ENDCLASS.                    "lcl_event_handler DEFINITION
    *&      Class (Implementation)  lcl_event_handler
           Text
    CLASS lcl_event_handler IMPLEMENTATION.
    METHOD handle_button_click .
        PERFORM handle_button_click USING es_col_id
                                          es_row_no.
      ENDMETHOD.
    ENDCLASS.              "lcl_event_handler
    Display Data
    start-of-selection.
    end-of-selection.
    call screen 0100.
    *&      Module  d0100_set_status  OUTPUT
         text
    module d0100_set_status output.
      perform d0100_set_status.
    endmodule.                            " d0100_set_status  OUTPUT
    *&      Module  d0100_prepare_container  OUTPUT
         text
    module d0100_prepare_container output.
      perform d0100_prepare_container.
    endmodule.                            " d0100_prepare_container  OUTPUT
    *&      Module  d0100_exit  INPUT
         text
    module d0100_exit input.
      perform d0100_exit changing g_okcode.
    endmodule.                            " d0100_exit  INPUT
    *&      Module  d0100_fcode  INPUT
         text
    module d0100_fcode input.
      perform d0100_fcode changing g_okcode.
    endmodule.                            " d0100_fcode  INPUT
    *&      Form  d0100_set_status
         text
    form d0100_set_status.
      set pf-status 'D0100' .
      set titlebar 'D0100'.
      SELECT * FROM yiamra_ber
      INTO corresponding fields of TABLE GT_yiamra_ber
      WHERE  LFDNR IN LFDNR
      AND POSNR  IN POSNR
      AND UNAME  IN UNAME
      AND ROLLE In ROLLE
      AND PRCTR IN PRCTR
      AND PRCTRGRP IN PRCTRGRP
      AND KOSTL IN KOSTL
      AND KOSTLGRP IN KOSTLGRP
      AND ABRECHNST  IN ABREC
      AND  ANFORDERER IN  ANFORD
      AND  DATUMNEU  IN DATUMU
      AND  DATUMANF IN  DATUMA
      AND  STATUS IN  STATUS
      AND  DATUMADM IN DATUM
      AND  DATUMBEG IN  DATUMB
      AND  DATUMEND IN  DATUME.
      loop at gt_yiamra_ber.
      CONCATENATE GT_yiamra_ber-lfdnr GT_yiamra_ber-posnr INTO objkey.
            ls_ibfobject-catid = 'BO'.
            ls_ibfobject-typeid = 'YIAMRAROLL'.
            ls_ibfobject-instid = objkey.
    clear v_WI_ID.
    select single WI_ID from SWW_WI2OBJ into v_WI_ID where INSTID = objkey.
          IF sy-subrc = 0.
        ls_style-fieldname = 'WORKFLOW'.
        ls_style-style = cl_gui_alv_grid=>mc_style_button.
        INSERT ls_style INTO TABLE GT_yiamra_ber-cellstyles.
    GT_yiamra_ber-anfordern = icon_workflow_event_producer.
    GT_yiamra_ber-printer = icon_print.
        GT_yiamra_ber-workflow = ICON_HISTORY.
        endif.
        ls_style-fieldname = 'TEXT' .
        ls_style-style = cl_gui_alv_grid=>mc_style_button .
        INSERT ls_style INTO TABLE gt_yiamra_ber-cellstyles.
        GT_yiamra_ber-text = ICON_DISPLAY_TEXT.
        MODIFY GT_yiamra_ber
          INDEX sy-tabix
          TRANSPORTING cellstyles Text workflow.
    endloop.
    endform.                              " d0100_set_status
    *&      Form  d0100_prepare_container
         text
    form d0100_prepare_container.
      data: ls_vari type disvariant,
            lt_fcat type lvc_t_fcat.
      DATA gr_event_handler TYPE REF TO lcl_event_handler .
    DATA IT_UI_FUNCTIONS TYPE UI_FUNCTIONS.
    APPEND '&DETAIL' TO IT_UI_FUNCTIONS.
      if g_container_d0100 is initial.
        create object g_container_d0100
                      exporting container_name = g_container_name_d0100.
        create object g_grid_d0100
                      exporting i_parent = g_container_d0100.
        CREATE OBJECT gr_event_handler .
        SET HANDLER gr_event_handler->handle_button_click FOR g_grid_d0100 .
        perform d0100_set_grid_vari changing ls_vari.
        perform d0100_set_grid_fcat changing lt_fcat.
       perform d0100_set_grid_fcat1 changing lt_fcat.
    call method g_grid_d0100->INIT_TOOLBAR
       EXPORTING
         IT_TOOLBAR_EXCLUDING = IT_UI_FUNCTIONS.
        call method g_grid_d0100->set_table_for_first_display
          EXPORTING
            is_layout      = gs_layout
            IT_TOOLBAR_EXCLUDING = IT_UI_FUNCTIONS
          CHANGING
            it_outtab      = gt_yiamra_ber[]
            it_fieldcatalog = lt_fcat.
        call method cl_gui_control=>set_focus
          EXPORTING
            control = g_grid_d0100.
      endif.
    endform.                              " d0100_prepare_container
    *&      Form  d0100_exit
         text
    form d0100_exit changing c_okcode type sy-ucomm.
      data: l_okcode like sy-ucomm.
      l_okcode = c_okcode.
      clear c_okcode.
      case l_okcode.
        when con_exit or con_back or con_canc.
          call method g_grid_d0100->free.
          call method g_container_d0100->free.
          call method cl_gui_cfw=>flush.
          clear g_container_d0100.
          clear g_grid_d0100.
          set screen 0.
          leave screen.
      endcase.
    endform.                              " d0100_exit
    *&      Form  d0100_fcode
         text
    form d0100_fcode changing c_okcode type sy-ucomm.
      data: l_okcode like sy-ucomm.
      l_okcode = c_okcode.
      clear c_okcode.
      call method cl_gui_cfw=>dispatch.
      case l_okcode.
        when con_exit or con_back or con_canc.
          call method g_container_d0100->free.
          call method cl_gui_cfw=>flush.
          clear g_container_d0100.
          clear g_grid_d0100.
          set screen 0.
          leave screen.
      endcase.
    endform.                              " d0100_fcode
    *&      Form  d0100_set_grid_fcat
         text
    form d0100_set_grid_fcat changing ct_fcat type lvc_t_fcat.
      data: ls_fcat type lvc_s_fcat.
      gs_layout-stylefname = 'CELLSTYLES'.
    *+++ STEP 1: retrieve the fieldcatalog
    call function 'LVC_FIELDCATALOG_MERGE'
       EXPORTING
         i_structure_name      = 'YIAMRA_BER'
       CHANGING
         ct_fieldcat            = ct_fcat[]
       EXCEPTIONS
         inconsistent_interface = 1
         program_error          = 2
         others                = 3.
    if sy-subrc eq 0.
    *+++ STEP 2: modify the fieldcatalog.
       loop at ct_fcat into ls_fcat.
      clear ls_fcat.
      ls_fcat-fieldname = 'LFDNR' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'LFDNR' .
      APPEND LS_FCAT TO CT_FCAT.
    clear ls_fcat.
      ls_fcat-fieldname = 'POSNR' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'POSNR' .
      APPEND LS_FCAT TO CT_FCAT.
      clear ls_fcat.
      ls_fcat-fieldname = 'UNAME' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'UNAME' .
      APPEND LS_FCAT TO CT_FCAT.
        clear ls_fcat.
      ls_fcat-fieldname = 'ROLLE' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'ROLLE' .
      APPEND LS_FCAT TO CT_FCAT.
          clear ls_fcat.
      ls_fcat-fieldname = 'PRCTR' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'PRCTR' .
      APPEND LS_FCAT TO CT_FCAT.
            clear ls_fcat.
      ls_fcat-fieldname = 'PRCTRGRP' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'PRCTRGRP' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'KOSTL' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'KOSTL' .
      APPEND LS_FCAT TO CT_FCAT.
                clear ls_fcat.
      ls_fcat-fieldname = 'KOSTLGRP' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'KOSTLGRP' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'ABRECHNST' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'ABRECHNST' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'ANFORDERER' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'ANFORDERER' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'DATUMNEU' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'DATUMNEU' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'DATUMANF' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'DATUMANF' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'STATUS' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'STATUS' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'DATUMADM' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'DATUMADM' .
      APPEND LS_FCAT TO CT_FCAT.
              clear ls_fcat.
      ls_fcat-fieldname = 'DATUMBEG' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'DATUMBEG' .
      APPEND LS_FCAT TO CT_FCAT.
                clear ls_fcat.
      ls_fcat-fieldname = 'DATUMEND' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'DATUMEND' .
      APPEND LS_FCAT TO CT_FCAT.
      clear ls_fcat.
      ls_fcat-fieldname = 'WORKFLOW' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'WORKFLOW'.
      ls_fcat-icon = 'X'.
      APPEND LS_FCAT TO CT_FCAT.
        clear ls_fcat.
      ls_fcat-fieldname = 'TEXT' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'TEXT' .
      ls_fcat-icon = 'X'.
      APPEND LS_FCAT TO CT_FCAT.
         modify ct_fcat from ls_fcat.
       endloop.
    endif.
    endform.                              " d0100_set_grid_fcat
    *&      Form  d0100_set_grid_vari
         text
    form d0100_set_grid_vari changing cs_vari type disvariant.
    *+++ allow layout maintenance
    *+++ note report is compelling
    cs_vari-report      = .
    cs_vari-handle      = .
    cs_vari-log_group  = .
    cs_vari-username    = .
    cs_vari-variant    = .
    cs_vari-text        = .
    cs_vari-dependvars  = .
    endform.                              " d0100_set_grid_vari
    *&      Form  handle_button_click
         text
         -->P_ES_COL_ID  text
         -->P_ES_ROW_NO  text
    FORM handle_button_click  USING    P_ES_COL_ID TYPE lvc_s_col
                                      P_ES_ROW_NO TYPE lvc_s_roid.
    DATA: objkey LIKE sweinstcou-objkey.
      DATA: ls_ibfobject TYPE  sibflporb.
      DATA:  BEGIN OF ls_output OCCURS 0 .
            INCLUDE STRUCTURE yiamra_ber .
    DATA cellstyles TYPE lvc_t_styl.
    DATA text(28) TYPE c.
    DATA printer(10)  TYPE c.
    DATA workflow(13)  TYPE c.
    DATA END OF ls_output.
      READ TABLE GT_yiamra_ber INDEX p_es_row_no-row_id INTO ls_output.
      IF sy-subrc <> 0.
        RETURN.
      ENDIF.
      case  P_ES_COL_ID-fieldname.
        when 'TEXT'.
          IF GT_yiamra_ber-rolle IS NOT INITIAL.
            CALL FUNCTION 'Y_I_AMRA_ROLLE_TEXT'
              EXPORTING
                i_rolle = GT_yiamra_ber-rolle.
          endif.
        when 'WORKFLOW'.
          clear: objkey.
          IF sy-subrc = 0 AND p_es_col_id-fieldname = 'WORKFLOW'.
            CONCATENATE ls_output-lfdnr ls_output-posnr INTO objkey.
            ls_ibfobject-catid = 'BO'.
            ls_ibfobject-typeid = 'YIAMRAROLL'.
            ls_ibfobject-instid = objkey.
            CALL FUNCTION 'SWI_WF_CONNECTIONS_DISPLAY'
              EXPORTING
                ibf_object        = ls_ibfobject
              EXCEPTIONS
                not_found          = 1
                no_authority      = 2
                no_workflows_found = 3
                OTHERS            = 4.
            IF sy-subrc <> 0.
              MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
            ENDIF.
          endif.
      endcase.
    ENDFORM.                    " handle_button_click
    reward points if anwer is helpful

  • Session errors

    Hi friends,
    I have created a session with lsmw, and executed the session in background.
    now the problem is out of 2500 records there are 500 records with errors?
    so how to correct these errors?? is it manually you have to identify each error transaction?? or is there any way in LSMW or session to download the error records in a file???
    thanks a lot.

    hi,
    u can use the below program to get the logfile into excel
    You need to provide the session QUEUE ID as input. Please use the code below.
    REPORT ZDOWNLOAD_LOG MESSAGE-ID 00.
    PARAMETERS:
    queue_id LIKE apqi-qid OBLIGATORY.
    INCLUDE rsbdcil3. "Read plain log from TemSe
    TYPE-POOLS: icon, sdydo.
    TABLES:
    apqi, apqd, apql, t100, snap.
    CONTROLS:
    tc_tcodes TYPE TABLEVIEW USING SCREEN 200,
    tc_dynpro TYPE TABLEVIEW USING SCREEN 300,
    tc_protocol TYPE TABLEVIEW USING SCREEN 400,
    tc_bdcld TYPE TABLEVIEW USING SCREEN 600,
    tc_q_tcodes TYPE TABLEVIEW USING SCREEN 700,
    tab_dynpro TYPE TABSTRIP,
    tab_apqi TYPE TABSTRIP.
    FIELD-SYMBOLS:
    DATA:
    this table keeps those tcodes actually displayed
    BEGIN OF bdc_tcodes OCCURS 0,
    index TYPE i, tcode LIKE sy-tcode, status(1), s_text(16),
    END OF bdc_tcodes,
    this table keeps all tcodes of the session
    BEGIN OF all_bdc_tcodes OCCURS 0,
    index TYPE i, tcode LIKE sy-tcode, status(1), s_text(16),
    END OF all_bdc_tcodes.
    DATA:
    this table keeps those dynpros actually displayed
    BEGIN OF bdc_dynpro OCCURS 0,
    program LIKE sy-cprog, dynpro LIKE sy-dynnr,
    fnam LIKE bdcdata-fnam, fval LIKE bdcdata-fval,
    index TYPE i,
    END OF bdc_dynpro,
    this table keeps all dynpros of the session
    BEGIN OF all_bdc_dynpro OCCURS 0,
    program LIKE sy-cprog, dynpro LIKE sy-dynnr,
    fnam LIKE bdcdata-fnam, fval LIKE bdcdata-fval,
    index TYPE i,
    END OF all_bdc_dynpro,
    dynpro_index TYPE i,
    cat_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
    DATA:
    this table keeps protocol lines to be displayed
    BEGIN OF bdc_protocol OCCURS 0.
    INCLUDE STRUCTURE bdclm.
    DATA:
    longtext TYPE bdc_mpar,
    END OF bdc_protocol.
    DATA:
    it_apqd LIKE apqd OCCURS 0 WITH HEADER LINE,
    udat LIKE apqd-vardata, sdat LIKE apqd-vardata.
    DATA:
    BEGIN OF tf OCCURS 0, "interne tabelle mit dynprofeldern
    count TYPE i VALUE 0, "zum abmischen
    trcd(4),stat(4),
    pgm(8), "programmname
    dyn(4) TYPE n, "dynpronummer
    fname(35), farg(132), fstart(5) TYPE p, fende(5) TYPE p,
    END OF tf.
    needed for check if TemSe interface is active:
    DATA: protparam(60) VALUE 'bdc/new_protocol',
    newprot(3) VALUE 'off'.
    message header
    DATA:
    BEGIN OF bdcmh,
    mtype, state,
    tcode(20), " (4 -> 20)
    prog(40), " (8 -> 40)
    dynr(4), sepc, filler,
    END OF bdcmh.
    transaction header
    DATA:
    BEGIN OF bdcth,
    mtype, state,
    tcode(20), " (4 -> 20)
    postg, print,
    msgid(20), " (2 -> 20)
    END OF bdcth.
    DATA:
    bdcmhlen TYPE i VALUE 68, " (20 -> 68 ) MessageHeaderlaenge
    dcnt TYPE i, tcnt TYPE i, gencnt TYPE i, delcnt TYPE i, wcount TYPE i,
    mfstart TYPE i, mfende TYPE i, mflen TYPE i, mfart(2).
    DATA BEGIN OF bdclm OCCURS 0. " ITabelle der Messageseintraege
    INCLUDE STRUCTURE bdclm. " LogTabelle
    DATA: counter TYPE i,
    longtext TYPE bdc_mpar,
    isdetail(1) TYPE c,
    END OF bdclm .
    DATA: lm LIKE bdclm,
    save_mpar TYPE bdc_mpar.
    DATA BEGIN OF bdcld OCCURS 0. " ITabelle der Verzeichniseintraege
    INCLUDE STRUCTURE bdcld. " LogTabelle aller Protokolle
    DATA: logname(80), " protokollpfad
    local_host(12), " lokaler rechner
    cnt TYPE i, " satzzaehler
    active(1) TYPE c, " active flag
    temseid TYPE rstsoname. " TemSe ID
    DATA END OF bdcld .
    DATA:
    logtab LIKE bdcld OCCURS 0 WITH HEADER LINE,
    logtab_temse LIKE apql OCCURS 0 WITH HEADER LINE.
    DATA:
    main_okcode TYPE fcode,
    d0500_fcode TYPE fcode,
    d0600_fcode TYPE fcode,
    d0700_fcode TYPE fcode,
    d0701_fcode TYPE fcode,
    tc_mark(1),
    counter TYPE i,
    status_icon(32),
    dynprotab_subscreen_dynpro LIKE sy-dynnr,
    header_subscreen_dynpro LIKE sy-dynnr.
    DATA:
    ex_date(12), string(48), tab_proto(48).
    Radio buttons and checkbox on screen 0500
    DATA:
    BEGIN OF rb,
    tcodes_all VALUE 'X', tcodes_error,
    fieldlist VALUE ' ',
    pro_all VALUE 'X', pro_tcode, pro_session,
    log_detail,
    END OF rb.
    DATA:
    Flags for identifying contents of the bdc_... tables
    bdc_tcodes_content(1), "a: all, e: errors
    bdc_dynpro_content(1), "f: fieldlist, s: screens only
    bdc_protocol_content(1), "a: all, t: for transaction, s: for session
    bdc_lines LIKE sy-index,
    c_field(132),
    c_line TYPE i,
    selected_index LIKE sy-index,
    selected_protocol LIKE sy-index,
    tc_index LIKE sy-index,
    tc_select LIKE sy-index,
    tcode_index LIKE bdc_tcodes-index,
    tcode_index_apqd LIKE bdc_tcodes-index,
    1st_bdc_tcode_index LIKE bdc_tcodes-index,
    i_tcodes TYPE i,
    i_protocols TYPE i,
    tcode LIKE sy-tcode,
    tcode_status(16),
    previous_tab(64).
    Data needed for CATT simulation of screens
    DATA:
    BEGIN OF bdc_subscreen,
    program LIKE sy-cprog,
    dynpro LIKE sy-dynnr,
    subscr(64),
    END OF bdc_subscreen.
    Table for keeping fcodes to be excluded from pf-status
    DATA:
    BEGIN OF ex_cua OCCURS 2,
    fcode LIKE rsmpe-func,
    END OF ex_cua.
    data for keeping scoll infos
    DATA:
    current_page LIKE sy-tabix VALUE 1,
    new_page LIKE sy-tabix,
    total_pages LIKE sy-tabix,
    new_line LIKE sy-tabix,
    entries LIKE sy-tabix,
    loopc LIKE sy-loopc.
    data for queue dump
    DATA:
    BEGIN OF q,
    tcode_index LIKE all_bdc_tcodes-index,
    itab_index LIKE all_bdc_tcodes-index,
    c_field(132),
    c_line LIKE sy-index,
    c_area(132),
    wa LIKE LINE OF all_bdc_tcodes,
    control_init VALUE 'X',
    reuse_control,
    uc_bytes TYPE i,
    c(1),
    show_hex VALUE ' ',
    END OF q.
    DATA:
    t TYPE sdydo_text_element,
    c(128).
    TYPES:
    BEGIN OF block,
    dt TYPE REF TO cl_dd_table_element,
    dta TYPE REF TO cl_dd_table_area,
    END OF block.
    DATA:
    it_blocks TYPE STANDARD TABLE OF block,
    b_wa TYPE block.
    DATA:
    dd TYPE REF TO cl_dd_document,
    cust TYPE REF TO cl_gui_custom_container.
    TYPES:
    BEGIN OF cx,
    char(1) TYPE c,
    hex(4) TYPE x,
    xtoc(8) TYPE c,
    END OF cx,
    uc_1(1) TYPE x,
    uc_2(2) TYPE x,
    uc_4(4) TYPE x.
    DATA:
    it_cx TYPE STANDARD TABLE OF cx,
    cx TYPE cx.
    FIELD-SYMBOLS:
    DATA:
    BEGIN OF count,
    start TYPE i,
    index TYPE i,
    part TYPE i,
    rest TYPE i,
    END OF count.
    DATA:
    cspan TYPE i.
    CONSTANTS:
    nr_cols TYPE i VALUE 64,
    reload_apqi VALUE 'X'.
    DATA:
    BEGIN OF apqdcnt,
    transcntb TYPE apq_tran, "neu
    msgcntb TYPE apq_reco,
    transcnte TYPE apq_tran, "fehlerhaft
    msgcnte TYPE apq_reco,
    transcnto TYPE apq_tran, "noch zu verarbeiten
    msgcnto TYPE apq_reco,
    transcntf TYPE apq_tran, "verarbeitet
    msgcntf TYPE apq_reco,
    transcntd TYPE apq_tran, "gelöscht
    msgcntd TYPE apq_reco,
    transcnt TYPE apq_tran, "enthält aktuell
    msgcnt TYPE apq_reco,
    transcntx TYPE apq_tran, "entfernt
    msgcntx TYPE apq_reco,
    transcntp TYPE apq_tran, "angelegt
    msgcntp TYPE apq_reco,
    END OF apqdcnt.
    DATA:
    dynpro_cnt TYPE i,
    show_dynpro_cnt VALUE ' ',
    filename TYPE string,
    lt_string TYPE char4000 OCCURS 0,
    wa_string TYPE char4000,
    p_cnt(8).
    START-OF-SELECTION.
    PERFORM prepare USING queue_id.
    CALL SCREEN 100.
    *& Form prepare
    FORM prepare USING qid TYPE apqi-qid.
    CLEAR: bdc_tcodes_content, bdc_dynpro_content, bdc_protocol_content.
    SELECT SINGLE * FROM apqi WHERE qid = qid.
    IF sy-subrc <> 0.
    MESSAGE i307(00) WITH 'Lesen'(010) 'mit Queue-ID'(011) qid.
    LEAVE PROGRAM.
    ENDIF.
    PERFORM fill_all_bdc_tcodes. " find all transactions
    PERFORM get_logfiles_for_qid. " logfiles -> bdcld
    PERFORM get_log USING 1. " most recent log -> bdclm
    selected_protocol = 1.
    GET PARAMETER ID 'RSBDC_ANALYSE_RB' FIELD rb.
    IF sy-subrc <> 0.
    rb-tcodes_all = 'X'. rb-pro_all = 'X'.
    ENDIF.
    ex_cua-fcode = 'FL_ON'. APPEND ex_cua.
    ex_cua-fcode = 'FL_OFF'. APPEND ex_cua.
    ENDFORM. "prepare
    Module loopc
    MODULE loopc OUTPUT.
    loopc = sy-loopc.
    ENDMODULE. "loopc OUTPUT
    Module status_main
    MODULE status_main OUTPUT.
    CLEAR main_okcode.
    SET TITLEBAR '0100' WITH apqi-groupid.
    LOOP AT SCREEN.
    set text of tabstrip tab for protocol display or set tab invisible if
    no protocol was found for the qid
    IF screen-name = 'TAB_PROTO'.
    IF selected_protocol IS INITIAL.
    screen-invisible = 1. MODIFY SCREEN.
    ELSE.
    WRITE bdcld-edate TO ex_date.
    CONCATENATE '@96@' 'Protokoll vom'(020) ex_date "ICON_HISTORY
    INTO tab_proto SEPARATED BY ' '.
    ENDIF.
    ENDIF.
    ENDLOOP.
    set header and subscreen dynpro depending on active tab
    CASE tab_dynpro-activetab.
    WHEN 'TAB_TCODES'.
    SET PF-STATUS 'PF_MAIN' EXCLUDING ex_cua.
    dynprotab_subscreen_dynpro = '0200'.
    header_subscreen_dynpro = '0201'.
    WHEN 'TAB_LIST'.
    IF rb-fieldlist = 'X'.
    SET PF-STATUS 'PF_MAIN_NAVI' EXCLUDING 'FL_ON'.
    ELSE.
    SET PF-STATUS 'PF_MAIN_NAVI' EXCLUDING 'FL_OFF'.
    ENDIF.
    dynprotab_subscreen_dynpro = '0300'.
    header_subscreen_dynpro = '0301'.
    WHEN 'TAB_PROTO'.
    IF rb-pro_tcode = 'X'.
    SET PF-STATUS 'PF_MAIN_NAVI' EXCLUDING ex_cua.
    ELSE.
    SET PF-STATUS 'PF_MAIN' EXCLUDING ex_cua.
    ENDIF.
    dynprotab_subscreen_dynpro = '0400'.
    header_subscreen_dynpro = '0401'.
    WHEN OTHERS.
    SET PF-STATUS 'PF_MAIN' EXCLUDING ex_cua.
    tab_dynpro-activetab = 'TAB_TCODES'.
    dynprotab_subscreen_dynpro = '0200'.
    header_subscreen_dynpro = '0201'.
    ENDCASE.
    is this the first call?
    IF tcode_index IS INITIAL.
    tcode_index = 1.
    tcode = all_bdc_tcodes-tcode.
    tcode_status = all_bdc_tcodes-s_text.
    ELSE.
    tcode_index was already set in PAI
    tcode = bdc_tcodes-tcode.
    tcode_status = bdc_tcodes-s_text.
    ENDIF.
    ENDMODULE. "status_main OUTPUT
    Module exit_main
    MODULE exit_main INPUT.
    SET PARAMETER ID 'RSBDC_ANALYSE_RB' FIELD rb.
    LEAVE PROGRAM.
    ENDMODULE. "exit_main INPUT
    Module user_command_main
    MODULE user_command_main INPUT.
    IF tab_dynpro-activetab <> 'TAB_TCODES'.
    previous_tab = tab_dynpro-activetab.
    ENDIF.
    CASE main_okcode.
    change the active tab
    WHEN 'TAB_TCODES'.
    tab_dynpro-activetab = 'TAB_TCODES'.
    WHEN 'TAB_LIST'.
    tab_dynpro-activetab = 'TAB_LIST'.
    WHEN 'TAB_PROTO'.
    tab_dynpro-activetab = 'TAB_PROTO'.
    select entry for display
    WHEN 'DISPLAY'.
    PERFORM set_new_display.
    change the viewing options
    WHEN 'VIEW_OPT'.
    CALL SCREEN 500 STARTING AT 5 5.
    show list of protocols
    WHEN 'PROTO'.
    IF selected_protocol > 0.
    CALL SCREEN 600 STARTING AT 5 5.
    ELSE.
    MESSAGE s324(00).
    ENDIF.
    WHEN 'PROTO_REFRESH'.
    reload protocol file (while watching running sessions)
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
    text = 'Protokoll wird erneut gelesen ...'(006).
    PERFORM get_log USING selected_protocol.
    PERFORM extend_message_texts.
    CLEAR bdc_protocol_content.
    switch field list on or off
    WHEN 'FL_ON'. rb-fieldlist = 'X'.
    WHEN 'FL_OFF'. rb-fieldlist = ' '.
    go to first transaction
    WHEN 'FIRST'.
    IF tcode_index > 1.
    READ TABLE bdc_tcodes INDEX 1.
    tcode_index = 1.
    PERFORM scan_transaction USING bdc_tcodes-index.
    CLEAR: bdc_dynpro_content, bdc_protocol_content.
    ENDIF.
    go to next transaction
    WHEN 'NEXT'.
    IF tcode_index < i_tcodes.
    tcode_index = tcode_index + 1.
    READ TABLE bdc_tcodes INDEX tcode_index.
    PERFORM scan_transaction USING bdc_tcodes-index.
    CLEAR: bdc_dynpro_content, bdc_protocol_content.
    ENDIF.
    go to previous transaction
    WHEN 'PREV'.
    IF tcode_index > 1.
    tcode_index = tcode_index - 1.
    READ TABLE bdc_tcodes INDEX tcode_index.
    PERFORM scan_transaction USING bdc_tcodes-index.
    CLEAR: bdc_dynpro_content, bdc_protocol_content.
    ENDIF.
    go to last transaction
    WHEN 'LAST'.
    IF tcode_index < i_tcodes.
    tcode_index = i_tcodes.
    READ TABLE bdc_tcodes INDEX i_tcodes.
    PERFORM scan_transaction USING bdc_tcodes-index.
    CLEAR: bdc_dynpro_content, bdc_protocol_content.
    ENDIF.
    scrolling in table controls
    WHEN 'P-' OR 'P--' OR 'P' OR 'P+'.
    PERFORM scrolling.
    display queue dump
    WHEN 'QUEUE'.
    CALL SCREEN '0700'.
    display header (APQI)
    WHEN 'APQI'.
    CALL SCREEN '0701'.
    recalculate dynpro counters
    WHEN 'DISP_CNT'.
    PERFORM recalculate_counters.
    leave this nice program
    WHEN 'BACK' OR 'END'.
    SET PARAMETER ID 'RSBDC_ANALYSE_RB' FIELD rb.
    LEAVE PROGRAM.
    WHEN OTHERS.
    ENDCASE.
    if field list or protocol chosen, but no transaction has been
    scanned yet, it's now time to read the first transaction from APQD
    IF ( main_okcode = 'TAB_LIST' OR
    main_okcode = 'TAB_PROTO' ) AND
    tcode_index_apqd IS INITIAL.
    READ TABLE bdc_tcodes INDEX 1.
    IF sy-subrc = 0.
    PERFORM scan_transaction USING bdc_tcodes-index.
    tcode_index_apqd = bdc_tcodes-index.
    ENDIF.
    ENDIF.
    ENDMODULE. "user_command_main INPUT
    Module fill_bdc_tcodes
    copy transactions from all_bdc_tcodes to bdc_tcodes
    according to rb-settings
    MODULE fill_bdc_tcodes OUTPUT.
    check whether contents are already up to date
    IF show_dynpro_cnt = 'X'.
    LOOP AT SCREEN.
    IF screen-group1 = 'DCT'.
    screen-invisible = 0.
    screen-active = 1.
    MODIFY SCREEN.
    ENDIF.
    IF screen-name = 'CMD_DISP_CNT'.
    screen-invisible = 1.
    MODIFY SCREEN.
    ENDIF.
    ENDLOOP.
    ENDIF.
    IF bdc_tcodes_content = 'A' AND rb-tcodes_all = 'X'.
    EXIT.
    ELSEIF bdc_tcodes_content = 'E' AND rb-tcodes_error = 'X'.
    EXIT.
    ENDIF.
    fill bdc_tcodes according to the settings in screen 500
    CLEAR bdc_tcodes. REFRESH bdc_tcodes.
    IF rb-tcodes_all ='X'.
    LOOP AT all_bdc_tcodes.
    bdc_tcodes = all_bdc_tcodes. APPEND bdc_tcodes.
    ENDLOOP.
    bdc_tcodes_content = 'A'.
    ELSEIF rb-tcodes_error = 'X'.
    LOOP AT all_bdc_tcodes WHERE status = 'E'.
    bdc_tcodes = all_bdc_tcodes. APPEND bdc_tcodes.
    ENDLOOP.
    bdc_tcodes_content = 'E'.
    ENDIF.
    DESCRIBE TABLE bdc_tcodes LINES bdc_lines.
    i_tcodes = bdc_lines.
    tc_tcodes-lines = bdc_lines.
    CLEAR tcode_index_apqd.
    READ TABLE bdc_tcodes INDEX 1.
    1st_bdc_tcode_index = bdc_tcodes-index.
    tcode_index = 1.
    ENDMODULE. "fill_bdc_tcodes OUTPUT
    Module fill_bdc_dynpro
    copy dynpro data from all_bdc_dynpro to bdc_bdc_dynpro
    according to rb-settings
    MODULE fill_bdc_dynpro OUTPUT.
    DATA: wa LIKE LINE OF tc_dynpro-cols,
    tline LIKE sy-index.
    tline = tc_dynpro-top_line.
    tc_dynpro-top_line = tline.
    hide fields if no detailed field list shall be displayed
    LOOP AT tc_dynpro-cols INTO wa.
    IF sy-tabix = 3 OR sy-tabix = 4.
    IF rb-fieldlist = 'X'.
    CLEAR wa-invisible.
    ELSE.
    wa-invisible = 1.
    ENDIF.
    MODIFY tc_dynpro-cols FROM wa.
    ENDIF.
    ENDLOOP.
    is bdc_dynpro_content already correctly filled ?
    IF rb-fieldlist = ' ' AND bdc_dynpro_content = 'S'.
    EXIT.
    ELSEIF rb-fieldlist = 'X' AND bdc_dynpro_content = 'F'.
    EXIT.
    ENDIF.
    CLEAR bdc_dynpro. REFRESH bdc_dynpro.
    IF rb-fieldlist = ' '.
    LOOP AT all_bdc_dynpro WHERE NOT program IS INITIAL.
    bdc_dynpro = all_bdc_dynpro.
    APPEND bdc_dynpro.
    ENDLOOP.
    bdc_dynpro_content = 'S'.
    ELSEIF rb-fieldlist = 'X'.
    LOOP AT all_bdc_dynpro.
    bdc_dynpro = all_bdc_dynpro.
    APPEND bdc_dynpro.
    ENDLOOP.
    bdc_dynpro_content = 'F'.
    ENDIF.
    DESCRIBE TABLE bdc_dynpro LINES bdc_lines.
    tc_dynpro-lines = bdc_lines.
    tc_dynpro-top_line = 1.
    ENDMODULE. "fill_bdc_dynpro OUTPUT
    Module fill_bdc_protocol
    copy messages from bdclm to bdc_protocol
    according to rb-settings
    MODULE fill_bdc_protocol OUTPUT.
    IF rb-pro_all = 'X' AND bdc_protocol_content = 'A'.
    EXIT.
    ELSEIF rb-pro_tcode = 'X' AND bdc_protocol_content = 'T'.
    EXIT.
    ELSEIF rb-pro_session = 'X' AND bdc_protocol_content = 'S'.
    EXIT.
    ENDIF.
    CLEAR bdc_protocol. REFRESH bdc_protocol.
    IF rb-pro_all = 'X'.
    LOOP AT bdclm.
    IF rb-log_detail = ' ' AND bdclm-isdetail = 'X'.
    CONTINUE.
    ENDIF.
    MOVE-CORRESPONDING bdclm TO bdc_protocol.
    APPEND bdc_protocol.
    ENDLOOP.
    bdc_protocol_content = 'A'.
    ELSEIF rb-pro_tcode = 'X'.
    LOOP AT bdclm WHERE tcnt = tcode_index_apqd.
    IF rb-log_detail = ' ' AND bdclm-isdetail = 'X'.
    CONTINUE.
    ENDIF.
    MOVE-CORRESPONDING bdclm TO bdc_protocol.
    APPEND bdc_protocol.
    ENDLOOP.
    bdc_protocol_content = 'T'.
    ELSEIF rb-pro_session = 'X'.
    LOOP AT bdclm WHERE tcnt = ' '.
    MOVE-CORRESPONDING bdclm TO bdc_protocol.
    APPEND bdc_protocol.
    ENDLOOP.
    bdc_protocol_content = 'S'.
    ENDIF.
    DESCRIBE TABLE bdc_protocol LINES bdc_lines.
    tc_protocol-lines = bdc_lines.
    tc_protocol-top_line = 1.
    ENDMODULE. "fill_bdc_protocol OUTPUT
    Module check_bdc_tcodes
    MODULE check_bdc_protocol OUTPUT.
    display lines intensified if they contain e- or a-messages
    IF bdc_protocol-mart = 'E'
    OR bdc_protocol-mart = 'A'.
    LOOP AT SCREEN.
    screen-intensified = 1. MODIFY SCREEN.
    ENDLOOP.
    ENDIF.
    skip empty lines
    IF bdc_protocol-indate IS INITIAL.
    EXIT FROM STEP-LOOP.
    ENDIF.
    ENDMODULE. "check_bdc_protocol OUTPUT
    Module get_cursor_position
    MODULE get_cursor_position INPUT.
    GET CURSOR FIELD c_field LINE c_line.
    IF c_line > 0.
    CASE tab_dynpro-activetab.
    WHEN 'TAB_TCODES'.
    selected_index = tc_tcodes-top_line + c_line - 1.
    WHEN 'TAB_LIST'.
    selected_index = tc_dynpro-top_line + c_line - 1.
    WHEN 'TAB_PROTO'.
    selected_index = tc_protocol-top_line + c_line - 1.
    ENDCASE.
    ELSE.
    selected_index = 0.
    ENDIF.
    ENDMODULE. "get_cursor_position INPUT
    Module d0500_init
    MODULE d0500_init OUTPUT.
    SET PF-STATUS 'POPUP'.
    SET TITLEBAR '0500'.
    ENDMODULE. "d0500_init OUTPUT
    Module d0500_fcode
    MODULE d0500_fcode INPUT.
    LEAVE TO SCREEN 0.
    ENDMODULE. "d0500_fcode INPUT
    Module d0600_init
    MODULE d0600_init OUTPUT.
    SET PF-STATUS 'POPUP'.
    SET TITLEBAR '0600'.
    CLEAR d0600_fcode.
    DESCRIBE TABLE bdcld LINES i_protocols.
    tc_bdcld-lines = i_protocols.
    ENDMODULE. "d0600_init OUTPUT
    Module d0500_fcode
    read and process another protocol which was selected on
    popup dynpro 500
    MODULE d0600_fcode INPUT.
    CASE d0600_fcode.
    WHEN 'POP_CANCEL'.
    LEAVE TO SCREEN 0.
    WHEN 'POP_OKAY'.
    read selected protocol
    IF tc_select <> selected_protocol.
    CLEAR bdclm. REFRESH bdclm.
    CLEAR bdc_protocol_content.
    PERFORM get_log USING tc_select.
    PERFORM extend_message_texts.
    selected_protocol = tc_select.
    ENDIF.
    LEAVE TO SCREEN 0.
    WHEN OTHERS.
    scroll in table
    ENDCASE.
    ENDMODULE. "d0600_fcode INPUT
    Module set_mark
    set table view marker for the actual selected protocol
    (dynpro 500)
    MODULE set_mark OUTPUT.
    tc_index = tc_bdcld-top_line + tc_bdcld-current_line - 1.
    IF tc_index = selected_protocol.
    tc_mark = 'X'.
    ENDIF.
    ENDMODULE. "set_mark OUTPUT
    Module get_mark
    get index of selected protocol on popup 500
    MODULE get_mark INPUT.
    IF tc_mark = 'X'.
    tc_select = tc_bdcld-top_line + tc_bdcld-current_line - 1.
    ENDIF.
    ENDMODULE. "get_mark INPUT
    FORM: fill_bdc_tcodes
    Read all transaction codes from apqd and fill internal table
    FORM fill_all_bdc_tcodes.
    read APQD blocks 1 for QID
    CLEAR all_bdc_tcodes. REFRESH all_bdc_tcodes.
    SELECT * FROM apqd WHERE qid = queue_id AND block = 1
    ORDER BY PRIMARY KEY.
    MOVE apqd-vardata TO bdcth.
    all_bdc_tcodes-index = apqd-trans.
    all_bdc_tcodes-tcode = bdcth-tcode.
    all_bdc_tcodes-status = bdcth-state.
    APPEND all_bdc_tcodes.
    ENDSELECT.
    convert status flag to long text
    calculate transaction counters
    CLEAR apqdcnt.
    LOOP AT all_bdc_tcodes.
    ADD 1 TO apqdcnt-transcnt.
    CASE all_bdc_tcodes-status.
    WHEN 'D' OR 'G'.
    all_bdc_tcodes-s_text = 'gelöscht'(005).
    ADD 1 TO apqdcnt-transcntd.
    WHEN 'F'.
    all_bdc_tcodes-s_text = 'verarbeitet'(002).
    ADD 1 TO apqdcnt-transcntf.
    WHEN 'E'.
    all_bdc_tcodes-s_text = 'fehlerhaft'(001).
    ADD 1 TO apqdcnt-transcnte.
    WHEN 'B'.
    all_bdc_tcodes-s_text = ' '. "neu
    ADD 1 TO apqdcnt-transcntb.
    WHEN OTHERS.
    all_bdc_tcodes-s_text = ' '.
    ENDCASE.
    MODIFY all_bdc_tcodes.
    ENDLOOP.
    apqdcnt-transcnto = apqdcnt-transcntb
    + apqdcnt-transcnte.
    apqdcnt-transcntd = apqdcnt-transcnt
    - apqdcnt-transcntf
    - apqdcnt-transcnte
    - apqdcnt-transcntb.
    apqdcnt-transcntp = apqi-puttrans.
    apqdcnt-transcntx = apqdcnt-transcntp
    - apqdcnt-transcnt.
    IF apqi-msgcnt < 1000.
    PERFORM recalculate_counters.
    ENDIF.
    ENDFORM. "fill_all_bdc_tcodes
    FORM scan_transaction
    Read all APQD data for a selected transaction
    FORM scan_transaction USING tcnt.
    CLEAR it_apqd. REFRESH it_apqd.
    CLEAR all_bdc_dynpro. REFRESH all_bdc_dynpro.
    SELECT * FROM apqd INTO TABLE it_apqd
    WHERE qid = queue_id AND trans = tcnt.
    tcode_index_apqd = tcnt. "Display correct index in header screens
    CLEAR dynpro_index.
    LOOP AT it_apqd.
    IF it_apqd-vardata(1) = 'M'. "it's a message header
    dynpro_index = dynpro_index + 1.
    PERFORM scan_dynpro.
    ENDIF.
    ENDLOOP.
    ENDFORM. "scan_transaction
    FORM: scan_dynpro
    Scan APQD data for a single dynpro screen
    and put it into a BDCDATA table
    FORM scan_dynpro.
    MOVE it_apqd-vardata TO bdcmh.
    TRANSLATE bdcmh TO UPPER CASE.
    get program name and screen number
    CLEAR all_bdc_dynpro.
    all_bdc_dynpro-index = dynpro_index.
    all_bdc_dynpro-program = bdcmh-prog.
    all_bdc_dynpro-dynpro = bdcmh-dynr.
    APPEND all_bdc_dynpro.
    get all the fnam/fval pairs
    MOVE it_apqd-vardata TO sdat.
    SHIFT sdat BY bdcmhlen PLACES.
    wcount = bdcmhlen.
    mfstart = wcount.
    mfart = 'FN'.
    WHILE wcount LE it_apqd-varlen.
    IF sdat(1) = bdcmh-sepc.
    mfende = wcount.
    PERFORM move_tf.
    ENDIF.
    SHIFT sdat.
    wcount = wcount + 1.
    ENDWHILE.
    ENDFORM. "scan_dynpro
    Parse the apqd-vardata field for FNAM/FVAL pairs
    FORM: move_tf
    fills TF-FNAME and TF-FARG
    FORM move_tf.
    mflen = mfende - mfstart.
    CASE mfart.
    WHEN 'FN'.
    CLEAR: tf-fname, udat.
    tf-fstart = mfstart.
    MOVE it_apqd-vardata TO udat.
    SHIFT udat BY mfstart PLACES.
    WRITE udat TO tf-fname+0(mflen).
    TRANSLATE tf-fname TO UPPER CASE.
    mfstart = mfende + 1.
    mfende = 0.
    MOVE 'FA' TO mfart.
    WHEN 'FA'.
    CLEAR: tf-farg, udat.
    tf-fende = mfende.
    MOVE it_apqd-vardata TO udat.
    SHIFT udat BY mfstart PLACES.
    WRITE udat TO tf-farg+0(mflen).
    APPEND tf.
    tf-stat = space.
    mfstart = mfende + 1.
    mfende = 0.
    MOVE 'FN' TO mfart.
    copy to bdcdata table if fname/fval is not empty
    CHECK NOT tf-fname IS INITIAL.
    CHECK NOT TF-FARG IS INITIAL.
    CLEAR all_bdc_dynpro.
    all_bdc_dynpro-index = dynpro_index.
    all_bdc_dynpro-fnam = tf-fname.
    all_bdc_dynpro-fval = tf-farg.
    APPEND all_bdc_dynpro.
    WHEN OTHERS.
    ENDCASE.
    ENDFORM. "move_tf
    Form: get_logfiles_for_qid
    DATA:
    paramname(11) VALUE 'bdc/logfile',
    logname(80),
    logname1(80),
    old_logfile(06) VALUE 'bdclog',
    new_logfile(04) VALUE 'BI* ',
    shiftlen TYPE i VALUE 0,
    protflen TYPE i VALUE 0,
    protfoff TYPE i VALUE 0,
    rlen TYPE i VALUE 0,
    bdcld# TYPE i, one TYPE i, ec TYPE i, return TYPE i,
    protcnt TYPE i.
    DATA:
    BEGIN OF prot_list OCCURS 0.
    INCLUDE rstr0112.
    DATA: seen(1), to_be_deleted(1), has_changed(1), local_host(24),
    END OF prot_list.
    DATA:
    BEGIN OF file.
    INCLUDE rstr0112.
    DATA END OF file.
    DATA:
    BEGIN OF bdclda OCCURS 0.
    INCLUDE STRUCTURE bdcld.
    DATA END OF bdclda .
    DATA:
    digits(10) TYPE c VALUE '0123456789',
    mtext(124) TYPE c, "Messagetext
    mtext1(124) TYPE c, "Messagetext
    mtext2(273) TYPE c, "Messagetext
    do_condense TYPE c,
    mtvaroff TYPE i,
    showtyp(05) TYPE c, "showtyp
    lmapn(12) TYPE c, "Hilfsfeld log-mapn
    date1 TYPE d,
    linct0 LIKE sy-linct,
    parcnt TYPE i,
    sp_len TYPE i,
    charcnt TYPE i,
    wcnt TYPE i,
    mparcnt TYPE i,
    qfound(04) TYPE n,
    x(1) VALUE 'X'.
    DATA: "Aufbereitung Messagetext
    BEGIN OF mt,
    off(02) TYPE n,
    len(02) TYPE n,
    text(80),
    END OF mt.
    DATA: "Aufbereitung Messagetext
    BEGIN OF mttab OCCURS 4,
    off(02) TYPE n,
    len(02) TYPE n,
    text(80),
    END OF mttab.
    DATA: "Hilfsfelder
    BEGIN OF old,
    tcnt LIKE bdclm-tcnt,
    mcnt LIKE bdclm-mcnt,
    END OF old.
    DATA: "ParameterAufbereitung
    BEGIN OF par,
    len(02) TYPE n,
    text(254),
    END OF par.
    Form get_logfiles_for_qid
    find all log files for the session in analysis,
    either in common log or in TemSe
    FORM get_logfiles_for_qid.
    get logs from TemSe
    PERFORM get_logfiles_from_temse.
    now bdcld contains the log files for the given qid
    SORT bdcld BY edate DESCENDING etime DESCENDING.
    DESCRIBE TABLE bdcld LINES selected_protocol.
    ENDFORM. "get_logfiles_for_qid
    Form: log_dir
    FORM log_dir.
    CLEAR bdclda. REFRESH bdclda.
    CALL 'ReadLogDirA' ID 'LOGN' FIELD logname
    ID 'DTAB' FIELD bdclda-sys
    ID 'AINF' FIELD one
    ID 'ECNT' FIELD ec.
    IF sy-subrc NE 0 OR ec = 0.
    EXIT.
    ENDIF.
    LOOP AT bdclda WHERE lmand = sy-mandt AND quid = queue_id.
    MOVE-CORRESPONDING bdclda TO bdcld.
    MOVE logname TO bdcld-logname.
    MOVE prot_list-local_host TO bdcld-local_host.
    APPEND bdcld.
    ENDLOOP.
    ENDFORM. " log_dir.
    Form: list_protocol_files
    Suche nach allen aktiven Protokolldateien -> Tabelle prot_list
    FORM list_protocol_files.
    CLEAR: logname1, prot_list, protcnt.
    REFRESH: prot_list.
    protflen = STRLEN( logname ).
    MOVE logname TO logname1.
    WHILE shiftlen LE protflen.
    IF logname1 CP '#B#I'. "suchen nach muster #B#I
    IF sy-fdpos EQ 0. "nur großbuchstaben
    shiftlen = 2.
    ELSE.
    shiftlen = sy-fdpos.
    ENDIF.
    protfoff = protfoff + shiftlen.
    SHIFT logname1 BY shiftlen PLACES.
    ELSE.
    shiftlen = protflen + 1.
    protfoff = protfoff - 2.
    ENDIF.
    ENDWHILE.
    IF protfoff LE 0.
    protfoff = 0.
    ENDIF.
    rlen = 80 - protfoff.
    WRITE space TO logname+protfoff(rlen).
    WRITE new_logfile TO logname+protfoff(4).
    PERFORM search_prot USING logname.
    ENDFORM. " FILL_PROT_LIST
    FORM : search_prot *
    FORM search_prot USING prot_files.
    DATA: errcnt(2) TYPE p VALUE 0.
    CALL 'C_DIR_READ_START' ID 'FILE' FIELD prot_files
    ID 'ERRNO' FIELD file-errno
    ID 'ERRMSG' FIELD file-errmsg.
    IF sy-subrc <> 0.
    MESSAGE i398(00)
    WITH sy-subrc 'C_DIR_READ_START' ' ' prot_files.
    MESSAGE i398(00)
    WITH sy-subrc 'C_DIR_READ_START...'
    file-errno file-errmsg.
    ENDIF.
    DO. "aufbau der internen tabelle fuer alle
    "BI-Protokolle
    CLEAR file.
    CALL 'C_DIR_READ_NEXT'
    ID 'TYPE' FIELD file-type
    ID 'NAME' FIELD file-name
    ID 'LEN' FIELD file-len
    ID 'OWNER' FIELD file-owner
    ID 'MTIME' FIELD file-mtime
    ID 'MODE' FIELD file-mode
    ID 'ERRNO' FIELD file-errno
    ID 'ERRMSG' FIELD file-errmsg.
    MOVE sy-subrc TO file-subrc.
    CASE sy-subrc.
    WHEN 0.
    CASE file-type(1).
    WHEN 'F'. " normal file.
    MOVE 1 TO file-useable.
    WHEN 'f'. " normal file.
    MOVE 1 TO file-useable.
    WHEN OTHERS. " Directory, device, fifo, socket,...
    MOVE 0 TO file-useable.
    ENDCASE.
    IF file-len = 0.
    MOVE 0 TO file-useable.
    ENDIF.
    WHEN 1.
    EXIT.
    WHEN OTHERS. " SY-SUBRC >= 2
    ADD 1 TO errcnt.
    IF errcnt > 10.
    EXIT.
    ENDIF.
    IF sy-subrc = 5.
    MOVE: '???' TO file-type,
    '???' TO file-owner,
    '???' TO file-mode.
    ELSE.
    ENDIF.
    file-useable = 0.
    ENDCASE.
    MOVE-CORRESPONDING file TO prot_list.
    SHIFT file-name BY protfoff PLACES.
    prot_list-local_host = file-name.
    protcnt = protcnt + 1.
    APPEND prot_list.
    ENDDO.
    CALL 'C_DIR_READ_FINISH'
    ID 'ERRNO' FIELD file-errno
    ID 'ERRMSG' FIELD file-errmsg.
    IF sy-subrc <> 0.
    WRITE: / 'C_DIR_READ_FINISH'(999), 'SUBRC', SY-SUBRC.
    ENDIF.
    ENDFORM. " search_prot
    Form: get_log
    FORM get_log USING log_index.
    DATA: BEGIN OF logtable OCCURS 50, " plain log information in TemSe
    enterdate LIKE btctle-enterdate,
    entertime LIKE btctle-entertime,
    logmessage(400) TYPE c,
    END OF logtable.
    DATA:
    external_date(10),
    internal_date TYPE d.
    LOOP AT bdcld.
    logname = bdcld-logname.
    IF newprot = 'OFF'.
    get logfile contents from common log file
    CALL 'ReadLogPartitionA' ID 'LOGN' FIELD logname
    ID 'ETAB' FIELD bdclm-sys
    ID 'PART' FIELD bdcld
    ID 'ECNT' FIELD ec.
    IF sy-subrc <> 0. MESSAGE s325(00). ENDIF.
    IF ec = 0. MESSAGE s324(00). ENDIF.
    ELSE.
    get logfile contents from TemSe
    PERFORM read_bdc_log_plain
    TABLES logtable
    USING bdcld-temseid bdcld-lmand.
    IF sy-subrc <> 0. " Fehler beim Lesen
    MESSAGE s004(ts).
    EXIT.
    ENDIF.
    CLEAR bdclm[].
    LOOP AT logtable.
    Es wird geprüft, ob von TEMSE das Datum korrekt geliefert wurde
    wenn nicht wird einfach der Satz ignoriert und nicht gelesen
    CALL 'DATE_CONV_INT_TO_EXT'
    ID 'DATINT' FIELD logtable-enterdate
    ID 'DATEXT' FIELD external_date.
    CALL 'DATE_CONV_EXT_TO_INT'
    ID 'DATEXT' FIELD external_date
    ID 'DATINT' FIELD internal_date.
    IF sy-subrc NE 0. " Datum ist nicht gültig
    CONTINUE.
    ENDIF.
    CLEAR bdclm.
    bdclm-indate = logtable-enterdate.
    bdclm-intime = logtable-entertime.
    bdclm+14(352) = logtable-logmessage.
    IF bdclm-mcnt > 0.
    bdclm-mcnt = bdclm-mcnt - 1.
    ENDIF.
    IF bdclm-mid EQ '00'.
    IF ( bdclm-mnr EQ '162' )
    OR ( bdclm-mnr EQ '368' ).
    bdclm-isdetail = 'X'.
    ENDIF.
    ENDIF.
    APPEND bdclm.
    ENDLOOP.
    PERFORM extend_message_texts. " extended texts -> bdclm
    PERFORM download.
    ENDIF.
    ENDLOOP.
    ENDFORM. "get_log
    Form: get_logfiles_from_temse
    FORM get_logfiles_from_temse.
    are there any logs in the TemSe for this QID ?
    CLEAR logtab_temse[].
    CLEAR bdcld[].
    SELECT * FROM apql INTO TABLE logtab_temse
    WHERE qid = apqi-qid.
    CHECK sy-subrc = 0.
    some logs were found: now put this info into table bdcld.
    DATA: wa_log LIKE LINE OF logtab_temse,
    wa_ld LIKE LINE OF bdcld.
    LOOP AT logtab_temse INTO wa_log.
    CLEAR wa_ld.
    wa_ld-temseid = wa_log-temseid.
    wa_ld-lmand = wa_log-mandant.
    wa_ld-edate = wa_log-credate.
    wa_ld-etime = wa_log-cretime.
    wa_ld-luser = wa_log-creator.
    wa_ld-grpn = wa_log-groupid.
    wa_ld-quid = wa_log-qid.
    wa_ld-local_host = wa_log-destsys(8).
    APPEND wa_ld TO bdcld.
    ENDLOOP.
    ENDFORM. "get_logfiles_from_temse
    Form: extend_message_texts
    FORM extend_message_texts.
    LOOP AT bdclm.
    lm = bdclm. save_mpar = bdclm-mpar.
    PERFORM get_text.
    bdclm-longtext = mtext.
    bdclm-mpar = save_mpar.
    MODIFY bdclm.
    ENDLOOP.
    ENDFORM. "extend_message_texts
    FORM : get_text *
    FORM get_text.
    Aufbereiten des Messagetextes
    DATA: shiftln TYPE i,
    vartcnt TYPE i,
    fdpos LIKE sy-fdpos.
    IF bdclm-mparcnt CN digits. "Korrupter Datensatz:
    bdclm-mparcnt = 0. "z.B. Hexnullen
    ENDIF.
    SELECT SINGLE * FROM t100
    WHERE sprsl = sy-langu
    AND arbgb = bdclm-mid
    AND msgnr = bdclm-mnr.
    IF sy-subrc EQ 0.
    CLEAR: mtext,
    parcnt,
    mparcnt,
    charcnt,
    wcnt,
    mt,
    sp_len,
    sy-fdpos.
    MOVE bdclm-mparcnt TO mparcnt.
    IF t100-text CA '$&'. "Kennung fuer parameter:
    MOVE t100-text TO mtext1. " alt '$' --- neu '&'
    ELSE.
    MOVE t100-text TO mtext.
    EXIT.
    ENDIF.
    variable teile aus batch-input protokoll in mttab bringen.
    REFRESH mttab.
    CLEAR shiftln.
    DO mparcnt TIMES.
    CLEAR: par, mttab.
    MOVE bdclm-mpar TO par.
    IF par-len CN digits OR par-len EQ 0. "convert_no_number
    par-len = 1. "entschärfen
    par-text = ' '.
    shiftln = 2.
    ELSE.
    shiftln = par-len + 2.
    ENDIF.
    WRITE par-text TO mttab-text(par-len).
    MOVE par-len TO mttab-len.
    MOVE mparcnt TO mttab-off.
    APPEND mttab.
    SHIFT bdclm-mpar BY shiftln PLACES.
    ENDDO.
    mtext2 = mtext1.
    IF bdclm-mid EQ '00' AND " sonderbehandlung s00368
    bdclm-mnr EQ '368' AND
    bdclm-mart EQ 'S'.
    CLEAR mtext2.
    CLEAR mttab.
    READ TABLE mttab INDEX 1.
    WRITE mttab-text TO mtext2+0(mttab-len).
    CLEAR mttab.
    READ TABLE mttab INDEX 2.
    WRITE mttab-text TO mtext2+35(mttab-len).
    mtext = mtext2.
    EXIT.
    ENDIF.
    do_condense = x.
    CLEAR: mt, vartcnt, mtvaroff.
    WHILE vartcnt LE 3.
    vartcnt = vartcnt + 1.
    IF mtext1 CA '$&'.
    parcnt = parcnt + 1.
    IF sy-fdpos GT 0.
    fdpos = sy-fdpos - 1. " neu sy-fdpos -1
    ELSE.
    fdpos = sy-fdpos.
    ENDIF.
    SHIFT mtext1 BY sy-fdpos PLACES.
    IF mtext1(1) EQ '&'.
    SHIFT mtext1 BY 1 PLACES.
    CASE mtext1(1).
    WHEN ' '. "'& '
    PERFORM replace_var USING '& ' parcnt fdpos.
    WHEN '$'. "'&&'
    PERFORM replace_var USING '&&' 0 fdpos.
    WHEN '1'. "'&1'
    PERFORM replace_var USING '&1' 1 fdpos.
    WHEN '2'. "'&2'
    PERFORM replace_var USING '&2' 2 fdpos.
    WHEN '3'. "'&3'
    PERFORM replace_var USING '&3' 3 fdpos.
    WHEN '4'. "'&4'
    PERFORM replace_var USING '&4' 4 fdpos.
    WHEN OTHERS. "'&'
    PERFORM replace_var USING '&<' parcnt fdpos.
    ENDCASE.
    ENDIF.
    IF mtext1(1) EQ '$'.
    SHIFT mtext1 BY 1 PLACES.
    CASE mtext1(1).
    WHEN ' '. "'$ '
    PERFORM replace_var USING '$ ' parcnt fdpos.
    WHEN '$'. "'$$'
    PERFORM replace_var USING '$$' 0 fdpos.
    WHEN '1'. "'$1'
    PERFORM replace_var USING '$1' 1 fdpos.
    WHEN '2'. "'$2'
    PERFORM replace_var USING '$2' 2 fdpos.
    WHEN '3'. "'$3'
    PERFORM replace_var USING '$3' 3 fdpos.
    WHEN '4'. "'$4'
    PERFORM replace_var USING '$4' 4 fdpos.
    WHEN OTHERS. "'$'
    PERFORM replace_var USING '$<' parcnt fdpos.
    ENDCASE.
    ENDIF.
    ENDIF.
    ENDWHILE.
    IF mtext2 CA '%%_D_%%'.
    REPLACE '%%_D_%%' WITH '$' INTO mtext2.
    ENDIF.
    IF mtext2 CA '%%_A_%%'.
    REPLACE '%%_A_%%' WITH '&' INTO mtext2.
    ENDIF.
    IF do_condense EQ space.
    mtext = mtext2.
    ELSE.
    CONDENSE mtext2 .
    mtext = mtext2.
    ENDIF.
    ELSE.
    mtext = '???????????????????????????????????????????????????'.
    ENDIF.
    ENDFORM. " get_text1
    FORM : replace_var *
    FORM replace_var USING vark vari varpos.
    ersetzen der variablen teile einer fehlermeldung
    DATA: var(02),
    var1,
    moff TYPE i.
    CLEAR: mttab , moff.
    var = vark.
    SHIFT var BY 1 PLACES.
    CASE var.
    WHEN ' '. "'& '
    READ TABLE mttab INDEX vari.
    IF sy-subrc EQ 0.
    moff = varpos + mtvaroff.
    ASSIGN mtext2+moff(*) TO . "neu
    mtvaroff = 7. "neu
    ENDIF.
    ENDIF.
    ENDCASE.
    do_condense = space.
    ENDFORM. "replace_var
    Form: set_new_display
    FORM set_new_display.
    CASE tab_dynpro-activetab.
    WHEN 'TAB_TCODES'.
    F2 in tcodes list: choose new transaction:
    CHECK selected_index > 0.
    READ TABLE bdc_tcodes INDEX selected_index.
    CHECK sy-subrc = 0.
    PERFORM scan_transaction USING bdc_tcodes-index.
    CLEAR: bdc_dynpro_content, bdc_protocol_content.
    tcode_index = selected_index.
    tcode_status = bdc_tcodes-s_text.
    tcode = bdc_tcodes-tcode.
    IF previous_tab IS INITIAL.
    tab_dynpro-activetab = 'TAB_LIST'.
    ELSE.
    tab_dynpro-activetab = previous_tab.
    ENDIF.
    WHEN 'TAB_LIST'.
    F2 in screens list: simulate screen
    CHECK selected_index > 0.
    simulate screen
    PERFORM simulate_dynpro.
    WHEN 'TAB_PROTO'.
    F2 in protocol list: show message long text:
    CHECK selected_index > 0.
    READ TABLE bdc_protocol INDEX selected_index.
    CHECK sy-subrc = 0.
    PERFORM show_ltext.
    ENDCASE.
    ENDFORM. "set_new_display
    FORM : show_ltext
    display long text for a log message
    FORM show_ltext.
    DATA:
    docnt TYPE i.
    DATA:
    BEGIN OF my,
    msgv1 LIKE sy-msgv1,
    msgv2 LIKE sy-msgv2,
    msgv3 LIKE sy-msgv3,
    msgv4 LIKE sy-msgv4,
    END OF my.
    DATA:
    msg_text LIKE shkontext-meldung,
    msg_arbgb LIKE shkontext-meld_id,
    msg_nr LIKE shkontext-meld_nr,
    msg_title LIKE shkontext-titel.

Maybe you are looking for