Long Text in SAP ABAP abap programming langauge

REPORT zpo_texts.

TABLES: ekko.

TYPE-POOLS : abap, slis, rsanm, icon.


DATA: lt_ekko TYPE STANDARD TABLE OF ekko.
DATA: l_rec(5)  TYPE n.

* Internal table and type definition
TYPES: BEGIN OF ty_alv,
         bukrs  TYPE ekko-bukrs,
         ebeln  TYPE ekko-ebeln,
         ekorg  TYPE ekko-ekorg,
         ernam  TYPE ekko-ernam,
         aedat  TYPE ekko-aedat,
         lifnr  TYPE ekko-lifnr,
         tdline TYPE tline-tdline,
       END OF ty_alv.

TYPES: BEGIN OF ty_tdname,
         tdname TYPE stxh-tdname,
       END OF ty_tdname.

DATA: ls_tdname TYPE ty_tdname,
      lt_tdname TYPE STANDARD TABLE OF ty_tdname,
      ls_line   TYPE tline,
      lv_lines  TYPE i.

DATA: lt_stxh TYPE STANDARD TABLE OF stxh.

DATA: lt_alv TYPE STANDARD TABLE OF ty_alv,
      ls_alv TYPE ty_alv.

DATA: lt_text  TYPE STANDARD TABLE OF tdline,
      lv_text  TYPE tdline,
      lv_ebeln TYPE ekko-ebeln,
      lt_lines TYPE STANDARD TABLE OF tline.

FIELD-SYMBOLS: <ls_alv>  TYPE ty_alv,
               <ls_stxh> TYPE stxh.


DATA: alv_container TYPE REF TO cl_gui_custom_container,
      alv_grid      TYPE REF TO cl_gui_alv_grid,
      ok_code       LIKE sy-ucomm,
      fieldcat      TYPE lvc_t_fcat.

** Declaration for ALV Grid **
DATA : gr_table TYPE REF TO cl_salv_table.

** Declarations for ALV Functions
DATA : gr_functions TYPE REF TO cl_salv_functions_list.

** declaration for ALV Columns
DATA : gr_columns    TYPE REF TO cl_salv_columns_table,
       gr_column     TYPE REF TO cl_salv_column_table,
       lt_column_ref TYPE salv_t_column_ref,
       ls_column_ref TYPE salv_s_column_ref.

** declaration for Layout Settings
DATA : gr_layout      TYPE REF TO cl_salv_layout,
       gr_layout_key  TYPE salv_s_layout_key,
       ls_layout      TYPE salv_s_layout,
       lt_layout_info TYPE salv_t_layout_info.

** Declaration for Global Display Settings
DATA : gr_display TYPE REF TO cl_salv_display_settings,
       lv_title   TYPE lvc_title.

** Declaration for Aggregate Function Settings
DATA : gr_aggr    TYPE REF TO cl_salv_aggregations.

** Declaration for Sort Function Settings
DATA : gr_sort    TYPE REF TO cl_salv_sorts.

** Declaration for Table Selection settings
DATA : gr_select  TYPE REF TO cl_salv_selections.

** Declaration for Top of List settings
DATA : gr_content TYPE REF TO cl_salv_form_element.

** Class for handling Events
CLASS : lcl_handle_events DEFINITION DEFERRED.
DATA  : gr_events TYPE REF TO lcl_handle_events,
        lr_events TYPE REF TO cl_salv_events_table.

** Coloring of Date columns **
DATA : lt_colo TYPE STANDARD TABLE OF lvc_s_colo,
       ls_colo TYPE lvc_s_colo.

** Color Structure of columns **
DATA : lt_color TYPE lvc_t_scol,
       ls_color TYPE lvc_s_scol.


*----------------------------------------------------------------------*
*       CLASS lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.
  PUBLIC SECTION.
    METHODS : on_double_click FOR EVENT double_click OF cl_salv_events_table
      IMPORTING row column.
    METHODS : on_link_click FOR EVENT link_click OF cl_salv_events_table
      IMPORTING row column.
ENDCLASS.                    "lcl_handle_events DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_handle_events IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.
  METHOD on_double_click.
    PERFORM get_ord_info USING row column.
  ENDMETHOD.                    "on_double_click
  METHOD on_link_click.
    PERFORM get_ord_info USING row column.
  ENDMETHOD.                    "on_link_click
ENDCLASS.                    "lcl_handle_events IMPLEMENTATION


* Choose dates and PO Order types
SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_date FOR ekko-aedat.
PARAMETERS: p_ekorg LIKE ekko-ekorg    DEFAULT '1000'.
PARAMETERS: p_stat  LIKE ekko-procstat DEFAULT '02'.  "Rejected
PARAMETERS: p_tdid  LIKE stxh-tdid     DEFAULT 'F01'.     "Text type
PARAMETERS: p_var   TYPE slis_vari.
SELECTION-SCREEN END OF BLOCK part1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var.
  CLEAR : ls_layout.
  TRY.
      CALL METHOD cl_salv_table=>factory
        EXPORTING
          list_display = if_salv_c_bool_sap=>false
        IMPORTING
          r_salv_table = gr_table
        CHANGING
          t_table      = lt_alv.
    CATCH cx_salv_msg .
  ENDTRY.

  IF gr_table IS NOT INITIAL.
    MOVE sy-repid TO gr_layout_key-report.     "Set Layout Key as Report ID"
    gr_layout = gr_table->get_layout( ).       "Get Layout of the Table"
    gr_layout->set_key( gr_layout_key ).       "Set Layout key to Layout"
    lt_layout_info = gr_layout->get_layouts( )."Get the Layouts of report"
    IF lt_layout_info[] IS NOT INITIAL.
      ls_layout = gr_layout->f4_layouts( ).    "Activate F4 Help for Layouts"
      IF ls_layout IS NOT INITIAL.
        MOVE ls_layout-layout TO p_var.
      ENDIF.
    ENDIF.
  ENDIF.

START-OF-SELECTION.

* Extract the table entries
  SELECT * FROM ekko INTO CORRESPONDING FIELDS OF TABLE lt_alv
                        WHERE aedat    IN s_date
                        AND   ekorg    EQ p_ekorg
                        AND   procstat EQ p_stat.

* Sort table by doc number for better searching later
  SORT lt_alv BY ebeln.

  DESCRIBE TABLE lt_alv LINES lv_lines.
  MOVE lv_lines TO l_rec.

* Build up internal table for selecting texts -> we need to get the typing correct
  LOOP AT lt_alv ASSIGNING <ls_alv>.
    MOVE <ls_alv>-ebeln TO ls_tdname.
    APPEND ls_tdname TO lt_tdname.
  ENDLOOP.

* Now select all the texts that have been maintained
  SELECT * FROM stxh INTO TABLE lt_stxh FOR ALL ENTRIES IN lt_tdname
                          WHERE tdobject = 'EKKO'
                          AND   tdid     = p_tdid
                          AND   tdname   = lt_tdname-tdname.

* Loop through POs that have text and update main table for display
  LOOP AT lt_stxh ASSIGNING <ls_stxh>.
    MOVE <ls_stxh>-tdname TO lv_ebeln.
    READ TABLE lt_alv WITH KEY ebeln = lv_ebeln INTO ls_alv.
    IF sy-subrc = 0.                                   "always should be found
      CLEAR: lt_lines[].
      CALL FUNCTION 'READ_TEXT'
        EXPORTING
          id                      = p_tdid
          language                = sy-langu
          name                    = <ls_stxh>-tdname
          object                  = 'EKKO      '
        TABLES
          lines                   = lt_lines
        EXCEPTIONS
          id                      = 1
          language                = 2
          name                    = 3
          not_found               = 4
          object                  = 5
          reference_check         = 6
          wrong_access_to_archive = 7
          OTHERS                  = 8.
      IF sy-subrc <> 0.
        CONTINUE.                          "ignore this loop - unlikely to occur
      ELSE.
        READ TABLE lt_lines INTO ls_line INDEX 1.
        MOVE ls_line-tdline TO ls_alv-tdline.
        MODIFY lt_alv FROM ls_alv TRANSPORTING tdline WHERE ebeln = lv_ebeln.
      ENDIF.
    ENDIF.
  ENDLOOP.

  SORT lt_alv ASCENDING BY ebeln.

  IF lt_alv[] IS INITIAL.
    MESSAGE s429(mo).
    EXIT.
  ELSE.
    PERFORM set_color.
    PERFORM alv_grid_display.
  ENDIF.


*&---------------------------------------------------------------------*
*&      Form  alv_grid_display
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alv_grid_display.
  CLEAR : gr_table.
  TRY.
      CALL METHOD cl_salv_table=>factory
        EXPORTING
          list_display = if_salv_c_bool_sap=>false
        IMPORTING
          r_salv_table = gr_table
        CHANGING
          t_table      = lt_alv.

    CATCH cx_salv_msg .
  ENDTRY.
  IF gr_table IS INITIAL.
    MESSAGE 'Error Creating ALV Grid ' TYPE 'I' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.

** Get functions details
  gr_functions = gr_table->get_functions( ).

** Activate All Buttons in Tool Bar
  gr_functions->set_all( if_salv_c_bool_sap=>true ).

******* Layout Settings  *******
  CLEAR : gr_layout, gr_layout_key.
  MOVE sy-repid TO gr_layout_key-report.                        "Set Report ID as Layout Key"

  gr_layout = gr_table->get_layout( ).                          "Get Layout of Table"
  gr_layout->set_key( gr_layout_key ).                          "Set Report Id to Layout"
  gr_layout->set_save_restriction( if_salv_c_layout=>restrict_none ). "No Restriction to Save Layout"

  IF p_var IS INITIAL.
    gr_layout->set_default( if_salv_c_bool_sap=>true ).         "Set Default Variant"
  ELSE.
    gr_layout->set_initial_layout( p_var ).                     "Set the Selected Variant as Initial"
  ENDIF.

******* Global Display Settings  *******
  CLEAR : gr_display.
  MOVE 'Purchase Order Details' TO lv_title.
  gr_display = gr_table->get_display_settings( ).               " Global Display settings"
  gr_display->set_striped_pattern( if_salv_c_bool_sap=>true ).  "Activate Strip Pattern"
  gr_display->set_list_header( lv_title ).                      "Report Header"

******* Aggregate Function Settings *******
  gr_aggr = gr_table->get_aggregations( ).                      "Get Aggregate Functions"

******* Sort Functions *******
  gr_sort = gr_table->get_sorts( ).
  IF gr_sort IS NOT INITIAL.
    TRY.
        gr_sort->add_sort( columnname = 'AEDAT'
                           position = 1
                           sequence   = if_salv_c_sort=>sort_up
                           subtotal   = if_salv_c_bool_sap=>true
                           group      = if_salv_c_sort=>group_none
                           obligatory = if_salv_c_bool_sap=>false ).
      CATCH cx_salv_not_found .
      CATCH cx_salv_existing .
      CATCH cx_salv_data_error .
    ENDTRY.

    TRY.
        gr_sort->add_sort( columnname = 'LIFNR'
                           position = 2
                           sequence   = if_salv_c_sort=>sort_down
                           subtotal   = if_salv_c_bool_sap=>false
                           group      = if_salv_c_sort=>group_none
                           obligatory = if_salv_c_bool_sap=>false ).
      CATCH cx_salv_not_found .
      CATCH cx_salv_existing .
      CATCH cx_salv_data_error .
    ENDTRY.
  ENDIF.
******* Table Selection Settings *******
  gr_select = gr_table->get_selections( ).
  IF gr_select IS NOT INITIAL.
    gr_select->set_selection_mode( if_salv_c_selection_mode=>row_column ). "Allow single row Selection"
  ENDIF.

******* Top of List settings *******
  PERFORM top_of_page CHANGING gr_content.
  gr_table->set_top_of_list( gr_content ).

******* Event Register settings *******
  lr_events = gr_table->get_event( ).
  CREATE OBJECT gr_events.
  SET HANDLER gr_events->on_double_click FOR lr_events.
  SET HANDLER gr_events->on_link_click FOR lr_events.

** Get the columns from ALV Table
  gr_columns = gr_table->get_columns( ).
  IF gr_columns IS NOT INITIAL.
    REFRESH : lt_column_ref.
    CLEAR   : ls_column_ref.
    lt_column_ref = gr_columns->get( ).

** Get columns properties
    gr_columns->set_optimize( if_salv_c_bool_sap=>true ).
    gr_columns->set_key_fixation( if_salv_c_bool_sap=>true ).
    TRY.
        gr_columns->set_color_column( 'T_COLOR' ).
      CATCH cx_salv_data_error .
    ENDTRY.
** Individual Column Properties.
    PERFORM column_settings.
  ENDIF.
  CALL METHOD gr_table->display.
ENDFORM.                    "alv_grid_display

*&---------------------------------------------------------------------*
*&      Form  column_settings
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM column_settings.

* Local Data
  DATA lv_scrtext_s TYPE scrtext_s.

  LOOP AT lt_column_ref INTO ls_column_ref.
    TRY.
        gr_column ?= gr_columns->get_column( ls_column_ref-columnname ).
      CATCH cx_salv_not_found.
    ENDTRY.
    IF gr_column IS NOT INITIAL.
** Make Mandt column invisible **
      IF gr_column->get_ddic_datatype( ) = 'CLNT'.
        gr_column->set_technical( if_salv_c_bool_sap=>true ).
      ENDIF.

** Set text title for the TDLINE
      IF gr_column->get_columnname( ) = 'TDLINE'.
        lv_scrtext_s = 'Long Text'.
        gr_column->set_short_text( lv_scrtext_s ).
      ENDIF.

** Create Aggregate function total for All Numeric/Currency Fields **
      IF gr_column->get_ddic_inttype( ) EQ 'P' OR
         gr_column->get_ddic_datatype( ) EQ 'CURR'.
        IF gr_aggr IS NOT INITIAL.
          TRY.
              gr_aggr->add_aggregation( columnname = ls_column_ref-columnname
                                        aggregation = if_salv_c_aggregation=>total ).
            CATCH cx_salv_data_error .
            CATCH cx_salv_not_found .
            CATCH cx_salv_existing .
          ENDTRY.
        ENDIF.
      ENDIF.
** Create Check box for fields with domain "XFELD"
      IF gr_column->get_ddic_domain( ) EQ 'XFELD'.
        gr_column->set_cell_type( if_salv_c_cell_type=>checkbox ).
      ENDIF.

** Set color to Date Columns **
      IF gr_column->get_ddic_datatype( ) EQ 'DATS'.
        CLEAR : ls_colo.
        MOVE 2 TO ls_colo-col.
        MOVE 1 TO ls_colo-int.
        MOVE 1 TO ls_colo-inv.
        gr_column->set_color( ls_colo ).
      ENDIF.

** Add Hotspot&Hyper Link to the column ebeln
      IF ls_column_ref-columnname EQ 'EBELN'.
        gr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
        gr_column->set_key( if_salv_c_bool_sap=>true ).
      ENDIF.

** Add Hotspot&Hyper Link to the column ebeln
      IF ls_column_ref-columnname EQ 'TLINE'.
        gr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
      ENDIF.
    ENDIF.
  ENDLOOP.
ENDFORM.                    "column_settings

*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
FORM top_of_page CHANGING lr_content TYPE REF TO cl_salv_form_element.
  DATA : lr_grid  TYPE REF TO cl_salv_form_layout_grid,
         lr_text  TYPE REF TO cl_salv_form_text,
         lr_label TYPE REF TO cl_salv_form_label,
         lr_head  TYPE string.

  MOVE 'Purchase Order List' TO lr_head.
  CREATE OBJECT lr_grid.
** Header of Top of Page **
  lr_grid->create_header_information( row     = 1
                                      column  = 1
                                      text    = lr_head
                                      tooltip = lr_head ).
** Add Row **
  lr_grid->add_row( ).

** Add Label in Grid **
  lr_label = lr_grid->create_label( row = 2
                                    column = 1
                                    text = 'No of Records'
                                    tooltip = 'No of Records' ).

** Add Text in The Grid **
  lr_text = lr_grid->create_text( row = 2
                                  column = 2
                                  text = l_rec
                                  tooltip = l_rec ).
** Set Label and Text Link **
  lr_label->set_label_for( lr_text ).

** Move lr_grid to lr_content **
  lr_content = lr_grid.
ENDFORM.                    "top_of_page

*&---------------------------------------------------------------------*
*&      Form
*&---------------------------------------------------------------------*
FORM get_ord_info USING row TYPE salv_de_row
                        column TYPE salv_de_column.
  IF column EQ 'EBELN' OR column EQ 'TLINE'.
    CLEAR : ls_alv.
    READ TABLE lt_alv INTO ls_alv INDEX row.
    IF sy-subrc EQ 0.
      SET PARAMETER ID 'BES' FIELD ls_alv-ebeln.
      CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
    ENDIF.
  ENDIF.


ENDFORM.                    "get_ord_info

*&---------------------------------------------------------------------*
*&      Form  set_color
*&---------------------------------------------------------------------*
* Set color to the column
*----------------------------------------------------------------------*
FORM set_color.
  LOOP AT lt_alv ASSIGNING <ls_alv>.
    IF <ls_alv>-tdline EQ space.
      REFRESH : lt_color.

      CLEAR : ls_color.
      MOVE 'EBELN' TO ls_color-fname.
      MOVE 3       TO ls_color-color-col.
      MOVE 0       TO ls_color-color-int.
      MOVE 0       TO ls_color-color-inv.
      APPEND ls_color TO lt_color.
    ENDIF.
  ENDLOOP.
ENDFORM.                    "set_color

Comments

Popular posts from this blog

Business senario : FB60 AND FB70 validation and subsituation

MB_MIGO_BADI THIS BADI USED TO POSTING DATA IN MIGO

all user exit mv45afzz (implicit user exit )