Sei sulla pagina 1di 20

1. Introduction.

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)

Custom FM: ZALSM_EXCEL_TO_IT


FUNCTION zalsm_excel_to_it .
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(FILENAME) LIKE RLGRAP-FILENAME
*" VALUE(I_BEGIN_COL) TYPE I
*" VALUE(I_BEGIN_ROW) TYPE I
*" VALUE(I_END_COL) TYPE I
*" VALUE(I_END_ROW) TYPE I
*" TABLES
*" ET_EXCEL_TAB STRUCTURE ZST_CHAR50
*" EXCEPTIONS
*" INCONSISTENT_PARAMETERS
*" UPLOAD_OLE
*"----------------------------------------------------------------------
TYPES:
*& line type of sender table
BEGIN OF ty_s_senderline,
line(4096) TYPE c,
END OF ty_s_senderline.

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 .

FIELD-SYMBOLS <fs_excel_tab> TYPE ty_s_senderline.

*& Macro for error handling of methods


DEFINE m_message.
case sy-subrc.
when 0.
when 1.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
when others.
raise upload_ole.
endcase.
END-OF-DEFINITION.

*& check parameters


IF i_begin_row > i_end_row.
RAISE inconsistent_parameters.
ENDIF.

IF i_begin_col > i_end_col.


RAISE inconsistent_parameters.
ENDIF.

*& Open file in Excel


IF application-header = space OR application-handle = -1.
CREATE OBJECT application 'Excel.Application'.
m_message.
ENDIF.

CALL METHOD OF
application
'Workbooks' = workbook.
m_message.

CALL METHOD OF
workbook
'Open'

EXPORTING
#1 = filename.
m_message.

*& set property of application 'Visible' = 1.


* m_message.
GET PROPERTY OF
application
'ACTIVESHEET' = worksheet.
m_message.

*& Mark whole Spread Sheet


CALL METHOD OF
worksheet
'Cells' = h_cell
EXPORTING
#1 = i_begin_row
#2 = i_begin_col.
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.

*& Copy marked area (whole Spread Sheet) into Clippboard


CALL METHOD OF
range
'COPY'.
m_message.

*& Read clipboard into ABAP


CALL METHOD cl_gui_frontend_services=>clipboard_import
IMPORTING
data = lt_excel_tab " Data Table
* length = " Data length
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE a037(alsmex). " Error during import of clipboard contents
ENDIF.

*& 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.

APPEND wa_et_excel_tab TO et_excel_tab.


lv_offset = lv_offset + 50.
ENDDO.

CLEAR lv_offset.
ENDLOOP.

*& Clear clipboard


CLEAR lt_excel_tab[].
CALL METHOD cl_gui_frontend_services=>clipboard_export
* EXPORTING
* no_auth_check = SPACE " Switch off Check for Access Rights
IMPORTING
data = lt_excel_tab " Data
CHANGING
rc = ld_rc " Return code
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
no_authority = 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.

*& 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.

FREE OBJECT h_cell1.


m_message.

FREE OBJECT range.


m_message.

FREE OBJECT worksheet.


m_message.

FREE OBJECT workbook.


m_message.

FREE OBJECT application.


m_message.
ENDFUNCTION.
II. Create a Custom program to Create Service Master Record

*& 1. Read Excel File (FM: TEXT_CONVERT_XLS_TO_SAP)


*& 2. Validate Data read from File (other than Long Text)
*& 3. Download file if any Erroneous record found (FM: GUI_DOWNLOAD)
*& 4. Read Long Text for each record (FM: ZALSM_EXCEL_TO_IT)
*& 5. Creation of a Service Master Record (BAPI: BAPI_SERVICE_CREATE)

Custom Program: ZMMBAPI_AC01

REPORT ZMMBAPI_AC01 NO STANDARD PAGE HEADING LINE-SIZE 255.

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(*.*)|*.*|',

it_raw TYPE truxs_t_text_data ,


wf_fname(150) TYPE c ,
ug_astyp(4) TYPE c ,
ug_meins(3) TYPE c ,
ug_matkl(9) TYPE c ,

wa_service_data TYPE bapisrv_asmd ,


wa_service_datax TYPE bapisrv_asmdx ,
wa_service TYPE bapisrv_asmd-service ,
wa_ex_service_data TYPE bapisrv_asmd ,
wa_ex_service_datax TYPE bapisrv_asmdx ,
lt_return TYPE STANDARD TABLE OF bapiret2 ,
wa_return TYPE bapiret2 ,
lt_srv_desc TYPE STANDARD TABLE OF bapisrv_asmdt,
wa_srv_desc TYPE bapisrv_asmdt ,
lt_srv_long_texts TYPE STANDARD TABLE OF bapisrv_text ,
wa_srv_long_texts TYPE bapisrv_text ,
lv_offset TYPE int4 ,
lv_asnum TYPE asnum ,
wa_asmd TYPE asmd ,
ls_t025 TYPE t025 ,
ls_t604f TYPE t604f ,
ls_t362 TYPE t362 ,
ls_t006 TYPE t006 ,
ls_t023 TYPE t023 ,
l_filename TYPE string .

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 ).

IF lt_err[] IS NOT INITIAL.


*& Downlod .XLS File with Erroneous data & Do not Create/ Post any record
IF i_var GT 1.
CLEAR l_filename.
l_filename = 'Excel.XLS' .

CALL FUNCTION 'GUI_DOWNLOAD'


EXPORTING
* BIN_FILESIZE =
filename = l_filename
* FILETYPE = 'ASC'
* APPEND = ' '
write_field_separator = 'X'
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* TRUNC_TRAILING_BLANKS_EOL = 'X'
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* WRITE_LF_AFTER_LAST_LINE = ABAP_TRUE
* SHOW_TRANSFER_STATUS = ABAP_TRUE
* IMPORTING
* FILELENGTH =
TABLES
data_tab = lt_err
* FIELDNAMES =
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
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 cl_gui_frontend_services=>execute


EXPORTING
* DOCUMENT =
application = l_filename
* PARAMETER =
* DEFAULT_DIRECTORY =
* MAXIMIZED =
* MINIMIZED =
* SYNCHRONOUS =
* OPERATION = 'OPEN'
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
bad_parameter = 3
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
synchronous_failed = 8
not_supported_by_gui = 9
OTHERS = 10.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
PERFORM:
f_set_data_update ,
f_set_display_alv .
ENDIF.
ENDIF.

*&---------------------------------------------------------------------*
*& Form F_GET_F4_FILENAME
*&---------------------------------------------------------------------*
FORM f_get_f4_filename USING mask CHANGING p_file.

CALL FUNCTION 'TB_LIMIT_WS_FILENAME_GET'


EXPORTING
* DEF_FILENAME = ' '
* DEF_PATH = ' '
mask = mask
mode = 'O'
* TITLE = ' '
IMPORTING
filename = p_fname
* PATH =
* FILE =
EXCEPTIONS
selection_cancel = 1
selection_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.
ENDFORM. "F_GET_F4_FILENAME

*&---------------------------------------------------------------------*
*& Form F_GET_UPLOAD_DATA
*&---------------------------------------------------------------------*
FORM f_get_upload_data .

CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'


EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = it_raw " WORK TABLE
i_filename = p_fname
TABLES
i_tab_converted_data = lt_service "ACTUAL DATA
EXCEPTIONS
conversion_failed = 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.

LOOP AT lt_service ASSIGNING <fs_service>.


ug_astyp = <fs_service>-astyp .
TRANSLATE ug_astyp TO UPPER CASE.
<fs_service>-astyp = ug_astyp.

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 .

APPEND wa_service2 TO lt_service2.


CLEAR wa_service2.
ENDLOOP.

*& Add Serial nos in Excel file data uploaded


CLEAR sno.
LOOP AT lt_service2 ASSIGNING <fs_service2>.
<fs_service2>-sno = sno + 1.
sno = sno + 1.
ENDLOOP.

*& Insert 1 record in Internal Table for Erroneous data


CLEAR lt_err[].

wa_err-sno = 'Excel Line Number'.


wa_err-text1 = 'Error Description'.
APPEND wa_err TO lt_err.
CLEAR wa_err.

**& Remove all records where 'SERVICE SHORT TEXT' is not maintained
* DELETE i_service2 WHERE asktx EQ space.

*& Validate Each records in file uploaded


LOOP AT lt_service2 ASSIGNING <fs_service2>.
*& Validate SERVICE SHORT TEXT
IF <fs_service2>-asktx IS INITIAL.
wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'SERVICE SHORT TEXT is Blank'.

APPEND wa_err TO lt_err .


CLEAR wa_err.
ENDIF.

*& Validate BASE UNIT OF MEASUREMENT


CLEAR ls_t006.
SELECT SINGLE *
FROM t006
INTO ls_t006
WHERE msehi EQ <fs_service2>-meins.
IF sy-subrc NE 0.
CLEAR wf_meins.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = <fs_service2>-meins
language = sy-langu
IMPORTING
output = wf_meins
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc NE 0.
wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'Check unit of measurement.'.

APPEND wa_err TO lt_err .


CLEAR wa_err.
ELSE.
CLEAR ls_t006.
SELECT SINGLE *
FROM t006
INTO ls_t006
WHERE msehi EQ wf_meins.
IF sy-subrc NE 0.
wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'Check unit of measurement.'.

APPEND wa_err TO lt_err.


CLEAR wa_err.
ENDIF.
ENDIF.
ENDIF.

*& Validate MATERIAL/ SERVICE GROUP


CLEAR ls_t023.
SELECT SINGLE *
FROM t023
INTO ls_t023
WHERE matkl EQ <fs_service2>-matkl.
IF sy-subrc NE 0.
wa_err-sno = <fs_service2>-sno + 1.

CONCATENATE 'Material/Service Group is' 'In-Valid'


INTO wa_err-text1 SEPARATED BY space.

APPEND wa_err TO lt_err.


CLEAR wa_err.
ENDIF.

*& Validate SERVICE CATEGORY


CLEAR ls_t362.
SELECT SINGLE *
FROM t362
INTO ls_t362
WHERE astyp EQ <fs_service2>-astyp.
IF sy-subrc NE 0.
wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'Service Category Error.'.

APPEND wa_err TO lt_err.


CLEAR wa_err.
ENDIF.

*& Validate TAX TARRIEF CODE


CLEAR ls_t604f.
SELECT SINGLE *
FROM t604f
INTO ls_t604f
WHERE steuc EQ <fs_service2>-taxtariffcode.
IF sy-subrc NE 0.
MOVE-CORRESPONDING <fs_service2> TO wa_err.

wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'TAX Tarrief Code'.

APPEND wa_err TO lt_err.


CLEAR wa_err.
ENDIF.

*& Validate VALUATION CLASS


CLEAR ls_t025.
SELECT SINGLE *
FROM t025
INTO ls_t025
WHERE kkref EQ ls_t362-kkref
AND bklas EQ <fs_service2>-bklas.
IF sy-subrc NE 0.
MOVE-CORRESPONDING <fs_service2> TO wa_err.

wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'Valuation Class Error.'.

APPEND wa_err TO lt_err .


CLEAR wa_err.
ENDIF.
ENDLOOP.
ENDFORM. "F_GET_UPLOAD_DATA

*&---------------------------------------------------------------------*
*& Form F_SET_DATA_UPDATE
*&---------------------------------------------------------------------*
FORM f_set_data_update .
DATA:
lv_row TYPE int4,
et_excel_tab TYPE STANDARD TABLE OF zst_char50.

FIELD-SYMBOLS <fs_excel_tab> TYPE zst_char50.

lv_row = lines( lt_service ).


lv_row = lv_row + 1.

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.

CONCATENATE lv_string <fs_excel_tab>-line_50 INTO lv_string.

CLEAR lv_mod.
lv_mod = lv_tabix MOD 82.

IF lv_mod IS INITIAL.
CLEAR lv_div.
lv_div = lv_tabix DIV 82.

READ TABLE lt_service ASSIGNING <fs_service> INDEX lv_div.


IF sy-subrc IS INITIAL.
<fs_service>-lngtxt = lv_string.

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.

APPEND wa_srv_desc TO lt_srv_desc.


CLEAR wa_srv_desc.

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.

APPEND wa_srv_long_texts TO lt_srv_long_texts.


CLEAR wa_srv_long_texts.

lv_offset = lv_offset + 132.


ENDDO.

CLEAR lv_offset.

*& BAPI to Creation of a Service Master Record


CALL FUNCTION 'BAPI_SERVICE_CREATE'
EXPORTING
im_service_data = wa_service_data
im_service_datax = wa_service_datax
* NO_NUMBER_RANGE_CHECK =
* TESTRUN =
IMPORTING
service = wa_service
ex_service_data = wa_ex_service_data
ex_service_datax = wa_ex_service_datax
TABLES
return = lt_return
service_description = lt_srv_desc
service_long_texts = lt_srv_long_texts
* EXTENSION_IN =
* EXTENSION_OUT =
.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = /artec/pd_cl_common=>gc_value_x
* IMPORTING
* RETURN =
.
IF sy-subrc IS INITIAL.

READ TABLE lt_return INTO wa_return WITH KEY type = 'S'


id = 'BAPI'
number = '000'
message_v1 = 'Service'.
IF sy-subrc IS INITIAL.
lv_asnum = wa_return-message_v2.

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.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'


EXPORTING
input = lv_asnum
IMPORTING
output = lv_asnum.

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.

MODIFY asmd FROM wa_asmd.

APPEND wa_fin TO gt_fin.


ENDIF.
ENDIF.
ENDIF.
ENDIF.

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.

CATCH cx_salv_msg INTO lc_msg .


ENDTRY.

**********************************************************************
*& 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:').

*& Information in tabular format


lr_h_flow = lr_header->create_flow( row = 1
column = 2 ).
lr_h_flow->create_text( text = sy-datum ).

lr_h_label = lr_header->create_label( row = 2


column = 1 ).
lr_h_label->set_text('Upload File Path:' ).

lr_h_flow = lr_header->create_flow( row = 2


column = 2 ).
lr_h_flow->create_text( text = p_fname ).

*& 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:').

*& Tabular Information


lr_f_flow = lr_footer->create_flow( row = 1
column = 2 ).
lr_f_flow->create_text( text = lines( gt_fin ) ).

*& 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 .

*& Displaying the ALV


gr_salv->display( ).

ENDFORM. " F_SET_DISPLAY_ALV

*&---------------------------------------------------------------------*
*& 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.

CATCH cx_salv_not_found. "#EC NO_HANDLER


ENDTRY.
ENDFORM. " F_SET_FIELD_CAT
3. Summary.

I. Read Excel File (FM: TEXT_CONVERT_XLS_TO_SAP)

II. Validate Data read from File (other than Long Text)

III. Download file if any Erroneous record found (FM: GUI_DOWNLOAD)

IV. Read Long Text for each record(FM: ZALSM_EXCEL_TO_IT)

V. Creation of a Service Master Record (BAPI: BAPI_SERVICE_CREATE)

Potrebbero piacerti anche