&---------------------------------------------------------------------* & Form SENT_MAIL &---------------------------------------------------------------------* & Mail Sent incase of errors &---------------------------------------------------------------------* FORM sent_mail. 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 lt_text TYPE bcsy_text, "Table for body lt_lines TYPE TABLE OF tline. CONSTANTS: lc_st TYPE thead-tdid VALUE 'ST', lc_en TYPE thead-tdspras VALUE 'EN', lc_name TYPE thead-tdname VALUE 'ZAHLPLANAENDERUNG', "<=change it lc_text TYPE thead-tdobject VALUE 'TEXT'. lo_send_request = cl_bcs=>create_persistent( ). "Read the email body template from SO10 text CALL FUNCTION 'READ_TEXT' EXPORTING id = lc_st language = lc_en name = lc_name object = lc_text TABLES lines = lt_lines EXCEPTIONS id = 1 language = 2 name = 3 not_found = 4 object = 5 reference_check = 6 wrong_access_to_archive = 7 OTHERS = 8. IF sy-subrc EQ 0. "Set email body LOOP AT lt_lines ASSIGNING FIELD-SYMBOL(<lfs_lines>). APPEND INITIAL LINE TO lt_text ASSIGNING FIELD-SYMBOL(<lfs_text>). <lfs_text>-line = <lfs_lines>-tdline. ENDLOOP. ENDIF. "create document lo_document = cl_document_bcs=>create_document( i_type = 'TXT' "Type of document - HTM, TXT etc i_text = lt_text "email body i_subject = TEXT-016 ). "email subject "Pass the document to send request lo_send_request->set_document( lo_document ). "Set sender to send request TRY. lo_sender = cl_sapuser_bcs=>create( sy-uname ). "sender is the logged in user lo_send_request->set_sender( EXPORTING i_sender = lo_sender ). CATCH cx_address_bcs INTO DATA(lv_address_bcs). ENDTRY. "Set recipient lo_recipient = cl_cam_address_bcs=>create_internet_address( 'test@deloitte.com' ). "Recipient email TRY. lo_send_request->add_recipient( EXPORTING i_recipient = lo_recipient i_express = abap_true ). CATCH cx_send_req_bcs INTO DATA(lo_send_req_bcs). ENDTRY. "Send email TRY. CALL METHOD lo_send_request->set_send_immediately EXPORTING i_send_immediately = abap_true. lo_send_request->send( EXPORTING i_with_error_screen = abap_true ). COMMIT WORK. IF sy-subrc = 0. "mail sent successfully WRITE :/ 'Mail sent successfully'. ENDIF. CATCH cx_send_req_bcs INTO lo_send_req_bcs. ENDTRY. ENDFORM.
Wednesday, 9 October 2019
Send Mail
Tuesday, 8 October 2019
File listing in AL11
Using this FM ensures to return only the filename. It will not return any directory name.
CALL FUNCTION 'EPS2_GET_DIRECTORY_LISTING' EXPORTING iv_dir_name = CONV eps2filnam( me->gv_filepath ) TABLES dir_list = lt_dir_list EXCEPTIONS invalid_eps_subdir = 1 sapgparam_failed = 2 build_directory_failed = 3 no_authorization = 4 read_directory_failed = 5 too_many_read_errors = 6 empty_directory_list = 7 OTHERS = 8. IF sy-subrc <> 0 OR lt_dir_list IS INITIAL. MESSAGE TEXT-029 TYPE gc_e . ENDIF.
Change Pointer Activation
Activate the change pointer in the system by going to BD61
Go to WE81 and create a new Message type: ZMATMAS_AMPL:
Goto BD52 and maintain the fields for which the change pointer should get triggered
Now, whenever there will be any changes in those particular fields, changes will get saved in table BDCP2. You can also check CDPOS and CDHDR to get the old value and new value.Use table TBD62 to get the Object ID for the change pointer
Go to WE81 and create a new Message type: ZMATMAS_AMPL:
Now, whenever there will be any changes in those particular fields, changes will get saved in table BDCP2. You can also check CDPOS and CDHDR to get the old value and new value.Use table TBD62 to get the Object ID for the change pointer
Monday, 6 May 2019
JSON to Internal Tables & vice-versa
DATA: lt_flight TYPE STANDARD TABLE OF sflight, lrf_descr TYPE REF TO cl_abap_typedescr, lv_json TYPE string. SELECT * FROM sflight INTO TABLE lt_flight. * serialize table lt_flight into JSON, skipping initial fields and * converting ABAP field names into camelCase lv_json = /ui2/cl_json=>serialize( data = lt_flight compress = abap_true pretty_name = /ui2/cl_json=>pretty_mode-camel_case ). WRITE / lv_json. * LV_JSON will have the coverted records to JSON CLEAR lt_flight. * deserialize JSON string json into internal table * lt_flight doing camelCase to ABAP like field name mapping /ui2/cl_json=>deserialize( EXPORTING json = lv_json pretty_name = /ui2/cl_json=>pretty_mode-camel_case CHANGING data = lt_flight ). * LT_FLIGHT[] will have the coverted records from JSON
Wednesday, 10 April 2019
AL11: Move file from one path to another
*&---------------------------------------------------------------------*
*& Form MOVE_FILE
*&---------------------------------------------------------------------*
*& Archiving the file
*&---------------------------------------------------------------------*
FORM move_file USING pv_s_filepath TYPE string
pv_t_filepath TYPE string.
DATA: lv_eof_reached TYPE flag,
lv_buffer(20480),
lv_buflen TYPE i.
"open source and target files and start copying
OPEN DATASET pv_s_filepath FOR INPUT IN BINARY MODE.
IF sy-subrc NE 0.
"Add error handling
ENDIF.
OPEN DATASET pv_t_filepath FOR OUTPUT IN BINARY MODE.
IF sy-subrc NE 0.
"Add error handling
ENDIF.
CLEAR lv_eof_reached.
DO.
CLEAR lv_buffer.
READ DATASET pv_s_filepath
INTO lv_buffer LENGTH lv_buflen.
IF sy-subrc = 4.
lv_eof_reached = abap_true.
ELSEIF sy-subrc > 4.
"Add error handling
ENDIF.
TRANSFER lv_buffer TO pv_t_filepath
LENGTH lv_buflen.
IF sy-subrc NE 0.
"Add error handling
ENDIF.
IF lv_eof_reached = abap_true.
EXIT.
ENDIF.
ENDDO.
"Delete the source file
DELETE DATASET pv_s_filepath.
"Close the connection
CLOSE DATASET pv_s_filepath.
CLOSE DATASET pv_t_filepath.
IF sy-subrc <> 0.
"Add error handling
ENDIF.
ENDFORM. "MOVE_FILE
Monday, 18 March 2019
Editable ALV with F4 Help on cell
Report: Z_R_ALV
REPORT z_r_alv. CLASS gcl_event_handler DEFINITION DEFERRED. "Data Declaration INCLUDE z_r_alv_top. "Class Declaration INCLUDE z_r_alv_cl. "Screen Module Declaration INCLUDE z_r_alv_mod. "Subroutines Declaraion INCLUDE z_r_alv_sub. START-OF-SELECTION. CALL SCREEN 1100.
Include: Z_R_ALV_TOP
*&---------------------------------------------------------------------* *& Include Z_R_ALV_TOP *&---------------------------------------------------------------------* TYPES: BEGIN OF gty_extract, call_req_id TYPE zzcall_req_id, object TYPE zzobjname, serviceid TYPE zzcall_sys_id, servicekey TYPE zzcall_sys_key, batch_size TYPE zzbsize, compression TYPE zzkdpcompress, mdata TYPE zzkdpchar1, format TYPE zzkdpformat, projections TYPE string, selections TYPE string, numb_of_lines TYPE zzkdpnolines, from_date TYPE zztimestamp, to_date TYPE zztimestamp, extract_mode TYPE zzkdpchar1, execution_mode TYPE zzkdpchar1, response_mode TYPE zzkdpchar1, celltab TYPE lvc_t_styl, END OF gty_extract, gtt_extract TYPE STANDARD TABLE OF gty_extract, gtt_t_f4 TYPE STANDARD TABLE OF lvc_s_f4. DATA: gt_extract TYPE STANDARD TABLE OF gty_extract, go_container TYPE scrfname VALUE 'CONT1', go_grid1 TYPE REF TO cl_gui_alv_grid, go_custom_container TYPE REF TO cl_gui_docking_container, gs_layout TYPE lvc_s_layo, gv_max TYPE i VALUE 100.Include: Z_R_ALV_CL*&---------------------------------------------------------------------* *& Include Z_R_ALV_CL *&---------------------------------------------------------------------* ************************************************************************************************* *LOCAL CLASS DEFINITION ************************************************************************************************* *Class definition to handle the ONF4 event CLASS gcl_event_handler DEFINITION. PUBLIC SECTION. METHODS: on_f4 FOR EVENT onf4 OF cl_gui_alv_grid IMPORTING sender e_fieldname e_fieldvalue es_row_no er_event_data et_bad_cells e_display. ENDCLASS. "lcl_event_handler DEFINITION ************************************************************************************************* *LOCAL CLASS IMPLEMENTATION ************************************************************************************************* *Class implementation to handle the ONF4 event CLASS gcl_event_handler IMPLEMENTATION. METHOD on_f4. TYPES: BEGIN OF lty_exe_mode, mode TYPE zzkdpchar1, END OF lty_exe_mode. DATA: lt_data TYPE STANDARD TABLE OF lty_exe_mode, lt_ret TYPE STANDARD TABLE OF ddshretval, ls_data LIKE LINE OF lt_data, ls_sel LIKE LINE OF lt_ret, ls_modi TYPE lvc_s_modi, ls_stable TYPE lvc_s_stbl. FIELD-SYMBOLS: <lfs_extract> TYPE gty_extract. CASE e_fieldname. WHEN 'EXECUTION_MODE'. "Add the custom F4 values; here we are adding 2 values 'Uncertain' and 'Relevant' for the field STATE IF lt_data[] IS INITIAL. ls_data-mode = 'B'. APPEND ls_data TO lt_data. CLEAR ls_data. ls_data-mode = 'R'. APPEND ls_data TO lt_data. ENDIF. "Call the function module to display the custom F4 values CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'MODE' window_title = 'Execution Mode' value_org = 'S' TABLES value_tab = lt_data[] return_tab = lt_ret[] EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc = 0. READ TABLE lt_ret INTO ls_sel INDEX 1. IF sy-subrc EQ 0. READ TABLE gt_extract INDEX es_row_no-row_id ASSIGNING <lfs_extract>. IF sy-subrc EQ 0. <lfs_extract>-execution_mode = ls_sel-fieldval. IF go_grid1 IS BOUND. ls_stable-row = abap_true. ls_stable-col = abap_true. CALL METHOD go_grid1->refresh_table_display EXPORTING is_stable = ls_stable EXCEPTIONS finished = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. WHEN 'PROJECTIONS'. "Write the code for the other columns WHEN OTHERS. ENDCASE. er_event_data->m_event_handled = abap_true. "(to inform grid that f4 was handled manually) ENDMETHOD. ENDCLASS. "lcl_event_handler IMPLEMENTATIONInclude: Z_R_ALV_MOD*&---------------------------------------------------------------------* *& Include Z_R_ALV_MOD *&---------------------------------------------------------------------* *---------------------------------------------------------------------* * MODULE PBO OUTPUT * *---------------------------------------------------------------------* MODULE status_1100 OUTPUT. SET PF-STATUS 'PF_STATUS'. "Preapre the ALV PERFORM prepare_alv. ENDMODULE. "pbo OUTPUT *---------------------------------------------------------------------* * MODULE PAI INPUT * *---------------------------------------------------------------------* MODULE user_command_1100 INPUT. * save_ok = ok_code. * CLEAR ok_code. CASE sy-ucomm. WHEN '&EXE'. CALL METHOD go_grid1->check_changed_data. WHEN OTHERS. ENDCASE. ENDMODULE. "pai INPUTInclude: Z_R_ALV_SUB*&---------------------------------------------------------------------* *& Include Z_R_ALV_SUB *&---------------------------------------------------------------------* *---------------------------------------------------------------------* * PREPARE_ALV * *---------------------------------------------------------------------* FORM prepare_alv. DATA: lt_fieldcatalog TYPE lvc_t_fcat, lt_f4 TYPE lvc_t_f4, lt_f4_tmp TYPE gtt_t_f4, lo_event_obj TYPE REF TO gcl_event_handler. IF go_custom_container IS INITIAL. CREATE OBJECT go_custom_container EXPORTING repid = sy-repid dynnr = '1100' ratio = '90' 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_grid1 EXPORTING i_parent = go_custom_container. "Build Field Catalog PERFORM populate_fcat USING '1' 'CALL_REQ_ID' 'Call Req ID' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '2' 'OBJECT' 'Object' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '3' 'SERVICEID' 'Service ID' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '4' 'SERVICEKEY' 'Service Key' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '5' 'BATCH_SIZE' 'Batch Size' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '6' 'COMPRESSION' 'Compression' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '7' 'MDATA' 'MDATA' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '8' 'FORMAT' 'Format' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '9' 'PROJECTIONS' 'Projection' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '10' 'SELECTIONS' 'Selection' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '11' 'NUMB_OF_LINES' 'Number of lines' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '12' 'FROM_DATE' 'From Date' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '13' 'TO_DATE' 'To Date' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '14' 'EXTRACT_MODE' 'Extract Mode' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '15' 'EXECUTION_MODE' 'Execution Mode' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '16' 'RESPONSE_MODE' 'Response Mode' CHANGING lt_fieldcatalog. "Prepare F4 help PERFORM prepare_f4 USING 'PROJECTIONS' CHANGING lt_f4_tmp. PERFORM prepare_f4 USING 'EXECUTION_MODE' CHANGING lt_f4_tmp. "Register for F4 lt_f4[] = lt_f4_tmp[]. CREATE OBJECT lo_event_obj. SET HANDLER lo_event_obj->on_f4 FOR go_grid1. CALL METHOD go_grid1->register_f4_for_fields EXPORTING it_f4 = lt_f4. "enable for input PERFORM enable_input_cell CHANGING gt_extract. "add new entry PERFORM add_new_entry CHANGING gt_extract. PERFORM add_new_entry CHANGING gt_extract. CALL METHOD go_grid1->set_table_for_first_display EXPORTING i_structure_name = 'GTY_EXTRACT' is_layout = gs_layout CHANGING it_fieldcatalog = lt_fieldcatalog it_outtab = gt_extract[]. ENDIF. ENDFORM. *---------------------------------------------------------------------* * PREPARE_F4 * *---------------------------------------------------------------------* FORM prepare_f4 USING pv_fieldname TYPE lvc_fname CHANGING ct_f4 TYPE gtt_t_f4. DATA: ls_f4 LIKE LINE OF ct_f4. ls_f4-fieldname = pv_fieldname. ls_f4-register = abap_true. ls_f4-getbefore = space. ls_f4-chngeafter = space. APPEND ls_f4 TO ct_f4. ENDFORM. *---------------------------------------------------------------------* * ADD_NEW_ENTRY * *---------------------------------------------------------------------* FORM add_new_entry CHANGING ct_extract TYPE gtt_extract. FIELD-SYMBOLS: <lfs_extract> LIKE LINE OF ct_extract. APPEND INITIAL LINE TO gt_extract ASSIGNING <lfs_extract>. <lfs_extract>-serviceid = '1001'. <lfs_extract>-batch_size = '2000'. <lfs_extract>-compression = 'GZIP'. <lfs_extract>-format = 'JSON'. <lfs_extract>-extract_mode = 'F'. <lfs_extract>-execution_mode = 'B'. <lfs_extract>-response_mode = 'H'. ENDFORM. *---------------------------------------------------------------------* * ENABLE_INPUT_CELL * *---------------------------------------------------------------------* FORM enable_input_cell CHANGING ct_extract TYPE gtt_extract. DATA: lt_celltab TYPE lvc_t_styl, l_mode TYPE raw4, lv_index TYPE i. FIELD-SYMBOLS: <lfs_extract> LIKE LINE OF ct_extract, <lfs_celltab> LIKE LINE OF lt_celltab. l_mode = cl_gui_alv_grid=>mc_style_enabled. LOOP AT ct_extract ASSIGNING <lfs_extract>. lv_index = sy-tabix. CLEAR: lt_celltab[]. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'CALL_REQ_ID'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'OBJECT'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'SERVICEID'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'SERVICEKEY'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'BATCH_SIZE'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'COMPRESSION'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'MDATA'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'FORMAT'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'PROJECTIONS'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'SELECTIONS'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'NUMB_OF_LINES'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'FROM_DATE'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'TO_DATE'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'EXTRACT_MODE'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'EXECUTION_MODE'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'RESPONSE_MODE'. <lfs_celltab>-style = l_mode. <lfs_extract>-celltab[] = lt_celltab[]. CLEAR: lt_celltab[]. ENDLOOP. "set edit enabled cells ready for input CALL METHOD go_grid1->set_ready_for_input EXPORTING i_ready_for_input = 1. ENDFORM. *---------------------------------------------------------------------* * FORM EXIT_PROGRAM * *---------------------------------------------------------------------* FORM exit_program. LEAVE PROGRAM. ENDFORM. "exit_program *---------------------------------------------------------------------* * FORM POPULATE_FCAT * *---------------------------------------------------------------------* FORM populate_fcat USING pv_col_pos TYPE lvc_colpos pv_fieldname TYPE lvc_fname pv_scrtext_m TYPE scrtext_m CHANGING ct_fcat TYPE lvc_t_fcat. FIELD-SYMBOLS: <lfs_fieldcatalog> LIKE LINE OF ct_fcat. APPEND INITIAL LINE TO ct_fcat ASSIGNING <lfs_fieldcatalog>. <lfs_fieldcatalog>-col_pos = pv_col_pos. <lfs_fieldcatalog>-edit = abap_true. <lfs_fieldcatalog>-fieldname = pv_fieldname. <lfs_fieldcatalog>-scrtext_m = pv_scrtext_m. IF pv_fieldname = 'EXECUTION_MODE' OR pv_fieldname = 'PROJECTIONS'. <lfs_fieldcatalog>-f4availabl = abap_true. ENDIF. ENDFORM. "populate_fcat
Tuesday, 26 February 2019
Excel Sheet Creation from ABAP
TYPE-POOLS ole2. DATA: wf_cell_from TYPE ole2_object, wf_cell_from1 TYPE ole2_object, wf_cell_to TYPE ole2_object, wf_cell_to1 TYPE ole2_object, wf_excel TYPE ole2_object, " Excel object wf_mapl TYPE ole2_object, " list of workbooks wf_map TYPE ole2_object, " workbook wf_worksheet TYPE ole2_object, " Worksheet wf_cell TYPE ole2_object, " Cell Range wf_cell1 TYPE ole2_object, wf_range TYPE ole2_object, " Range of cells to be formatted wf_range2 TYPE ole2_object, wf_column1 TYPE ole2_object. " Column to be Autofit DATA: BEGIN OF t_hex, l_tab TYPE x, END OF t_hex. DATA: wf_deli(1) TYPE c, "delimiter wf_action TYPE i, wf_file TYPE string, wf_path TYPE string, wf_fullpath TYPE string. TYPES: t_data1(1500) TYPE c, int_ty TYPE TABLE OF t_data1. "line type internal table *All the data was prepared as line type internal tables for faster *download DATA: int_matl TYPE int_ty , int_matl1 TYPE int_ty , wa_matl TYPE t_data1. TYPES: BEGIN OF ty_mara, matnr TYPE matnr, mtart TYPE mtart, matkl TYPE matkl, meins TYPE meins, END OF ty_mara. DATA: int_mara TYPE STANDARD TABLE OF ty_mara, wa_mara TYPE ty_mara. FIELD-SYMBOLS: <fs> . DATA: wc_sheets LIKE sy-index. "no.of sheets DATA: it_tabemp TYPE filetable, gd_subrcemp TYPE i. CONSTANTS wl_c09(2) TYPE n VALUE 09. CLEAR wc_sheets. DEFINE ole_check_error. if &1 ne 0. message e001(zz) with &1. exit. endif. END-OF-DEFINITION. SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001. PARAMETERS: p_file LIKE rlgrap-filename. SELECTION-SCREEN END OF BLOCK block1. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. REFRESH: it_tabemp. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = 'Select File' * default_extension = 'xls' default_file_name = 'Material Details' * with_encoding = file_filter = '*.xls' initial_directory = 'C:\' prompt_on_overwrite = ' ' CHANGING filename = wf_file path = wf_path fullpath = wf_fullpath user_action = wf_action * file_encoding = EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 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. IF wf_action EQ 9. MESSAGE 'No File have been Selected' TYPE 'S'. ELSE. p_file = wf_fullpath. PERFORM create_excel. ENDIF. *&---------------------------------------------------------------------* *& Form create_excel *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM create_excel. LOOP AT it_tabemp INTO p_file. ENDLOOP. * START THE EXCEL APPLICATION CREATE OBJECT wf_excel 'EXCEL.APPLICATION'. PERFORM err_hdl. * PUT EXCEL IN FRONT SET PROPERTY OF wf_excel 'VISIBLE' = 1. PERFORM err_hdl. * CREATE AN EXCEL WORKBOOK OBJECT CALL METHOD OF wf_excel 'WORKBOOKS' = wf_mapl. PERFORM err_hdl. SET PROPERTY OF wf_excel 'SheetsInNewWorkbook' = 3. "no of sheets PERFORM err_hdl. CALL METHOD OF wf_mapl 'ADD' = wf_map. PERFORM err_hdl. *Assign the Delimiter to field symbol. ASSIGN wf_deli TO <fs> TYPE 'X'. t_hex-l_tab = wl_c09. <fs> = t_hex-l_tab. CLEAR int_matl. REFRESH int_matl. SELECT matnr mtart matkl meins FROM mara INTO CORRESPONDING FIELDS OF TABLE int_mara. *first the headings will be displayed in the excel sheet CONCATENATE 'Material Number' 'Material type' 'Material Group' 'Base Unit of Measure' INTO wa_matl SEPARATED BY wf_deli. APPEND wa_matl TO int_matl. LOOP AT int_mara INTO wa_mara. CONCATENATE wa_mara-matnr wa_mara-mtart wa_mara-matkl wa_mara-meins INTO wa_matl SEPARATED BY wf_deli. APPEND wa_matl TO int_matl. CLEAR wa_matl. ENDLOOP. *Copyng thae same contents to another table to display in *new sheet MOVE int_matl TO int_matl1. PERFORM f_material_details TABLES int_matl USING 1. PERFORM f_material_details TABLES int_matl USING 2. GET PROPERTY OF wf_excel 'ActiveSheet' = wf_map. GET PROPERTY OF wf_excel 'ActiveWorkbook' = wf_mapl. CALL FUNCTION 'FLUSH' EXCEPTIONS cntl_system_error = 1 cntl_error = 2 OTHERS = 3. IF sy-subrc = 0. CALL METHOD OF wf_map 'SAVEAS' EXPORTING #1 = p_file. ENDIF. CALL METHOD OF wf_mapl 'CLOSE'. CALL METHOD OF wf_excel 'QUIT'. FREE OBJECT wf_mapl. FREE OBJECT wf_map. FREE OBJECT wf_excel. ENDFORM. "create_excel *&---------------------------------------------------------------------* *& Form ERR_HDL *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM err_hdl. IF sy-subrc <> 0. WRITE: / 'OLE ERROR: RETURN CODE ='(i10), sy-subrc. STOP. ENDIF. ENDFORM. "ERR_HDL *-- End of Program *&---------------------------------------------------------------------* *& Form f_material_details *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM f_material_details TABLES lint_matl USING l_sheet_no TYPE i. DATA: lv_lines TYPE i, lv_sheet_name(50) TYPE c. wc_sheets = l_sheet_no. CASE l_sheet_no. WHEN 1. lv_sheet_name = 'Material_sheet1'. WHEN 2. lv_sheet_name = 'Material_sheet2'. ENDCASE. *-- activating the worksheet and giving a name to it CALL METHOD OF wf_excel 'WORKSHEETS' = wf_worksheet EXPORTING #1 = wc_sheets. CALL METHOD OF wf_worksheet 'ACTIVATE'. SET PROPERTY OF wf_worksheet 'NAME' = lv_sheet_name. *--formatting the cells CALL METHOD OF wf_excel 'Cells' = wf_cell_from EXPORTING #1 = 1 #2 = 1. DESCRIBE TABLE lint_matl LINES lv_lines. CALL METHOD OF wf_excel 'Cells' = wf_cell_to EXPORTING #1 = lv_lines #2 = 4. *--range of cells to be formatted (in this case 1 to 4) CALL METHOD OF wf_excel 'Range' = wf_cell EXPORTING #1 = wf_cell_from #2 = wf_cell_to. *--formatting the cells CALL METHOD OF wf_excel 'Cells' = wf_cell_from1 EXPORTING #1 = 1 #2 = 1. DESCRIBE TABLE lint_matl LINES lv_lines. CALL METHOD OF wf_excel 'Cells' = wf_cell_to1 EXPORTING #1 = lv_lines #2 = 1. CALL METHOD OF wf_excel 'Range' = wf_cell1 " Cell range for first " column(Material) EXPORTING #1 = wf_cell_from1 #2 = wf_cell_to1. SET PROPERTY OF wf_cell1 'NumberFormat' = '@' . "To disply zeros "in Material number DATA l_rc TYPE i. *DATA download into excel first sheet CALL METHOD cl_gui_frontend_services=>clipboard_export IMPORTING data = lint_matl[] CHANGING rc = l_rc EXCEPTIONS cntl_error = 1 error_no_gui = 2 OTHERS = 4. CALL METHOD OF wf_worksheet 'Paste'. CALL METHOD OF wf_excel 'Columns' = wf_column1. CALL METHOD OF wf_column1 'Autofit'. FREE OBJECT wf_column1. ENDFORM. " f_material_details
Reference link:
https://archive.sap.com/discussions/thread/1260102
https://blogs.sap.com/2012/03/29/using-ole2-objects-for-create-an-excel-file/
Subscribe to:
Posts (Atom)
Report to find CDS view of Standard Table
A small change has been made to the original program ( SAP YARD Article ) so that it can also display the common CDS used by multiple table...
-
Note: In many places I haven't removed the hard coding. Please remove it while coding. In some places I have used ABAP 7.4 syntax just ...
-
Following are the steps for implementing ATC into the system during Task Release. 1. Goto transaction 'SCI' and create a variant ...
-
Step 1: Goto Transaction: SE41 Step 2: Click on Status or press CTRL+F6 Step 3: Fill up the dialog box as below: Frm Program: SAPLSALV...



