Thursday, 13 March 2014
Sample Program to send email using function 'SO_NEW_DOCUMENT_SEND_API1
REPORT zrqm_quality_notification .
TABLES: qmel.
TYPES: BEGIN OF ty_qmel,
qmnum TYPE qmel-qmnum,
erdat TYPE qmel-erdat,
mzeit TYPE qmel-mzeit,
END OF ty_qmel.
*Begin of RavulS1 D47K9A0XEZ 04-Oct-2013
TYPES : BEGIN OF ty_email_add_text,
qmnum TYPE qmel-qmnum,
flag TYPE c , " this flag will be X if there are issues while
" adding the default tasks.
END OF ty_email_add_text .
DATA : gt_add_extra_line TYPE STANDARD TABLE OF ty_email_add_text,
gw_add_extra_line TYPE ty_email_add_text .
*End of RavulS1 D47K9A0XEZ 04-Oct-2013
DATA : gt_return TYPE STANDARD TABLE OF bapiret2,
gt_add_task TYPE STANDARD TABLE OF rfc_viqmsm,
gt_add_task1 TYPE STANDARD TABLE OF rfc_viqmsm,
gt_qmel1 TYPE STANDARD TABLE OF zqm_qmel,
gt_qmel2 TYPE STANDARD TABLE OF zqm_qmel,
gt_global_prms TYPE STANDARD TABLE OF ztqm_global_prms.
DATA: gw_add_task TYPE rfc_viqmsm,
gw_qmel TYPE zqm_qmel,
gw_global_prms TYPE ztqm_global_prms ,
gv_counter1 TYPE i ,
gv_counter2 TYPE i ,
gv_tabix TYPE sy-tabix,
gv_i TYPE i.
CONSTANTS: gc_x TYPE char1 VALUE 'X',
gc_u TYPE char1 VALUE 'U',
gc_z_zxqqmu01_sqop(17) TYPE c VALUE 'Z_ZXQQMU01_SQOP'.
DATA : gt_qn_email TYPE STANDARD TABLE OF ztqm_email_notif,
gw_qn_email TYPE ztqm_email_notif.
*created a table ZQM_QMEL which gets updated whenever a Quality Notification
* is created either automatically by QE01 or manually by QM01.
SELECT * FROM zqm_qmel INTO TABLE gt_qmel1.
IF gt_qmel1 IS NOT INITIAL.
*Add tasks from the Global parameter table
SELECT * FROM ztqm_global_prms INTO TABLE gt_global_prms
WHERE cprog EQ gc_z_zxqqmu01_sqop ."'Z_ZXQQMU01_SQOP' .
IF sy-subrc EQ 0.
SORT gt_global_prms BY counter ASCENDING.
DESCRIBE TABLE gt_global_prms LINES gv_i .
LOOP AT gt_global_prms INTO gw_global_prms.
CLEAR : gv_counter1,
gv_tabix.
gv_tabix = sy-tabix.
gv_counter1 = gw_global_prms-counter.
IF gv_tabix EQ 1 .
gv_counter2 = gv_counter1 .
ENDIF.
IF gv_counter1 NE gv_counter2 .
APPEND gw_add_task TO gt_add_task.
CLEAR : gw_add_task.
gv_counter2 = gv_counter1 .
ENDIF.
*Add below tasks from the global parameter table.
CASE gw_global_prms-variable_name.
WHEN 'SORT_NUMBER'.
gw_add_task-qsmnum = gw_global_prms-variable_value.
WHEN 'CODE_GROUP'.
gw_add_task-mngrp = gw_global_prms-variable_value.
WHEN 'TASK_CODE'.
gw_add_task-mncod = gw_global_prms-variable_value.
WHEN 'PARTNER_FUNCTION'.
gw_add_task-parvw = gw_global_prms-variable_value.
ENDCASE.
IF gv_tabix EQ gv_i.
APPEND gw_add_task TO gt_add_task.
CLEAR : gw_add_task.
ENDIF.
ENDLOOP.
ENDIF. " IF sy-subrc eq 0.
IF gt_add_task IS NOT INITIAL.
IF gt_qmel1 IS NOT INITIAL.
CLEAR : gt_qn_email.
SELECT * FROM ztqm_email_notif INTO TABLE gt_qn_email
FOR ALL ENTRIES IN gt_qmel1
WHERE werks EQ gt_qmel1-werks.
ENDIF. "if gt_qmel1 is not INITIAL.
CLEAR : gw_qmel.
LOOP AT gt_qmel1 INTO gw_qmel.
CLEAR : gt_add_task1,
gw_add_task.
LOOP AT gt_add_task INTO gw_add_task.
CLEAR : gv_tabix.
gv_tabix = sy-tabix .
CLEAR : gw_qn_email.
READ TABLE gt_qn_email INTO gw_qn_email
WITH KEY werks = gw_qmel-werks .
IF sy-subrc EQ 0 .
gw_add_task-parnr = gw_qn_email-parnr .
ENDIF.
APPEND gw_add_task TO gt_add_task1 .
CLEAR : gw_add_task .
ENDLOOP.
*This Function module used to add task for the notification F2
* CALL FUNCTION 'Z_QM_QN_ADD_TASK'
* EXPORTING
* i_qmnum = gw_qmel-qmnum
* TABLES
* i_viqmsm_t = gt_add_task
* i_return_t = gt_return.
CALL FUNCTION 'Z_QM_QN_ADD_TASK'
EXPORTING
i_qmnum = gw_qmel-qmnum
TABLES
i_viqmsm_t = gt_add_task1
i_return_t = gt_return.
IF gt_return IS INITIAL.
APPEND gw_qmel TO gt_qmel2 .
*Begin of RavulS1 D47K9A0XEZ 04-Oct-2013
ELSE.
APPEND gw_qmel TO gt_qmel2 .
CLEAR : gw_add_extra_line .
gw_add_extra_line-qmnum = gw_qmel-qmnum .
gw_add_extra_line-flag = 'X' .
APPEND gw_add_extra_line TO gt_add_extra_line .
*End of RavulS1 D47K9A0XEZ 04-Oct-2013
ENDIF.
CLEAR : gw_qmel,
gt_return.
ENDLOOP.
ENDIF.
ENDIF." if gt_qmel is not INITIAL.
CLEAR : gw_add_task,
gw_qmel,
gw_global_prms.
REFRESH : gt_add_task,
gt_return,
gt_qmel1,
gt_global_prms.
PERFORM send_email_for_qn .
DELETE zqm_qmel FROM TABLE gt_qmel2 .
REFRESH : gt_qmel2.
*&---------------------------------------------------------------------*
*& Form SEND_EMAIL_FOR_QN
*&---------------------------------------------------------------------*
* Send an Email for the QN Notification to user
*----------------------------------------------------------------------*
FORM send_email_for_qn .
* Send an Email for the QN Notification F2 for the responsible user
DATA : ls_email_data TYPE sodocchgi1,
lt_email_text TYPE STANDARD TABLE OF solisti1,
ls_email_text TYPE solisti1,
lt_email_send TYPE STANDARD TABLE OF somlreci1,
ls_email_send TYPE somlreci1 ,
lt_qn_email TYPE STANDARD TABLE OF ztqm_email_notif,
lw_qn_email TYPE ztqm_email_notif.
CLEAR : lt_qn_email,
lw_qn_email.
IF gt_qmel2 IS NOT INITIAL.
* SELECT * FROM ztqm_email_notif INTO TABLE lt_qn_email
* FOR ALL ENTRIES IN gt_qmel2
* WHERE werks EQ gt_qmel2-werks.
CLEAR : gw_qmel.
CLEAR : ls_email_data,
lt_email_text,
ls_email_text,
lt_email_send,
ls_email_send.
LOOP AT gt_qmel2 INTO gw_qmel.
*Fetch email id
CLEAR : lw_qn_email.
* READ TABLE lt_qn_email INTO lw_qn_email
* WITH KEY werks = gw_qmel-werks .
READ TABLE gt_qn_email INTO lw_qn_email
WITH KEY werks = gw_qmel-werks .
IF lw_qn_email-dl_name IS NOT INITIAL.
ls_email_send-receiver = lw_qn_email-dl_name.
ls_email_send-rec_type = gc_u. "'U'.
ls_email_send-express = gc_x ."'X'.
APPEND ls_email_send TO lt_email_send.
ls_email_data-obj_name = 'MESSAGE'.
CONCATENATE 'New F2-QN-'(018)
gw_qmel-qmnum
'-'
gw_qmel-matnr
INTO ls_email_data-obj_descr SEPARATED BY space.
* Email attributes
ls_email_data-obj_langu = 'E'.
ls_email_data-sensitivty = 'P'.
ls_email_data-obj_prio = '1'.
ls_email_data-no_change = 'X'.
ls_email_data-priority = '1'.
*Send the below texts while sending the mail.
CLEAR : ls_email_text.
ls_email_text-line = 'Hi QN User,'(001) .
APPEND ls_email_text TO lt_email_text.
APPEND INITIAL LINE TO lt_email_text.
CLEAR : ls_email_text.
CONCATENATE 'The following F2 Vendor error Quality notification -'(002)
gw_qmel-qmnum
'-'
'has been created.'(003)
INTO ls_email_text-line SEPARATED BY space.
APPEND ls_email_text TO lt_email_text.
CLEAR : ls_email_text.
CONCATENATE 'Please release the notification'(004)
'and assign tasks for completion in SAP QM.'(005)
INTO ls_email_text-line SEPARATED BY space.
APPEND ls_email_text TO lt_email_text.
APPEND INITIAL LINE TO lt_email_text.
CLEAR : ls_email_text.
CONCATENATE 'Material:'(006)
gw_qmel-matnr
INTO ls_email_text-line SEPARATED BY space.
APPEND ls_email_text TO lt_email_text.
CLEAR : ls_email_text.
CONCATENATE 'Material Description:'(007)
gw_qmel-maktx
INTO ls_email_text-line SEPARATED BY space.
APPEND ls_email_text TO lt_email_text.
CLEAR : ls_email_text.
CONCATENATE 'Supplier:'(008)
gw_qmel-vendor_name
'< Supplier ID:'(009)
gw_qmel-lifnum
'>'
INTO ls_email_text-line SEPARATED BY space.
APPEND ls_email_text TO lt_email_text.
CLEAR : ls_email_text.
CONCATENATE 'QN created by:'(010)
gw_qmel-fullname
'< SAP User ID:'(011)
gw_qmel-ernam
'>'
INTO ls_email_text-line SEPARATED BY space.
APPEND ls_email_text TO lt_email_text.
CLEAR : ls_email_text.
APPEND INITIAL LINE TO lt_email_text.
CONCATENATE 'If you have received this e-mail in error'(012)
'or'(013)
'if you have questions on processing this F2 QN,'(014)
'contact your site IQA.'(015)
INTO ls_email_text-line SEPARATED BY space.
APPEND ls_email_text TO lt_email_text.
*Begin of RavulS1 D47K9A0XEZ 04-Oct-2013
CLEAR : gw_add_extra_line .
READ TABLE gt_add_extra_line INTO gw_add_extra_line
WITH KEY qmnum = gw_qmel-qmnum .
IF sy-subrc EQ 0.
*Sy-subrc will be zero only if adding of default task fails
APPEND INITIAL LINE TO lt_email_text.
CLEAR : ls_email_text.
CONCATENATE 'Auto-Tasks were not created due to data'(019) 'issues'(020)
INTO ls_email_text-line SEPARATED BY space.
ENDIF.
*End of RavulS1 D47K9A0XEZ 04-Oct-2013
APPEND INITIAL LINE TO lt_email_text.
CLEAR : ls_email_text.
CONCATENATE '*****This message is triggered automatically'(016)
'from Inspection lot processing*****'(017)
INTO ls_email_text-line SEPARATED BY space.
APPEND ls_email_text TO lt_email_text.
APPEND INITIAL LINE TO lt_email_text.
CLEAR : ls_email_text.
*By using the below Function module send an email
CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
EXPORTING
document_data = ls_email_data
document_type = 'RAW'
put_in_outbox = gc_x "'X'
commit_work = gc_x "'X'
TABLES
object_content = lt_email_text
receivers = lt_email_send
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.
IF sy-subrc EQ 0.
ENDIF.
ENDIF. "if lw_qn_email-dl_name is NOT INITIAL.
CLEAR : ls_email_data,
lt_email_text,
ls_email_text,
lt_email_send,
ls_email_send.
CLEAR : gw_qmel .
ENDLOOP.
ENDIF."if gt_qmel2 is not INITIAL.
ENDFORM. " SEND_EMAIL_FOR_QN
Friday, 7 March 2014
Sample Program for Classical ALV Report with Header by Shravankumar Ravula
*&---------------------------------------------------------------------*
*& Report YSTEST_ALV *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT ystest_alv .
TABLES: mara.
*----------------------------------------------------------------------*
* TYPE-POOLS
*----------------------------------------------------------------------*
TYPE-POOLS: slis.
*----------------------------------------------------------------------*
* TYPES DECLARATION
*----------------------------------------------------------------------*
TYPES : BEGIN OF ty_mara,
matnr TYPE mara-matnr,
ersda TYPE mara-ersda,
ernam TYPE mara-ernam,
END OF ty_mara .
TYPES: BEGIN OF gy_final,
matnr TYPE mara-matnr,
ersda TYPE mara-ersda,
ernam TYPE mara-ernam,
laeda TYPE mara-ernam,
aenam TYPE mara-ernam,
vpsta TYPE mara-ernam,
pstat TYPE mara-ernam,
lvorm TYPE mara-ernam,
mtart TYPE mara-ernam,
END OF gy_final.
DATA: gt_mara TYPE STANDARD TABLE OF ty_mara,
gw_mara TYPE ty_mara,
gt_final TYPE TABLE OF gy_final,
gw_final TYPE gy_final.
*--------------------------------------------------------------------*
* SLIS Variables
*--------------------------------------------------------------------*
DATA: gw_event TYPE slis_alv_event, " ALV EVENT
gw_layout TYPE slis_layout_alv,
gt_fieldcat TYPE slis_t_fieldcat_alv,
gt_event TYPE slis_t_event, " ALV EVENT
gt_heading TYPE slis_t_listheader, " ALV HEADING
gw_grid_settings TYPE lvc_s_glay,
gw_variant TYPE disvariant,
gw_fieldcat TYPE slis_fieldcat_alv.
DATA : gv_date(60) TYPE c .
*----------------------------------------------------------------------*
* CONSTANTS
*----------------------------------------------------------------------*
CONSTANTS : gc_s TYPE c VALUE 'S',
gc_x TYPE char1 VALUE 'X',
gc_top TYPE slis_formname VALUE 'TOP_OF_PAGE',
gc_a TYPE char1 VALUE 'A'.
*----------------------------------------------------------------------*
* SELECT-OPTIONS
*----------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_matnr TYPE mara-matnr.
SELECTION-SCREEN: END OF BLOCK b1.
*--------------------------------------------------------------------*
* START-OF-SELECTION
*--------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM sub_populate_mara.
PERFORM sub_populate_final.
* Prepare fieldcatalog
PERFORM sub_fieldcat.
* Build Event
PERFORM populate_event.
* FOR ALV HEADER
PERFORM build_comment USING gt_heading[].
* output display
PERFORM sub_output_display.
*&---------------------------------------------------------------------*
*& Form SUB_POPULATE_MARA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_populate_mara .
SELECT matnr
ersda
ernam
FROM mara INTO TABLE gt_mara
WHERE matnr EQ p_matnr.
ENDFORM. " SUB_POPULATE_MARA
*&---------------------------------------------------------------------*
*& Form SUB_POPULATE_FINAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_populate_final .
LOOP AT gt_mara INTO gw_mara.
gw_final-matnr = gw_mara-matnr.
gw_final-ersda = gw_mara-ersda.
gw_final-ernam = gw_mara-ernam.
APPEND gw_final TO gt_final.
CLEAR: gw_final.
ENDLOOP.
ENDFORM. " SUB_POPULATE_FINAL
*&---------------------------------------------------------------------*
*& Form SUB_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_fieldcat .
gw_fieldcat-fieldname = 'MATNR'.
gw_fieldcat-seltext_l = 'Material Number'(004).
gw_fieldcat-col_pos = 0.
APPEND gw_fieldcat TO gt_fieldcat.
CLEAR : gw_fieldcat.
gw_fieldcat-fieldname = 'ERSDA'.
gw_fieldcat-seltext_l = 'Creation Date'(005).
gw_fieldcat-col_pos = 1.
APPEND gw_fieldcat TO gt_fieldcat.
CLEAR : gw_fieldcat.
gw_fieldcat-fieldname = 'ERNAM'.
gw_fieldcat-seltext_l = 'Created By'(005).
gw_fieldcat-col_pos = 1.
APPEND gw_fieldcat TO gt_fieldcat.
CLEAR : gw_fieldcat.
ENDFORM. " SUB_FIELDCAT
*&---------------------------------------------------------------------*
*& Form POPULATE_EVENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM populate_event .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = gt_event
EXCEPTIONS
list_type_wrong = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
SORT gt_event BY name.
READ TABLE gt_event WITH KEY name = slis_ev_top_of_page INTO gw_event
BINARY SEARCH.
IF sy-subrc = 0.
MOVE gc_top TO gw_event-form.
MODIFY gt_event FROM gw_event INDEX sy-tabix TRANSPORTING form.
ENDIF.
ENDIF.
ENDFORM. " POPULATE_EVENT
*&---------------------------------------------------------------------*
*& Form BUILD_COMMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_HEADING[] text
*----------------------------------------------------------------------*
FORM build_comment USING p_heading TYPE slis_t_listheader.
DATA: l_hline TYPE slis_listheader,
lv_title(50),
lv_progname(20),
lv_datum(11),
lv_time(10),
lv_username(30),
lv_pagno(2),
lv_pagno1(2),
lv_client(10),
l_f_info(132),
lv_host(10).
lv_title = sy-title.
lv_progname = sy-cprog.
lv_datum = sy-datum.
lv_time = sy-uzeit.
lv_username = sy-uname.
* lv_pagno = sy-pagno.
lv_pagno = sy-pagno + 1.
lv_pagno1 = sy-pagno + 1.
lv_client = sy-mandt.
lv_host = sy-sysid.
l_hline-typ = gc_s.
l_hline-key = 'REPORT TITLE:'.
l_hline-info = lv_title.
APPEND l_hline TO p_heading.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'PROGRAM NAME:'.
l_hline-info = lv_progname.
APPEND l_hline TO p_heading.
CLEAR l_hline.
PERFORM get_gdp_date.
CONCATENATE sy-timlo+0(2) ':' sy-timlo+2(2) ':' sy-timlo+4(2)
INTO lv_time.
l_hline-typ = gc_s.
l_hline-key = 'DATE:'.
l_hline-info = gv_date.
APPEND l_hline TO p_heading.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'TIME:'.
l_hline-info = lv_time.
APPEND l_hline TO p_heading.
CLEAR l_hline.
CONCATENATE lv_pagno '/' lv_pagno1 INTO l_f_info
*
SEPARATED BY ' '.
l_hline-typ = gc_s.
l_hline-key = 'PAGNO:'.
l_hline-info = l_f_info.
APPEND l_hline TO p_heading.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'USERID:'.
l_hline-info = lv_username.
APPEND l_hline TO p_heading.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'CLIENT:'.
l_hline-info = lv_client.
APPEND l_hline TO p_heading.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'SAP SYSTEM:'.
l_hline-info = lv_host.
APPEND l_hline TO p_heading.
CLEAR l_hline.
ENDFORM. " BUILD_COMMENT
***---------------------------------------------------------------------*
*** FORM TOP_OF_PAGE *
**----------------------------------------------------------------------*
*Display top of page details which we defined in the report
*---------------------------------------------------------------------*
FORM top_of_page. "#EC CALLED
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = gt_heading[].
ENDFORM. " BUILD_COMMENT
*&---------------------------------------------------------------------*
*& Form GET_GDP_DATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_gdp_date .
DATA : lt_month_names TYPE TABLE OF t247 ,
ls_month_names TYPE t247 .
gv_date = sy-datlo .
CALL FUNCTION 'MONTH_NAMES_GET'
EXPORTING
language = sy-langu
TABLES
month_names = lt_month_names.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
READ TABLE lt_month_names INTO ls_month_names
WITH KEY mnr = sy-datlo+4(2).
IF sy-subrc EQ 0 .
CLEAR gv_date.
CONCATENATE sy-datlo+6(2) ls_month_names-ktx
sy-datlo+0(4) INTO gv_date.
ENDIF.
ENDIF.
ENDFORM. " GET_GDP_DATE
*&---------------------------------------------------------------------*
*& Form SUB_OUTPUT_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_output_display .
gw_layout-colwidth_optimize = 'X'.
gw_grid_settings-no_colwopt = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_grid_settings = gw_grid_settings
is_layout = gw_layout
it_fieldcat = gt_fieldcat[]
i_default = gc_x
i_save = gc_a
is_variant = gw_variant
it_events = gt_event[]
TABLES
t_outtab = gt_final[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " SUB_OUTPUT_DISPLAY
*& Report YSTEST_ALV *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT ystest_alv .
TABLES: mara.
*----------------------------------------------------------------------*
* TYPE-POOLS
*----------------------------------------------------------------------*
TYPE-POOLS: slis.
*----------------------------------------------------------------------*
* TYPES DECLARATION
*----------------------------------------------------------------------*
TYPES : BEGIN OF ty_mara,
matnr TYPE mara-matnr,
ersda TYPE mara-ersda,
ernam TYPE mara-ernam,
END OF ty_mara .
TYPES: BEGIN OF gy_final,
matnr TYPE mara-matnr,
ersda TYPE mara-ersda,
ernam TYPE mara-ernam,
laeda TYPE mara-ernam,
aenam TYPE mara-ernam,
vpsta TYPE mara-ernam,
pstat TYPE mara-ernam,
lvorm TYPE mara-ernam,
mtart TYPE mara-ernam,
END OF gy_final.
DATA: gt_mara TYPE STANDARD TABLE OF ty_mara,
gw_mara TYPE ty_mara,
gt_final TYPE TABLE OF gy_final,
gw_final TYPE gy_final.
*--------------------------------------------------------------------*
* SLIS Variables
*--------------------------------------------------------------------*
DATA: gw_event TYPE slis_alv_event, " ALV EVENT
gw_layout TYPE slis_layout_alv,
gt_fieldcat TYPE slis_t_fieldcat_alv,
gt_event TYPE slis_t_event, " ALV EVENT
gt_heading TYPE slis_t_listheader, " ALV HEADING
gw_grid_settings TYPE lvc_s_glay,
gw_variant TYPE disvariant,
gw_fieldcat TYPE slis_fieldcat_alv.
DATA : gv_date(60) TYPE c .
*----------------------------------------------------------------------*
* CONSTANTS
*----------------------------------------------------------------------*
CONSTANTS : gc_s TYPE c VALUE 'S',
gc_x TYPE char1 VALUE 'X',
gc_top TYPE slis_formname VALUE 'TOP_OF_PAGE',
gc_a TYPE char1 VALUE 'A'.
*----------------------------------------------------------------------*
* SELECT-OPTIONS
*----------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_matnr TYPE mara-matnr.
SELECTION-SCREEN: END OF BLOCK b1.
*--------------------------------------------------------------------*
* START-OF-SELECTION
*--------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM sub_populate_mara.
PERFORM sub_populate_final.
* Prepare fieldcatalog
PERFORM sub_fieldcat.
* Build Event
PERFORM populate_event.
* FOR ALV HEADER
PERFORM build_comment USING gt_heading[].
* output display
PERFORM sub_output_display.
*&---------------------------------------------------------------------*
*& Form SUB_POPULATE_MARA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_populate_mara .
SELECT matnr
ersda
ernam
FROM mara INTO TABLE gt_mara
WHERE matnr EQ p_matnr.
ENDFORM. " SUB_POPULATE_MARA
*&---------------------------------------------------------------------*
*& Form SUB_POPULATE_FINAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_populate_final .
LOOP AT gt_mara INTO gw_mara.
gw_final-matnr = gw_mara-matnr.
gw_final-ersda = gw_mara-ersda.
gw_final-ernam = gw_mara-ernam.
APPEND gw_final TO gt_final.
CLEAR: gw_final.
ENDLOOP.
ENDFORM. " SUB_POPULATE_FINAL
*&---------------------------------------------------------------------*
*& Form SUB_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_fieldcat .
gw_fieldcat-fieldname = 'MATNR'.
gw_fieldcat-seltext_l = 'Material Number'(004).
gw_fieldcat-col_pos = 0.
APPEND gw_fieldcat TO gt_fieldcat.
CLEAR : gw_fieldcat.
gw_fieldcat-fieldname = 'ERSDA'.
gw_fieldcat-seltext_l = 'Creation Date'(005).
gw_fieldcat-col_pos = 1.
APPEND gw_fieldcat TO gt_fieldcat.
CLEAR : gw_fieldcat.
gw_fieldcat-fieldname = 'ERNAM'.
gw_fieldcat-seltext_l = 'Created By'(005).
gw_fieldcat-col_pos = 1.
APPEND gw_fieldcat TO gt_fieldcat.
CLEAR : gw_fieldcat.
ENDFORM. " SUB_FIELDCAT
*&---------------------------------------------------------------------*
*& Form POPULATE_EVENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM populate_event .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = gt_event
EXCEPTIONS
list_type_wrong = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
SORT gt_event BY name.
READ TABLE gt_event WITH KEY name = slis_ev_top_of_page INTO gw_event
BINARY SEARCH.
IF sy-subrc = 0.
MOVE gc_top TO gw_event-form.
MODIFY gt_event FROM gw_event INDEX sy-tabix TRANSPORTING form.
ENDIF.
ENDIF.
ENDFORM. " POPULATE_EVENT
*&---------------------------------------------------------------------*
*& Form BUILD_COMMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_HEADING[] text
*----------------------------------------------------------------------*
FORM build_comment USING p_heading TYPE slis_t_listheader.
DATA: l_hline TYPE slis_listheader,
lv_title(50),
lv_progname(20),
lv_datum(11),
lv_time(10),
lv_username(30),
lv_pagno(2),
lv_pagno1(2),
lv_client(10),
l_f_info(132),
lv_host(10).
lv_title = sy-title.
lv_progname = sy-cprog.
lv_datum = sy-datum.
lv_time = sy-uzeit.
lv_username = sy-uname.
* lv_pagno = sy-pagno.
lv_pagno = sy-pagno + 1.
lv_pagno1 = sy-pagno + 1.
lv_client = sy-mandt.
lv_host = sy-sysid.
l_hline-typ = gc_s.
l_hline-key = 'REPORT TITLE:'.
l_hline-info = lv_title.
APPEND l_hline TO p_heading.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'PROGRAM NAME:'.
l_hline-info = lv_progname.
APPEND l_hline TO p_heading.
CLEAR l_hline.
PERFORM get_gdp_date.
CONCATENATE sy-timlo+0(2) ':' sy-timlo+2(2) ':' sy-timlo+4(2)
INTO lv_time.
l_hline-typ = gc_s.
l_hline-key = 'DATE:'.
l_hline-info = gv_date.
APPEND l_hline TO p_heading.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'TIME:'.
l_hline-info = lv_time.
APPEND l_hline TO p_heading.
CLEAR l_hline.
CONCATENATE lv_pagno '/' lv_pagno1 INTO l_f_info
*
SEPARATED BY ' '.
l_hline-typ = gc_s.
l_hline-key = 'PAGNO:'.
l_hline-info = l_f_info.
APPEND l_hline TO p_heading.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'USERID:'.
l_hline-info = lv_username.
APPEND l_hline TO p_heading.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'CLIENT:'.
l_hline-info = lv_client.
APPEND l_hline TO p_heading.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'SAP SYSTEM:'.
l_hline-info = lv_host.
APPEND l_hline TO p_heading.
CLEAR l_hline.
ENDFORM. " BUILD_COMMENT
***---------------------------------------------------------------------*
*** FORM TOP_OF_PAGE *
**----------------------------------------------------------------------*
*Display top of page details which we defined in the report
*---------------------------------------------------------------------*
FORM top_of_page. "#EC CALLED
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = gt_heading[].
ENDFORM. " BUILD_COMMENT
*&---------------------------------------------------------------------*
*& Form GET_GDP_DATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_gdp_date .
DATA : lt_month_names TYPE TABLE OF t247 ,
ls_month_names TYPE t247 .
gv_date = sy-datlo .
CALL FUNCTION 'MONTH_NAMES_GET'
EXPORTING
language = sy-langu
TABLES
month_names = lt_month_names.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
READ TABLE lt_month_names INTO ls_month_names
WITH KEY mnr = sy-datlo+4(2).
IF sy-subrc EQ 0 .
CLEAR gv_date.
CONCATENATE sy-datlo+6(2) ls_month_names-ktx
sy-datlo+0(4) INTO gv_date.
ENDIF.
ENDIF.
ENDFORM. " GET_GDP_DATE
*&---------------------------------------------------------------------*
*& Form SUB_OUTPUT_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_output_display .
gw_layout-colwidth_optimize = 'X'.
gw_grid_settings-no_colwopt = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_grid_settings = gw_grid_settings
is_layout = gw_layout
it_fieldcat = gt_fieldcat[]
i_default = gc_x
i_save = gc_a
is_variant = gw_variant
it_events = gt_event[]
TABLES
t_outtab = gt_final[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " SUB_OUTPUT_DISPLAY
Wednesday, 5 March 2014
Sample Program for Classical ALV Report with Header
REPORT ybtest .
TABLES : SFLIGHT.
TYPE-POOLS : SLIS.
**INTERNAL TABLE DECLARTION
DATA : WA_SFLIGHT TYPE SFLIGHT,
IT_SFLIGHT TYPE TABLE OF SFLIGHT.
**DATA DECLARTION
DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
GD_LAYOUT TYPE SLIS_LAYOUT_ALV,
GD_REPID LIKE SY-REPID,
G_SAVE TYPE C VALUE 'X',
G_VARIANT TYPE DISVARIANT,
GX_VARIANT TYPE DISVARIANT,
G_EXIT TYPE C,
ISPFLI TYPE TABLE OF SPFLI.
* To understand the importance of the following parameter,
**SELECTION SCREEN DETAILS
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-002 .
PARAMETERS: VARIANT LIKE DISVARIANT-VARIANT.
SELECTION-SCREEN END OF BLOCK B1.
**GETTING DEFAULT VARIANT
INITIALIZATION.
GX_VARIANT-REPORT = SY-REPID.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
I_SAVE = G_SAVE
CHANGING
CS_VARIANT = GX_VARIANT
EXCEPTIONS
NOT_FOUND = 2.
IF SY-SUBRC = 0.
VARIANT = GX_VARIANT-VARIANT.
ENDIF.
**PERFORM DECLARATIONS
START-OF-SELECTION.
PERFORM DATA_RETRIVEL.
PERFORM BUILD_FIELDCATALOG.
PERFORM DISPLAY_ALV_REPORT.
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCATALOG .
FIELDCATALOG-FIELDNAME = 'CARRID'.
FIELDCATALOG-SELTEXT_M = 'Airline Code'.
FIELDCATALOG-COL_POS = 0.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'CONNID'.
FIELDCATALOG-SELTEXT_M = 'Flight Connection Number'.
FIELDCATALOG-COL_POS = 1.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'FLDATE'.
FIELDCATALOG-SELTEXT_M = 'Flight date'.
FIELDCATALOG-COL_POS = 2.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'PRICE'.
FIELDCATALOG-SELTEXT_M = 'Airfare'.
FIELDCATALOG-COL_POS = 3.
FIELDCATALOG-OUTPUTLEN = 20.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
ENDFORM. " BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_REPORT .
GD_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = GD_REPID
I_CALLBACK_TOP_OF_PAGE = 'TOP-OF-PAGE' "see FORM
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IT_FIELDCAT = FIELDCATALOG[]
I_SAVE = 'X'
IS_VARIANT = G_VARIANT
TABLES
T_OUTTAB = IT_SFLIGHT
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. "DISPLAY_ALV_REPORT
" DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*& Form DATA_RETRIVEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DATA_RETRIVEL .
SELECT * FROM SFLIGHT INTO TABLE IT_SFLIGHT.
ENDFORM. " DATA_RETRIVEL
*-------------------------------------------------------------------*
* Form TOP-OF-PAGE *
*-------------------------------------------------------------------*
* ALV Report Header *
*-------------------------------------------------------------------*
FORM TOP-OF-PAGE.
*ALV Header declarations
DATA: T_HEADER TYPE SLIS_T_LISTHEADER,
WA_HEADER TYPE SLIS_LISTHEADER,
T_LINE LIKE WA_HEADER-INFO,
LD_LINES TYPE I,
LD_LINESC(10) TYPE C.
* Title
WA_HEADER-TYP = 'H'.
WA_HEADER-INFO = 'SFLIGHT Table Report'.
APPEND WA_HEADER TO T_HEADER.
CLEAR WA_HEADER.
* Date
WA_HEADER-TYP = 'S'.
WA_HEADER-KEY = 'Date: '.
CONCATENATE SY-DATUM+6(2) '.'
SY-DATUM+4(2) '.'
SY-DATUM(4) INTO WA_HEADER-INFO. "todays date
APPEND WA_HEADER TO T_HEADER.
CONSTANTS : gc_s TYPE c VALUE 'S' .
DATA: l_hline TYPE slis_listheader,
lv_title(50),
lv_progname(20),
lv_datum(11),
lv_time(10),
lv_username(30),
lv_pagno(2),
lv_pagno1(2),
lv_client(10),
l_f_info(132),
lv_host(10) ,
gv_date(60) TYPE c.
lv_title = sy-title.
lv_progname = sy-cprog.
lv_datum = sy-datum.
lv_time = sy-uzeit.
lv_username = sy-uname.
* lv_pagno = sy-pagno.
lv_pagno = sy-pagno + 1.
lv_pagno1 = sy-pagno + 1.
lv_client = sy-mandt.
lv_host = sy-sysid.
l_hline-typ = gc_s.
l_hline-key = 'REPORT TITLE:'.
l_hline-info = lv_title.
APPEND l_hline TO T_HEADER.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'PROGRAM NAME:'.
l_hline-info = lv_progname.
APPEND l_hline TO T_HEADER.
CLEAR l_hline.
CONCATENATE sy-timlo+0(2) ':' sy-timlo+2(2) ':' sy-timlo+4(2)
INTO lv_time.
l_hline-typ = gc_s.
l_hline-key = 'DATE:'.
l_hline-info = gv_date.
APPEND l_hline TO T_HEADER.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'TIME:'.
l_hline-info = lv_time.
APPEND l_hline TO T_HEADER.
CLEAR l_hline.
CONCATENATE lv_pagno '/' lv_pagno1 INTO l_f_info
*
SEPARATED BY ' '.
l_hline-typ = gc_s.
l_hline-key = 'PAGNO:'.
l_hline-info = l_f_info.
APPEND l_hline TO T_HEADER.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'USERID:'.
l_hline-info = lv_username.
APPEND l_hline TO T_HEADER.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'CLIENT:'.
l_hline-info = lv_client.
APPEND l_hline TO T_HEADER.
CLEAR l_hline.
l_hline-typ = gc_s.
l_hline-key = 'SAP SYSTEM:'.
l_hline-info = lv_host.
APPEND l_hline TO T_HEADER.
CLEAR l_hline.
CLEAR: WA_HEADER.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = T_HEADER.
ENDFORM. "top-of-page
Output sample :
Tuesday, 4 March 2014
Enhancements in SAP ABAP
Difference Between Enhancement-Point And Enhancement-Section
The difference are :
Enhancement-point -- You can only add additional codes, you cannot change the existing code.
Enhancment-secton -- You can change or replace the existing SAP code.
There are 2 types of enhancements with the enhancement framework:
1. Explicit enhancement points: These are basically hooks already coded into the program by SAP at various points of the code. See program RIAUFMVK for examples of these! These are very easy to implement simply go into enhancement mode of SE80 and right click on the enhancement point where you want to add your code and choose u2018Enhancement Implementation->Createu2019 Give it a name, description and assign it to a change request (should not be a Z package) and then simply add the code as normal.
2. Implicit enhancement points: These are basically points within ABAP code where an enhancement point is implied, and in which case can be created. Examples of implicit enhancement points are at the beginning and end of FORMu2019s, at the end of a program, include or function module etc.
Please go through this link for an example:
Implicit Example :
Implicit Example :
Just check this example also related to frame work:
Explicit Example :
http://wiki.scn.sap.com/wiki/pages/viewpage.action?pageId=77988719
http://wiki.scn.sap.com/wiki/pages/viewpage.action?pageId=77988719
Thursday, 26 December 2013
Sample code for double click on output list using REUSE_ALV_GRID_DISPLAY , SAP or Interactive ALV
Do this:
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_top_of_page = 'TOP-OF-PAGE' i_grid_title = 'Title goes here' i_callback_program = program i_grid_settings = grid_setting i_callback_user_command = 'DOUBLE_CLICK_ON_ALV' is_layout = alv_layout it_fieldcat = i_fieldcat_alv TABLES t_outtab = itab. FORM double_click_on_ALV USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. READ TABLE itab INDEX rs_selfield-tabindex. " now you can do what ever you like " with the above read statement you have the exact line " that the user selected. " from here you can call FB03 or perform any other funciton ENDFORM.
Thursday, 21 November 2013
Authenticating User Login Details in SAP or Verifing Username and Password in SAP
SUSR_CHECK_LOGON_DATA is the function module used to verify authentication
Or
SUSR_LOGIN_CHECK_RFC , we can verify authentication.
Subscribe to:
Posts (Atom)
