REPORT z_template_update MESSAGE-ID zp2p LINE-SIZE 512.
INCLUDE z_template_top.
INCLUDE z_template_scr.
INCLUDE z_template_cls.
INCLUDE z_template_sub.
*---------------------------------------------------------------------*
* Initialization
*---------------------------------------------------------------------
INITIALIZATION.
CALL METHOD lcl_map_update=>init_screen.
**********************************************************************
* At selection screen
**********************************************************************
AT SELECTION-SCREEN.
* Validate screen input
CALL METHOD lcl_map_update=>check_scr.
* User is picking a file from the PC local drive
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_uload.
CALL METHOD lcl_map_update=>upload_file.
* User is picking via dropdown a Reason code
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_kongr.
CALL METHOD lcl_map_update=>show_kongr_dropdown_box.
**********************************************************************
* Start of selection
**********************************************************************
START-OF-SELECTION.
CALL METHOD lcl_map_update=>main_process
EXPORTING
pv_job = p_job.
*&---------------------------------------------------------------------*
*& Form END_OF_LIST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM end_of_list ##CALLED.
CALL METHOD lcl_map_update=>end_of_list.
ENDFORM.
---------------------------------------------------------------------------------------------------------------
z_template_top
*----------------------------------------------------------------------
DATA: go_container TYPE REF TO cl_gui_custom_container,
go_container_top TYPE REF TO cl_gui_container,
go_container_bottom TYPE REF TO cl_gui_container,
go_container_splitter TYPE REF TO cl_gui_splitter_container,
go_alv_grid_top TYPE REF TO cl_gui_alv_grid,
go_alv_grid_bottom TYPE REF TO cl_gui_alv_grid,
go_excep_cls TYPE REF TO zcx_p2p_excep_cls,
go_log TYPE REF TO zcl_logger.
CONSTANTS:
gc_true TYPE char1 VALUE 'X',
gc_false TYPE char1 VALUE ' ',
gc_x TYPE char01 VALUE 'X',
gc_i TYPE char01 VALUE 'I',
gc_csv TYPE string VALUE '.CSV',
gc_aktyp TYPE activ_auth VALUE '01',
gc_zp2p TYPE syst_msgid VALUE 'ZP2P',
gc_a TYPE char01 VALUE 'A',
gc_c TYPE char01 VALUE 'C',
gc_e TYPE char01 VALUE 'E',
gc_f TYPE char01 VALUE 'F',
gc_m TYPE char01 VALUE 'M',
gc_s TYPE char01 VALUE 'S',
gc_v TYPE char01 VALUE 'V',
gc_10 TYPE spart VALUE '10',
gc_exit TYPE SYST_UCOMM VALUE 'EXIT',
gc_back TYPE SYST_UCOMM VALUE 'BACK',
gc_canc TYPE SYST_UCOMM VALUE 'CANC',
gc_c_folder TYPE char04 VALUE 'C:\',
gc_num11 TYPE syst_msgno VALUE 11,
gc_row TYPE string VALUE 'Row:',
gc_article TYPE string VALUE 'Article:',
gc_site TYPE string VALUE 'Site:',
gc_alv_struc TYPE string VALUE 'ZP2P_43060_CR00_MASS_MAP_UPDT',
gc_alv_msgs TYPE string VALUE 'BAPIRETURN1',
gc_update TYPE string VALUE 'UPDATE',
gc_messages TYPE string VALUE 'MESSAGES'.
* TYPES
* The types below will be used for getting the data from csv files
TYPES: BEGIN OF ts_mass_map_input,
site TYPE werks_d, " Site (Plant)
article TYPE matnr, " Material
map TYPE verpr_bapi, " Moving Avg Price
curr TYPE waers, " currency
punit TYPE peinh, " Price Unit
msehi TYPE msehi. " Unit of Measure
TYPES: END OF ts_mass_map_input.
* The types below are for final reporting of results of updates
TYPES: BEGIN OF ts_mass_map_update,
lineref TYPE i, " Line reference for input file
comp TYPE bukrs, " Company code
budat TYPE budat, " Posting Date
kongr TYPE ckml_kongr, " Account Assignment Reason
article TYPE matnr, " Material
site TYPE werks_d, " Site (Plant)
map TYPE verpr_bapi, " Moving Avg Price
curr TYPE waers, " currency
punit TYPE peinh, " Price Unit
msehi TYPE msehi, " Unit of Measure
curtp TYPE curtp, " Type of Currency for evaluation
doc_year TYPE bapi2027_pc_ex-ml_doc_year,
doc_num TYPE bapi2027_pc_ex-ml_doc_num,
error_flag TYPE char01, " Error flag 'X' or ' ' or 'S'
valid_msg TYPE string, " Pre-load Validation check message
update_msg TYPE string. " BAPI message
TYPES: END OF ts_mass_map_update.
* Type for site to article master
TYPES: BEGIN OF ts_site_article,
site TYPE werks_d,
article TYPE matnr.
TYPES: END OF ts_site_article.
* Type for site to article master for MAP value
TYPES: BEGIN OF ts_matnr_site_map,
MATNR TYPE MATNR,
BWKEY TYPE BWKEY,
BWTAR TYPE BWTAR_D,
MEINH TYPE MEINH,
VERPR type VERPR,
PEINH type PEINH,
WAERS TYPE WAERS.
TYPES: END OF ts_matnr_site_map.
TYPES: BEGIN OF ts_ckmlkont_help,
grund TYPE ckmlkont-kongr,
text TYPE ckmlkont-grtxt,
END OF ts_ckmlkont_help.
* Table Types
DATA:
gt_file_table TYPE filetable.
* Variables
DATA:
gv_errors TYPE wfcs_boolean, " only for errors when validating
gv_empty TYPE wfcs_boolean, " File was found as empty
gv_title TYPE string,
gv_initial_directory TYPE string,
gv_bukrs TYPE bukrs, " company code
gv_budat TYPE budat, " posting Date
gv_kongr TYPE ckml_kongr, " Account Assignment Reason
gv_rc TYPE i,
gv_ckmlkont_init(1) TYPE c,
gv_first_call(1) TYPE c VALUE 'X',
gv_user_action TYPE i,
gv_okcode TYPE sy-ucomm.
* Internal tables
DATA:
gt_mass_map_input TYPE TABLE OF ts_mass_map_input,
gt_mass_map_update TYPE TABLE OF ts_mass_map_update,
gt_site_article TYPE TABLE OF ts_site_article,
gt_matnr_site_map TYPE table of ts_matnr_site_map,
gt_mass_map_update_msgs TYPE TABLE OF bapireturn1,
gt_email_ids TYPE ztech_t_table_value,
gt_attachment_update TYPE STANDARD TABLE OF solisti1,
gt_attachment_msgs TYPE STANDARD TABLE OF solisti1,
gt_ckmlkon TYPE ckmpr_t_ckmlkon,
gt_ckmlkont TYPE ckmpr_t_ckmlkont,
gt_ckmlkont_help TYPE STANDARD TABLE OF ts_ckmlkont_help,
gt_data TYPE TABLE OF zp2p_43060_cr00_mass_map_updt.
* Structures
DATA:
gs_file_table TYPE file_table,
gs_mass_map_input TYPE ts_mass_map_input,
gs_mass_map_update TYPE ts_mass_map_update,
gs_mass_map_update_msgs TYPE bapireturn1,
gs_site_article TYPE ts_site_article,
gs_matnr_site_map TYPE ts_matnr_site_map,
gs_ckmlkont_help TYPE ts_ckmlkont_help.
--------------------------------------------------------------------------------------------------------------------------
z_template_scr
*----------------------------------------------------------------------
*
* ZP2P_BAPI_CREATEPRICECHG (copy of BAPI_M_REVAL_CREATEPRICECHANGE )
*----------------------------------------------------------------------
PARAMETERS:
p_job TYPE CHAR01 NO-DISPLAY, "controls if the program running as a background job or not
p_srtfd TYPE indx_srtfd NO-DISPLAY. "special index preference for background submit
SELECTION-SCREEN BEGIN OF BLOCK S01 WITH FRAME TITLE text-S01. "Input File Location
PARAMETERS:
p_uload TYPE rlgrap-filename OBLIGATORY DEFAULT gc_c_folder, " File Name Upload
p_hdlin TYPE i OBLIGATORY DEFAULT 1.
SELECTION-SCREEN END OF BLOCK S01.
SELECTION-SCREEN BEGIN OF BLOCK S04 WITH FRAME TITLE text-S04. "Input Options
PARAMETERS: p_BUKRS type BUKRS OBLIGATORY, "Company Code
p_BUDAT type BUDAT OBLIGATORY, "Posting Date
p_KONGR TYPE CKML_KONGR. "Account Assignment Reason
selection-screen skip 1.
PARAMETERS: p_site RADIOBUTTON GROUP site DEFAULT 'X', "Process for Site in File
p_all RADIOBUTTON GROUP site. "Process for all Sites for Articles in File
SELECTION-SCREEN END OF BLOCK S04.
SELECTION-SCREEN BEGIN OF BLOCK S02 WITH FRAME TITLE text-S02. "Processing Option
PARAMETERS:
p_online RADIOBUTTON GROUP pro DEFAULT 'X', " Online processing
p_backgr RADIOBUTTON GROUP pro. " Background processing
selection-screen skip 1.
PARAMETERS:
p_ulimit TYPE i default 100. "Max rows per bapi Update
SELECTION-SCREEN END OF BLOCK S02.
SELECTION-SCREEN BEGIN OF BLOCK S03 WITH FRAME TITLE text-S03. "Output Options
PARAMETERS:
p_alv RADIOBUTTON GROUP out DEFAULT 'X', " Display ALV online
p_spool RADIOBUTTON GROUP out. " spool output only
selection-screen skip 1.
PARAMETERS:
p_email as checkbox, " Email Report
p_eaddr TYPE ad_smtpadr.
selection-screen skip 1.
PARAMETERS:
p_slg1 as checkbox default 'X'. " create SLG1 entries during run
SELECTION-SCREEN END OF BLOCK S03.
------------------------------------------------------------------------------------------------------------------------
z_template_sub
------------------------------------------------------------------------------------------------------------------------
* Uses custom bapi for updating: ZP2P_BAPI_CREATEPRICECHG (copy of BAPI_M_REVAL_CREATEPRICECHANGE )
*----------------------------------------------------------------------
*
*
*----------------------------------------------------------------------
*&---------------------------------------------------------------------*
*& Module STATUS_0101 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0101 OUTPUT.
CALL METHOD lcl_map_update=>set_status_0101.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module INIT_ALV_0101 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE init_alv_0101 OUTPUT.
CALL METHOD lcl_map_update=>init_alv_0101.
ENDMODULE.
*----------------------------------------------------------------------*
* Module exit_command INPUT
*----------------------------------------------------------------------*
MODULE exit_command_0101 INPUT.
CALL METHOD lcl_map_update=>exit_command_0101.
ENDMODULE. " exit_command INPUT
*----------------------------------------------------------------------*
* Module user_command INPUT
*----------------------------------------------------------------------*
MODULE user_command_0101 INPUT.
CALL METHOD lcl_map_update=>user_command_0101 CHANGING pcv_okcode = gv_okcode.
ENDMODULE. " user_command INPUT
---------------------------------------------------------------------------------------------------------------------------
z_template_cls
---------------------------------------------------------------------------------------------------------------------------
CLASS lcl_email DEFINITION FINAL.
PUBLIC SECTION.
CLASS-METHODS: build_xls_data_table_update.
CLASS-METHODS: build_xls_data_table_msgs.
CLASS-METHODS: send_class_email.
ENDCLASS.
CLASS lcl_map_update DEFINITION FINAL.
PUBLIC SECTION.
CLASS-METHODS: main_process IMPORTING REFERENCE(pv_job) TYPE char01.
CLASS-METHODS: init_screen.
CLASS-METHODS: check_scr.
CLASS-METHODS: upload_file.
CLASS-METHODS: show_kongr_dropdown_box.
CLASS-METHODS: prepare_container_background.
CLASS-METHODS: run_message IMPORTING REFERENCE(pv_type) TYPE char01
REFERENCE(pv_text) TYPE string.
CLASS-METHODS: end_of_list.
CLASS-METHODS: exit_command_0101.
CLASS-METHODS: user_command_0101 CHANGING pcv_okcode TYPE sy-ucomm.
CLASS-METHODS: set_status_0101 .
CLASS-METHODS: init_alv_0101.
CLASS-METHODS: exclude_toolbar_icons IMPORTING REFERENCE(p_type) TYPE string
CHANGING pct_excl_toolbar_icons TYPE ui_functions.
CLASS-METHODS: prepare_layout IMPORTING REFERENCE(p_type) TYPE string
CHANGING pcs_layout TYPE lvc_s_layo.
CLASS-METHODS: prepare_layout_bg IMPORTING REFERENCE(p_type) TYPE string
CHANGING pcs_layout TYPE slis_layout_alv.
CLASS-METHODS: set_grid_list_0101 IMPORTING REFERENCE(p_type) TYPE string
CHANGING ct_list TYPE lvc_t_fcat.
CLASS-METHODS: set_grid_list_bg IMPORTING REFERENCE(p_type) TYPE string
CHANGING ct_list TYPE slis_t_fieldcat_alv.
PRIVATE SECTION.
CLASS-METHODS: prepare_kongr_popup .
CLASS-METHODS: save_message IMPORTING REFERENCE(pv_text) TYPE string
CHANGING ps_record TYPE ts_mass_map_update.
CLASS-METHODS: success_message IMPORTING REFERENCE(ps_mass_map_update) TYPE ts_mass_map_update
CHANGING ps_return TYPE bapiret1.
CLASS-METHODS: General_info_message IMPORTING REFERENCE(pv_text) TYPE string
CHANGING ps_return TYPE bapiret1.
CLASS-METHODS: Info_message IMPORTING REFERENCE(pv_text) TYPE string
REFERENCE(ps_mass_map_update) TYPE ts_mass_map_update
CHANGING ps_return TYPE bapiret1.
CLASS-METHODS: get_data_memory.
CLASS-METHODS: get_data_ps.
CLASS-METHODS: validate_data.
CLASS-METHODS: output_method.
CLASS-METHODS: auth_check.
CLASS-METHODS: prepare_job_and_submit.
CLASS-METHODS: process_results.
CLASS-METHODS: process_bapi.
ENDCLASS. "lcl_map_update DEFINITION
CLASS lcl_email IMPLEMENTATION.
METHOD build_xls_data_table_update.
* Types
TYPES:
ts_attachment TYPE solisti1.
* Workareas
DATA :
ls_attachment TYPE ts_attachment,
ls_dfies TYPE dfies.
* Internal Tables
DATA :
lt_dfies TYPE STANDARD TABLE OF dfies.
CONSTANTS:
lc_fm_ddif TYPE rs38l_fnam VALUE 'DDIF_FIELDINFO_GET',
lc_tabname_list TYPE ddobjname VALUE 'ZP2P_43060_CR00_MASS_MAP_UPDT'.
CLASS cl_abap_char_utilities DEFINITION LOAD.
DATA:
lv_tabname TYPE ddobjname,
lv_kbetr TYPE string,
lv_kpein TYPE string,
lv_map_string TYPE char10,
lv_punit_string TYPE char10.
CONSTANTS:
con_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,
con_cret TYPE c VALUE cl_abap_char_utilities=>cr_lf.
lv_tabname = lc_tabname_list.
CALL FUNCTION lc_fm_ddif
EXPORTING
tabname = lv_tabname
TABLES
dfies_tab = lt_dfies.
LOOP AT lt_dfies INTO ls_dfies.
IF ls_attachment-line IS INITIAL.
ls_attachment-line = ls_dfies-reptext.
ELSE.
CASE ls_dfies-fieldname.
WHEN 'COMP'.
ls_dfies-reptext = 'Company Code'.
WHEN 'BUDAT'.
ls_dfies-reptext = 'Posting Date'.
WHEN 'KONGR'.
ls_dfies-reptext = 'Assign Reason'.
WHEN 'ARTICLE'.
ls_dfies-reptext = 'Article'.
WHEN 'SITE'.
ls_dfies-reptext = 'Site'.
WHEN 'MAP'.
ls_dfies-reptext = 'MovAvgPrice'.
WHEN 'CURR'.
ls_dfies-reptext = 'Currency'.
WHEN 'PUNIT'.
ls_dfies-reptext = 'Price Unit'.
WHEN 'MSEHI'.
ls_dfies-reptext = 'Unit of Measure'.
WHEN 'DOC_YEAR'.
ls_dfies-reptext = 'DOC Year'.
WHEN 'DOC_NUM'.
ls_dfies-reptext = 'DOC Number'.
WHEN 'ERROR_FLAG'.
ls_dfies-reptext = 'Error Flag'.
WHEN 'VALID_MSG'.
ls_dfies-reptext = 'Valid Message'.
WHEN 'UPDATE_MSG'.
ls_dfies-reptext = 'Update Message'.
WHEN OTHERS.
CLEAR: ls_dfies-reptext.
ENDCASE.
IF ls_dfies-reptext IS NOT INITIAL.
CONCATENATE ls_attachment-line ls_dfies-reptext
INTO ls_attachment-line
SEPARATED BY con_tab.
ENDIF.
ENDIF.
ENDLOOP.
CONCATENATE con_cret ls_attachment-line
INTO ls_attachment-line.
APPEND ls_attachment TO gt_attachment_update.
CLEAR ls_attachment.
LOOP AT gt_mass_map_update INTO gs_mass_map_update.
WRITE gs_mass_map_update-map TO lv_map_string.
WRITE gs_mass_map_update-punit TO lv_punit_string.
CONCATENATE gs_mass_map_update-comp " Company Code
gs_mass_map_update-budat " Posting date
gs_mass_map_update-kongr " Assigned reason
gs_mass_map_update-article " Material
gs_mass_map_update-site " Site (Plant)
lv_map_string " Moving Avg Price
gs_mass_map_update-curr " currency
lv_punit_string " Price Unit
gs_mass_map_update-msehi " Unit of Measure
gs_mass_map_update-doc_year " Doc Year
gs_mass_map_update-doc_num " Doc Number
gs_mass_map_update-error_flag " Error flag 'X' or ' '
gs_mass_map_update-valid_msg " Pre-load Validation check message
gs_mass_map_update-update_msg " BAPI message
INTO ls_attachment-line
SEPARATED BY con_tab.
CONCATENATE con_cret ls_attachment-line
INTO ls_attachment-line.
APPEND ls_attachment TO gt_attachment_update.
CLEAR ls_attachment.
ENDLOOP.
ENDMETHOD.
METHOD build_xls_data_table_msgs.
* Types
TYPES:
ts_attachment TYPE solisti1.
* Workareas
DATA :
ls_attachment TYPE ts_attachment,
ls_dfies TYPE dfies.
* Internal Tables
DATA :
lt_dfies TYPE STANDARD TABLE OF dfies.
CONSTANTS:
lc_fm_ddif TYPE rs38l_fnam VALUE 'DDIF_FIELDINFO_GET',
lc_tabname_list TYPE ddobjname VALUE 'BAPIRETURN1'.
CLASS cl_abap_char_utilities DEFINITION LOAD.
DATA:
lv_tabname TYPE ddobjname,
lv_kbetr TYPE string,
lv_kpein TYPE string,
lv_map_string TYPE char10,
lv_punit_string TYPE char10.
CONSTANTS:
con_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,
con_cret TYPE c VALUE cl_abap_char_utilities=>cr_lf.
lv_tabname = lc_tabname_list.
CALL FUNCTION lc_fm_ddif
EXPORTING
tabname = lv_tabname
TABLES
dfies_tab = lt_dfies.
LOOP AT lt_dfies INTO ls_dfies.
IF ls_attachment-line IS INITIAL.
ls_attachment-line = ls_dfies-reptext.
ELSE.
CASE ls_dfies-fieldname.
WHEN 'TYPE'.
ls_dfies-reptext = 'Type'.
WHEN 'ID'.
ls_dfies-reptext = 'Msg ID'.
WHEN 'NUMBER'.
ls_dfies-reptext = 'MSG No'.
WHEN 'MESSAGE'.
ls_dfies-reptext = 'Message Text'.
* WHEN 'LOG_NO'.
* ls_dfies-reptext = 'Log No'.
* WHEN 'LOG_MSG_NO'.
* ls_dfies-reptext = 'Log Msg No'.
* WHEN 'MESSAGE_V1'.
* ls_dfies-reptext = 'MSG Var 1'.
* WHEN 'MESSAGE_V2'.
* ls_dfies-reptext = 'MSG Var 2'.
* WHEN 'MESSAGE_V3'.
* ls_dfies-reptext = 'MSG Var 3'.
* WHEN 'MESSAGE_V4'.
* ls_dfies-reptext = 'MSG Var 4'.
WHEN OTHERS.
CLEAR: ls_dfies-reptext.
ENDCASE.
IF ls_dfies-reptext IS NOT INITIAL.
CONCATENATE ls_attachment-line ls_dfies-reptext
INTO ls_attachment-line
SEPARATED BY con_tab.
ENDIF.
ENDIF.
ENDLOOP.
CONCATENATE con_cret ls_attachment-line
INTO ls_attachment-line.
APPEND ls_attachment TO gt_attachment_msgs.
CLEAR ls_attachment.
LOOP AT gt_mass_map_update_msgs INTO gs_mass_map_update_msgs.
CONCATENATE gs_mass_map_update_msgs-type " Type of message
gs_mass_map_update_msgs-id " Message ID
gs_mass_map_update_msgs-number " Message Number
gs_mass_map_update_msgs-message " Full message text
* gs_mass_map_update_msgs-LOG_NO " Log Number
* gs_mass_map_update_msgs-LOG_MSG_NO " Log message Number
* gs_mass_map_update_msgs-MESSAGE_V1 " MSG Var 1
* gs_mass_map_update_msgs-MESSAGE_V2 " MSG Var 2
* gs_mass_map_update_msgs-MESSAGE_V3 " MSG Var 3
* gs_mass_map_update_msgs-MESSAGE_V4 " MSG Var 4
INTO ls_attachment-line
SEPARATED BY con_tab.
CONCATENATE con_cret ls_attachment-line
INTO ls_attachment-line.
APPEND ls_attachment TO gt_attachment_msgs.
CLEAR ls_attachment.
ENDLOOP.
ENDMETHOD.
METHOD send_class_email.
* Objects reference declaration to prepare Mail Object
DATA :
lo_send_request TYPE REF TO cl_bcs VALUE IS INITIAL,
lo_document TYPE REF TO cl_document_bcs VALUE IS INITIAL, "document object
lo_sender TYPE REF TO if_sender_bcs VALUE IS INITIAL, "sender
lo_recipient TYPE REF TO if_recipient_bcs VALUE IS INITIAL, "recipient
lo_cx_document_bcs TYPE REF TO cx_document_bcs,
lo_cx_address_bcs TYPE REF TO cx_address_bcs,
lo_bcs_exception TYPE REF TO cx_send_req_bcs.
* Variables declarations.
DATA:
lv_data_string TYPE string,
lv_xstring TYPE xstring,
lv_message_text TYPE string,
lv_string TYPE string,
lv_msgv1 TYPE sy-msgv1,
lv_attsubject TYPE sood-objdes,
lv_size TYPE so_obj_len,
lv_obj_descr TYPE so_obj_des.
* Tables declarations
DATA:
lt_recip TYPE STANDARD TABLE OF zotct_ts_recip,
lt_text TYPE bcsy_text, "Table for body
lt_binary_content TYPE solix_tab,
lt_email_ids TYPE ztech_t_table_value.
* Structures declarations.
DATA:
ls_recip TYPE zotct_ts_recip,
ls_text LIKE LINE OF lt_text. "work area for message body
* Fields symbols declarations.
FIELD-SYMBOLS:
<ls_recip> TYPE zotct_ts_recip,
<ls_email_id> LIKE LINE OF lt_email_ids.
* Contants declarations.
CONSTANTS :
lc_so_obj_tp TYPE so_obj_tp VALUE 'HTM',
lc_key_email_id TYPE ztech_table_key VALUE 'OTC-33100-G211-01-R01:EMAIL_ID:RECEIVER:',
lc_table TYPE tabname VALUE 'ZPRICE_SETTINGS',
lc_ext TYPE so_obj_tp VALUE 'XLS',
lc_period TYPE char01 VALUE '.',
lc_major_x TYPE char01 VALUE 'X'.
CLASS cl_bcs DEFINITION LOAD.
CHECK p_email = 'X'. "Do not send email if not requested
* Create instance of the email class
TRY .
lo_send_request = cl_bcs=>create_persistent( ).
CATCH cx_send_req_bcs INTO lo_bcs_exception .
IF lo_bcs_exception IS BOUND.
lv_message_text = lo_bcs_exception->get_text( ).
MOVE lv_message_text TO lv_msgv1.
MESSAGE a064(zotc) WITH lv_msgv1.
ENDIF.
ENDTRY.
ls_recip = p_eaddr.
APPEND ls_recip TO lt_recip.
* Message body and subject
lv_obj_descr = text-102. "P2P-43060-CR00 Mass Article Moving Ave Price Update
ls_text-line = text-100. "P2P-43060-CR00
APPEND ls_text TO lt_text.
CLEAR ls_text.
* Create email document inc type, subject and body text
TRY .
lo_document = cl_document_bcs=>create_document( "create document
i_type = lc_so_obj_tp "Type of document HTM, TXT etc
i_text = lt_text "email body internal table
i_subject = lv_obj_descr ). "email subject here p_sub input parameter
CATCH cx_document_bcs INTO lo_cx_document_bcs.
IF lo_cx_document_bcs IS BOUND.
lv_message_text = lo_cx_document_bcs->get_text( ).
MOVE lv_message_text TO lv_msgv1.
MESSAGE a064(zotc) WITH lv_msgv1.
ENDIF.
ENDTRY.
* Assign document and all its details to the email
TRY .
lo_send_request->set_document( lo_document ).
CATCH cx_send_req_bcs INTO lo_bcs_exception .
IF lo_bcs_exception IS BOUND.
lv_message_text = lo_bcs_exception->get_text( ).
MOVE lv_message_text TO lv_msgv1.
MESSAGE a064(zotc) WITH lv_msgv1.
ENDIF.
ENDTRY.
* Create columns basis and data on the Report Type
CALL METHOD lcl_email=>build_xls_data_table_update.
CALL FUNCTION 'SWA_STRING_FROM_TABLE'
EXPORTING
character_table = gt_attachment_update
IMPORTING
character_string = lv_data_string
EXCEPTIONS
no_flat_charlike_structure = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE a303(me) WITH 'Error in sending mail.'(050) text-051.
ENDIF.
* Convert string to xstring
CALL FUNCTION 'HR_KR_STRING_TO_XSTRING'
EXPORTING
unicode_string = lv_data_string
IMPORTING
xstring_stream = lv_xstring
EXCEPTIONS
invalid_codepage = 1
invalid_string = 2
OTHERS = 3.
IF sy-subrc NE 0.
MESSAGE a303(me) WITH 'Error in sending mail.'(050) text-051.
ENDIF.
* Convert Xstring to binary
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_xstring
TABLES
binary_tab = lt_binary_content.
CONCATENATE
'Report_Mass_MAP_Upload_'
sy-datum+4(2)
lc_period
sy-datum+6
lc_period
sy-datum(4)
INTO lv_attsubject.
* Calculate size of attachment
lv_size = xstrlen( lv_xstring ).
* Add the attachment table to the document
TRY .
lo_document->add_attachment( EXPORTING
i_attachment_type = lc_ext
i_attachment_subject = lv_attsubject
i_attachment_size = lv_size
i_att_content_hex = lt_binary_content ).
CATCH cx_document_bcs INTO lo_cx_document_bcs.
IF lo_cx_document_bcs IS BOUND.
lv_message_text = lo_cx_document_bcs->get_text( ).
MOVE lv_message_text TO lv_msgv1.
MESSAGE a064(zotc) WITH lv_msgv1.
ENDIF.
ENDTRY.
* Now attach the second table
* Create columns basis and data on the Report Type
CALL METHOD lcl_email=>build_xls_data_table_msgs.
CLEAR: lv_data_string.
CALL FUNCTION 'SWA_STRING_FROM_TABLE'
EXPORTING
character_table = gt_attachment_msgs
IMPORTING
character_string = lv_data_string
EXCEPTIONS
no_flat_charlike_structure = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE a303(me) WITH 'Error in sending mail.'(050) text-051.
ENDIF.
* Convert string to xstring
CLEAR: lv_xstring.
CALL FUNCTION 'HR_KR_STRING_TO_XSTRING'
EXPORTING
unicode_string = lv_data_string
IMPORTING
xstring_stream = lv_xstring
EXCEPTIONS
invalid_codepage = 1
invalid_string = 2
OTHERS = 3.
IF sy-subrc NE 0.
MESSAGE a303(me) WITH 'Error in sending mail.'(050) text-051.
ENDIF.
* Convert Xstring to binary
CLEAR: lt_binary_content.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_xstring
TABLES
binary_tab = lt_binary_content.
CONCATENATE
'Report_Mass_MAP_Upload_Messages_'
sy-datum+4(2)
lc_period
sy-datum+6
lc_period
sy-datum(4)
INTO lv_attsubject.
* Calculate size of attachment
lv_size = xstrlen( lv_xstring ).
* Add the 2nd attachment table to the document
TRY .
lo_document->add_attachment( EXPORTING
i_attachment_type = lc_ext
i_attachment_subject = lv_attsubject
i_attachment_size = lv_size
i_att_content_hex = lt_binary_content ).
CATCH cx_document_bcs INTO lo_cx_document_bcs.
IF lo_cx_document_bcs IS BOUND.
lv_message_text = lo_cx_document_bcs->get_text( ).
MOVE lv_message_text TO lv_msgv1.
MESSAGE a064(zotc) WITH lv_msgv1.
ENDIF.
ENDTRY.
* Sender is the logged in user
TRY .
TRY .
lo_sender = cl_sapuser_bcs=>create( sy-uname ).
CATCH cx_address_bcs INTO lo_cx_address_bcs.
IF lo_cx_address_bcs IS BOUND.
lv_message_text = lo_cx_address_bcs->get_text( ).
MOVE lv_message_text TO lv_msgv1.
MESSAGE a064(zotc) WITH lv_msgv1.
ENDIF.
ENDTRY.
* Set sender to send request
lo_send_request->set_sender(
EXPORTING
i_sender = lo_sender ).
CATCH cx_send_req_bcs INTO lo_bcs_exception .
IF lo_bcs_exception IS BOUND.
lv_message_text = lo_bcs_exception->get_text( ).
MOVE lv_message_text TO lv_msgv1.
MESSAGE a064(zotc) WITH lv_msgv1.
ENDIF.
ENDTRY.
DELETE lt_recip WHERE email_id IS INITIAL.
* Add recipient (e-mail address)
LOOP AT lt_recip ASSIGNING <ls_recip>.
TRY .
lo_recipient = cl_cam_address_bcs=>create_internet_address(
<ls_recip>-email_id ).
CATCH cx_address_bcs INTO lo_cx_address_bcs.
IF lo_cx_address_bcs IS BOUND.
lv_message_text = lo_cx_address_bcs->get_text( ).
MOVE lv_message_text TO lv_msgv1.
MESSAGE a064(zotc) WITH lv_msgv1.
ENDIF.
ENDTRY.
* Add recipient with its respective attributes to send request
TRY .
CALL METHOD lo_send_request->add_recipient
EXPORTING
i_recipient = lo_recipient
i_express = lc_major_x.
CATCH cx_send_req_bcs INTO lo_bcs_exception .
IF lo_bcs_exception IS BOUND.
lv_message_text = lo_bcs_exception->get_text( ).
MOVE lv_message_text TO lv_msgv1.
MESSAGE a064(zotc) WITH lv_msgv1.
ENDIF.
ENDTRY.
ENDLOOP.
TRY .
CALL METHOD lo_send_request->set_send_immediately
EXPORTING
i_send_immediately = lc_major_x.
CATCH cx_send_req_bcs INTO lo_bcs_exception .
IF lo_bcs_exception IS BOUND.
lv_message_text = lo_bcs_exception->get_text( ).
MOVE lv_message_text TO lv_msgv1.
MESSAGE a064(zotc) WITH lv_msgv1.
ENDIF.
ENDTRY.
* Send email
TRY .
lo_send_request->send(
EXPORTING
i_with_error_screen = lc_major_x ).
COMMIT WORK.
CATCH cx_send_req_bcs INTO lo_bcs_exception .
IF lo_bcs_exception IS BOUND.
lv_message_text = lo_bcs_exception->get_text( ).
MOVE lv_message_text TO lv_msgv1.
MESSAGE a064(zotc) WITH lv_msgv1.
ENDIF.
ENDTRY.
CALL METHOD lcl_map_update=>run_message
EXPORTING
pv_type = 'I'
pv_text = 'Email sent with results of MASS MAP Update'.
ENDMETHOD.
ENDCLASS.
CLASS lcl_map_update IMPLEMENTATION.
METHOD main_process.
* select * from T001 where BUKRS = P_BUKRS.
IF p_slg1 = 'X'. "see sample program ZP2P_LOAD_ORG_UNITS OR ZP2P_JOBS_TO_POSITIONS for usage of this class SLG1 logging
" call logger class with object and subobject to log the success and failed messages in SLG1
go_log = zcl_logger=>new( object = 'ZP2P_43060_CR00'
subobject = 'MASS_MAP_UPDATE'
desc = text-t03 ).
ENDIF.
IF pv_job IS INITIAL. "this is the forground run step of the program
CALL METHOD get_data_ps.
IF p_backgr = 'X'. "Save the above received data from the input file to a memory ID
CALL METHOD prepare_job_and_submit.
ELSE.
CALL METHOD validate_data.
CALL METHOD process_bapi.
CALL METHOD process_results.
ENDIF.
ELSE.
CALL METHOD get_data_memory. "get data from memory ID
CALL METHOD validate_data.
CALL METHOD process_bapi.
CALL METHOD process_results.
ENDIF.
ENDMETHOD. "main_process
METHOD init_screen.
CALL METHOD prepare_kongr_popup.
ENDMETHOD. "main_process
METHOD check_scr.
* Do the following checks at all times
CALL METHOD auth_check.
IF sy-batch = 'X' AND p_job = space.
MESSAGE e011(zp2p) WITH 'Do not run this program as a background task'.
ENDIF.
IF p_email = 'X' AND p_eaddr = space.
MESSAGE e011(zp2p) WITH 'Email requested but email address is blank'.
ENDIF.
CHECK sy-ucomm = 'ONLIN'. "ONLY DO THE FOLLOWING CHECKS ON forground EXECUTE BUTTON
IF p_uload CS gc_csv.
ELSE.
MESSAGE e011(zp2p) WITH 'File name to upload must be a .CSV file'.
ENDIF.
IF P_ulimit < 1.
MESSAGE e011(zp2p) WITH 'Update limit must be a value greater than zero'.
ENDIF.
ENDMETHOD. "main_process
METHOD upload_file.
DATA:
ls_dynpfields TYPE dynpread,
lt_dynpfields TYPE TABLE OF dynpread,
lv_title TYPE string,
lv_rc TYPE i,
lv_user_action TYPE i.
lv_title = text-008.
REFRESH lt_dynpfields.
ls_dynpfields-fieldname = 'P_ULOAD'.
APPEND ls_dynpfields TO lt_dynpfields.
* Get file upload value on the selection screen
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
TABLES
dynpfields = lt_dynpfields
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
if sy-subrc <> 0.
ENDIF.
READ TABLE lt_dynpfields INTO ls_dynpfields
WITH KEY fieldname = 'P_ULOAD'.
IF sy-subrc = 0.
gv_initial_directory = ls_dynpfields-fieldvalue.
ENDIF.
CLEAR: gt_file_table[].
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = lv_title
default_extension = gc_csv
initial_directory = gv_initial_directory
CHANGING
file_table = gt_file_table
rc = lv_rc
user_action = lv_user_action " User Action (See Class Constants ACTION_OK, ACTION_CANCEL)
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
* Unable to open dialog to browse a directory
MESSAGE text-021 TYPE gc_i.
ELSE.
IF lv_user_action = cl_gui_frontend_services=>action_cancel .
* action: cancel
ELSE.
READ TABLE gt_file_table INTO gs_file_table INDEX 1.
IF sy-subrc = 0.
p_uload = gs_file_table-filename.
ELSE.
* Unable to open dialog to browse a directory
MESSAGE text-021 TYPE gc_i.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD. "main_process
METHOD prepare_kongr_popup.
Data:
ls_ckmlkon TYPE ckmlkon,
ls_ckmlkont TYPE ckmlkont.
* CLEAR gv_ckmlkont_items.
CLEAR gv_ckmlkont_init.
CLEAR: ls_ckmlkont, ls_ckmlkon, gs_ckmlkont_help.
REFRESH: gt_ckmlkont, gt_ckmlkon, gt_ckmlkont_help.
* Transaktionsspezifische interne Tabellen füllen
CALL FUNCTION 'GET_TABLES_FOR_KOMOK'
EXPORTING
i_tcode = 'MR21' "sy-tcode
IMPORTING
e_ckmlkon = gt_ckmlkon
e_ckmlkont = gt_ckmlkont
EXCEPTIONS
no_data = 1.
* Prüfung ob Benutzer var. KOMOK vorgesehen hat, interne Tabelle für
* F4-Hilfe
IF sy-subrc = 1.
gv_ckmlkont_init = 'X'.
ELSE.
LOOP AT gt_ckmlkont INTO ls_ckmlkont.
gs_ckmlkont_help-grund = ls_ckmlkont-kongr.
gs_ckmlkont_help-text = ls_ckmlkont-grtxt.
APPEND gs_ckmlkont_help TO gt_ckmlkont_help.
ENDLOOP.
ENDIF.
* Setup the initial value for reason code for input screen
IF gv_first_call = 'X'.
LOOP AT gt_ckmlkon INTO ls_ckmlkon WHERE tcode = sy-tcode AND
flg_def = 'X' .
LOOP AT gt_ckmlkont INTO ls_ckmlkont
WHERE kongr = ls_ckmlkon-kongr.
p_kongr = ls_ckmlkont-kongr.
ENDLOOP.
ENDLOOP.
CLEAR gv_first_call.
ENDIF.
ENDMETHOD. "main_process
METHOD show_kongr_dropdown_box.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'GRUND'
* PVALKEY = ' '
DYNPPROG = sy-repid
dynpnr = sy-dynnr
DYNPROFIELD = 'P_KONGR'
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ''
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = gt_ckmlkont_help
* FIELD_TAB = gt_ckmlkont_help
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS "note840507
PARAMETER_ERROR = 1 "note840507
NO_VALUES_FOUND = 2 "note840507
OTHERS = 3 "note840507
.
IF sy-subrc <> 0 ##NEEDED.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMETHOD.
METHOD Success_message.
DATA: lv_par1 TYPE syst_msgv,
lv_par2 TYPE syst_msgv,
lv_par3 TYPE syst_msgv,
lv_par4 TYPE syst_msgv,
lv_char5 TYPE char5,
lv_bapiret1 TYPE bapiret1,
lv_article type matnr,
lv_site type werks_d.
check p_slg1 = 'X'. "Only write to message table when slg1 is requested on selection screen
WRITE ps_mass_map_update-lineref TO lv_char5.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ps_mass_map_update-article
IMPORTING
OUTPUT = lv_article.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ps_mass_map_update-site
IMPORTING
OUTPUT = lv_site.
CONCATENATE gc_row lv_char5 INTO lv_par1.
CONCATENATE gc_Article lv_article INTO lv_par2.
CONCATENATE gc_Site lv_site INTO lv_par3.
CONCATENATE 'Updated MAP to article/site Doc:' ps_mass_map_update-doc_year '/' ps_mass_map_update-doc_num
INTO lv_par4.
CALL FUNCTION 'BALW_BAPIRETURN_GET1'
EXPORTING
type = gc_i
cl = gc_zp2p
number = gc_num11
par1 = lv_par1
par2 = lv_par2
par3 = lv_par3
par4 = lv_par4
IMPORTING
bapireturn = ps_return.
ENDMETHOD.
METHOD General_info_message.
DATA: lv_par1 TYPE syst_msgv.
lv_par1 = pv_text.
CALL FUNCTION 'BALW_BAPIRETURN_GET1'
EXPORTING
type = gc_i
cl = gc_zp2p
number = gc_num11
par1 = lv_par1
IMPORTING
bapireturn = ps_return.
ENDMETHOD.
METHOD Info_message.
DATA: lv_par1 TYPE syst_msgv,
lv_par2 TYPE syst_msgv,
lv_par3 TYPE syst_msgv,
lv_par4 TYPE syst_msgv,
lv_char5 TYPE char5,
lv_bapiret1 TYPE bapiret1,
lv_article type matnr,
lv_site type werks_d.
check p_slg1 = 'X'. "Only write to message table when slg1 is requested on selection screen
WRITE ps_mass_map_update-lineref TO lv_char5.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ps_mass_map_update-article
IMPORTING
OUTPUT = lv_article.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ps_mass_map_update-site
IMPORTING
OUTPUT = lv_site.
CONCATENATE gc_row lv_char5 INTO lv_par1.
CONCATENATE gc_Article lv_article INTO lv_par2.
CONCATENATE gc_Site lv_site INTO lv_par3.
lv_par4 = pv_text.
CALL FUNCTION 'BALW_BAPIRETURN_GET1'
EXPORTING
type = gc_i
cl = gc_zp2p
number = gc_num11
par1 = lv_par1
par2 = lv_par2
par3 = lv_par3
par4 = lv_par4
IMPORTING
bapireturn = ps_return.
ENDMETHOD.
METHOD save_message.
DATA: lv_par1 TYPE syst_msgv,
lv_par2 TYPE syst_msgv,
lv_par3 TYPE syst_msgv,
lv_par4 TYPE syst_msgv,
lv_char5 TYPE char5,
lv_bapiret1 TYPE bapiret1,
lv_article type matnr,
lv_site type werks_d.
ps_record-error_flag = gc_x.
ps_record-valid_msg = 'Error in validation, Load is stopped'.
gv_errors = gc_x.
WRITE ps_record-lineref TO lv_char5.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ps_record-article
IMPORTING
OUTPUT = lv_article.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ps_record-site
IMPORTING
OUTPUT = lv_site.
CONCATENATE gc_row lv_char5 INTO lv_par1.
CONCATENATE gc_Article lv_article INTO lv_par2.
CONCATENATE gc_Site lv_site INTO lv_par3.
lv_par4 = pv_text.
CALL FUNCTION 'BALW_BAPIRETURN_GET1'
EXPORTING
type = gc_e
cl = gc_zp2p
number = gc_num11
par1 = lv_par1
par2 = lv_par2
par3 = lv_par3
par4 = lv_par4
IMPORTING
bapireturn = lv_bapiret1.
APPEND lv_bapiret1 TO gt_mass_map_update_msgs.
ENDMETHOD.
METHOD run_message.
MESSAGE ID 'ZP2P'
TYPE pv_type
NUMBER 11
WITH pv_text.
"Inform SLG1
IF p_slg1 = 'X'.
" Add log
go_log->add( ).
ENDIF.
ENDMETHOD.
METHOD get_data_memory .
* Get data from memory data cluster that was built before background job started.
IMPORT gt_mass_map_input to gt_mass_map_input from database zp2p_cluster(zp) ID p_srtfd.
IF sy-subrc <> 0.
CALL METHOD run_message
EXPORTING
pv_type = 'E'
pv_text = 'Failed to Import Data for Background Job Receive'.
WRITE: /001 'Failed to Import Data for Background Job Receive'.
ELSE.
DELETE FROM DATABASE zp2p_cluster(zp) ID p_srtfd.
IF sy-subrc <> 0.
CALL METHOD run_message
EXPORTING
pv_type = 'E'
pv_text = 'Failed to Remove memory Data for Background Job Receive'.
WRITE: /001 'Failed to Remove memory Data for Background Job Receive'.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD get_data_ps .
* Variables
DATA:
lv_filename TYPE string,
lv_tabix TYPE sy-tabix,
lv_sequence TYPE crmt_bsp_sequence_6.
* Structures
DATA:
ls_data_tab TYPE string.
* Internal tables
DATA:
lt_data_tab TYPE TABLE OF string.
* Classes
DATA:
lo_conv TYPE REF TO cl_rsda_csv_converter.
CHECK gv_errors = abap_false.
CHECK p_uload IS NOT INITIAL.
lv_filename = p_uload.
IF lv_filename CS gc_csv.
ELSE.
CALL METHOD run_message
EXPORTING
pv_type = 'E'
pv_text = 'File name to upload must be a .CSV file'.
ENDIF.
CLEAR: lt_data_tab[], gt_mass_map_input[].
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = lv_filename
read_by_line = 'X'
CHANGING
data_tab = lt_data_tab
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
IF sy-subrc <> 0.
CALL METHOD run_message
EXPORTING
pv_type = 'E'
pv_text = 'Error when uploading the flat file'.
ELSE.
CALL METHOD cl_rsda_csv_converter=>create
RECEIVING
r_r_conv = lo_conv.
LOOP AT lt_data_tab INTO ls_data_tab.
lv_tabix = sy-tabix.
IF lv_tabix > p_hdlin. " we skip the first four lines (header)
CALL METHOD lo_conv->csv_to_structure
EXPORTING
i_data = ls_data_tab
IMPORTING
e_s_data = gs_mass_map_input.
APPEND gs_mass_map_input TO gt_mass_map_input.
ENDIF.
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD validate_data .
* Structures
DATA:
BEGIN OF ls_wlk1,
artnr TYPE matnr, " material/article
filia TYPE asort, " site
END OF ls_wlk1,
BEGIN of ls_map,
MATNR TYPE MATNR,
BWKEY TYPE BWKEY,
BWTAR TYPE BWTAR_D,
VERPR type VERPR,
PEINH type PEINH,
* WAERS TYPE WAERS,
END OF ls_map,
BEGIN OF ls_werks,
werks TYPE werks_d, " site
END OF ls_werks,
BEGIN OF ls_article_site,
artnr TYPE matnr, " material/article
filia TYPE asort, " site
END OF ls_article_site,
BEGIN OF ls_mbew_article_site,
matnr TYPE matnr, " material/article
bwkey TYPE bwkey, " site
END OF ls_mbew_article_site,
BEGIN OF ls_article,
artnr TYPE matnr, " material
END OF ls_article,
BEGIN OF ls_article_site_count,
article TYPE matnr,
site TYPE werks_d,
counts TYPE i,
END OF ls_article_site_count,
BEGIN OF ls_article_meinh,
matnr TYPE matnr,
meinh TYPE lrmei,
END OF ls_article_meinh.
* Tables
DATA:
lt_temp LIKE TABLE OF gs_mass_map_update,
lt_werks LIKE HASHED TABLE OF ls_werks WITH UNIQUE KEY werks,
lt_map LIKE HASHED TABLE of ls_map WITH UNIQUE KEY MATNR BWKEY, "BWTAR,
lt_article_site_count LIKE HASHED TABLE OF ls_article_site_count WITH UNIQUE KEY article site,
lt_wlk1 LIKE TABLE OF ls_article_site,
lt_mbew LIKE TABLE OF ls_mbew_article_site,
lt_mbew_article_site like hashed table of ls_mbew_article_site with unique key matnr bwkey,
lt_article_site LIKE HASHED TABLE OF ls_article_site WITH UNIQUE KEY artnr filia,
lt_article LIKE HASHED TABLE OF ls_article WITH UNIQUE KEY artnr,
lt_article_meinh LIKE HASHED TABLE OF ls_article_meinh WITH UNIQUE KEY matnr meinh.
* Variables
DATA:
lv_error_exist TYPE wfcs_boolean,
lv_msehi TYPE msehi.
* Do not gather nor validate if input file is empty of any articles for update
IF gt_mass_map_input[] IS INITIAL.
gv_errors = abap_true.
gv_empty = abap_true.
RETURN.
ENDIF.
* Collect count of article/site in input file for duplicate article/site check
LOOP AT gt_mass_map_input INTO gs_mass_map_input.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_mass_map_input-article
IMPORTING
output = gs_mass_map_input-article.
MOVE-CORRESPONDING gs_mass_map_input TO ls_article_site_count.
ls_article_site_count-counts = 1.
COLLECT ls_article_site_count INTO lt_article_site_count. "adds 1 to the count if found
MODIFY gt_mass_map_input FROM gs_mass_map_input.
ENDLOOP.
* gather current uofm values for input file articles
SELECT matnr meinh INTO TABLE lt_article_meinh
FROM marm
FOR ALL ENTRIES IN gt_mass_map_input
WHERE matnr = gt_mass_map_input-article.
* gather current sites as per input file for validation purposes
SELECT werks INTO TABLE lt_werks
FROM t001w
FOR ALL ENTRIES IN gt_mass_map_input
WHERE werks = gt_mass_map_input-site.
* Get all active article/site from MBEW for those articles found in uploaded
* input file
SELECT matnr BWKEY BWTAR VERPR PEINH into table lt_map
from MBEW
for ALL ENTRIES in gt_mass_map_input
where matnr = gt_mass_map_input-article
and BWTAR = ' '. "only blank BWTAR is needed
LOOP AT lt_map INTO ls_map.
ls_article-artnr = ls_map-matnr.
COLLECT ls_article INTO lt_article. "Creating a hash table by article only (has at least one site)
ENDLOOP.
* Check each entry in input file for specific errors before processing for update
* Build table for later updating to bapi and reporting
LOOP AT gt_mass_map_input INTO gs_mass_map_input.
CLEAR: gs_mass_map_update.
MOVE-CORRESPONDING gs_mass_map_input TO gs_mass_map_update. "building the table of entries and update status
gs_mass_map_update-lineref = sy-tabix. "Line number of input file
gs_mass_map_update-comp = p_bukrs.
gs_mass_map_update-budat = p_budat.
gs_mass_map_update-kongr = p_kongr.
gs_mass_map_update-curtp = gc_10.
* Validate site input in file only if run option is NOT "ALL Sites"
IF p_all <> gc_x.
IF gs_mass_map_input-site IS INITIAL.
CALL METHOD save_message
EXPORTING
pv_text = 'Blank Site not allowed, load stopped'
CHANGING
ps_record = gs_mass_map_update.
ELSE.
READ TABLE lt_werks INTO ls_werks
WITH KEY werks = gs_mass_map_input-site.
IF sy-subrc <> 0.
CALL METHOD save_message
EXPORTING
pv_text = 'Site is not a valid, load stopped'
CHANGING
ps_record = gs_mass_map_update.
ENDIF.
ENDIF.
ELSE.
IF gs_mass_map_input-site IS NOT INITIAL.
CALL METHOD save_message
EXPORTING
pv_text = 'Site input not allowed if ALL Site option used, load stopped'
CHANGING
ps_record = gs_mass_map_update.
ENDIF.
ENDIF.
* Validate article/site not to be duplicated in file
READ TABLE lt_article_site_count INTO ls_article_site_count
WITH KEY article = gs_mass_map_input-article
site = gs_mass_map_input-site.
IF ls_article_site_count-counts > 1.
CALL METHOD save_message
EXPORTING
pv_text = 'Article/Site is duplicated in file, load stopped'
CHANGING
ps_record = gs_mass_map_update.
ENDIF.
* Validate Article to material master with at least one site present
READ TABLE lt_article INTO ls_article
WITH KEY artnr = gs_mass_map_input-article.
IF sy-subrc <> 0.
CALL METHOD save_message
EXPORTING
pv_text = 'Article not valid with an assigned site, load stopped'
CHANGING
ps_record = gs_mass_map_update.
ENDIF.
* Validate for existing site and article assignment
IF gs_mass_map_input-site IS NOT INITIAL.
READ TABLE lt_map INTO ls_map
WITH KEY matnr = gs_mass_map_input-article
bwkey = gs_mass_map_input-site.
IF sy-subrc <> 0.
CALL METHOD save_message
EXPORTING
pv_text = 'Article not assigned to the site, load stopped'
CHANGING
ps_record = gs_mass_map_update.
ENDIF.
ENDIF.
* zero now allowed
* Validate the map value
* IF gs_mass_map_input-map IS INITIAL.
* CALL METHOD save_message
* EXPORTING
* pv_text = 'Moving Average Price is missing'
* CHANGING
* ps_record = gs_mass_map_update.
* ENDIF.
* Validate the price Unit value
IF gs_mass_map_input-punit IS INITIAL.
CALL METHOD save_message
EXPORTING
pv_text = 'Price Unit is missing'
CHANGING
ps_record = gs_mass_map_update.
ENDIF.
* Validate the Unit of measure code
IF gs_mass_map_input-msehi IS INITIAL.
CALL METHOD save_message
EXPORTING
pv_text = 'Unit of Measure must be present'
CHANGING
ps_record = gs_mass_map_update.
ENDIF.
IF gs_mass_map_input-msehi IS NOT INITIAL.
* convert the msehi input value to a native value for db check
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = gs_mass_map_input-msehi
LANGUAGE = SY-LANGU
IMPORTING
OUTPUT = lv_msehi
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
IF sy-subrc <> 0.
CALL METHOD save_message
EXPORTING
pv_text = 'Unit of measure is not valid, load stopped'
CHANGING
ps_record = gs_mass_map_update.
else.
READ TABLE lt_article_meinh INTO ls_article_meinh
WITH KEY matnr = gs_mass_map_input-article
meinh = lv_msehi.
IF sy-subrc <> 0.
CALL METHOD save_message
EXPORTING
pv_text = 'Article not assigned to unit of measure, load stopped'
CHANGING
ps_record = gs_mass_map_update.
ENDIF.
ENDIF.
ENDIF.
* Validate currency
IF gs_mass_map_input-curr <> 'CAD'.
CALL METHOD save_message
EXPORTING
pv_text = 'Currency not valid'
CHANGING
ps_record = gs_mass_map_update.
ENDIF.
IF gs_mass_map_update-error_flag IS INITIAL.
gs_mass_map_update-valid_msg = 'Entry valid'.
ELSE.
gs_mass_map_update-update_msg = 'Update was not attempted'.
ENDIF.
APPEND gs_mass_map_update TO gt_mass_map_update.
ENDLOOP.
* Process to insert sites entries for articles if all sites are to be processed per article
* result is an input file larger than original with sites assigned
IF gv_errors IS INITIAL AND p_all = gc_x. "Only if input file is 100% validated
lt_temp[] = gt_mass_map_update[].
CLEAR: gt_mass_map_update[].
LOOP AT lt_temp INTO gs_mass_map_update.
LOOP AT lt_map INTO ls_map WHERE matnr = gs_mass_map_update-article.
gs_mass_map_update-site = ls_map-bwkey.
gs_mass_map_update-valid_msg = 'Entry valid, Site auto assigned'.
APPEND gs_mass_map_update TO gt_mass_map_update.
ENDLOOP.
ENDLOOP.
ENDIF.
if gv_errors is initial.
* Mark all input records that need to be skipped as MAP value on DB matches what
* is in input file for same article/site/UofM
loop at gt_mass_map_update into gs_mass_map_update.
read table lt_map INTO ls_map
with table key matnr = gs_mass_map_update-article
bwkey = gs_mass_map_update-site.
" BWTAR = ' '.
if sy-subrc = 0.
if ls_map-VERPR = gs_mass_map_update-map and
ls_map-PEINH = gs_mass_map_update-punit.
gs_mass_map_update-error_flag = 'S'.
gs_mass_map_update-valid_msg = 'Entry valid, but MAP/UNIT same, thus skipped'.
modify gt_mass_map_update from gs_mass_map_update.
endif.
endif.
endloop.
ENDIF.
ENDMETHOD.
*----------------------------------------------------------------------*
METHOD output_method .
IF p_backgr = 'X' OR p_spool = 'X'.
CALL METHOD prepare_container_background.
ELSE.
CALL METHOD init_alv_0101.
CALL SCREEN 0101.
ENDIF.
ENDMETHOD.
METHOD auth_check.
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
ID 'BUKRS' FIELD p_bukrs " from selection screen - Company code
ID 'ACTVT' FIELD gc_aktyp. " 01creen - Company code
IF sy-subrc = 0.
gv_errors = abap_false.
ELSE.
gv_errors = abap_true.
MESSAGE text-024 TYPE gc_e. "No authorization to run this program
ENDIF.
ENDMETHOD.
METHOD prepare_job_and_submit.
CONSTANTS:
lc_jobname TYPE btcjob VALUE 'ZP2P_MASS_MAP_UPDATE_JOB'.
DATA: lv_string TYPE string,
lv_finished TYPE btcstatus,
lv_running TYPE btcstatus,
lv_scheduled TYPE btcstatus,
lv_aborted TYPE btcstatus,
lv_ready TYPE btcstatus,
lv_jobcount TYPE btcjobcnt,
lv_srtfd TYPE indx_srtfd.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = lc_jobname
IMPORTING
jobcount = lv_jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc = 0.
* save the data that was prior uploaded from presentation server to a memory data cluster
lv_srtfd = lv_jobcount. "Use job count to establish the ID of the data cluster, thus mutliple users
* Can run same program at same time.. no conflicts.
EXPORT gt_mass_map_input from gt_mass_map_input to DATABASE zp2p_cluster(zp) ID lv_srtfd.
IF sy-subrc <> 0.
CALL METHOD run_message
EXPORTING
pv_type = 'E'
pv_text = 'Failed to Save Data for Pending Background Job'.
WRITE: /001 'Failed to Save Data for Pending Background Job'.
ELSE.
SUBMIT zp2p_cr00_mass_map_update
USING SELECTION-SCREEN 1000
WITH p_job EQ 'X' "must use X to let job know it running 2nd step as background
WITH p_srtfd EQ lv_srtfd "the data cluster id to be passed to the submited program
WITH p_uload EQ p_uload
WITH p_hdlin EQ p_hdlin
WITH p_online EQ p_online
WITH p_backgr EQ p_backgr
WITH p_alv EQ ' '
WITH p_spool EQ 'X'
WITH p_email EQ p_email
WITH p_eaddr EQ p_eaddr
WITH p_slg1 EQ p_slg1
WITH p_bukrs EQ p_bukrs
WITH p_budat EQ p_budat
WITH p_kongr EQ p_kongr
WITH p_site EQ p_site
WITH p_all EQ p_all
VIA JOB lc_jobname " JOBNAME
NUMBER lv_jobcount " UNIQUE ID OF JOB
AND RETURN.
IF sy-subrc = 0.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = lv_jobcount
jobname = lc_jobname
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
invalid_target = 8
OTHERS = 9.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
DELETE FROM DATABASE zp2p_cluster(zp) ID p_srtfd.
IF sy-subrc <> 0.
CALL METHOD run_message
EXPORTING
pv_type = 'E'
pv_text = 'Failed to Remove memory Data for Background Job Receival'.
WRITE: /001 'Failed to Remove memory Data for Background Job Receival'.
ENDIF.
ELSE.
"Inform SLG1 that job was been sumitted.
CALL METHOD run_message
EXPORTING
pv_type = 'I'
pv_text = 'Background Job successfully submitted for MASS MAP Update'.
WRITE: /001 'Background Job successfully submitted for MASS MAP Update:', lc_jobname.
CALL FUNCTION 'SHOW_JOBSTATE'
EXPORTING
jobcount = lv_jobcount
jobname = lc_jobname
IMPORTING
finished = lv_finished
running = lv_running
ready = lv_ready
scheduled = lv_scheduled
aborted = lv_aborted
EXCEPTIONS
jobcount_missing = 1
jobname_missing = 2
job_notex = 3
OTHERS = 4.
IF sy-subrc = 0.
IF lv_running IS NOT INITIAL.
CALL METHOD run_message
EXPORTING
pv_type = 'I'
pv_text = 'Background Job is running for MASS MAP Update'.
WRITE: /001 'Background Job is running MASS MAP Update:', lc_jobname.
ELSE.
IF lv_finished IS NOT INITIAL.
CALL METHOD run_message
EXPORTING
pv_type = 'I'
pv_text = 'Background Job has run and is completed for MASS MAP Update'.
WRITE: /001 'Background Job has run and is is completed for MASS MAP Update:', lc_jobname.
ELSE.
IF lv_aborted IS NOT INITIAL.
CALL METHOD run_message
EXPORTING
pv_type = 'I'
pv_text = 'Background Job has aborted its run for MASS MAP Update'.
WRITE: /001 'Background Job has aborted its run for MASS MAP Update:', lc_jobname.
ELSE.
IF lv_scheduled IS NOT INITIAL.
CALL METHOD run_message
EXPORTING
pv_type = 'I'
pv_text = 'Background Job is scheduled for MASS MAP Update'.
WRITE: /001 'Background Job is scheduled for MASS MAP Update:', lc_jobname.
ELSE.
IF lv_ready IS NOT INITIAL.
CALL METHOD run_message
EXPORTING
pv_type = 'I'
pv_text = 'Background Job is ready to start for MASS MAP Update'.
WRITE: /001 'Background Job is ready to start for MASS MAP Update:', lc_jobname.
ELSE.
CALL METHOD run_message
EXPORTING
pv_type = 'I'
pv_text = 'Background Job is pending for start for MASS MAP Update'.
WRITE: /001 'Background Job is pending for start for MASS MAP Update:', lc_jobname.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
RETURN. "success for job submit, return to calling routine
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* If logic got to this point, Issue error message that background job did not get submitted.
CALL METHOD run_message
EXPORTING
pv_type = 'E'
pv_text = 'Job MASS MAP Update failed to be submitted'.
WRITE: /001 'Job MASS MAP Update failed to be submitted:', lc_jobname.
ENDMETHOD.
METHOD process_results .
DATA: ls_messages TYPE bapireturn1.
DATA: lv_string TYPE BAPI_MSG.
* Output all generated messages to the SLG1 if requested by user
IF p_slg1 = 'X'.
LOOP AT gt_mass_map_update_msgs INTO ls_messages.
MESSAGE ID ls_messages-id
TYPE ls_messages-type
NUMBER ls_messages-number
WITH ls_messages-MESSAGE_V1
ls_messages-MESSAGE_V2
ls_messages-MESSAGE_V3
ls_messages-MESSAGE_V4
INTO lv_string.
" Add log
go_log->add( ).
ENDLOOP.
ENDIF.
* We create an ALV to display on Spool Request the each user and email results
IF p_email = abap_true.
CALL METHOD lcl_email=>send_class_email.
ENDIF.
CALL METHOD output_method.
ENDMETHOD.
METHOD process_bapi.
DATA: lv_comp TYPE bapi2027_pc_hd-comp_code,
lv_pdate TYPE bapi2027_pc_hd-pstng_date,
lv_kongr TYPE ckml_kongr,
lv_curtp TYPE curtp,
lv_year TYPE bapi2027_pc_ex-ml_doc_year,
lv_doc TYPE bapi2027_pc_ex-ml_doc_num,
lv_error TYPE char1,
lv_line_limit type i,
lv_par1 TYPE SYMSGV,
lv_par2 TYPE SYMSGV,
lv_par3 TYPE SYMSGV,
lv_par4 TYPE SYMSGV.
DATA: lv_char5 type char05.
DATA: lt_update TYPE TABLE OF ts_mass_map_update,
ls_update TYPE ts_mass_map_update,
lt_update_pend TYPE TABLE OF ts_mass_map_update,
ls_update_pend TYPE ts_mass_map_update,
lt_material_price_list TYPE TABLE OF bapi2027_pc_list,
ls_material_price_list TYPE bapi2027_pc_list,
lt_return TYPE TABLE OF bapireturn1,
ls_return TYPE bapireturn1,
lv_message TYPE string,
lv_linecount TYPE i,
lv_update_count TYPE i.
* Do not process for update if validation errors exists
CHECK gv_errors = abap_false.
lv_line_limit = p_ulimit.
lv_comp = p_bukrs.
lv_pdate = p_budat.
lv_kongr = p_kongr.
lt_update[] = gt_mass_map_update[].
CLEAR: gt_mass_map_update[]. "We update for final later on each call bapi cycle
LOOP AT lt_update INTO ls_update.
if ls_update-error_flag = 'S'. "input record was marked for pending skip from update
gs_mass_map_update = ls_update.
gs_mass_map_update-update_msg = 'MAP UPDATE:No Update required, Skipped'.
gs_mass_map_update-error_flag = 'S'.
APPEND gs_mass_map_update TO gt_mass_map_update.
call method info_message exporting pv_text = 'MAP UPDATE:No Update required, Skipped'
ps_mass_map_update = gs_mass_map_update
changing ps_return = ls_return.
append ls_return to gt_mass_map_update_msgs.
continue. "loop to the next input record to process
endif.
ls_update_pend = ls_update.
APPEND ls_update_pend TO lt_update_pend.
* Fill out BAPI outbound call structure
ls_material_price_list-plant = ls_update-site.
ls_material_price_list-material = ls_update-article.
ls_material_price_list-val_type = ' '.
ls_material_price_list-sales_ord = ' '.
ls_material_price_list-s_ord_item = ' '.
ls_material_price_list-wbs_element = ' '.
ls_material_price_list-curr_type = ls_update-curtp.
ls_material_price_list-change_std_price = ' '.
ls_material_price_list-std_price = 0.
ls_material_price_list-change_mov_price = gc_x.
ls_material_price_list-moving_pr = ls_update-map.
ls_material_price_list-currency = ls_update-curr.
ls_material_price_list-iso_code = ' '.
ls_material_price_list-price_unit = ls_update-punit.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = ls_update-msehi
LANGUAGE = SY-LANGU
IMPORTING
OUTPUT = ls_material_price_list-quantity_unit
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ls_material_price_list-isocode_unit = ' '.
APPEND ls_material_price_list TO lt_material_price_list.
ADD 1 TO lv_linecount.
IF lv_linecount = lv_line_limit. "Maximum line count reached, do the bapi call
CLEAR: lv_year, lv_doc, lt_return.
* Call bapi and perform MAP Update
CALL FUNCTION 'ZP2P_BAPI_CREATEPRICECHG'
EXPORTING
comp_code = lv_comp
pstng_date = lv_pdate
zkongr = lv_kongr
IMPORTING
ml_doc_year = lv_year
ml_doc_num = lv_doc
TABLES
material_price_list = lt_material_price_list
return = lt_return.
* Test the results of the bapi call and build the result message
IF lv_doc IS NOT INITIAL.
lv_message = 'MAP UPDATE:Batch Successful'.
lv_error = space.
ELSE.
lv_message = 'MAP UPDATE:Batch Failed - Consult Error records returned'.
lv_error = 'X'.
ENDIF.
* Transfer the results of the bapi call to the result article lines used in the call
LOOP AT lt_update_pend INTO ls_update_pend.
gs_mass_map_update = ls_update_pend.
gs_mass_map_update-doc_year = lv_year.
gs_mass_map_update-doc_num = lv_doc.
gs_mass_map_update-update_msg = lv_message.
gs_mass_map_update-error_flag = lv_error.
APPEND gs_mass_map_update TO gt_mass_map_update.
if p_slg1 = 'X' and lv_error = space. "as there is no error we need to create success message
call method success_message exporting ps_mass_map_update = gs_mass_map_update
changing ps_return = ls_return.
append ls_return to lt_return.
endif.
if lv_error = space.
lv_update_count = lv_update_count + 1.
endif.
ENDLOOP.
* Transfer the results of the bapi call messages to the result messages
APPEND LINES OF lt_return TO gt_mass_map_update_msgs.
CLEAR: lt_update_pend, lv_linecount, lt_return.
refresh: lt_update_pend, lt_return.
CLEAR: lt_material_price_list. refresh lt_material_price_list.
if lv_doc is not initial.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* WAIT =
* IMPORTING
* RETURN =
.
else.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* EXPORTING
* WAIT =
* IMPORTING
* RETURN =
.
endif.
ENDIF.
ENDLOOP.
IF lt_material_price_list[] IS NOT INITIAL. "Still have unprocessed entries, do final bapi call
CLEAR: lv_year, lv_doc, lt_return.
* Call bapi and perform MAP Update
CALL FUNCTION 'ZP2P_BAPI_CREATEPRICECHG'
EXPORTING
comp_code = lv_comp
pstng_date = lv_pdate
zkongr = lv_kongr
IMPORTING
ml_doc_year = lv_year
ml_doc_num = lv_doc
TABLES
material_price_list = lt_material_price_list
return = lt_return.
* Test the results of the bapi call and build the result message
IF lv_doc IS NOT INITIAL.
lv_message = 'MAP UPDATE:Batch Successful'.
lv_error = space.
ELSE.
lv_message = 'MAP UPDATE:Batch Failed - Consult Error records returned'.
lv_error = 'X'.
ENDIF.
* Transfer the results of the bapi call to the result article lines used in the call
LOOP AT lt_update_pend INTO ls_update_pend.
gs_mass_map_update = ls_update_pend.
gs_mass_map_update-doc_year = lv_year.
gs_mass_map_update-doc_num = lv_doc.
gs_mass_map_update-update_msg = lv_message.
gs_mass_map_update-error_flag = lv_error.
APPEND gs_mass_map_update TO gt_mass_map_update.
if p_slg1 = 'X' and lv_error = space. "as there is no error we need to create success message
call method success_message exporting ps_mass_map_update = gs_mass_map_update
changing ps_return = ls_return.
append ls_return to lt_return.
endif.
if lv_error = space.
lv_update_count = lv_update_count + 1.
endif.
ENDLOOP.
* Transfer the results of the bapi call messages to the result messages
APPEND LINES OF lt_return TO gt_mass_map_update_msgs.
if lv_doc is not initial.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* WAIT =
* IMPORTING
* RETURN =
.
else.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* EXPORTING
* WAIT =
* IMPORTING
* RETURN =
.
endif.
ENDIF.
if lv_update_count = 0.
call method general_info_message exporting pv_text = 'MAP UPDATE:No Update occurred for any records'
changing ps_return = ls_return.
append ls_return to gt_mass_map_update_msgs.
else.
call method general_info_message exporting pv_text = 'MAP UPDATE:Updates occurred'
changing ps_return = ls_return.
append ls_return to gt_mass_map_update_msgs.
endif.
ENDMETHOD.
METHOD prepare_container_background .
DATA:
lt_fcat1 TYPE lvc_t_fcat,
lt_fcat2 TYPE lvc_t_fcat,
ls_dock1 TYPE REF TO cl_gui_docking_container,
ls_dock2 TYPE REF TO cl_gui_docking_container,
ls_layout1 TYPE lvc_s_layo,
ls_layout2 TYPE lvc_s_layo.
DATA:
wa_cat TYPE slis_fieldcat_alv, " WA catálogo
ti_cat1 TYPE slis_t_fieldcat_alv, " TI catálogo
ti_cat2 TYPE slis_t_fieldcat_alv, " TI catálogo
wa_sort TYPE slis_sortinfo_alv, " WA sort
ti_sort TYPE slis_t_sortinfo_alv, " TI sort
wa_layout1 TYPE slis_layout_alv, " WA opciones lista
wa_layout2 TYPE slis_layout_alv, " WA opciones lista
wa_events TYPE slis_alv_event, " WA eventos lista
ti_events TYPE slis_t_event, " TI eventos lista
wa_header TYPE slis_listheader, " WA cabecera lista
ti_header TYPE slis_t_listheader. " TI cabecera lista
DATA:
ls_data TYPE zp2p_43060_cr00_mass_map_updt,
lt_data TYPE TABLE OF zp2p_43060_cr00_mass_map_updt.
DATA: t_events TYPE slis_t_event.
DATA: w_events TYPE slis_alv_event.
DATA: l_print TYPE slis_print_alv.
l_print-print = 'X'. "Print ALV
l_print-no_print_listinfos = 'X'.
w_events-name = 'END_OF_LIST'. "Call event
w_events-form = 'END_OF_LIST'.
APPEND w_events TO t_events.
CALL METHOD set_grid_list_bg
EXPORTING
p_type = gc_update
CHANGING
ct_list = ti_cat1.
CALL METHOD prepare_layout_bg
EXPORTING
p_type = gc_update
CHANGING
pcs_layout = wa_layout1.
* transfer data table to ALV table
LOOP AT gt_mass_map_update INTO gs_mass_map_update.
MOVE-CORRESPONDING gs_mass_map_update TO ls_data.
APPEND ls_data TO lt_data.
ENDLOOP.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_structure_name = 'ZP2P_43060_CR00_MASS_MAP_UPDT'
it_events = t_events[]
is_print = l_print
is_layout = wa_layout1
it_fieldcat = ti_cat1
TABLES
t_outtab = lt_data
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.
ENDMETHOD.
METHOD end_of_list.
DATA:
lt_fcat1 TYPE lvc_t_fcat,
lt_fcat2 TYPE lvc_t_fcat,
ls_dock1 TYPE REF TO cl_gui_docking_container,
ls_dock2 TYPE REF TO cl_gui_docking_container,
ls_layout1 TYPE lvc_s_layo,
ls_layout2 TYPE lvc_s_layo.
DATA:
wa_cat TYPE slis_fieldcat_alv, " WA catálogo
ti_cat1 TYPE slis_t_fieldcat_alv, " TI catálogo
ti_cat2 TYPE slis_t_fieldcat_alv, " TI catálogo
wa_sort TYPE slis_sortinfo_alv, " WA sort
ti_sort TYPE slis_t_sortinfo_alv, " TI sort
wa_layout1 TYPE slis_layout_alv, " WA opciones lista
wa_layout2 TYPE slis_layout_alv, " WA opciones lista
wa_events TYPE slis_alv_event, " WA eventos lista
ti_events TYPE slis_t_event, " TI eventos lista
wa_header TYPE slis_listheader, " WA cabecera lista
ti_header TYPE slis_t_listheader. " TI cabecera lista
DATA:
ls_data TYPE zp2p_43060_cr00_mass_map_updt.
DATA: t_events TYPE slis_t_event.
DATA: w_events TYPE slis_alv_event.
DATA: l_print TYPE slis_print_alv.
CALL METHOD set_grid_list_bg
EXPORTING
p_type = gc_messages
CHANGING
ct_list = ti_cat2.
CALL METHOD prepare_layout_bg
EXPORTING
p_type = gc_messages
CHANGING
pcs_layout = wa_layout2.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_structure_name = 'bapireturn1'
is_layout = wa_layout2
it_fieldcat = ti_cat2
TABLES
t_outtab = gt_mass_map_update_msgs
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.
ENDMETHOD.
METHOD: init_alv_0101.
DATA:
ls_data TYPE zp2p_43060_cr00_mass_map_updt,
lt_data TYPE TABLE OF zp2p_43060_cr00_mass_map_updt.
DATA: lvs_variant TYPE disvariant,
lvs_variant2 TYPE disvariant,
lvf_save TYPE char1,
lvf_save2 TYPE char1,
lvt_fieldcat TYPE lvc_t_fcat,
lvt_fieldcat2 TYPE lvc_t_fcat,
lvt_excl_toolbar_icons TYPE ui_functions,
lvs_stable TYPE lvc_s_stbl,
lvs_layout TYPE lvc_s_layo,
lvs_layout2 TYPE lvc_s_layo.
* Initial creation of containers and data prep for the resulting grids
IF go_container IS INITIAL.
CREATE OBJECT go_container
EXPORTING
* PARENT =
container_name = 'CONTAINER'
* STYLE =
* LIFETIME = lifetime_default
* REPID =
* DYNNR =
* NO_AUTODEF_PROGID_DYNNR =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CREATE OBJECT go_container_splitter
EXPORTING
* link_dynnr = '0101'
* link_repid = sy-repid
* SHELLSTYLE =
* LEFT =
* TOP =
* WIDTH =
* HEIGHT =
* METRIC = cntl_metric_dynpro
parent = go_container
rows = 2
columns = 1
align = 15 " (splitter fills the hole custom container)
* NO_AUTODEF_PROGID_DYNNR =
* NAME =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
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.
CALL METHOD go_container_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_container_top.
CALL METHOD go_container_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = go_container_bottom.
ENDIF.
IF go_alv_grid_top IS INITIAL.
* transfer data table to ALV table
LOOP AT gt_mass_map_update INTO gs_mass_map_update.
MOVE-CORRESPONDING gs_mass_map_update TO ls_data.
APPEND ls_data TO gt_data.
ENDLOOP.
CREATE OBJECT go_alv_grid_top
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
i_parent = go_container_top
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_USE_VARIANT_CLASS = SPACE
* I_NAME =
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* CALL METHOD exclude_toolbar_icons
* EXPORTING
* p_type = gc_update
* CHANGING
* pct_excl_toolbar_icons = lvt_excl_toolbar_icons.
CALL METHOD set_grid_list_0101
EXPORTING
p_type = gc_update
CHANGING
ct_list = lvt_fieldcat.
CALL METHOD prepare_layout
EXPORTING
p_type = gc_update
CHANGING
pcs_layout = lvs_layout.
GET PARAMETER ID 'SD_VARIANT_MAINTAIN' FIELD lvf_save.
lvs_variant-report = sy-repid.
lvs_variant-username = sy-uname.
lvs_variant-variant = 'TOP'.
lvf_save = 'A'.
* lvs_variant-handle = gc_update.
CALL METHOD go_alv_grid_top->set_table_for_first_display
EXPORTING
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
is_variant = lvs_variant
i_save = lvf_save
I_DEFAULT = 'X'
is_layout = lvs_layout
* IS_PRINT =
* IT_SPECIAL_GROUPS =
** it_toolbar_excluding = lvt_excl_toolbar_icons
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
CHANGING
it_outtab = gt_data[]
it_fieldcatalog = lvt_fieldcat
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
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.
* CREATE OBJECT go_event_handler_top.
* SET HANDLER go_event_handler_top->handle_user_command
* go_event_handler_top->handle_toolbar
* go_event_handler_top->on_double_click
* go_event_handler_top->on_hotspot_click
* FOR go_alv_grid_top.
* CALL METHOD go_alv_grid_top->set_toolbar_interactive.
ELSE.
lvs_stable-row = gc_true.
lvs_stable-col = gc_true.
CALL METHOD go_alv_grid_top->refresh_table_display
EXPORTING
is_stable = lvs_stable
i_soft_refresh = gc_true
EXCEPTIONS
finished = 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.
ENDIF.
IF go_alv_grid_bottom IS INITIAL.
CREATE OBJECT go_alv_grid_bottom
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
i_parent = go_container_bottom
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_USE_VARIANT_CLASS = SPACE
* I_NAME =
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* CALL METHOD exclude_toolbar_icons
* EXPORTING
* p_type = gc_messages
* CHANGING
* pct_excl_toolbar_icons = lvt_excl_toolbar_icons.
CALL METHOD set_grid_list_0101
EXPORTING
p_type = gc_messages
CHANGING
ct_list = lvt_fieldcat2.
CALL METHOD prepare_layout
EXPORTING
p_type = gc_messages
CHANGING
pcs_layout = lvs_layout2.
GET PARAMETER ID 'SD_VARIANT_MAINTAIN' FIELD lvf_save.
* lvs_variant-handle = gc_messages.
lvs_variant-report = sy-repid.
lvs_variant-username = sy-uname.
lvs_variant-variant = 'BOT'.
lvf_save = 'A'.
CALL METHOD go_alv_grid_bottom->set_table_for_first_display
EXPORTING
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
is_variant = lvs_variant
i_save = lvf_save2
I_DEFAULT = 'X'
is_layout = lvs_layout
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* it_toolbar_excluding = lvt_excl_toolbar_icons
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
CHANGING
it_outtab = gt_mass_map_update_msgs[]
it_fieldcatalog = lvt_fieldcat2
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
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.
* CREATE OBJECT go_event_handler_bottom.
* SET HANDLER go_event_handler_bottom->on_hotspot_click
* FOR go_alv_grid_bottom.
ELSE.
lvs_stable-col = gc_true.
lvs_stable-row = gc_true.
CALL METHOD go_alv_grid_bottom->refresh_table_display
EXPORTING
is_stable = lvs_stable
i_soft_refresh = gc_true
EXCEPTIONS
finished = 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.
ENDIF.
ENDMETHOD.
METHOD exit_command_0101.
CALL METHOD cl_gui_cfw=>dispatch.
CASE gv_okcode.
WHEN gc_exit OR gc_canc OR gc_back.
CALL METHOD go_container->free.
CALL METHOD cl_gui_cfw=>flush.
CLEAR go_container.
CLEAR go_alv_grid_top.
CLEAR go_alv_grid_bottom.
SET SCREEN 0.
LEAVE SCREEN.
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
METHOD set_status_0101 .
SET PF-STATUS '0101'.
SET TITLEBAR '0101'.
ENDMETHOD.
METHOD user_command_0101.
DATA: l_okcode LIKE sy-ucomm.
l_okcode = pcv_okcode.
CLEAR pcv_okcode.
CALL METHOD cl_gui_cfw=>dispatch.
CASE l_okcode.
WHEN gc_exit OR gc_back OR gc_canc.
CALL METHOD go_container->free.
CALL METHOD cl_gui_cfw=>flush.
CLEAR go_container.
CLEAR go_alv_grid_top.
CLEAR go_alv_grid_bottom.
SET SCREEN 0.
LEAVE SCREEN.
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
METHOD exclude_toolbar_icons.
DATA: lvs_excl_toolbar_icons TYPE ui_func.
CLEAR: pct_excl_toolbar_icons.
CASE p_type.
WHEN gc_update.
lvs_excl_toolbar_icons = cl_gui_alv_grid=>mc_fc_graph.
APPEND lvs_excl_toolbar_icons TO pct_excl_toolbar_icons.
lvs_excl_toolbar_icons = cl_gui_alv_grid=>mc_fc_info.
APPEND lvs_excl_toolbar_icons TO pct_excl_toolbar_icons.
WHEN gc_messages.
lvs_excl_toolbar_icons = cl_gui_alv_grid=>mc_fc_graph.
APPEND lvs_excl_toolbar_icons TO pct_excl_toolbar_icons.
lvs_excl_toolbar_icons = cl_gui_alv_grid=>mc_fc_info.
APPEND lvs_excl_toolbar_icons TO pct_excl_toolbar_icons.
ENDCASE.
ENDMETHOD.
METHOD prepare_layout.
CLEAR: pcs_layout.
IF p_type EQ gc_update.
pcs_layout-grid_title = text-t01.
pcs_layout-CWIDTH_OPT = abap_true.
pcs_layout-ZEBRA = abap_true.
pcs_layout-SMALLTITLE = abap_true.
ELSEIF p_type EQ gc_messages.
pcs_layout-grid_title = text-t02.
pcs_layout-CWIDTH_OPT = abap_true.
pcs_layout-ZEBRA = abap_true.
pcs_layout-SMALLTITLE = abap_true.
ENDIF.
ENDMETHOD.
*----------------------------------------------------------------------*
* Form prepare_layout_bg
*----------------------------------------------------------------------*
METHOD prepare_layout_bg.
CLEAR: pcs_layout.
IF p_type EQ gc_update.
pcs_layout-window_titlebar = text-t01.
ELSEIF p_type EQ gc_messages.
pcs_layout-window_titlebar = text-t02.
pcs_layout-list_append = 'X'. "Append new ALV list
ENDIF.
ENDMETHOD.
METHOD set_grid_list_0101.
DATA:
ls_fcat TYPE lvc_s_fcat,
ls_struc TYPE tabname.
IF p_type = gc_update.
ls_struc = gc_alv_struc.
ELSE.
ls_struc = gc_alv_msgs.
ENDIF.
* STEP 1: retrieve the fieldcatalog
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = ls_struc
CHANGING
ct_fieldcat = ct_list[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc EQ 0.
* STEP 2: modify the fieldcatalog for proper text labels .
LOOP AT ct_list INTO ls_fcat.
IF p_type = 'UPDATE'.
CASE ls_fcat-fieldname.
WHEN 'COMP'.
ls_fcat-reptext = 'Comp Code'.
WHEN 'BUDAT'.
ls_fcat-reptext = 'Post Date'.
WHEN 'KONGR'.
ls_fcat-reptext = 'Assign Reason'.
WHEN 'SITE'.
ls_fcat-reptext = 'Site'.
WHEN 'MAP'.
ls_fcat-reptext = 'MovAvgPrice'.
WHEN 'CURR'.
ls_fcat-reptext = 'Currency'.
WHEN 'PUNIT'.
ls_fcat-reptext = 'Price Unit'.
WHEN 'MSEHI'.
ls_fcat-reptext = 'UofM'.
WHEN 'ERROR_FLAG'.
ls_fcat-reptext = 'Err Flag'.
WHEN 'VALID_MSG'.
ls_fcat-reptext = 'Validate Message'.
WHEN 'UPDATE_MSG'.
ls_fcat-reptext = 'Update Message'.
WHEN OTHERS.
CONTINUE.
ENDCASE.
ELSE.
CASE ls_fcat-fieldname.
WHEN 'TYPE'.
ls_fcat-reptext = 'TYPE'.
WHEN 'ID'.
ls_fcat-reptext = 'MSG ID'.
WHEN 'NUMBER'.
ls_fcat-reptext = 'MSG No'.
WHEN 'MESSAGE'.
ls_fcat-reptext = 'Message Text'.
WHEN 'LOG_NO'.
ls_fcat-reptext = 'Log No'.
WHEN 'LOG_MSG_NO'.
ls_fcat-reptext = 'Log Msg No'.
WHEN 'MESSAGE_V1'.
ls_fcat-reptext = 'MSG Var 1'.
WHEN 'MESSAGE_V2'.
ls_fcat-reptext = 'MSG Var 2'.
WHEN 'MESSAGE_V3'.
ls_fcat-reptext = 'MSG Var 3'.
WHEN 'MESSAGE_V4'.
ls_fcat-reptext = 'MSG Var 4'.
WHEN OTHERS.
CONTINUE.
ENDCASE.
ENDIF.
ls_fcat-scrtext_l = ls_fcat-scrtext_m = ls_fcat-scrtext_s = ls_fcat-reptext.
MODIFY ct_list FROM ls_fcat TRANSPORTING reptext scrtext_l scrtext_m scrtext_s
WHERE fieldname = ls_fcat-fieldname.
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD set_grid_list_bg.
DATA:
ls_fcat TYPE slis_fieldcat_alv,
ls_struc TYPE tabname.
IF p_type = gc_update.
ls_struc = gc_alv_struc.
ELSE.
ls_struc = gc_alv_msgs.
ENDIF.
* STEP 1: retrieve the fieldcatalog
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = ls_struc
CHANGING
ct_fieldcat = ct_list[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc EQ 0.
* STEP 2: modify the fieldcatalog for proper text labels .
LOOP AT ct_list INTO ls_fcat.
IF p_type = 'UPDATE'.
CASE ls_fcat-fieldname.
WHEN 'COMP'.
ls_fcat-seltext_l = 'Comp Code'.
WHEN 'BUDAT'.
ls_fcat-seltext_l = 'Post Date'.
WHEN 'KONGR'.
ls_fcat-seltext_l = 'Assign Reason'.
WHEN 'SITE'.
ls_fcat-seltext_l = 'Site'.
WHEN 'MAP'.
ls_fcat-seltext_l = 'MovAvgPrice'.
WHEN 'CURR'.
ls_fcat-seltext_l = 'Currency'.
WHEN 'PUNIT'.
ls_fcat-seltext_l = 'Price Unit'.
WHEN 'MSEHI'.
ls_fcat-seltext_l = 'UofM'.
WHEN 'ERROR_FLAG'.
ls_fcat-seltext_l = 'Err Flag'.
WHEN 'VALID_MSG'.
ls_fcat-seltext_l = 'Validate Message'.
WHEN 'UPDATE_MSG'.
ls_fcat-seltext_l = 'Update Message'.
WHEN OTHERS.
CONTINUE.
ENDCASE.
ELSE.
CASE ls_fcat-fieldname.
WHEN 'TYPE'.
ls_fcat-seltext_l = 'TYPE'.
WHEN 'ID'.
ls_fcat-seltext_l = 'MSG ID'.
WHEN 'NUMBER'.
ls_fcat-seltext_l = 'MSG No'.
WHEN 'MESSAGE'.
ls_fcat-seltext_l = 'Message Text'.
WHEN 'LOG_NO'.
ls_fcat-seltext_l = 'Log No'.
ls_fcat-no_out = 'X'.
WHEN 'LOG_MSG_NO'.
ls_fcat-seltext_l = 'Log Msg No'.
ls_fcat-no_out = 'X'.
WHEN 'MESSAGE_V1'.
ls_fcat-seltext_l = 'MSG Var 1'.
ls_fcat-no_out = 'X'.
WHEN 'MESSAGE_V2'.
ls_fcat-seltext_l = 'MSG Var 2'.
ls_fcat-no_out = 'X'.
WHEN 'MESSAGE_V3'.
ls_fcat-seltext_l = 'MSG Var 3'.
ls_fcat-no_out = 'X'.
WHEN 'MESSAGE_V4'.
ls_fcat-seltext_l = 'MSG Var 4'.
ls_fcat-no_out = 'X'.
WHEN OTHERS.
CONTINUE.
ENDCASE.
ENDIF.
ls_fcat-seltext_s = ls_fcat-seltext_m = ls_fcat-seltext_l.
MODIFY ct_list FROM ls_fcat TRANSPORTING seltext_l seltext_m seltext_s no_out
WHERE fieldname = ls_fcat-fieldname.
ENDLOOP.
ENDIF.
ENDMETHOD.
ENDCLASS. "lcl_MAP_UPDATE IMPLEMENTATION
No comments:
Post a Comment