TMS Mini Project - Step - 1 - TMS Master data
Scenario: This application will help to set up the initial TMS Master data, primarily maintaining the cost objects and linking the same with Vendors and projects.
Approach: First, i have created Project master table, Vendor master table, custom EKKO table ( to store PO details ).
Project Master table:
Material master table:
TMS Master table: table in which report data is stored
Master report:
TOP include:
*&---------------------------------------------------------------------*
*& Include ZREP_MAS_ALL_TOP
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_final,
projno TYPE zdt_demo_mas-projno,
projname TYPE zprojmas-projname,
zvendno TYPE zdt_demo_mas-zvendno,
zvendname TYPE zvendmas-zvendname,
service TYPE zdt_demo_mas-service,
projph TYPE zdt_demo_mas-projph,
ebeln TYPE zdt_demo_mas-ebeln,
pacdes TYPE zdt_demo_mas-pacdes,
wo TYPE zdt_demo_mas-wo,
wodes TYPE zdt_demo_mas-wodes,
sins TYPE zdt_demo_mas-sins,
sisub TYPE zdt_demo_mas-sisub,
est_startd TYPE zdt_demo_mas-est_startd,
es_endd TYPE zdt_demo_mas-es_endd,
workloc TYPE zdt_demo_mas-workloc,
workcd TYPE zdt_demo_mas-workcd,
celltab TYPE lvc_t_styl,
END OF ty_final,
tt_final TYPE TABLE OF ty_final.
TYPES: BEGIN OF ty_mail_att,
projno TYPE zdt_demo_mas-projno,
projname TYPE zprojmas-projname,
zvendno TYPE zdt_demo_mas-zvendno,
zvendname TYPE zvendmas-zvendname,
service TYPE zdt_demo_mas-service,
projph TYPE zdt_demo_mas-projph,
ebeln TYPE zdt_demo_mas-ebeln,
pacdes TYPE zdt_demo_mas-pacdes,
wo TYPE zdt_demo_mas-wo,
wodes TYPE zdt_demo_mas-wodes,
sins TYPE zdt_demo_mas-sins,
sisub TYPE zdt_demo_mas-sisub,
est_startd TYPE zdt_demo_mas-est_startd,
es_endd TYPE zdt_demo_mas-es_endd,
workloc TYPE zdt_demo_mas-workloc,
workcd TYPE zdt_demo_mas-workcd,
END OF ty_mail_att,
tt_mail_att TYPE TABLE OF ty_mail_att.
types: begin of ty_demo_mas,
mandt type mandt,
projno TYPE zdt_demo_mas-projno,
zvendno TYPE zdt_demo_mas-zvendno,
service TYPE zdt_demo_mas-service,
ebeln TYPE zdt_demo_mas-ebeln,
wo TYPE zdt_demo_mas-wo,
sins TYPE zdt_demo_mas-sins,
projph TYPE zdt_demo_mas-projph,
pacdes TYPE zdt_demo_mas-pacdes,
wodes TYPE zdt_demo_mas-wodes,
sisub TYPE zdt_demo_mas-sisub,
est_startd TYPE zdt_demo_mas-est_startd,
es_endd TYPE zdt_demo_mas-es_endd,
purob type zdt_demo_mas-purob,
workloc TYPE zdt_demo_mas-workloc,
workcd TYPE zdt_demo_mas-workcd,
end of ty_demo_mas.
DATA: git_final TYPE tt_final,
gwa_final TYPE ty_final,
go_grid TYPE REF TO cl_gui_alv_grid,
git_fcat TYPE lvc_t_fcat,
gwa_fcat TYPE lvc_s_fcat,
mail_id type char100,
git_mail_att type tt_mail_att.
Class Include:
Local class definition:
CLASS lcl DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: prep_fcat,
data_chng FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed
e_onf4
e_onf4_before
e_onf4_after
e_ucomm,
f4_help FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display,
save_data,
create_data,
delete_data,
change_data,
send_mail,
fill_ui_exc EXPORTING e_func TYPE ui_functions.
PROTECTED SECTION.
CLASS-METHODS: set_current_cell IMPORTING i_no TYPE i
i_fld TYPE lvc_fname,
refresh_table,
set_row_edit IMPORTING it_row_no TYPE lvc_t_roid.
ENDCLASS.
Local class implementation:
CLASS lcl IMPLEMENTATION.
METHOD fill_ui_exc. "method to hide toolbar icons
e_func = VALUE #( ( cl_gui_alv_grid=>mc_fc_detail )
( cl_gui_alv_grid=>mc_fc_refresh )
( cl_gui_alv_grid=>mc_fc_loc_cut )
( cl_gui_alv_grid=>mc_fc_loc_copy )
( cl_gui_alv_grid=>mc_fc_loc_paste )
( cl_gui_alv_grid=>mc_fc_loc_insert_row )
( cl_gui_alv_grid=>mc_fc_loc_append_row )
( cl_gui_alv_grid=>mc_fc_loc_delete_row )
( cl_gui_alv_grid=>mc_fc_loc_copy_row )
( cl_gui_alv_grid=>mc_fc_find )
( cl_gui_alv_grid=>mc_fc_filter )
( cl_gui_alv_grid=>mc_mb_sum )
( cl_gui_alv_grid=>mc_fc_subtot )
( cl_gui_alv_grid=>mc_fc_print )
( cl_gui_alv_grid=>mc_mb_variant )
( cl_gui_alv_grid=>mc_fc_graph )
( cl_gui_alv_grid=>mc_mb_view )
( cl_gui_alv_grid=>mc_fc_loc_undo )
( cl_gui_alv_grid=>mc_fc_loc_paste_new_row )
).
ENDMETHOD.
METHOD set_row_edit.
" This method will make the selected rows editable.
LOOP AT it_row_no INTO DATA(is_row_no).
CASE git_final[ is_row_no-row_id ]-service.
WHEN 'CONS'.
git_final[ is_row_no-row_id ]-celltab = VALUE #( ( fieldname = 'PROJNO' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'PROJNAME' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'ZVENDNO' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'ZVENDNAME' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'SERVICE' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'PROJPH' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'EBELN' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'PACDES' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'WO' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'WODES' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'SINS' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'SISUB' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'EST_STARTD' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'ES_ENDD' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'WORKLOC' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'WORKCD' style = cl_gui_alv_grid=>mc_style_enabled ) ).
WHEN 'ENG'.
git_final[ is_row_no-row_id ]-celltab = VALUE #( ( fieldname = 'PROJNO' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'PROJNAME' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'ZVENDNO' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'ZVENDNAME' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'SERVICE' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'PROJPH' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'EBELN' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'PACDES' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'WO' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'WODES' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'SINS' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'SISUB' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'EST_STARTD' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'ES_ENDD' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'WORKLOC' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'WORKCD' style = cl_gui_alv_grid=>mc_style_enabled ) ).
WHEN 'TECH'.
git_final[ is_row_no-row_id ]-celltab = VALUE #( ( fieldname = 'PROJNO' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'PROJNAME' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'ZVENDNO' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'ZVENDNAME' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'SERVICE' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'PROJPH' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'EBELN' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'PACDES' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'WO' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'WODES' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'SINS' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'SISUB' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'EST_STARTD' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'ES_ENDD' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'WORKLOC' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'WORKCD' style = cl_gui_alv_grid=>mc_style_enabled ) ).
ENDCASE.
ENDLOOP.
ENDMETHOD. "end fo set row edit method
METHOD refresh_table.
" this method will refresh alv display
DATA(ls_stbl) = VALUE lvc_s_stbl( row = 'X' col = 'X' ).
go_grid->refresh_table_display(
EXPORTING
is_stable = ls_stbl " With Stable Rows/Columns
* i_soft_refresh = " Without Sort, Filter, etc.
EXCEPTIONS
finished = 1 " Display was Ended (by Export)
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.
ENDMETHOD.
METHOD set_current_cell.
"This method will make sure the cursor is at the current cell which needs to be edited
go_grid->set_current_cell_via_id(
EXPORTING
is_row_id = VALUE #( index = i_no ) " Row
is_column_id = VALUE #( fieldname = i_fld ) " Column
* is_row_no = " Numeric Row ID
).
"this method will set focus to the grid.
go_grid->set_focus(
EXPORTING
control = go_grid " Control
EXCEPTIONS
cntl_error = 1 " cntl_error
cntl_system_error = 2 " cntl_system_error
OTHERS = 3
).
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDMETHOD. "end of set current cell method.
METHOD create_data.
" This method will create a new editable row.
CLEAR gwa_final.
gwa_final-celltab = VALUE #( ( fieldname = 'PROJNO' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'PROJNAME' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'ZVENDNO' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'ZVENDNAME' style = cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'SERVICE' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'PROJPH' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'EBELN' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'PACDES' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'WO' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'WODES' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'SINS' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'SISUB' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'EST_STARTD' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'ES_ENDD' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'WORKLOC' style = cl_gui_alv_grid=>mc_style_enabled )
( fieldname = 'WORKCD' style = cl_gui_alv_grid=>mc_style_enabled ) ).
APPEND gwa_final TO git_final.
DATA(lv_count) = lines( git_final ).
lcl=>refresh_table( ).
lcl=>set_current_cell(
EXPORTING
i_no = lv_count
i_fld = 'PROJNO'
).
ENDMETHOD. "create_data method end.
METHOD delete_data.
DATA: lv_ans TYPE c.
go_grid->get_selected_rows(
IMPORTING
* et_index_rows = " Indexes of Selected Rows
et_row_no = DATA(lt_row_no) " Numeric IDs of Selected Rows
).
IF lt_row_no IS NOT INITIAL.
SORT lt_row_no BY row_id DESCENDING.
IF sy-subrc = 0.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = 'Are you sure you want to delete the selected records?'
text_button_1 = 'Yes'
text_button_2 = 'No'
IMPORTING
answer = lv_ans
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF lv_ans = '1'.
"proceed with deletion
LOOP AT lt_row_no INTO DATA(ls_row_no).
DATA(gs_del) = git_final[ ls_row_no-row_id ].
DATA(lwa_demo_mas) = VALUE ty_demo_mas( mandt = sy-mandt
projno = gs_del-projno
zvendno = gs_del-zvendno
service = gs_del-service
ebeln = gs_del-ebeln
wo = gs_del-wo
sins = gs_del-sins
).
IF lwa_demo_mas IS NOT INITIAL.
DELETE zdt_demo_mas FROM lwa_demo_mas.
IF sy-subrc = 0.
COMMIT WORK.
DELETE TABLE git_final FROM gs_del.
CLEAR gs_del.
ELSE.
MESSAGE 'record could not be deleted' TYPE 'I'.
ENDIF.
ENDIF.
ENDLOOP.
lcl=>refresh_table( ).
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD. "delete data method end.
METHOD change_data.
"This method will get the selected rows and make the non key fields editable based on the service type of each row.
go_grid->get_selected_rows(
IMPORTING
* et_index_rows = data(lt_idx_rows) " Indexes of Selected Rows
et_row_no = DATA(lt_row_no) " Numeric IDs of Selected Rows
).
IF lt_row_no IS NOT INITIAL.
lcl=>set_row_edit( it_row_no = lt_row_no ).
lcl=>refresh_table( ).
ENDIF.
ENDMETHOD. "change_data method end.
Send mail method:
LOOP AT git_mail_att INTO DATA(wa_mail).
lv_string = |{ lv_string }{ wa_mail-projno }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-projname }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-zvendno }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-zvendname }|.
lv_string = |{ lv_string }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-service }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-projph }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-ebeln }|.
lv_string = |{ lv_string }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-pacdes }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-wo }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-wodes }|.
lv_string = |{ lv_string }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-sins }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-sisub }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-est_startd }|.
lv_string = |{ lv_string }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-es_endd }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-workloc }{ cl_abap_char_utilities=>horizontal_tab }{ wa_mail-workcd }{ cl_abap_char_utilities=>newline }|.
ENDLOOP.
lv_xstring = cl_bcs_convert=>string_to_xstring(
iv_string = lv_string
* iv_convert_cp = 'X'
* iv_codepage =
* iv_add_bom =
).
* CATCH cx_bcs. " BCS: General Exceptions
DATA(lt_binary_content) = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_xstring ).
TRY.
lo_doc_bcs->add_attachment(
EXPORTING
i_attachment_type = 'XLS' " Document Class for Attachment
i_attachment_subject = 'Project Data' " Attachment Title
* i_attachment_size = " Size of Document Content
* i_attachment_language = space " Language in Which Attachment Is Created
* i_att_content_text = " Content (Text-Like)
i_att_content_hex = lt_binary_content " Content (Binary)
* i_attachment_header = " Attachment Header Data
* iv_vsi_profile = " Virus Scan Profile
).
CATCH cx_document_bcs. " BCS: Document Exceptions
ENDTRY.
lv_mailid = mail_id.
DATA(lo_recipient) = cl_cam_address_bcs=>create_internet_address(
i_address_string = lv_mailid
* i_address_name =
* i_incl_sapuser =
).
* CATCH cx_address_bcs. " BCS: Address Exceptions
lo_bcs->add_recipient(
EXPORTING
i_recipient = lo_recipient " Recipient of Message
* i_express = " Send As Express Message
* i_copy = " Send Copy
* i_blind_copy = " Send As Blind Copy
* i_no_forward = " No Forwarding
).
* CATCH cx_send_req_bcs. " BCS: Send Request Exceptions
lo_bcs->set_document( i_document = lo_doc_bcs ).
* CATCH cx_send_req_bcs. " BCS: Send Request Exceptions
DATA(lv_ret) = lo_bcs->send(
i_with_error_screen = 'X'
).
* CATCH cx_send_req_bcs. " BCS: Send Request Exceptions
COMMIT WORK.
MESSAGE 'Email sent successfully' TYPE 'S'.
LEAVE TO SCREEN 0.
ENDMETHOD. "send mail method end.
Save data method:
Rest of the implementation:
METHOD f4_help.
" this method is used to display F4 help and populate selected values to the screen.
TYPES: begin of ty_pph,
prph type char25,
end of ty_pph,
tt_pph TYPE TABLE OF ty_pph WITH EMPTY KEY.
DATA: lt_return TYPE TABLE OF ddshretval.
REFRESH lt_return.
IF git_final[ es_row_no-row_id ]-celltab IS NOT INITIAL.
CASE e_fieldname.
WHEN 'ZVENDNO'.
REFRESH lt_return[].
SELECT FROM zvendmas
FIELDS zvendno,
zvendname
INTO TABLE @DATA(lt_vendmas).
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZVENDNO'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'ZVENDNO'
value_org = 'S'
callback_program = sy-repid
TABLES
value_tab = lt_vendmas
* FIELD_TAB =
return_tab = lt_return
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF lt_return IS NOT INITIAL.
git_final[ es_row_no-row_id ]-zvendno = lt_vendmas[ zvendno = lt_return[ 1 ]-fieldval ]-zvendno.
git_final[ es_row_no-row_id ]-zvendname = lt_vendmas[ zvendno = lt_return[ 1 ]-fieldval ]-zvendname.
ENDIF.
WHEN 'PROJPH'.
" gave dummy data as of now
DATA(lt_data) = VALUE tt_pph( ( prph = 'ABCDEFGH' ) ( prph = 'IJKLMNOP' ) ( prph = 'BUILD' ) ( prph = 'ASSEMBLY' ) ( prph = 'DESIGN' ) ( prph = 'RESEARCH' ) ).
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'PROJPH'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'PROJPH'
value_org = 'S'
callback_program = sy-repid
TABLES
value_tab = lt_data
* FIELD_TAB =
return_tab = lt_return
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF lt_return IS NOT INITIAL.
git_final[ es_row_no-row_id ]-projph = lt_return[ 1 ]-fieldval.
ENDIF.
WHEN 'EBELN'.
SELECT FROM zekko
FIELDS ebeln,
bukrs
INTO TABLE @DATA(lt_zekko).
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'EBELN'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'EBELN'
value_org = 'S'
callback_program = sy-repid
TABLES
value_tab = lt_zekko
* FIELD_TAB =
return_tab = lt_return
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF lt_return IS NOT INITIAL.
git_final[ es_row_no-row_id ]-ebeln = lt_return[ 1 ]-fieldval.
ENDIF.
ENDCASE.
CASE git_final[ es_row_no-row_id ]-service.
WHEN 'CONS'.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'EBELN' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'PACDES' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'WO' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'WODES' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'SINS' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'SISUB' ]-style = cl_gui_alv_grid=>mc_style_enabled.
WHEN 'TECH'.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'EBELN' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'PACDES' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'WO' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'WODES' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'SINS' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'SISUB' ]-style = cl_gui_alv_grid=>mc_style_disabled.
WHEN 'ENG'.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'EBELN' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'PACDES' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'WO' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'WODES' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'SINS' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ es_row_no-row_id ]-celltab[ fieldname = 'SISUB' ]-style = cl_gui_alv_grid=>mc_style_disabled.
ENDCASE.
ENDIF.
lcl=>refresh_table( ).
lcl=>set_current_cell(
EXPORTING
i_no = es_row_no-row_id
i_fld = e_fieldname
).
ENDMETHOD. "f4 help method end.
METHOD data_chng.
IF er_data_changed->mt_mod_cells IS NOT INITIAL.
DATA(lv_value) = er_data_changed->mt_mod_cells[ 1 ]-value.
CASE er_data_changed->mt_mod_cells[ 1 ]-fieldname.
WHEN 'PROJNO'.
SELECT SINGLE FROM zprojmas
FIELDS projname
WHERE projno = @lv_value
INTO @DATA(lv_projname).
IF sy-subrc = 0.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-projname = lv_projname.
ELSE.
MESSAGE 'Invalid project Number' TYPE 'E' DISPLAY LIKE 'S'.
ENDIF.
WHEN 'ZVENDNO'.
SELECT SINGLE FROM zvendmas
FIELDS zvendname
WHERE zvendno = @lv_value
INTO @DATA(lv_vendname).
IF sy-subrc = 0.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-zvendname = lv_vendname.
ELSE.
MESSAGE 'Invalid Vendor Number' TYPE 'E' DISPLAY LIKE 'S'.
ENDIF.
WHEN 'SERVICE'.
* if lv_value NE 'CONS' and lv_value NE 'TECH' and lv_value NE 'ENG'.
* MESSAGE 'Invalid service' type 'E' DISPLAY LIKE 'S'.
* endif.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-service = lv_vendname.
CASE lv_value.
WHEN 'CONS'.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'EBELN' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'PACDES' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'WO' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'WODES' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'SINS' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'SISUB' ]-style = cl_gui_alv_grid=>mc_style_enabled.
WHEN 'TECH'.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'EBELN' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'PACDES' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'WO' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'WODES' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'SINS' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'SISUB' ]-style = cl_gui_alv_grid=>mc_style_disabled.
WHEN 'ENG'.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'EBELN' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'PACDES' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'WO' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'WODES' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'SINS' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'SISUB' ]-style = cl_gui_alv_grid=>mc_style_disabled.
WHEN OTHERS.
MESSAGE 'Invalid service' TYPE 'E' DISPLAY LIKE 'S'.
ENDCASE.
WHEN 'PROJPH'.
WHEN 'EBELN'.
SELECT SINGLE FROM zekko
FIELDS ebeln
WHERE ebeln = @lv_value
INTO @DATA(lv_ebeln).
IF sy-subrc <> 0.
MESSAGE 'Invalid PO Number' TYPE 'E' DISPLAY LIKE 'S'.
ENDIF.
WHEN 'PACDES'.
WHEN 'WO'.
WHEN 'WODES'.
WHEN 'SINS'.
WHEN 'SISUB'.
WHEN 'EST_STARTD'.
WHEN 'ES_ENDD'.
WHEN 'PUROB'.
WHEN 'WORKLOC'.
WHEN 'WORKCD'.
ENDCASE.
CASE git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-service.
WHEN 'CONS'.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'EBELN' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'PACDES' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'WO' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'WODES' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'SINS' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'SISUB' ]-style = cl_gui_alv_grid=>mc_style_enabled.
WHEN 'TECH'.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'EBELN' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'PACDES' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'WO' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'WODES' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'SINS' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'SISUB' ]-style = cl_gui_alv_grid=>mc_style_disabled.
WHEN 'ENG'.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'EBELN' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'PACDES' ]-style = cl_gui_alv_grid=>mc_style_enabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'WO' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'WODES' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'SINS' ]-style = cl_gui_alv_grid=>mc_style_disabled.
git_final[ er_data_changed->mt_mod_cells[ 1 ]-row_id ]-celltab[ fieldname = 'SISUB' ]-style = cl_gui_alv_grid=>mc_style_disabled.
ENDCASE.
lcl=>refresh_table( ).
lcl=>set_current_cell(
EXPORTING
i_no = er_data_changed->mt_mod_cells[ 1 ]-row_id
i_fld = er_data_changed->mt_mod_cells[ 1 ]-fieldname
).
ENDIF.
* ENDIF.
ENDMETHOD.
METHOD prep_fcat.
DATA: lo_data TYPE REF TO data,
lo_descr TYPE REF TO cl_abap_structdescr.
CREATE DATA lo_data LIKE LINE OF git_final.
lo_descr ?= cl_abap_structdescr=>describe_by_data_ref( p_data_ref = lo_data ).
DATA(lt_dfies) = cl_salv_data_descr=>read_structdescr(
r_structdescr = lo_descr ).
LOOP AT lt_dfies INTO DATA(lwa_dfies).
CLEAR gwa_fcat.
gwa_fcat = CORRESPONDING #( lwa_dfies ).
gwa_fcat-f4availabl = 'X'.
CASE gwa_fcat-fieldname.
WHEN 'PROJNO' OR 'SERVICE' OR 'EST_STARTD' OR 'ES_ENDD' OR 'WORKLOC' OR 'WORKCD'.
gwa_fcat-ref_table = 'ZDT_DEMO_MAS'.
gwa_fcat-ref_field = gwa_fcat-fieldname.
* WHEN 'ZVENDNO' OR 'PROJPH'.
* gwa_fcat-ref_table = 'ZDT_DEMO_MAS'.
* gwa_fcat-ref_field = gwa_fcat-fieldname.
WHEN 'PROJNAME'.
gwa_fcat-ref_table = 'ZPROJMAS'.
gwa_fcat-ref_field = gwa_fcat-fieldname.
WHEN 'ZVENDNAME'.
gwa_fcat-ref_table = 'ZVENDMAS'.
gwa_fcat-ref_field = gwa_fcat-fieldname.
ENDCASE.
APPEND gwa_fcat TO git_fcat.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
PBO and PAI modules:
MODULE status_1001 OUTPUT.
SET PF-STATUS 'ZPF_STAT1'.
SET TITLEBAR 'ZTITLE1'.
IF go_grid IS NOT BOUND.
DATA(go_cont) = NEW cl_gui_docking_container( repid = sy-repid
dynnr = sy-dynnr
side = cl_gui_docking_container=>dock_at_left
extension = 3000 ).
go_grid = NEW #( i_parent = go_cont ).
SELECT FROM zdt_demo_mas AS dm
INNER JOIN zprojmas AS pm ON dm~projno = pm~projno
INNER JOIN zvendmas AS vm ON dm~zvendno = vm~zvendno
FIELDS
dm~projno,
pm~projname,
dm~zvendno,
vm~zvendname,
dm~service,
dm~ebeln,
dm~wo,
dm~sins,
dm~projph,
dm~pacdes,
dm~wodes,
dm~sisub,
dm~est_startd,
dm~es_endd,
dm~workloc,
dm~workcd
INTO CORRESPONDING FIELDS OF TABLE @git_final.
lcl=>prep_fcat( ).
DATA(lwa_layout) = VALUE lvc_s_layo( zebra = 'X'
col_opt = 'X'
stylefname = 'CELLTAB'
* no_toolbar = 'X'
).
go_grid->register_edit_event(
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified " Event ID
EXCEPTIONS
error = 1 " Errors
OTHERS = 2
).
DATA(it_f4flds) = VALUE lvc_t_f4( ( fieldname = 'PROJNO' register = 'X' )
( fieldname = 'ZVENDNO' register = 'X' )
( fieldname = 'PROJPH' register = 'X' )
( fieldname = 'EBELN' register = 'X' ) ).
go_grid->register_f4_for_fields( it_f4 = it_f4flds ).
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
SET HANDLER lcl=>f4_help FOR go_grid.
SET HANDLER lcl=>data_chng FOR go_grid.
lcl=>fill_ui_exc(
IMPORTING
e_func = DATA(lt_excl)
).
go_grid->set_table_for_first_display(
EXPORTING
is_layout = lwa_layout
it_toolbar_excluding = lt_excl " Layout
CHANGING
it_outtab = git_final " Output Table
it_fieldcatalog = git_fcat " Field Catalog
* it_sort = " Sort Criteria
* it_filter = " Filter Criteria
EXCEPTIONS
invalid_parameter_combination = 1 " Wrong Parameter
program_error = 2 " Program Errors
too_many_lines = 3 " Too many Rows in Ready for Input Grid
OTHERS = 4
).
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
go_grid->set_ready_for_input(
i_ready_for_input = 1
).
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_1001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_1001 INPUT.
CASE sy-ucomm.
WHEN 'BACK' OR 'EXIT'.
LEAVE TO SCREEN 0.
WHEN 'SAVE'.
lcl=>save_data( ).
WHEN 'CREATE'.
lcl=>create_data( ).
WHEN 'EDIT'.
lcl=>change_data( ).
WHEN 'DELETE'.
lcl=>delete_data( ).
WHEN 'MAIL'.
CALL SCREEN 1002 STARTING AT 10 10 ENDING AT 80 15.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_1002 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_1002 OUTPUT.
SET PF-STATUS 'ZPF_STAT1002'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_1002 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_1002 INPUT.
CASE sy-ucomm.
WHEN 'BACK' OR 'EXIT'.
LEAVE TO SCREEN 0.
WHEN 'SNDMAIL'.
lcl=>send_mail( ).
ENDCASE.
ENDMODULE.
Execution of report:
Creating new row:
Pop up when deleting:
Asking for a email ID when sending mail:
This is the first step of our customized time management system. Stay tuned for step 2.
Comments
Post a Comment