REPORT zadd_attach_scase.
PARAMETER : l_fname TYPE char255 DEFAULT 't:\02.docx'.
PARAMETERS: p_case LIKE scmg_t_case_attr-ext_key OBLIGATORY DEFAULT '000300000654'. "<-- Ejemplo
*--[ Alguas (muchas) variables son obsoletas
DATA : l_file TYPE string,
lv_xstring TYPE xstring,
l_return TYPE bapiret2,
l_filecontent TYPE bapiconten,
i_case TYPE REF TO if_scmg_case_api,
l_initial_dir TYPE string,
l_window_title TYPE string,
l_filename_disp TYPE string,
l_filename_string TYPE string,
l_user_action TYPE i,
l_rc TYPE i,
l_v_lines TYPE i,
l_mime TYPE skwf_mime,
l_filelength TYPE i,
l_component TYPE bapidoccomp,
l_skwf_filnm TYPE skwf_filnm,
li_file_tab TYPE filetable,
lwa_file_tab TYPE file_table,
li_bin_content TYPE STANDARD TABLE OF bapiconten,
l_v_size TYPE i.
DATA: BEGIN OF itab OCCURS 0,
line TYPE sdok_sdatx.
DATA: END OF itab.
DATA: BEGIN OF i_component OCCURS 0,
comp_count TYPE bapipos,
comp_id TYPE bapidocid,
mimetype TYPE bapimimetype,
comp_size TYPE bapipos,
binary_flag TYPE bapigsbool,
comp_num TYPE bapipos.
DATA: END OF i_component.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR l_fname.
*--[ Esto es para hacer F4 en la pantalla incial y seleccionar el filez
l_window_title = 'Upload Document'(001).
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = l_window_title
initial_directory = l_initial_dir
CHANGING
file_table = li_file_tab
rc = l_rc
user_action = l_user_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc = 0.
READ TABLE li_file_tab INTO lwa_file_tab INDEX 1.
IF sy-subrc = 0.
l_file = lwa_file_tab-filename.
l_fname = lwa_file_tab-filename.
ENDIF.
ENDIF.
START-OF-SELECTION.
l_file = l_fname.
*--[ Subimos el fichero
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_file
filetype = 'BIN'
IMPORTING
filelength = sy-pagno
TABLES
data_tab = itab
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
OTHERS = 17.
l_v_size = sy-pagno.
*--[ Lo que sigue a continuación es para mover una tabla binaria a otra tabla binaria de otro formato/tamaño
*--[Convertimos la tabla binaria en XSTRING
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length = sy-pagno
IMPORTING
buffer = lv_xstring
TABLES
binary_tab = itab
EXCEPTIONS
failed = 1
OTHERS = 2.
*--[ Convertimos la XSTRING a BINARY
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_xstring
TABLES
binary_tab = li_bin_content.
l_skwf_filnm = l_file.
*--[ Preparamos el componente
CALL FUNCTION 'SKWF_MIMETYPE_OF_FILE_GET'
EXPORTING
filename = l_skwf_filnm
IMPORTING
mimetype = l_mime.
l_component-comp_count = 1.
l_component-comp_id = l_fname.
*--[ Aquí está el error del MIME, sería más sencillo ir a la tabla toadd y ver que mime
*--[ le sirve para la extensión
l_component-mimetype = l_mime. "<--Por ejemplo application/msword
l_component-comp_size = sy-pagno. "<-- Ojo que aquí está el tamaño del flz
l_component-binary_flag = 'X'.
l_component-comp_num = 1.
APPEND l_component TO i_component.
DATA: lref_api TYPE REF TO if_scmg_case_api.
DATA: lt_messages TYPE scmg_t_attr_return_value.
*--[ El GUID lo obtienes de la tabla SCMG_T_CASE_ATTR
*--[ EN EXY_KEY está el número de caso por ejemplo 000300000654 y en CASE_GUID está, pues eso, el GUID
DATA: l_case_guid LIKE scmg_t_case_attr-case_guid.
BREAK-POINT.
SELECT SINGLE case_guid INTO l_case_guid FROM scmg_t_case_attr
WHERE ext_key = p_case. "<-- De que caso estamos hablando
CALL METHOD cl_scmg_case_api=>get_case
EXPORTING
im_case_guid = l_case_guid
im_enqueue = 'X'
RECEIVING
re_case = lref_api
EXCEPTIONS
failed = 1
invalid_guid = 2.
IF sy-subrc EQ 0.
*--[ Está función hay que hacer Z* por:
*--[ Cuando llama UDM_GET_DOCUMENT_DATA si no existe documento devuelve el SP_ID como UDM* y hay que cambiarlo por UKM*
CALL FUNCTION 'UDM_BD_CREATE_ATTACHMENT'
EXPORTING
i_guid = l_case_guid
i_case = lref_api
i_testrun = space " '003A3A4FAD54D97CE100000092D79319'
TABLES
bin_content = li_bin_content
components = i_component
CHANGING
es_return = l_return.
BREAK-POINT.
*--[ Importante GRABAR!!
CALL METHOD lref_api->save
EXPORTING
im_dequeue = 'X'
IMPORTING
ex_messages = lt_messages
EXCEPTIONS
failed = 1.
if sy-subrc ne 0.
*--[ Error
endif.
ELSE.
*--[ Error al abrir el caso
ENDIF.