Program to find Badi or user exit
7:59 PM
report ZFINDEXIT_BADI.
TABLES : TSTC,
TADIR,
MODSAPT,
MODACT,
TRDIR,
TFDIR,
ENLFDIR,
SXS_ATTRT ,
TSTCT.
DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE.
DATA : FIELD1(30).
DATA : V_DEVCLASS LIKE TADIR-DEVCLASS.
PARAMETERS : P_TCODE LIKE TSTC-TCODE,
P_PGMNA LIKE TSTC-PGMNA .
DATA wa_tadir type tadir.
START-OF-SELECTION.
IF NOT P_TCODE IS INITIAL.
SELECT SINGLE * FROM TSTC WHERE TCODE EQ P_TCODE.
ELSEIF NOT P_PGMNA IS INITIAL.
TSTC-PGMNA = P_PGMNA.
ENDIF.
IF SY-SUBRC EQ 0.
SELECT SINGLE * FROM TADIR
WHERE PGMID = 'R3TR'
AND OBJECT = 'PROG'
AND OBJ_NAME = TSTC-PGMNA.
MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
IF SY-SUBRC NE 0.
SELECT SINGLE * FROM TRDIR
WHERE NAME = TSTC-PGMNA.
IF TRDIR-SUBC EQ 'F'.
SELECT SINGLE * FROM TFDIR
WHERE PNAME = TSTC-PGMNA.
SELECT SINGLE * FROM ENLFDIR
WHERE FUNCNAME = TFDIR-FUNCNAME.
SELECT SINGLE * FROM TADIR
WHERE PGMID = 'R3TR'
AND OBJECT = 'FUGR'
AND OBJ_NAME EQ ENLFDIR-AREA.
MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
ENDIF.
ENDIF.
SELECT * FROM TADIR INTO TABLE JTAB
WHERE PGMID = 'R3TR'
AND OBJECT in ('SMOD', 'SXSD')
AND DEVCLASS = V_DEVCLASS.
SELECT SINGLE * FROM TSTCT
WHERE SPRSL EQ SY-LANGU
AND TCODE EQ P_TCODE.
FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
WRITE:/(19) 'Transaction Code - ',
20(20) P_TCODE,
45(50) TSTCT-TTEXT.
SKIP.
IF NOT JTAB[] IS INITIAL.
WRITE:/(105) SY-ULINE.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
*Sorting the internal Table
sort jtab by OBJECT.
data : wf_txt(60) type c,
wf_smod type i ,
wf_badi type i ,
wf_object2(30) type C.
clear : wf_smod, wf_badi , wf_object2.
*Get the total SMOD.
LOOP AT JTAB into wa_tadir.
at first.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE:/1 SY-VLINE,
2 'Enhancement/ Business Add-in',
41 SY-VLINE ,
42 'Description',
105 SY-VLINE.
WRITE:/(105) SY-ULINE.
endat.
clear wf_txt.
at new object.
if wa_tadir-object = 'SMOD'.
wf_object2 = 'Enhancement' .
elseif wa_tadir-object = 'SXSD'.
wf_object2 = ' Business Add-in'.
endif.
FORMAT COLOR COL_GROUP INTENSIFIED ON.
WRITE:/1 SY-VLINE,
2 wf_object2,
105 SY-VLINE.
endat.
case wa_tadir-object.
when 'SMOD'.
wf_smod = wf_smod + 1.
SELECT SINGLE MODTEXT into wf_txt
FROM MODSAPT
WHERE SPRSL = SY-LANGU
AND NAME = wa_tadir-OBJ_NAME.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
when 'SXSD'.
*For BADis
wf_badi = wf_badi + 1 .
select single TEXT into wf_txt
from SXS_ATTRT
where sprsl = sy-langu
and EXIT_NAME = wa_tadir-OBJ_NAME.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
endcase.
WRITE:/1 SY-VLINE,
2 wa_tadir-OBJ_NAME hotspot on,
41 SY-VLINE ,
42 wf_txt,
105 SY-VLINE.
AT END OF object.
write : /(105) sy-ULINE.
ENDAT.
ENDLOOP.
WRITE:/(105) SY-ULINE.
SKIP.
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
WRITE:/ 'No.of Exits:' , wf_smod.
WRITE:/ 'No.of BADis:' , wf_badi.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(105) 'No userexits or BADis exist'.
ENDIF.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(105) 'Transaction does not exist'.
ENDIF.
AT LINE-SELECTION.
data : wf_object type tadir-object.
clear wf_object.
GET CURSOR FIELD FIELD1.
CHECK FIELD1(8) EQ 'WA_TADIR'.
read table jtab with key obj_name = sy-lisel+1(20).
move jtab-object to wf_object.
case wf_object.
when 'SMOD'.
SET PARAMETER ID 'MON' FIELD SY-LISEL+1(10).
CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
when 'SXSD'.
SET PARAMETER ID 'EXN' FIELD SY-LISEL+1(20).
CALL TRANSACTION 'SE18' AND SKIP FIRST SCREEN.
endcase.
TABLES : TSTC,
TADIR,
MODSAPT,
MODACT,
TRDIR,
TFDIR,
ENLFDIR,
SXS_ATTRT ,
TSTCT.
DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE.
DATA : FIELD1(30).
DATA : V_DEVCLASS LIKE TADIR-DEVCLASS.
PARAMETERS : P_TCODE LIKE TSTC-TCODE,
P_PGMNA LIKE TSTC-PGMNA .
DATA wa_tadir type tadir.
START-OF-SELECTION.
IF NOT P_TCODE IS INITIAL.
SELECT SINGLE * FROM TSTC WHERE TCODE EQ P_TCODE.
ELSEIF NOT P_PGMNA IS INITIAL.
TSTC-PGMNA = P_PGMNA.
ENDIF.
IF SY-SUBRC EQ 0.
SELECT SINGLE * FROM TADIR
WHERE PGMID = 'R3TR'
AND OBJECT = 'PROG'
AND OBJ_NAME = TSTC-PGMNA.
MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
IF SY-SUBRC NE 0.
SELECT SINGLE * FROM TRDIR
WHERE NAME = TSTC-PGMNA.
IF TRDIR-SUBC EQ 'F'.
SELECT SINGLE * FROM TFDIR
WHERE PNAME = TSTC-PGMNA.
SELECT SINGLE * FROM ENLFDIR
WHERE FUNCNAME = TFDIR-FUNCNAME.
SELECT SINGLE * FROM TADIR
WHERE PGMID = 'R3TR'
AND OBJECT = 'FUGR'
AND OBJ_NAME EQ ENLFDIR-AREA.
MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
ENDIF.
ENDIF.
SELECT * FROM TADIR INTO TABLE JTAB
WHERE PGMID = 'R3TR'
AND OBJECT in ('SMOD', 'SXSD')
AND DEVCLASS = V_DEVCLASS.
SELECT SINGLE * FROM TSTCT
WHERE SPRSL EQ SY-LANGU
AND TCODE EQ P_TCODE.
FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
WRITE:/(19) 'Transaction Code - ',
20(20) P_TCODE,
45(50) TSTCT-TTEXT.
SKIP.
IF NOT JTAB[] IS INITIAL.
WRITE:/(105) SY-ULINE.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
*Sorting the internal Table
sort jtab by OBJECT.
data : wf_txt(60) type c,
wf_smod type i ,
wf_badi type i ,
wf_object2(30) type C.
clear : wf_smod, wf_badi , wf_object2.
*Get the total SMOD.
LOOP AT JTAB into wa_tadir.
at first.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE:/1 SY-VLINE,
2 'Enhancement/ Business Add-in',
41 SY-VLINE ,
42 'Description',
105 SY-VLINE.
WRITE:/(105) SY-ULINE.
endat.
clear wf_txt.
at new object.
if wa_tadir-object = 'SMOD'.
wf_object2 = 'Enhancement' .
elseif wa_tadir-object = 'SXSD'.
wf_object2 = ' Business Add-in'.
endif.
FORMAT COLOR COL_GROUP INTENSIFIED ON.
WRITE:/1 SY-VLINE,
2 wf_object2,
105 SY-VLINE.
endat.
case wa_tadir-object.
when 'SMOD'.
wf_smod = wf_smod + 1.
SELECT SINGLE MODTEXT into wf_txt
FROM MODSAPT
WHERE SPRSL = SY-LANGU
AND NAME = wa_tadir-OBJ_NAME.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
when 'SXSD'.
*For BADis
wf_badi = wf_badi + 1 .
select single TEXT into wf_txt
from SXS_ATTRT
where sprsl = sy-langu
and EXIT_NAME = wa_tadir-OBJ_NAME.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
endcase.
WRITE:/1 SY-VLINE,
2 wa_tadir-OBJ_NAME hotspot on,
41 SY-VLINE ,
42 wf_txt,
105 SY-VLINE.
AT END OF object.
write : /(105) sy-ULINE.
ENDAT.
ENDLOOP.
WRITE:/(105) SY-ULINE.
SKIP.
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
WRITE:/ 'No.of Exits:' , wf_smod.
WRITE:/ 'No.of BADis:' , wf_badi.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(105) 'No userexits or BADis exist'.
ENDIF.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(105) 'Transaction does not exist'.
ENDIF.
AT LINE-SELECTION.
data : wf_object type tadir-object.
clear wf_object.
GET CURSOR FIELD FIELD1.
CHECK FIELD1(8) EQ 'WA_TADIR'.
read table jtab with key obj_name = sy-lisel+1(20).
move jtab-object to wf_object.
case wf_object.
when 'SMOD'.
SET PARAMETER ID 'MON' FIELD SY-LISEL+1(10).
CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
when 'SXSD'.
SET PARAMETER ID 'EXN' FIELD SY-LISEL+1(20).
CALL TRANSACTION 'SE18' AND SKIP FIRST SCREEN.
endcase.
Sample on OO grid with select otspot
3:00 AM
REPORT ZLLTEST13.
*****************************************
* D A T A D E C L A R A T I O N START*
*****************************************
*********************************************************
* D I S P L A Y A L V I N S C R E E N S T A R T *
*********************************************************
DATA: gs_fieldcatalog TYPE lvc_s_fcat OCCURS 0,
gv_fcat LIKE LINE OF gs_fieldcatalog,
gs_layout TYPE lvc_s_layo.
*<----------------CUSTOM TABLE START----------------------
TYPES : BEGIN OF gty_item,
checkbox type c, "field for checkbox
celltab type lvc_t_styl, "field to switch editability
VBELN TYPE VBAK-VBELN, "<---CUSTOMIZED
TABLE(4) TYPE C, "<---CUSTOMIZED
GV_ADDRESS1(500) TYPE C, "<---CUSTOMIZED
GV_ADDRESS2(500) TYPE C, "<---CUSTOMIZED
END OF gty_item.
DATA : gs_item TYPE gty_item,
gt_item TYPE TABLE OF gty_item.
*<----------------CUSTOM TABLE END------------------------
DATA : g_Container TYPE scrfname VALUE 'C_ALV', ""<---CUSTOMIZED CONTAINER VALUE
g_Custom_Container TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
g_Grid TYPE REF TO CL_GUI_ALV_GRID.
DATA : OK_CODE LIKE sy-ucomm,
SAVE_OK LIKE sy-ucomm.
******************************************************
* D I S P L A Y A L V I N S C R E E N E N D *
******************************************************
******************************************************
* CUSTOM TABLE OR DATA DECLRATION FOR PROGRAM *
******************************************************
TABLES: T001, ADRC,
Ekko, "Purchasing Document Header EBELN
vbrk, "Billing Document: Header Data VBELN
vbak. "Sales Document: Header Data VBELN
DATA: TA_T001 TYPE TABLE OF T001,
WA_T001 LIKE LINE OF TA_T001,
TA_ADRC TYPE TABLE OF ADRC,
WA_ADRC LIKE LINE OF TA_ADRC,
LV_BUKRS TYPE T001-BUKRS,
GV_ADDRESS1 TYPE STRING,
GV_ADDRESS2 TYPE STRING,
SY_PROG TYPE SY-CPROG,
LV_VBELN TYPE VBAK-VBELN.
SY_PROG = SY-CPROG.
******************************************************
* S E L E C T I O N S C R E E N *
******************************************************
SELECTION-SCREEN BEGIN OF BLOCK b_top WITH FRAME.
PARAMETERS : p_EKKO RADIOBUTTON GROUP g1,
p_VBRK RADIOBUTTON GROUP g1,
p_VBAK RADIOBUTTON GROUP g1,
p_DOCNO type vbeln DEFAULT '4970000000'.
SELECTION-SCREEN: END OF BLOCK b_top.
FORM U_PREPARE_FIELDCATALOG .
CLEAR gv_fcat.
CLEAR gv_fcat.
gv_fcat-fieldname = 'TABLE'.
gv_fcat-tabname = 'TABLE'.
gv_fcat-col_pos = 0.
gv_fcat-coltext = 'TABLE'.
INSERT gv_fcat INTO TABLE gs_fieldcatalog.
gv_fcat-fieldname = 'VBELN'.
gv_fcat-tabname = 'VBELN'.
gv_fcat-col_pos = 0.
gv_fcat-coltext = 'VBELN'.
gv_fcat-hotspot = 'X'.
INSERT gv_fcat INTO TABLE gs_fieldcatalog.
CLEAR gv_fcat.
gv_fcat-fieldname = 'GV_ADDRESS1'.
gv_fcat-tabname = 'GV_ADDRESS1'.
gv_fcat-col_pos = 0.
gv_fcat-coltext = 'GV_ADDRESS1'.
gv_fcat-INTLEN = 55.
"gv_fcat-no_out = 'X'. " Do not Display Column
INSERT gv_fcat INTO TABLE gs_fieldcatalog.
CLEAR gv_fcat.
gv_fcat-fieldname = 'GV_ADDRESS2'.
gv_fcat-tabname = 'GV_ADDRESS2'.
gv_fcat-col_pos = 1.
gv_fcat-coltext = 'GV_ADDRESS2'.
gv_fcat-INTLEN = 55.
"gv_fcat-no_out = 'X'. " Do not Display Column
INSERT gv_fcat INTO TABLE gs_fieldcatalog.
ENDFORM. " U_PREPARE_FIELDCATALOG
*****************************************
* D A T A D E C L A R A T I O N END *
*****************************************
*****************************************
* H O T S P O T START *
*****************************************
CLASS event_class DEFINITION DEFERRED.
*& Refrence Objects To Alv Grid & Custom Container Classes
DATA:
**** g_Grid TYPE REF TO cl_gui_alv_grid, <-- your customized ALV
**** g_Custom_Container TYPE REF TO cl_gui_custom_container, <-- your customized ALV
event_receiver TYPE REF TO event_class,
e_object TYPE REF TO cl_alv_event_toolbar_set.
*& Data Declaration For Interactive Lists
DATA:
t_layo TYPE lvc_s_layo,
t_fcat TYPE lvc_t_fcat,
fs_fcat TYPE lvc_s_fcat,
t_cell TYPE lvc_t_cell,
t_row TYPE lvc_t_roid,
t_cel TYPE lvc_t_ceno.
*----------------------------------------------------------------------*
* CLASS event_class DEFINITION
*----------------------------------------------------------------------*
CLASS event_class DEFINITION.
PUBLIC SECTION.
METHODS:
handle_hotspot_click
* FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING e_row_id.
FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING e_column_id
e_row_id
es_row_no .
ENDCLASS. "event_class DEFINITION
*----------------------------------------------------------------------*
* CLASS event_class IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS event_class IMPLEMENTATION.
METHOD handle_hotspot_click.
* fl_flag = 1.
*& Work Variable Declarations
***** DATA:
***** fs_carrid LIKE LINE OF t_flight. " Airline Passed Variable
*& Reading the selected data into the variable
**** READ TABLE t_flight INDEX e_row_id-index INTO fs_carrid.
**** PERFORM get_booking_data USING fs_carrid.
**** CALL SCREEN 600.
READ TABLE GT_ITEM INTO GS_ITEM INDEX e_row_id-index.
CASE GS_ITEM-TABLE.
WHEN 'EKKO'. SET PARAMETER ID 'BES' FIELD GS_ITEM-VBELN. CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
WHEN 'VBRK'. SET PARAMETER ID 'VF' FIELD GS_ITEM-VBELN. CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
WHEN 'VBAK'. SET PARAMETER ID 'AUN' FIELD GS_ITEM-VBELN. CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDMETHOD. "handle_hotspot_click
ENDCLASS. "event_class IMPLEMENTATION
*****************************************
* H O T S P O T END *
*****************************************
*****************************************
* PROCESS DATA START *
*****************************************
*&---------------------------------------------------------------------*
*& Form F_PROCESS_DATA - TO POPULATE GT_ITEM
*&---------------------------------------------------------------------*
FORM F_PROCESS_DATA .
CLEAR: LV_BUKRS, GS_ITEM.
CASE 'X'.
WHEN p_EKKO. SELECT SINGLE BUKRS FROM EKKO INTO LV_BUKRS WHERE EBELN EQ p_DOCNO.
WHEN p_VBRK. SELECT SINGLE BUKRS FROM VBRK INTO LV_BUKRS WHERE VBELN EQ p_DOCNO.
WHEN p_VBAK. SELECT SINGLE BUKRS_VF FROM VBAK INTO LV_BUKRS WHERE VBELN EQ p_DOCNO AND VKORG = '0190'. "SALES oRDER
ENDCASE.
IF SY-SUBRC EQ 0.
SELECT * FROM T001 INTO CORRESPONDING FIELDS OF TABLE TA_T001 WHERE BUKRS EQ LV_BUKRS.
IF TA_T001[] IS NOT INITIAL.
SELECT * FROM ADRC INTO CORRESPONDING FIELDS OF TABLE TA_ADRC
FOR ALL ENTRIES IN TA_T001 WHERE ADDRNUMBER EQ TA_T001-ADRNR.
IF SY-SUBRC EQ 0.
READ TABLE TA_ADRC INTO WA_ADRC INDEX 1.
IF SY-SUBRC EQ 0.
CLEAR: GV_ADDRESS1, GV_ADDRESS2.
CONCATENATE: WA_ADRC-NAME1 WA_ADRC-NAME2 INTO GV_ADDRESS1 SEPARATED BY SPACE.
IF WA_ADRC-STR_SUPPL1 IS NOT INITIAL. "NEXT LINE IS NOT INITIAL
CONCATENATE WA_ADRC-STREET ',' INTO WA_ADRC-STREET.
ENDIF.
IF WA_ADRC-STR_SUPPL2 IS NOT INITIAL. "NEXT LINE IS NOT INITIAL
CONCATENATE WA_ADRC-STR_SUPPL1 ',' INTO WA_ADRC-STR_SUPPL1.
ENDIF.
CONCATENATE WA_ADRC-STREET
WA_ADRC-STR_SUPPL1
WA_ADRC-STR_SUPPL2 INTO GV_ADDRESS2 SEPARATED BY SPACE.
REPLACE ',,' WITH ',' INTO: GV_ADDRESS1 , GV_ADDRESS2.
REPLACE ', ,' WITH ',' INTO: GV_ADDRESS1 , GV_ADDRESS2.
REPLACE ' ,' WITH ',' INTO: GV_ADDRESS1 , GV_ADDRESS2.
GS_ITEM-VBELN = P_DOCNO.
CASE 'X'.
WHEN p_EKKO. GS_ITEM-TABLE = 'EKKO'.
WHEN p_VBRK. GS_ITEM-TABLE = 'VBRK'.
WHEN p_VBAK. GS_ITEM-TABLE = 'VBAK'.
ENDCASE.
GS_ITEM-GV_ADDRESS1 = GV_ADDRESS1.
GS_ITEM-GV_ADDRESS2 = GV_ADDRESS2.
DELETE GT_ITEM WHERE VBELN = P_DOCNO.
APPEND GS_ITEM TO GT_ITEM.
ENDIF.
ENDIF.
ENDIF.
ELSE.
DATA: DOC_NO TYPE VBRK-VBELN.
CASE 'X'.
WHEN p_EKKO. SELECT SINGLE EBELN FROM EKKO INTO DOC_NO.
WHEN p_VBRK. SELECT SINGLE VBELN FROM VBRK INTO DOC_NO.
WHEN p_VBAK. SELECT SINGLE VBELN FROM VBAK INTO DOC_NO.
ENDCASE.
IF sy-subrc eq 0.
MESSAGE 'NO COMPANY CODE FOUND' TYPE 'I' display like 'I' .
ELSE.
MESSAGE 'NO DATA' TYPE 'I' display like 'E'.
ENDIF.
P_DOCno = DOC_NO.
ENDIF.
ENDFORM. " F_PROCESS_DATA
*****************************************
* PROCESS DATA END *
*****************************************
******************************************************
* S T A R T - O F - S E L E C T I O N *
******************************************************
START-OF-SELECTION.
PERFORM F_PROCESS_DATA.
IF GT_ITEM[] IS NOT INITIAL.
call SCREEN 100.
ENDIF.
END-OF-SELECTION.
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'ZMARK'. "<--- CUSTOMIZED GUI STATUS
* SET TITLEBAR 'xxx'.
PERFORM F_INIT_ALV.
ENDMODULE. " STATUS_0100 OUTPUT
MODULE USER_COMMAND_0100 INPUT.
save_ok = ok_code.
clear ok_code.
case save_ok.
when 'BACK' OR 'CANCEL'.
submit zmark VIA SELECTION-SCREEN WITH p_ekko EQ p_ekko
WITH p_DOCNO eq p_DOCNO.
when 'EXIT'.
LEAVE PROGRAM.
when 'F_BT_SEARCH'.
IF LV_VBELN NE ''.
p_DOCNO = LV_VBELN.
PERFORM F_PROCESS_DATA.
LV_VBELN = P_DOCno.
CALL METHOD g_Grid->REFRESH_TABLE_DISPLAY.
ELSE.
MESSAGE 'SEARCH FIELD IS BLANK' TYPE 'I' display like 'E'.
ENDIF.
endcase.
ENDMODULE. " USER_COMMAND_0100 INPUT
FORM F_INIT_ALV.
data: lt_exclude type ui_functions.
IF g_Custom_Container IS INITIAL.
" Create CONTAINER object with reference to container name in the screen
CREATE OBJECT g_Custom_Container
EXPORTING CONTAINER_NAME = g_Container.
" Create GRID object with reference to parent name
CREATE OBJECT g_Grid
EXPORTING I_PARENT = g_Custom_Container.
PERFORM u_prepare_fieldcatalog.
"****************************
" CELLTAB start "
"****************************
*-> Initially, set all checkbox cells editable.
DATA:
ls_celltab type lvc_s_styl,
lt_celltab type lvc_t_styl,
tp_iindex type i.
ls_celltab-fieldname = 'CHECKBOX'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
loop at gt_item INTO GS_ITEM.
tp_iindex = sy-tabix.
refresh lt_celltab.
ls_celltab-fieldname = 'CHECKBOX'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table lt_celltab.
gS_item-celltab[] = lT_celltab[].
modify GT_ITEM FROM GS_ITEM index tp_iindex.
endloop.
"****************************
" CELLTAB END "
"****************************
"****************************
" gs_layout settings start "
"****************************
* A Multiple columns, multiple rows with selection buttons.
* B Simple selection, listbox, Single row/column
* C Multiple rows without buttons
* D Multiple rows with buttons and select all ICON
gs_layout-sel_mode = 'D'. "SELECT ALL AT THE UPPER RIGHT
gs_layout-ZEBRA = 'X'.
gs_layout-stylefname = 'CELLTAB'.
"gs_layout-edit = 'X'. "Makes all Grid editable
"****************************
" gs_layout settings end "
"****************************
perform exclude_tb_functions changing lt_exclude.
" SET_TABLE_FOR_FIRST_DISPLAY
CALL METHOD g_Grid->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
is_layout = gs_layout
it_toolbar_excluding = lt_exclude
CHANGING
it_fieldcatalog = gs_fieldcatalog
IT_OUTTAB = gt_item. " Data
************************************************************************
*Create object of the event class and setting handler for hotspot click
************************************************************************
************************************************************************
*Create object of the event class and setting handler for hotspot click
************************************************************************
CREATE OBJECT event_receiver.
SET HANDLER event_receiver->handle_hotspot_click FOR g_Grid."cl_alv_grid.
CREATE OBJECT e_object.
************************************************************************
*Create object of the event class and setting handler for hotspot click
************************************************************************
************************************************************************
*Create object of the event class and setting handler for hotspot click
************************************************************************
ELSE.
CALL METHOD g_Grid->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDFORM.
form exclude_tb_functions changing pt_exclude type ui_functions.
* data ls_exclude type ui_func.
*
* ls_exclude = cl_gui_alv_grid=>mc_fc_refresh.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
* append ls_exclude to pt_exclude.
endform. " EXCLUDE_TB_FUNCTIONS
*NOTE:
*1. create gui status zmark
* - assign cancel, back and exit
*2. create screen 100. copy into a file below and upload the screen 100
****************************************************************************
****************************************************************
* THIS FILE IS GENERATED BY THE SCREEN PAINTER. *
* NEVER CHANGE IT MANUALLY, PLEASE ! *
****************************************************************
*%_DYNPRO
*ZMARK_T
*0100
*700
* 40
*%_HEADER
*ZMARK_T 0100 0100 30112192 37 0 0 35141 0G E 20150624173745
*%_DESCRIPTION
*Test result screen
*%_FIELDS
*SY_PROG C CHAR 13 80 00 80 32 00 1 7 0 0 0 0 0 0 _____________
*GV_ADDRESS1 C CHAR 107 80 00 80 32 00 2 7 0 0 0 0 0 0 ___________________________________________________________________________________________________________
*GV_ADDRESS2 C CHAR 107 80 00 80 32 00 3 7 0 0 0 0 0 0 ___________________________________________________________________________________________________________
*C_ALV 108 00 00 00 30 00 4 6 0 0 0 22 U 1 1 101
*LV_VBELN C CHAR 25 80 00 80 00 00 27 6 0 0 0 0 0 0 _________________________
*BT_SEARCH CHAR 6 00 00 00 30 00 27 34 0 0 0 0 P 0 0 102 Search
* F_BT_SEARCH [bring this line up]
*P_EKKO C CHAR 1 80 00 80 00 00 28 6 0 0 0 0 A 0 0 103 G1 G1 G1 G1
*P_EKKO 0 CHAR 4 00 00 00 30 00 28 8 0 0 0 0 A 0 0 103 G1 G1 G1 G1 EKKO
*P_VBRK C CHAR 1 80 00 80 00 00 29 6 0 0 0 0 A 0 0 103 G1 G1 G1 G1
*P_VBRK 0 CHAR 4 00 00 00 30 00 29 8 0 0 0 0 A 0 0 103 G1 G1 G1 G1 VBRK
*P_VBAK C CHAR 1 80 00 80 00 00 30 6 0 0 0 0 A 0 0 103 G1 G1 G1 G1
*P_VBAK 0 CHAR 4 00 00 00 30 00 30 8 0 0 0 0 A 0 0 103 G1 G1 G1 G1 VBAK
*OK_CODE CHAR 20 80 10 00 00 00 255 1 O 0 0 0 0 0 0 ____________________
*%_FLOWLOGIC
*PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
**
*PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
*%_PARAMS
*****************************************
* D A T A D E C L A R A T I O N START*
*****************************************
*********************************************************
* D I S P L A Y A L V I N S C R E E N S T A R T *
*********************************************************
DATA: gs_fieldcatalog TYPE lvc_s_fcat OCCURS 0,
gv_fcat LIKE LINE OF gs_fieldcatalog,
gs_layout TYPE lvc_s_layo.
*<----------------CUSTOM TABLE START----------------------
TYPES : BEGIN OF gty_item,
checkbox type c, "field for checkbox
celltab type lvc_t_styl, "field to switch editability
VBELN TYPE VBAK-VBELN, "<---CUSTOMIZED
TABLE(4) TYPE C, "<---CUSTOMIZED
GV_ADDRESS1(500) TYPE C, "<---CUSTOMIZED
GV_ADDRESS2(500) TYPE C, "<---CUSTOMIZED
END OF gty_item.
DATA : gs_item TYPE gty_item,
gt_item TYPE TABLE OF gty_item.
*<----------------CUSTOM TABLE END------------------------
DATA : g_Container TYPE scrfname VALUE 'C_ALV', ""<---CUSTOMIZED CONTAINER VALUE
g_Custom_Container TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
g_Grid TYPE REF TO CL_GUI_ALV_GRID.
DATA : OK_CODE LIKE sy-ucomm,
SAVE_OK LIKE sy-ucomm.
******************************************************
* D I S P L A Y A L V I N S C R E E N E N D *
******************************************************
******************************************************
* CUSTOM TABLE OR DATA DECLRATION FOR PROGRAM *
******************************************************
TABLES: T001, ADRC,
Ekko, "Purchasing Document Header EBELN
vbrk, "Billing Document: Header Data VBELN
vbak. "Sales Document: Header Data VBELN
DATA: TA_T001 TYPE TABLE OF T001,
WA_T001 LIKE LINE OF TA_T001,
TA_ADRC TYPE TABLE OF ADRC,
WA_ADRC LIKE LINE OF TA_ADRC,
LV_BUKRS TYPE T001-BUKRS,
GV_ADDRESS1 TYPE STRING,
GV_ADDRESS2 TYPE STRING,
SY_PROG TYPE SY-CPROG,
LV_VBELN TYPE VBAK-VBELN.
SY_PROG = SY-CPROG.
******************************************************
* S E L E C T I O N S C R E E N *
******************************************************
SELECTION-SCREEN BEGIN OF BLOCK b_top WITH FRAME.
PARAMETERS : p_EKKO RADIOBUTTON GROUP g1,
p_VBRK RADIOBUTTON GROUP g1,
p_VBAK RADIOBUTTON GROUP g1,
p_DOCNO type vbeln DEFAULT '4970000000'.
SELECTION-SCREEN: END OF BLOCK b_top.
FORM U_PREPARE_FIELDCATALOG .
CLEAR gv_fcat.
CLEAR gv_fcat.
gv_fcat-fieldname = 'TABLE'.
gv_fcat-tabname = 'TABLE'.
gv_fcat-col_pos = 0.
gv_fcat-coltext = 'TABLE'.
INSERT gv_fcat INTO TABLE gs_fieldcatalog.
gv_fcat-fieldname = 'VBELN'.
gv_fcat-tabname = 'VBELN'.
gv_fcat-col_pos = 0.
gv_fcat-coltext = 'VBELN'.
gv_fcat-hotspot = 'X'.
INSERT gv_fcat INTO TABLE gs_fieldcatalog.
CLEAR gv_fcat.
gv_fcat-fieldname = 'GV_ADDRESS1'.
gv_fcat-tabname = 'GV_ADDRESS1'.
gv_fcat-col_pos = 0.
gv_fcat-coltext = 'GV_ADDRESS1'.
gv_fcat-INTLEN = 55.
"gv_fcat-no_out = 'X'. " Do not Display Column
INSERT gv_fcat INTO TABLE gs_fieldcatalog.
CLEAR gv_fcat.
gv_fcat-fieldname = 'GV_ADDRESS2'.
gv_fcat-tabname = 'GV_ADDRESS2'.
gv_fcat-col_pos = 1.
gv_fcat-coltext = 'GV_ADDRESS2'.
gv_fcat-INTLEN = 55.
"gv_fcat-no_out = 'X'. " Do not Display Column
INSERT gv_fcat INTO TABLE gs_fieldcatalog.
ENDFORM. " U_PREPARE_FIELDCATALOG
*****************************************
* D A T A D E C L A R A T I O N END *
*****************************************
*****************************************
* H O T S P O T START *
*****************************************
CLASS event_class DEFINITION DEFERRED.
*& Refrence Objects To Alv Grid & Custom Container Classes
DATA:
**** g_Grid TYPE REF TO cl_gui_alv_grid, <-- your customized ALV
**** g_Custom_Container TYPE REF TO cl_gui_custom_container, <-- your customized ALV
event_receiver TYPE REF TO event_class,
e_object TYPE REF TO cl_alv_event_toolbar_set.
*& Data Declaration For Interactive Lists
DATA:
t_layo TYPE lvc_s_layo,
t_fcat TYPE lvc_t_fcat,
fs_fcat TYPE lvc_s_fcat,
t_cell TYPE lvc_t_cell,
t_row TYPE lvc_t_roid,
t_cel TYPE lvc_t_ceno.
*----------------------------------------------------------------------*
* CLASS event_class DEFINITION
*----------------------------------------------------------------------*
CLASS event_class DEFINITION.
PUBLIC SECTION.
METHODS:
handle_hotspot_click
* FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING e_row_id.
FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING e_column_id
e_row_id
es_row_no .
ENDCLASS. "event_class DEFINITION
*----------------------------------------------------------------------*
* CLASS event_class IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS event_class IMPLEMENTATION.
METHOD handle_hotspot_click.
* fl_flag = 1.
*& Work Variable Declarations
***** DATA:
***** fs_carrid LIKE LINE OF t_flight. " Airline Passed Variable
*& Reading the selected data into the variable
**** READ TABLE t_flight INDEX e_row_id-index INTO fs_carrid.
**** PERFORM get_booking_data USING fs_carrid.
**** CALL SCREEN 600.
READ TABLE GT_ITEM INTO GS_ITEM INDEX e_row_id-index.
CASE GS_ITEM-TABLE.
WHEN 'EKKO'. SET PARAMETER ID 'BES' FIELD GS_ITEM-VBELN. CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
WHEN 'VBRK'. SET PARAMETER ID 'VF' FIELD GS_ITEM-VBELN. CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
WHEN 'VBAK'. SET PARAMETER ID 'AUN' FIELD GS_ITEM-VBELN. CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDMETHOD. "handle_hotspot_click
ENDCLASS. "event_class IMPLEMENTATION
*****************************************
* H O T S P O T END *
*****************************************
*****************************************
* PROCESS DATA START *
*****************************************
*&---------------------------------------------------------------------*
*& Form F_PROCESS_DATA - TO POPULATE GT_ITEM
*&---------------------------------------------------------------------*
FORM F_PROCESS_DATA .
CLEAR: LV_BUKRS, GS_ITEM.
CASE 'X'.
WHEN p_EKKO. SELECT SINGLE BUKRS FROM EKKO INTO LV_BUKRS WHERE EBELN EQ p_DOCNO.
WHEN p_VBRK. SELECT SINGLE BUKRS FROM VBRK INTO LV_BUKRS WHERE VBELN EQ p_DOCNO.
WHEN p_VBAK. SELECT SINGLE BUKRS_VF FROM VBAK INTO LV_BUKRS WHERE VBELN EQ p_DOCNO AND VKORG = '0190'. "SALES oRDER
ENDCASE.
IF SY-SUBRC EQ 0.
SELECT * FROM T001 INTO CORRESPONDING FIELDS OF TABLE TA_T001 WHERE BUKRS EQ LV_BUKRS.
IF TA_T001[] IS NOT INITIAL.
SELECT * FROM ADRC INTO CORRESPONDING FIELDS OF TABLE TA_ADRC
FOR ALL ENTRIES IN TA_T001 WHERE ADDRNUMBER EQ TA_T001-ADRNR.
IF SY-SUBRC EQ 0.
READ TABLE TA_ADRC INTO WA_ADRC INDEX 1.
IF SY-SUBRC EQ 0.
CLEAR: GV_ADDRESS1, GV_ADDRESS2.
CONCATENATE: WA_ADRC-NAME1 WA_ADRC-NAME2 INTO GV_ADDRESS1 SEPARATED BY SPACE.
IF WA_ADRC-STR_SUPPL1 IS NOT INITIAL. "NEXT LINE IS NOT INITIAL
CONCATENATE WA_ADRC-STREET ',' INTO WA_ADRC-STREET.
ENDIF.
IF WA_ADRC-STR_SUPPL2 IS NOT INITIAL. "NEXT LINE IS NOT INITIAL
CONCATENATE WA_ADRC-STR_SUPPL1 ',' INTO WA_ADRC-STR_SUPPL1.
ENDIF.
CONCATENATE WA_ADRC-STREET
WA_ADRC-STR_SUPPL1
WA_ADRC-STR_SUPPL2 INTO GV_ADDRESS2 SEPARATED BY SPACE.
REPLACE ',,' WITH ',' INTO: GV_ADDRESS1 , GV_ADDRESS2.
REPLACE ', ,' WITH ',' INTO: GV_ADDRESS1 , GV_ADDRESS2.
REPLACE ' ,' WITH ',' INTO: GV_ADDRESS1 , GV_ADDRESS2.
GS_ITEM-VBELN = P_DOCNO.
CASE 'X'.
WHEN p_EKKO. GS_ITEM-TABLE = 'EKKO'.
WHEN p_VBRK. GS_ITEM-TABLE = 'VBRK'.
WHEN p_VBAK. GS_ITEM-TABLE = 'VBAK'.
ENDCASE.
GS_ITEM-GV_ADDRESS1 = GV_ADDRESS1.
GS_ITEM-GV_ADDRESS2 = GV_ADDRESS2.
DELETE GT_ITEM WHERE VBELN = P_DOCNO.
APPEND GS_ITEM TO GT_ITEM.
ENDIF.
ENDIF.
ENDIF.
ELSE.
DATA: DOC_NO TYPE VBRK-VBELN.
CASE 'X'.
WHEN p_EKKO. SELECT SINGLE EBELN FROM EKKO INTO DOC_NO.
WHEN p_VBRK. SELECT SINGLE VBELN FROM VBRK INTO DOC_NO.
WHEN p_VBAK. SELECT SINGLE VBELN FROM VBAK INTO DOC_NO.
ENDCASE.
IF sy-subrc eq 0.
MESSAGE 'NO COMPANY CODE FOUND' TYPE 'I' display like 'I' .
ELSE.
MESSAGE 'NO DATA' TYPE 'I' display like 'E'.
ENDIF.
P_DOCno = DOC_NO.
ENDIF.
ENDFORM. " F_PROCESS_DATA
*****************************************
* PROCESS DATA END *
*****************************************
******************************************************
* S T A R T - O F - S E L E C T I O N *
******************************************************
START-OF-SELECTION.
PERFORM F_PROCESS_DATA.
IF GT_ITEM[] IS NOT INITIAL.
call SCREEN 100.
ENDIF.
END-OF-SELECTION.
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'ZMARK'. "<--- CUSTOMIZED GUI STATUS
* SET TITLEBAR 'xxx'.
PERFORM F_INIT_ALV.
ENDMODULE. " STATUS_0100 OUTPUT
MODULE USER_COMMAND_0100 INPUT.
save_ok = ok_code.
clear ok_code.
case save_ok.
when 'BACK' OR 'CANCEL'.
submit zmark VIA SELECTION-SCREEN WITH p_ekko EQ p_ekko
WITH p_DOCNO eq p_DOCNO.
when 'EXIT'.
LEAVE PROGRAM.
when 'F_BT_SEARCH'.
IF LV_VBELN NE ''.
p_DOCNO = LV_VBELN.
PERFORM F_PROCESS_DATA.
LV_VBELN = P_DOCno.
CALL METHOD g_Grid->REFRESH_TABLE_DISPLAY.
ELSE.
MESSAGE 'SEARCH FIELD IS BLANK' TYPE 'I' display like 'E'.
ENDIF.
endcase.
ENDMODULE. " USER_COMMAND_0100 INPUT
FORM F_INIT_ALV.
data: lt_exclude type ui_functions.
IF g_Custom_Container IS INITIAL.
" Create CONTAINER object with reference to container name in the screen
CREATE OBJECT g_Custom_Container
EXPORTING CONTAINER_NAME = g_Container.
" Create GRID object with reference to parent name
CREATE OBJECT g_Grid
EXPORTING I_PARENT = g_Custom_Container.
PERFORM u_prepare_fieldcatalog.
"****************************
" CELLTAB start "
"****************************
*-> Initially, set all checkbox cells editable.
DATA:
ls_celltab type lvc_s_styl,
lt_celltab type lvc_t_styl,
tp_iindex type i.
ls_celltab-fieldname = 'CHECKBOX'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
loop at gt_item INTO GS_ITEM.
tp_iindex = sy-tabix.
refresh lt_celltab.
ls_celltab-fieldname = 'CHECKBOX'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table lt_celltab.
gS_item-celltab[] = lT_celltab[].
modify GT_ITEM FROM GS_ITEM index tp_iindex.
endloop.
"****************************
" CELLTAB END "
"****************************
"****************************
" gs_layout settings start "
"****************************
* A Multiple columns, multiple rows with selection buttons.
* B Simple selection, listbox, Single row/column
* C Multiple rows without buttons
* D Multiple rows with buttons and select all ICON
gs_layout-sel_mode = 'D'. "SELECT ALL AT THE UPPER RIGHT
gs_layout-ZEBRA = 'X'.
gs_layout-stylefname = 'CELLTAB'.
"gs_layout-edit = 'X'. "Makes all Grid editable
"****************************
" gs_layout settings end "
"****************************
perform exclude_tb_functions changing lt_exclude.
" SET_TABLE_FOR_FIRST_DISPLAY
CALL METHOD g_Grid->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
is_layout = gs_layout
it_toolbar_excluding = lt_exclude
CHANGING
it_fieldcatalog = gs_fieldcatalog
IT_OUTTAB = gt_item. " Data
************************************************************************
*Create object of the event class and setting handler for hotspot click
************************************************************************
************************************************************************
*Create object of the event class and setting handler for hotspot click
************************************************************************
CREATE OBJECT event_receiver.
SET HANDLER event_receiver->handle_hotspot_click FOR g_Grid."cl_alv_grid.
CREATE OBJECT e_object.
************************************************************************
*Create object of the event class and setting handler for hotspot click
************************************************************************
************************************************************************
*Create object of the event class and setting handler for hotspot click
************************************************************************
ELSE.
CALL METHOD g_Grid->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDFORM.
form exclude_tb_functions changing pt_exclude type ui_functions.
* data ls_exclude type ui_func.
*
* ls_exclude = cl_gui_alv_grid=>mc_fc_refresh.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
* append ls_exclude to pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
* append ls_exclude to pt_exclude.
endform. " EXCLUDE_TB_FUNCTIONS
*NOTE:
*1. create gui status zmark
* - assign cancel, back and exit
*2. create screen 100. copy into a file below and upload the screen 100
****************************************************************************
****************************************************************
* THIS FILE IS GENERATED BY THE SCREEN PAINTER. *
* NEVER CHANGE IT MANUALLY, PLEASE ! *
****************************************************************
*%_DYNPRO
*ZMARK_T
*0100
*700
* 40
*%_HEADER
*ZMARK_T 0100 0100 30112192 37 0 0 35141 0G E 20150624173745
*%_DESCRIPTION
*Test result screen
*%_FIELDS
*SY_PROG C CHAR 13 80 00 80 32 00 1 7 0 0 0 0 0 0 _____________
*GV_ADDRESS1 C CHAR 107 80 00 80 32 00 2 7 0 0 0 0 0 0 ___________________________________________________________________________________________________________
*GV_ADDRESS2 C CHAR 107 80 00 80 32 00 3 7 0 0 0 0 0 0 ___________________________________________________________________________________________________________
*C_ALV 108 00 00 00 30 00 4 6 0 0 0 22 U 1 1 101
*LV_VBELN C CHAR 25 80 00 80 00 00 27 6 0 0 0 0 0 0 _________________________
*BT_SEARCH CHAR 6 00 00 00 30 00 27 34 0 0 0 0 P 0 0 102 Search
* F_BT_SEARCH [bring this line up]
*P_EKKO C CHAR 1 80 00 80 00 00 28 6 0 0 0 0 A 0 0 103 G1 G1 G1 G1
*P_EKKO 0 CHAR 4 00 00 00 30 00 28 8 0 0 0 0 A 0 0 103 G1 G1 G1 G1 EKKO
*P_VBRK C CHAR 1 80 00 80 00 00 29 6 0 0 0 0 A 0 0 103 G1 G1 G1 G1
*P_VBRK 0 CHAR 4 00 00 00 30 00 29 8 0 0 0 0 A 0 0 103 G1 G1 G1 G1 VBRK
*P_VBAK C CHAR 1 80 00 80 00 00 30 6 0 0 0 0 A 0 0 103 G1 G1 G1 G1
*P_VBAK 0 CHAR 4 00 00 00 30 00 30 8 0 0 0 0 A 0 0 103 G1 G1 G1 G1 VBAK
*OK_CODE CHAR 20 80 10 00 00 00 255 1 O 0 0 0 0 0 0 ____________________
*%_FLOWLOGIC
*PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
**
*PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
*%_PARAMS
Express Information how to enable it for me23n email
12:32 AM
I was assign a print program for PO and what i did for the output type was to send auto PO to user and sender and information.
But what the functional requested more that is when the sender email has received he wants a pop up which is to say email have been sent to you.
So using the FM CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
and any error occured it will pop up in Send Express Information (pop up)
Configuration to be made in Shared office settings
- Tcode :- SO16
- Mail sy. grp
Select No Mail System Group
But what the functional requested more that is when the sender email has received he wants a pop up which is to say email have been sent to you.
So using the FM CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
and any error occured it will pop up in Send Express Information (pop up)
Configuration to be made in Shared office settings
- Tcode :- SO16
- Mail sy. grp
Select No Mail System Group
Abap Classical report to PDF using spool and email
7:51 PM
REPORT YMARK_ASD.
*source : https://scn.sap.com/thread/879625
PARAMETER: p_email1 LIKE somlreci1-receiver,
p_sender LIKE somlreci1-receiver,
p_delspl AS CHECKBOX.
*DATA DECLARATION
DATA: gd_recsize TYPE i.
*Spool IDs
TYPES: BEGIN OF t_tbtcp.
INCLUDE STRUCTURE tbtcp.
TYPES: END OF t_tbtcp.
DATA: it_tbtcp TYPE STANDARD TABLE OF t_tbtcp INITIAL SIZE 0,
wa_tbtcp TYPE t_tbtcp.
*Job Runtime Parameters
DATA: gd_eventid LIKE tbtcm-eventid,
gd_eventparm LIKE tbtcm-eventparm,
gd_external_program_active LIKE tbtcm-xpgactive,
gd_jobcount LIKE tbtcm-jobcount,
gd_jobname LIKE tbtcm-jobname,
gd_stepcount LIKE tbtcm-stepcount,
gd_error TYPE sy-subrc,
gd_reciever TYPE sy-subrc.
DATA: w_recsize TYPE i.
DATA: gd_subject LIKE sodocchgi1-obj_descr,
it_mess_bod LIKE solisti1 OCCURS 0 WITH HEADER LINE,
it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,
gd_sender_type LIKE soextreci1-adr_typ,
gd_attachment_desc TYPE so_obj_nam,
gd_attachment_name TYPE so_obj_des.
*Spool to PDF conversions
DATA: gd_spool_nr LIKE tsp01-rqident,
gd_destination LIKE rlgrap-filename,
gd_bytecount LIKE tst01-dsize,
gd_buffer TYPE string.
*Binary store for PDF
DATA: BEGIN OF it_pdf_output OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF it_pdf_output.
CONSTANTS: c_dev LIKE sy-sysid VALUE 'DEV',
c_no(1) TYPE c VALUE ' ',
c_device(4) TYPE c VALUE 'LOCL'.
START-OF-SELECTION.
do 10 times.
WRITE 'Hello World'.
enddo .
new-page.
commit work.
new-page print off.
IF sy-batch EQ 'X'.
PERFORM get_job_details.
PERFORM obtain_spool_id.
PERFORM convert_spool_to_pdf.
PERFORM process_email.
if p_delspl EQ 'X'.
PERFORM delete_spool.
endif.
IF sy-sysid = c_dev.
wait up to 5 seconds.
SUBMIT rsconn01 WITH mode = 'INT'
WITH output = 'X'
AND RETURN.
ENDIF.
ELSE.
SKIP.
WRITE:/ 'Program must be executed in background in-order for spool',
'request to be created.'.
ENDIF.
*------------------------------------------------------------------------------------
* FORM obtain_spool_id
*------------------------------------------------------------------------------------
FORM obtain_spool_id.
CHECK NOT ( gd_jobname IS INITIAL ).
CHECK NOT ( gd_jobcount IS INITIAL ).
SELECT * FROM tbtcp
INTO TABLE it_tbtcp
WHERE jobname = gd_jobname
AND jobcount = gd_jobcount
AND stepcount = gd_stepcount
AND listident <> '0000000000'
ORDER BY jobname
jobcount
stepcount.
READ TABLE it_tbtcp INTO wa_tbtcp INDEX 1.
IF sy-subrc = 0.
message s004(zdd) with gd_spool_nr.
gd_spool_nr = wa_tbtcp-listident.
MESSAGE s004(zdd) WITH gd_spool_nr.
ELSE.
MESSAGE s005(zdd).
ENDIF.
ENDFORM.
*------------------------------------------------------------------------------------
* FORM get_job_details
*------------------------------------------------------------------------------------
FORM get_job_details.
*Get current job details
CALL FUNCTION 'GET_JOB_RUNTIME_INFO'
IMPORTING
eventid = gd_eventid
eventparm = gd_eventparm
external_program_active = gd_external_program_active
jobcount = gd_jobcount
jobname = gd_jobname
stepcount = gd_stepcount
EXCEPTIONS
no_runtime_info = 1
OTHERS = 2.
ENDFORM.
*------------------------------------------------------------------------------------
* FORM convert_spool_to_pdf
*------------------------------------------------------------------------------------
FORM convert_spool_to_pdf.
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = gd_spool_nr
no_dialog = c_no
dst_device = c_device
IMPORTING
pdf_bytecount = gd_bytecount
TABLES
pdf = it_pdf_output
EXCEPTIONS
err_no_abap_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_destdevice = 5
user_cancelled = 6
err_spoolerror = 7
err_temseerror = 8
err_btcjob_open_failed = 9
err_btcjob_submit_failed = 10
err_btcjob_close_failed = 11
OTHERS = 12.
CHECK sy-subrc = 0.
*Transfer the 132-long strings to 255-long strings
LOOP AT it_pdf_output.
TRANSLATE it_pdf_output USING ' ~'.
CONCATENATE gd_buffer it_pdf_output INTO gd_buffer.
ENDLOOP.
TRANSLATE gd_buffer USING '~ '.
DO.
it_mess_att = gd_buffer.
APPEND it_mess_att.
SHIFT gd_buffer LEFT BY 255 PLACES.
IF gd_buffer IS INITIAL.
EXIT.
ENDIF.
ENDDO.
ENDFORM.
*------------------------------------------------------------------------------------
* FORM process_email
*------------------------------------------------------------------------------------
FORM process_email.
DESCRIBE TABLE it_mess_att LINES gd_recsize.
CHECK gd_recsize > 0.
PERFORM send_email USING p_email1.
* perform send_email using p_email2.
ENDFORM.
*------------------------------------------------------------------------------------
* FORM send_email
*------------------------------------------------------------------------------------
* --> p_email
*------------------------------------------------------------------------------------
FORM send_email USING p_email.
CHECK NOT ( p_email IS INITIAL ).
REFRESH it_mess_bod.
*Default subject matter
gd_subject = 'Subject'.
gd_attachment_desc = 'Attachname'.
CONCATENATE 'attach_name' ' ' INTO gd_attachment_name.
it_mess_bod = 'Message Body text, line 1'.
APPEND it_mess_bod.
it_mess_bod = 'Message Body text, line 2...'.
APPEND it_mess_bod.
*If no sender specified - default blank
IF p_sender EQ space.
gd_sender_type = space.
ELSE.
gd_sender_type = 'INT'.
ENDIF.
*Send file by email as .xls speadsheet
PERFORM send_file_as_email_attachment
tables it_mess_bod
it_mess_att
using p_email
'Example .xls documnet attachment'
'PDF'
gd_attachment_name
gd_attachment_desc
p_sender
gd_sender_type
changing gd_error
gd_reciever.
ENDFORM.
*------------------------------------------------------------------------------------
* FORM delete_spool
*------------------------------------------------------------------------------------
FORM delete_spool.
DATA: ld_spool_nr TYPE tsp01_sp0r-rqid_char.
ld_spool_nr = gd_spool_nr.
CHECK p_delspl <> c_no.
CALL FUNCTION 'RSPO_R_RDELETE_SPOOLREQ'
EXPORTING
spoolid = ld_spool_nr.
ENDFORM.
*&------------------------------------------------------------------------------------
*& Form SEND_FILE_AS_EMAIL_ATTACHMENT
*&------------------------------------------------------------------------------------
* Send email
*------------------------------------------------------------------------------------
FORM send_file_as_email_attachment tables it_message
it_attach
using p_email
p_mtitle
p_format
p_filename
p_attdescription
p_sender_address
p_sender_addres_type
changing p_error
p_reciever.
DATA: ld_error TYPE sy-subrc,
ld_reciever TYPE sy-subrc,
ld_mtitle LIKE sodocchgi1-obj_descr,
ld_email LIKE somlreci1-receiver,
ld_format TYPE so_obj_tp ,
ld_attdescription TYPE so_obj_nam ,
ld_attfilename TYPE so_obj_des ,
ld_sender_address LIKE soextreci1-receiver,
ld_sender_address_type LIKE soextreci1-adr_typ,
ld_receiver LIKE sy-subrc.
data: t_packing_list like sopcklsti1 occurs 0 with header line,
t_contents like solisti1 occurs 0 with header line,
t_receivers like somlreci1 occurs 0 with header line,
t_attachment like solisti1 occurs 0 with header line,
t_object_header like solisti1 occurs 0 with header line,
w_cnt type i,
w_sent_all(1) type c,
w_doc_data like sodocchgi1.
ld_email = p_email.
ld_mtitle = p_mtitle.
ld_format = p_format.
ld_attdescription = p_attdescription.
ld_attfilename = p_filename.
ld_sender_address = p_sender_address.
ld_sender_address_type = p_sender_addres_type.
*Fill the document data.
w_doc_data-doc_size = 1.
*Populate the subject/generic message attributes
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle .
w_doc_data-sensitivty = 'F'.
*Fill the document data and get size of attachment
CLEAR w_doc_data.
READ TABLE it_attach INDEX w_cnt.
w_doc_data-doc_size =
( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle.
w_doc_data-sensitivty = 'F'.
CLEAR t_attachment.
REFRESH t_attachment.
t_attachment[] = it_attach[].
*Describe the body of the message
CLEAR t_packing_list.
REFRESH t_packing_list.
t_packing_list-transf_bin = space.
t_packing_list-head_start = 1.
t_packing_list-head_num = 0.
t_packing_list-body_start = 1.
DESCRIBE TABLE it_message LINES t_packing_list-body_num.
t_packing_list-doc_type = 'RAW'.
APPEND t_packing_list.
*Create attachment notification
t_packing_list-transf_bin = 'X'.
t_packing_list-head_start = 1.
t_packing_list-head_num = 1.
t_packing_list-body_start = 1.
DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
t_packing_list-doc_type = ld_format.
t_packing_list-obj_descr = ld_attdescription.
t_packing_list-obj_name = ld_attfilename.
t_packing_list-doc_size = t_packing_list-body_num * 255.
APPEND t_packing_list.
*Add the recipients email address
CLEAR t_receivers.
REFRESH t_receivers.
t_receivers-receiver = ld_email.
t_receivers-rec_type = 'U'.
t_receivers-com_type = 'INT'.
t_receivers-notif_del = 'X'.
t_receivers-notif_ndel = 'X'.
APPEND t_receivers.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = w_doc_data
put_in_outbox = 'X'
sender_address = ld_sender_address
sender_address_type = ld_sender_address_type
commit_work = 'X'
IMPORTING
sent_to_all = w_sent_all
TABLES
packing_list = t_packing_list
contents_bin = t_attachment
contents_txt = it_message
receivers = t_receivers
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
*Populate zerror return code
ld_error = sy-subrc.
*Populate zreceiver return code
LOOP AT t_receivers.
ld_receiver = t_receivers-retrn_code.
ENDLOOP.
ENDFORM.
*source : https://scn.sap.com/thread/879625
PARAMETER: p_email1 LIKE somlreci1-receiver,
p_sender LIKE somlreci1-receiver,
p_delspl AS CHECKBOX.
*DATA DECLARATION
DATA: gd_recsize TYPE i.
*Spool IDs
TYPES: BEGIN OF t_tbtcp.
INCLUDE STRUCTURE tbtcp.
TYPES: END OF t_tbtcp.
DATA: it_tbtcp TYPE STANDARD TABLE OF t_tbtcp INITIAL SIZE 0,
wa_tbtcp TYPE t_tbtcp.
*Job Runtime Parameters
DATA: gd_eventid LIKE tbtcm-eventid,
gd_eventparm LIKE tbtcm-eventparm,
gd_external_program_active LIKE tbtcm-xpgactive,
gd_jobcount LIKE tbtcm-jobcount,
gd_jobname LIKE tbtcm-jobname,
gd_stepcount LIKE tbtcm-stepcount,
gd_error TYPE sy-subrc,
gd_reciever TYPE sy-subrc.
DATA: w_recsize TYPE i.
DATA: gd_subject LIKE sodocchgi1-obj_descr,
it_mess_bod LIKE solisti1 OCCURS 0 WITH HEADER LINE,
it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,
gd_sender_type LIKE soextreci1-adr_typ,
gd_attachment_desc TYPE so_obj_nam,
gd_attachment_name TYPE so_obj_des.
*Spool to PDF conversions
DATA: gd_spool_nr LIKE tsp01-rqident,
gd_destination LIKE rlgrap-filename,
gd_bytecount LIKE tst01-dsize,
gd_buffer TYPE string.
*Binary store for PDF
DATA: BEGIN OF it_pdf_output OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF it_pdf_output.
CONSTANTS: c_dev LIKE sy-sysid VALUE 'DEV',
c_no(1) TYPE c VALUE ' ',
c_device(4) TYPE c VALUE 'LOCL'.
START-OF-SELECTION.
do 10 times.
WRITE 'Hello World'.
enddo .
new-page.
commit work.
new-page print off.
IF sy-batch EQ 'X'.
PERFORM get_job_details.
PERFORM obtain_spool_id.
PERFORM convert_spool_to_pdf.
PERFORM process_email.
if p_delspl EQ 'X'.
PERFORM delete_spool.
endif.
IF sy-sysid = c_dev.
wait up to 5 seconds.
SUBMIT rsconn01 WITH mode = 'INT'
WITH output = 'X'
AND RETURN.
ENDIF.
ELSE.
SKIP.
WRITE:/ 'Program must be executed in background in-order for spool',
'request to be created.'.
ENDIF.
*------------------------------------------------------------------------------------
* FORM obtain_spool_id
*------------------------------------------------------------------------------------
FORM obtain_spool_id.
CHECK NOT ( gd_jobname IS INITIAL ).
CHECK NOT ( gd_jobcount IS INITIAL ).
SELECT * FROM tbtcp
INTO TABLE it_tbtcp
WHERE jobname = gd_jobname
AND jobcount = gd_jobcount
AND stepcount = gd_stepcount
AND listident <> '0000000000'
ORDER BY jobname
jobcount
stepcount.
READ TABLE it_tbtcp INTO wa_tbtcp INDEX 1.
IF sy-subrc = 0.
message s004(zdd) with gd_spool_nr.
gd_spool_nr = wa_tbtcp-listident.
MESSAGE s004(zdd) WITH gd_spool_nr.
ELSE.
MESSAGE s005(zdd).
ENDIF.
ENDFORM.
*------------------------------------------------------------------------------------
* FORM get_job_details
*------------------------------------------------------------------------------------
FORM get_job_details.
*Get current job details
CALL FUNCTION 'GET_JOB_RUNTIME_INFO'
IMPORTING
eventid = gd_eventid
eventparm = gd_eventparm
external_program_active = gd_external_program_active
jobcount = gd_jobcount
jobname = gd_jobname
stepcount = gd_stepcount
EXCEPTIONS
no_runtime_info = 1
OTHERS = 2.
ENDFORM.
*------------------------------------------------------------------------------------
* FORM convert_spool_to_pdf
*------------------------------------------------------------------------------------
FORM convert_spool_to_pdf.
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = gd_spool_nr
no_dialog = c_no
dst_device = c_device
IMPORTING
pdf_bytecount = gd_bytecount
TABLES
pdf = it_pdf_output
EXCEPTIONS
err_no_abap_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_destdevice = 5
user_cancelled = 6
err_spoolerror = 7
err_temseerror = 8
err_btcjob_open_failed = 9
err_btcjob_submit_failed = 10
err_btcjob_close_failed = 11
OTHERS = 12.
CHECK sy-subrc = 0.
*Transfer the 132-long strings to 255-long strings
LOOP AT it_pdf_output.
TRANSLATE it_pdf_output USING ' ~'.
CONCATENATE gd_buffer it_pdf_output INTO gd_buffer.
ENDLOOP.
TRANSLATE gd_buffer USING '~ '.
DO.
it_mess_att = gd_buffer.
APPEND it_mess_att.
SHIFT gd_buffer LEFT BY 255 PLACES.
IF gd_buffer IS INITIAL.
EXIT.
ENDIF.
ENDDO.
ENDFORM.
*------------------------------------------------------------------------------------
* FORM process_email
*------------------------------------------------------------------------------------
FORM process_email.
DESCRIBE TABLE it_mess_att LINES gd_recsize.
CHECK gd_recsize > 0.
PERFORM send_email USING p_email1.
* perform send_email using p_email2.
ENDFORM.
*------------------------------------------------------------------------------------
* FORM send_email
*------------------------------------------------------------------------------------
* --> p_email
*------------------------------------------------------------------------------------
FORM send_email USING p_email.
CHECK NOT ( p_email IS INITIAL ).
REFRESH it_mess_bod.
*Default subject matter
gd_subject = 'Subject'.
gd_attachment_desc = 'Attachname'.
CONCATENATE 'attach_name' ' ' INTO gd_attachment_name.
it_mess_bod = 'Message Body text, line 1'.
APPEND it_mess_bod.
it_mess_bod = 'Message Body text, line 2...'.
APPEND it_mess_bod.
*If no sender specified - default blank
IF p_sender EQ space.
gd_sender_type = space.
ELSE.
gd_sender_type = 'INT'.
ENDIF.
*Send file by email as .xls speadsheet
PERFORM send_file_as_email_attachment
tables it_mess_bod
it_mess_att
using p_email
'Example .xls documnet attachment'
'PDF'
gd_attachment_name
gd_attachment_desc
p_sender
gd_sender_type
changing gd_error
gd_reciever.
ENDFORM.
*------------------------------------------------------------------------------------
* FORM delete_spool
*------------------------------------------------------------------------------------
FORM delete_spool.
DATA: ld_spool_nr TYPE tsp01_sp0r-rqid_char.
ld_spool_nr = gd_spool_nr.
CHECK p_delspl <> c_no.
CALL FUNCTION 'RSPO_R_RDELETE_SPOOLREQ'
EXPORTING
spoolid = ld_spool_nr.
ENDFORM.
*&------------------------------------------------------------------------------------
*& Form SEND_FILE_AS_EMAIL_ATTACHMENT
*&------------------------------------------------------------------------------------
* Send email
*------------------------------------------------------------------------------------
FORM send_file_as_email_attachment tables it_message
it_attach
using p_email
p_mtitle
p_format
p_filename
p_attdescription
p_sender_address
p_sender_addres_type
changing p_error
p_reciever.
DATA: ld_error TYPE sy-subrc,
ld_reciever TYPE sy-subrc,
ld_mtitle LIKE sodocchgi1-obj_descr,
ld_email LIKE somlreci1-receiver,
ld_format TYPE so_obj_tp ,
ld_attdescription TYPE so_obj_nam ,
ld_attfilename TYPE so_obj_des ,
ld_sender_address LIKE soextreci1-receiver,
ld_sender_address_type LIKE soextreci1-adr_typ,
ld_receiver LIKE sy-subrc.
data: t_packing_list like sopcklsti1 occurs 0 with header line,
t_contents like solisti1 occurs 0 with header line,
t_receivers like somlreci1 occurs 0 with header line,
t_attachment like solisti1 occurs 0 with header line,
t_object_header like solisti1 occurs 0 with header line,
w_cnt type i,
w_sent_all(1) type c,
w_doc_data like sodocchgi1.
ld_email = p_email.
ld_mtitle = p_mtitle.
ld_format = p_format.
ld_attdescription = p_attdescription.
ld_attfilename = p_filename.
ld_sender_address = p_sender_address.
ld_sender_address_type = p_sender_addres_type.
*Fill the document data.
w_doc_data-doc_size = 1.
*Populate the subject/generic message attributes
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle .
w_doc_data-sensitivty = 'F'.
*Fill the document data and get size of attachment
CLEAR w_doc_data.
READ TABLE it_attach INDEX w_cnt.
w_doc_data-doc_size =
( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle.
w_doc_data-sensitivty = 'F'.
CLEAR t_attachment.
REFRESH t_attachment.
t_attachment[] = it_attach[].
*Describe the body of the message
CLEAR t_packing_list.
REFRESH t_packing_list.
t_packing_list-transf_bin = space.
t_packing_list-head_start = 1.
t_packing_list-head_num = 0.
t_packing_list-body_start = 1.
DESCRIBE TABLE it_message LINES t_packing_list-body_num.
t_packing_list-doc_type = 'RAW'.
APPEND t_packing_list.
*Create attachment notification
t_packing_list-transf_bin = 'X'.
t_packing_list-head_start = 1.
t_packing_list-head_num = 1.
t_packing_list-body_start = 1.
DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
t_packing_list-doc_type = ld_format.
t_packing_list-obj_descr = ld_attdescription.
t_packing_list-obj_name = ld_attfilename.
t_packing_list-doc_size = t_packing_list-body_num * 255.
APPEND t_packing_list.
*Add the recipients email address
CLEAR t_receivers.
REFRESH t_receivers.
t_receivers-receiver = ld_email.
t_receivers-rec_type = 'U'.
t_receivers-com_type = 'INT'.
t_receivers-notif_del = 'X'.
t_receivers-notif_ndel = 'X'.
APPEND t_receivers.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = w_doc_data
put_in_outbox = 'X'
sender_address = ld_sender_address
sender_address_type = ld_sender_address_type
commit_work = 'X'
IMPORTING
sent_to_all = w_sent_all
TABLES
packing_list = t_packing_list
contents_bin = t_attachment
contents_txt = it_message
receivers = t_receivers
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
*Populate zerror return code
ld_error = sy-subrc.
*Populate zreceiver return code
LOOP AT t_receivers.
ld_receiver = t_receivers-retrn_code.
ENDLOOP.
ENDFORM.