Tuesday, July 19, 2011

Adding Multiple line text in ALV

*&---------------------------------------------------------------------*
*& Report YTEST_ALV1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ytest_alv1.
tables: ekpo.
***************************************************************
* type pools
***************************************************************
TYPE-POOLS : slis.
***************************************************************
* type declaration
***************************************************************
TYPES: BEGIN OF t_polist,
ebeln TYPE ebeln,
END OF t_polist.

TYPES: BEGIN OF t_display,
ebeln TYPE ebeln,
remark TYPE tdline,
END OF t_display.

***************************************************************
* Internal Table declaration
***************************************************************
DATA: git_polist TYPE STANDARD TABLE OF t_polist,
git_display TYPE STANDARD TABLE OF t_display.

***************************************************************
* Work area declaration
***************************************************************
DATA: gwa_polist TYPE t_polist,
gwa_display TYPE t_display.


************************************************************
* Text Declaration
************************************************************
DATA: lv_name TYPE tdobname,
lv_id TYPE tdid,
lv_lang TYPE spras,
lv_object TYPE tdobject.
DATA: lit_lines TYPE STANDARD TABLE OF tline,
lwa_lines TYPE tline.
************************************************************
* ALV Data Declaration
************************************************************
DATA : g_repid LIKE sy-repid,
gs_layout TYPE slis_layout_alv,
gs_print TYPE slis_print_alv,
gt_list_top_of_page TYPE slis_t_listheader,
gt_events TYPE slis_t_event,
gt_sort TYPE slis_t_sortinfo_alv,
gt_fieldcat TYPE slis_t_fieldcat_alv,
fieldcat_ln LIKE LINE OF gt_fieldcat,
fieldcat_in TYPE slis_fieldcat_alv,
lwa_sort TYPE LINE OF slis_t_sortinfo_alv,
col_pos TYPE i.
DATA : gs_variant LIKE disvariant,
g_save.
DATA: it_evt TYPE slis_t_event,
wa_evt TYPE slis_alv_event.
************************************************************
**Macro for Field Catelogue
************************************************************
DEFINE build_cat.
clear: fieldcat_ln.
fieldcat_ln-fieldname = &1.
fieldcat_ln-tabname = 'GIT_DISPLAY'.
fieldcat_ln-seltext_l = &2.
fieldcat_ln-col_pos = &3.
fieldcat_ln-outputlen = &4.
append fieldcat_ln to gt_fieldcat.
END-OF-DEFINITION.
************************************************************
* Selection screen
************************************************************
select-OPTIONS: p_ebeln for ekpo-ebeln.
************************************************************
* Start of program
************************************************************
START-OF-SELECTION.
*--->>> selecting the PO document no
SELECT ebeln FROM ekpo
INTO TABLE git_polist where ebeln in p_ebeln.
*--->>>
SORT git_polist BY ebeln.
*--->>>
DELETE ADJACENT DUPLICATES FROM git_polist COMPARING ALL FIELDS.
*--->>> reading the first line of text, if multiple lines are present, we will add it later
LOOP AT git_polist INTO gwa_polist .
gwa_display-ebeln = gwa_polist-ebeln.
lv_id = 'F02'.
lv_lang = 'E'.
lv_object = 'EKKO'.
CLEAR: lv_name.
lv_name = gwa_polist-ebeln.
CLEAR: lit_lines[].
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = lv_id
language = lv_lang
name = lv_name
object = lv_object
TABLES
lines = lit_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.
ELSE.
READ TABLE lit_lines INTO lwa_lines INDEX 1.
ENDIF.
gwa_display-remark = lwa_lines-tdline.
CLEAR: lwa_lines.
APPEND gwa_display TO git_display.
CLEAR: gwa_display.
ENDLOOP.
*--->>> field cat
build_cat 'EBELN' 'PO Document No' '1' '20'.
build_cat 'REMARK' 'Remark' '2' '125'.
*--->>> alv
g_repid = sy-repid.
gs_variant-report = g_repid.
g_save = 'A'.

*--->>> this event for displaying mutiple lines

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
IMPORTING
et_events = it_evt.
*
READ TABLE it_evt INTO wa_evt
WITH KEY name = slis_ev_after_line_output .
wa_evt-form = slis_ev_after_line_output .
MODIFY it_evt FROM wa_evt INDEX sy-tabix .
*
READ TABLE it_evt INTO wa_evt
WITH KEY name = slis_ev_top_of_page .
wa_evt-form = slis_ev_top_of_page .
MODIFY it_evt FROM wa_evt INDEX sy-tabix .
*--->>> end of event setting

*--->>> call the list display
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = g_repid
i_structure_name = 'GIT_FINAL'
it_fieldcat = gt_fieldcat[]
is_variant = gs_variant
it_events = it_evt
TABLES
t_outtab = git_display
EXCEPTIONS
program_error = 1
OTHERS = 2.

*&---------------------------------------------------------------------*
*& Form after_line_output
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RS_LINEINFO text
*----------------------------------------------------------------------*
FORM after_line_output USING rs_lineinfo TYPE slis_lineinfo .
DATA: v_tabix TYPE syst-tabix .
*--->>>
CLEAR : gwa_display .
*--->>>
READ TABLE git_display INTO gwa_display INDEX rs_lineinfo-tabindex .
CHECK sy-subrc = 0 .
*--->>>
lv_id = 'F02'.
lv_lang = 'E'.
lv_object = 'EKKO'.
CLEAR: lv_name.
lv_name = gwa_polist-ebeln.
CLEAR: lit_lines[].
*--->>>
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = lv_id
language = lv_lang
name = lv_name
object = lv_object
TABLES
lines = lit_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.
ENDIF.
*--->>>
DESCRIBE TABLE lit_lines LINES v_tabix .
CHECK v_tabix > 1 .
*--->>>
LOOP AT lit_lines INTO lwa_lines FROM 2 .
WRITE: / sy-vline ,
22 sy-vline ,
23 lwa_lines-tdline ,
148 sy-vline .
ENDLOOP.
ENDFORM . "after_line_output