Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Long Text (4096 characters) Upload for TCode AC01 Service Master/ Activity Number
2. Steps.
I. Create a Custom FM to read Long Text from input.XLS file and stores in o/p table (line size as Character 50)
DATA:
lt_excel_tab TYPE STANDARD TABLE OF ty_s_senderline ,
application TYPE ole2_object ,
workbook TYPE ole2_object ,
range TYPE ole2_object ,
worksheet TYPE ole2_object ,
h_cell TYPE ole2_object ,
h_cell1 TYPE ole2_object ,
ld_rc TYPE i , " Return value of the method "clipboard_e
xport"
wa_et_excel_tab TYPE zst_char50 ,
lv_offset TYPE int4 .
CALL METHOD OF
application
'Workbooks' = workbook.
m_message.
CALL METHOD OF
workbook
'Open'
EXPORTING
#1 = filename.
m_message.
CALL METHOD OF
worksheet
'Cells' = h_cell1
EXPORTING
#1 = i_end_row
#2 = i_end_col.
m_message.
CALL METHOD OF
worksheet
'RANGE' = range
EXPORTING
#1 = h_cell
#2 = h_cell1.
m_message.
CALL METHOD OF
range
'SELECT'.
m_message.
*& Extract Data from Internal Table to FM o/p Table (50 characters per line in i
nternal table;
*& Entire 4096 characters of Long Text, occupies 82 Lines (81*50 + 1*46)
LOOP AT lt_excel_tab ASSIGNING <fs_excel_tab>.
DO 82 TIMES.
IF sy-index = 82 .
wa_et_excel_tab-line_50 = <fs_excel_tab>-line+lv_offset(46).
ELSE.
wa_et_excel_tab-line_50 = <fs_excel_tab>-line+lv_offset(50).
ENDIF.
CLEAR lv_offset.
ENDLOOP.
*& Quit Excel and free ABAP Object - unfortunately, this does not kill the Excel
process
CALL METHOD OF
application
'QUIT'.
m_message.
*& To kill the Excel process it's necessary to free all used objects - Refer SAP
note 575877
FREE OBJECT h_cell.
m_message.
TYPES:
BEGIN OF ty_fin,
asnum TYPE asmd-asnum , " service number
asktx TYPE asmdt-asktx , " service short text
astyp TYPE asmd-astyp , " service category
meins TYPE asmd-meins , " base unit of measurement
matkl TYPE asmd-matkl , " material group
spart TYPE asmd-spart , " division
bklas TYPE asmd-bklas , " valuation class
taxtariffcode TYPE asmd-taxtariffcode , " Tax Tariff Code
lngtxt(4096),
END OF ty_fin,
BEGIN OF ty_service,
asktx TYPE asmdt-asktx , " service short text
astyp TYPE asmd-astyp , " service category
meins TYPE asmd-meins , " base unit of measurement
matkl TYPE asmd-matkl , " material group
spart TYPE asmd-spart , " division
bklas TYPE asmd-bklas , " valuation class
taxtariffcode TYPE asmd-taxtariffcode , " Tax Tariff Code
lngtxt(4096),
END OF ty_service,
BEGIN OF ty_service2,
sno TYPE i ,
asktx TYPE asmdt-asktx , " service short text
astyp TYPE asmd-astyp , " service category
meins TYPE asmd-meins , " base unit of measurement
matkl TYPE asmd-matkl , " material group
spart TYPE asmd-spart , " division
bklas TYPE asmd-bklas , " valuation class
taxtariffcode TYPE asmd-taxtariffcode , " Tax Tariff Code
lngtxt(4096) ,
END OF ty_service2 ,
BEGIN OF ty_err ,
sno(20) ,
text1(4096) ,
END OF ty_err .
DATA:
gr_salv TYPE REF TO cl_salv_table , " ALV Reference
gt_fin TYPE STANDARD TABLE OF ty_fin ,
lt_service TYPE STANDARD TABLE OF ty_service ,
lt_service2 TYPE STANDARD TABLE OF ty_service2 ,
wa_service2 TYPE ty_service2 ,
lt_err TYPE STANDARD TABLE OF ty_err ,
wa_err TYPE ty_err ,
wa_fin TYPE ty_fin ,
sno TYPE i ,
i_var TYPE i ,
wf_meins TYPE asmd-meins ,
mask(64) VALUE
'Tab Delimited Text Files(*.txt)|*.txt|,All Files(*.*)|*.*|',
FIELD-SYMBOLS:
<fs_service> TYPE ty_service ,
<fs_service2> TYPE ty_service2 .
********************************************************************
*& SELECTION-SCREEN
********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN:
BEGIN OF LINE ,
COMMENT 1(79) text-100 ,
END OF LINE .
PARAMETERS
p_fname TYPE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN:
BEGIN OF LINE ,
COMMENT 1(79) text-100 ,
END OF LINE ,
BEGIN OF LINE ,
COMMENT 1(79) text-002 ,
END OF LINE ,
BEGIN OF LINE ,
COMMENT 7(79) text-003 ,
END OF LINE ,
BEGIN OF LINE ,
COMMENT 1(79) text-100 ,
END OF LINE ,
BEGIN OF LINE ,
COMMENT 11(79) text-004 ,
END OF LINE ,
BEGIN OF LINE ,
COMMENT 11(79) text-005 ,
END OF LINE ,
BEGIN OF LINE ,
COMMENT 11(79) text-006 ,
END OF LINE ,
BEGIN OF LINE ,
COMMENT 11(79) text-007 ,
END OF LINE ,
BEGIN OF LINE ,
COMMENT 11(79) text-008 ,
END OF LINE ,
BEGIN OF LINE ,
COMMENT 11(79) text-009 ,
END OF LINE ,
BEGIN OF LINE ,
COMMENT 11(79) text-011 ,
END OF LINE ,
BEGIN OF LINE ,
COMMENT 11(79) text-010 ,
END OF LINE .
SELECTION-SCREEN END OF BLOCK b1.
************************************************************************
*& AT SELECTION-SCREEN FOR F4 VALUE
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname. "GUI_UPLOAD
PERFORM
f_get_f4_filename USING mask CHANGING p_fname.
CLEAR wf_fname.
wf_fname = p_fname.
TRANSLATE wf_fname TO UPPER CASE.
p_fname = wf_fname.
**********************************************************************
*& START-OF-SELECTION
**********************************************************************
START-OF-SELECTION.
PERFORM
f_get_upload_data.
**********************************************************************
*& END-OF-SELECTION
**********************************************************************
END-OF-SELECTION.
CLEAR i_var.
i_var = lines( lt_err ).
*&---------------------------------------------------------------------*
*& Form F_GET_F4_FILENAME
*&---------------------------------------------------------------------*
FORM f_get_f4_filename USING mask CHANGING p_file.
*&---------------------------------------------------------------------*
*& Form F_GET_UPLOAD_DATA
*&---------------------------------------------------------------------*
FORM f_get_upload_data .
ug_meins = <fs_service>-meins.
TRANSLATE ug_meins TO UPPER CASE.
<fs_service>-meins = ug_meins.
ug_matkl = <fs_service>-matkl.
TRANSLATE ug_matkl TO UPPER CASE.
<fs_service>-matkl = ug_matkl.
CLEAR: ug_astyp,ug_meins,ug_matkl.
ENDLOOP.
CLEAR lt_service2[].
LOOP AT lt_service ASSIGNING <fs_service>.
wa_service2-asktx = <fs_service>-asktx .
wa_service2-astyp = <fs_service>-astyp .
wa_service2-meins = <fs_service>-meins .
wa_service2-matkl = <fs_service>-matkl .
wa_service2-spart = <fs_service>-spart .
wa_service2-bklas = <fs_service>-bklas .
wa_service2-taxtariffcode = <fs_service>-taxtariffcode .
wa_service2-lngtxt = <fs_service>-lngtxt .
**& Remove all records where 'SERVICE SHORT TEXT' is not maintained
* DELETE i_service2 WHERE asktx EQ space.
wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'TAX Tarrief Code'.
wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'Valuation Class Error.'.
*&---------------------------------------------------------------------*
*& Form F_SET_DATA_UPDATE
*&---------------------------------------------------------------------*
FORM f_set_data_update .
DATA:
lv_row TYPE int4,
et_excel_tab TYPE STANDARD TABLE OF zst_char50.
CLEAR et_excel_tab[].
CALL FUNCTION 'ZALSM_EXCEL_TO_IT'
EXPORTING
filename = p_fname
i_begin_col = '8'
i_begin_row = '2'
i_end_col = '8'
i_end_row = lv_row
TABLES
et_excel_tab = et_excel_tab
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
DATA:
lv_string(4096) TYPE c , " string.
lv_tabix TYPE sy-tabix ,
lv_mod TYPE int4 ,
lv_div TYPE int4 .
CLEAR gt_fin[].
LOOP AT et_excel_tab ASSIGNING <fs_excel_tab>.
CLEAR lv_tabix.
lv_tabix = sy-tabix.
CLEAR lv_mod.
lv_mod = lv_tabix MOD 82.
IF lv_mod IS INITIAL.
CLEAR lv_div.
lv_div = lv_tabix DIV 82.
CLEAR:
wa_service_data ,
wa_service_datax ,
wa_service ,
wa_ex_service_data ,
wa_ex_service_datax ,
lt_return[] ,
wa_return ,
lt_srv_desc[] ,
wa_srv_desc ,
lt_srv_long_texts[] ,
wa_srv_long_texts .
wa_service_data-matl_group = <fs_service>-matkl.
wa_service_data-base_uom = <fs_service>-meins.
wa_service_data-serv_cat = <fs_service>-astyp.
wa_service_data-division = <fs_service>-spart.
wa_service_data-val_class = <fs_service>-bklas.
wa_service_datax-matl_group = abap_true.
wa_service_datax-base_uom = abap_true.
wa_service_datax-serv_cat = abap_true.
wa_service_datax-division = abap_true.
wa_service_datax-val_class = abap_true.
wa_srv_desc-change_id = 'I'.
wa_srv_desc-language = 'E'.
wa_srv_desc-language_iso = 'EN'.
wa_srv_desc-short_text = <fs_service>-asktx.
DO 32 TIMES.
IF sy-index = 1 .
wa_srv_long_texts-format = '*'.
ENDIF.
wa_srv_long_texts-language = 'E'.
wa_srv_long_texts-language_iso = 'EN'.
* wa_srv_long_texts-format = .
wa_srv_long_texts-change_id = 'I'.
IF sy-index = 32 .
wa_srv_long_texts-line = lv_string+lv_offset(4).
ELSE.
wa_srv_long_texts-line = lv_string+lv_offset(132).
ENDIF.
CLEAR lv_offset.
wa_fin-asnum = lv_asnum.
wa_fin-asktx = <fs_service>-asktx.
wa_fin-astyp = <fs_service>-astyp.
wa_fin-meins = <fs_service>-meins.
wa_fin-matkl = <fs_service>-matkl.
wa_fin-spart = <fs_service>-spart.
wa_fin-bklas = <fs_service>-bklas.
wa_fin-taxtariffcode = <fs_service>-taxtariffcode.
wa_fin-lngtxt = <fs_service>-lngtxt.
CLEAR wa_asmd.
SELECT SINGLE *
FROM asmd
INTO wa_asmd
WHERE asnum EQ lv_asnum.
IF sy-subrc IS INITIAL.
wa_asmd-taxtariffcode = <fs_service>-taxtariffcode.
wa_fin-asnum = lv_asnum.
CLEAR: lv_string,wa_asmd,wa_fin.
ENDIF.
ENDLOOP.
ENDFORM. "F_SET_DATA_UPDATE
*&---------------------------------------------------------------------*
*& Form f_set_display_alv
*&---------------------------------------------------------------------*
FORM f_set_display_alv .
DATA:
lc_msg TYPE REF TO cx_salv_msg ,
lr_salv_dsp_set TYPE REF TO cl_salv_display_settings ,
lr_functions TYPE REF TO cl_salv_functions_list ,
lr_header TYPE REF TO cl_salv_form_layout_grid ,
lr_h_label TYPE REF TO cl_salv_form_label ,
lr_h_flow TYPE REF TO cl_salv_form_layout_flow ,
lr_footer TYPE REF TO cl_salv_form_layout_grid ,
lr_f_label TYPE REF TO cl_salv_form_label ,
lr_f_flow TYPE REF TO cl_salv_form_layout_flow ,
lr_cols TYPE REF TO cl_salv_columns_table .
CREATE OBJECT:
*& Header object
lr_header,
*& Footer Object
lr_footer.
*----------------------------------------------------------------------*
*& We are calling the static Factory method which will give back
*& the ALV object reference.
*----------------------------------------------------------------------*
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = gr_salv
CHANGING
t_table = gt_fin.
**********************************************************************
*& set output control
**********************************************************************
lr_salv_dsp_set = gr_salv->get_display_settings( ).
lr_salv_dsp_set->set_striped_pattern( abap_true ).
************************************************************************
*& Properties to the ALV
************************************************************************
*& Setting Default PF-STATUS
*& Default functions
lr_functions = gr_salv->get_functions( ).
*& activate ALV generic Functions
lr_functions->set_all( abap_true ).
**********************************************************************
*& Setting TOP_OF_PAGE
**********************************************************************
*& Information in Bold
lr_h_label = lr_header->create_label( row = 1
column = 1 ).
lr_h_label->set_text('Date:').
*& Set the top of list using the header for Online
gr_salv->set_top_of_list( lr_header ).
*& Set the top of list using the header for Print
gr_salv->set_top_of_list_print( lr_header ).
**********************************************************************
*& Setting END_OF_PAGE
**********************************************************************
*& Information in Bold
lr_f_label = lr_footer->create_label( row = 1
column = 1 ).
lr_f_label->set_text('No. of Records:').
*& Set the end of list using the header for Online
gr_salv->set_end_of_list( lr_footer ).
*& Set the End of list using the header for Print
gr_salv->set_end_of_list_print( lr_footer ).
**********************************************************************
*& Field Catalog
**********************************************************************
lr_cols = gr_salv->get_columns( ).
lr_cols->set_optimize( abap_true ).
lr_cols->set_key_fixation( abap_true ).
PERFORM:
f_set_field_cat USING lr_cols 'ASNUM' 'SerNo' 'Ser Number' '
Service Number' abap_true ,
f_set_field_cat USING lr_cols 'ASKTX' 'SerText' 'SerText' '
Service short text' abap_false ,
f_set_field_cat USING lr_cols 'ASTYP' 'SerText' 'SerText' '
Service category' abap_false ,
f_set_field_cat USING lr_cols 'MEINS' 'BUM' 'BUM' '
Base unit of measurement' abap_false ,
f_set_field_cat USING lr_cols 'MATKL' 'MatGrp' 'Material group' '
Material group' abap_false ,
f_set_field_cat USING lr_cols 'SPART' 'Division' 'Division' '
Division' abap_false ,
f_set_field_cat USING lr_cols 'BKLAS' 'ValClass' 'Valuation class' '
Valuation class' abap_false ,
f_set_field_cat USING lr_cols 'TAXTARIFFCODE' 'TaxTCode' 'TaxTCode' '
Tax Tariff Code' abap_false ,
f_set_field_cat USING lr_cols 'LNGTXT' 'Long Text' 'Long Text' '
Long Text' abap_false .
*&---------------------------------------------------------------------*
*& Form F_SET_FIELD_CAT
*&---------------------------------------------------------------------*
FORM f_set_field_cat USING p_lr_cols TYPE REF TO cl_salv_columns_table
p_column TYPE lvc_fname
p_s_txt TYPE scrtext_s
p_m_txt TYPE scrtext_m
p_l_txt TYPE scrtext_l
p_key TYPE sap_bool.
DATA
lr_col TYPE REF TO cl_salv_column_table.
TRY.
lr_col ?= p_lr_cols->get_column( p_column ).
lr_col->set_short_text( p_s_txt ).
lr_col->set_medium_text( p_m_txt ).
lr_col->set_long_text( p_l_txt ).
IF p_key = abap_true.
lr_col->set_key( abap_true ).
ENDIF.
II. Validate Data read from File (other than Long Text)