W Pub: ABAP Prog Propios SCASE

  1. REPORT zadd_attach_scase.
  2.  
  3.  
  4. PARAMETER : l_fname TYPE char255 DEFAULT 't:\02.docx'.
  5. PARAMETERS: p_case LIKE scmg_t_case_attr-ext_key OBLIGATORY DEFAULT '000300000654'. "<-- Ejemplo
  6.  
  7. *--[ Alguas (muchas) variables son obsoletas
  8. DATA : l_file TYPE string,
  9.       lv_xstring  TYPE xstring,
  10.        l_return TYPE  bapiret2,
  11.        l_filecontent TYPE bapiconten,
  12.        i_case TYPE REF TO if_scmg_case_api,
  13.         l_initial_dir     TYPE string,
  14.         l_window_title    TYPE string,
  15.         l_filename_disp   TYPE string,
  16.         l_filename_string TYPE string,
  17.         l_user_action     TYPE i,
  18.         l_rc              TYPE i,
  19.        l_v_lines TYPE i,
  20.        l_mime TYPE skwf_mime,
  21.        l_filelength TYPE i,
  22.        l_component TYPE  bapidoccomp,
  23.        l_skwf_filnm TYPE skwf_filnm,
  24.        li_file_tab        TYPE filetable,
  25.        lwa_file_tab        TYPE file_table,
  26.        li_bin_content  TYPE STANDARD TABLE OF bapiconten,
  27.        l_v_size TYPE i.
  28.  
  29.  
  30. DATA: BEGIN OF itab OCCURS 0,
  31.        line TYPE sdok_sdatx.
  32. DATA: END OF itab.
  33.  
  34.  
  35. DATA: BEGIN OF i_component OCCURS 0,
  36.         comp_count  TYPE bapipos,
  37.         comp_id     TYPE bapidocid,
  38.         mimetype    TYPE bapimimetype,
  39.         comp_size   TYPE bapipos,
  40.         binary_flag TYPE bapigsbool,
  41.         comp_num    TYPE bapipos.
  42. DATA: END OF i_component.
  43.  
  44. AT SELECTION-SCREEN ON VALUE-REQUEST FOR l_fname.
  45.  
  46. *--[ Esto es para hacer F4 en la pantalla incial y seleccionar el filez
  47.   l_window_title = 'Upload Document'(001).
  48.  
  49.   CALL METHOD cl_gui_frontend_services=>file_open_dialog
  50.     EXPORTING
  51.       window_title            = l_window_title
  52.       initial_directory       = l_initial_dir
  53.     CHANGING
  54.       file_table              = li_file_tab
  55.       rc                      = l_rc
  56.       user_action             = l_user_action
  57.     EXCEPTIONS
  58.       file_open_dialog_failed = 1
  59.       cntl_error              = 2
  60.       error_no_gui            = 3
  61.       not_supported_by_gui    = 4
  62.       OTHERS                  = 5.
  63.   IF sy-subrc = 0.
  64.     READ TABLE li_file_tab INTO lwa_file_tab INDEX 1.
  65.     IF sy-subrc = 0.
  66.       l_file = lwa_file_tab-filename.
  67.       l_fname = lwa_file_tab-filename.
  68.     ENDIF.
  69.   ENDIF.
  70.  
  71. START-OF-SELECTION.
  72.   l_file = l_fname.
  73.  
  74. *--[ Subimos el fichero
  75.   CALL FUNCTION 'GUI_UPLOAD'
  76.     EXPORTING
  77.       filename                = l_file
  78.       filetype                = 'BIN'
  79.     IMPORTING
  80.       filelength              = sy-pagno
  81.     TABLES
  82.       data_tab                = itab
  83.     EXCEPTIONS
  84.       file_open_error         = 1
  85.       file_read_error         = 2
  86.       no_batch                = 3
  87.       gui_refuse_filetransfer = 4
  88.       invalid_type            = 5
  89.       no_authority            = 6
  90.       unknown_error           = 7
  91.       bad_data_format         = 8
  92.       header_not_allowed      = 9
  93.       separator_not_allowed   = 10
  94.       header_too_long         = 11
  95.       unknown_dp_error        = 12
  96.       access_denied           = 13
  97.       dp_out_of_memory        = 14
  98.       disk_full               = 15
  99.       dp_timeout              = 16
  100.       OTHERS                  = 17.
  101.  
  102.  
  103.   l_v_size = sy-pagno.
  104.  
  105. *--[ Lo que sigue a continuación es para mover una tabla binaria a otra tabla binaria de otro formato/tama&#241;o
  106. *--[Convertimos la tabla binaria en XSTRING
  107.   CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
  108.     EXPORTING
  109.       input_length = sy-pagno
  110.     IMPORTING
  111.       buffer       = lv_xstring
  112.     TABLES
  113.       binary_tab   = itab
  114.     EXCEPTIONS
  115.       failed       = 1
  116.       OTHERS       = 2.
  117.  
  118. *--[ Convertimos la XSTRING a BINARY
  119.   CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  120.     EXPORTING
  121.       buffer     = lv_xstring
  122.     TABLES
  123.       binary_tab = li_bin_content.
  124.   l_skwf_filnm = l_file.
  125.  
  126. *--[ Preparamos el componente
  127.   CALL FUNCTION 'SKWF_MIMETYPE_OF_FILE_GET'
  128.     EXPORTING
  129.       filename = l_skwf_filnm
  130.     IMPORTING
  131.       mimetype = l_mime.
  132.  
  133.   l_component-comp_count    = 1.
  134.   l_component-comp_id       = l_fname.
  135.  
  136. *--[ Aquí está el error del MIME, sería más sencillo ir a la tabla toadd y ver que mime
  137. *--[ le sirve para la extensión
  138.   l_component-mimetype      = l_mime. "<--Por ejemplo application/msword
  139.   l_component-comp_size     =  sy-pagno. "<-- Ojo que aquí está el tama&#241;o del flz
  140.   l_component-binary_flag   = 'X'.
  141.   l_component-comp_num      = 1.
  142.   APPEND l_component TO i_component.
  143.  
  144.   DATA: lref_api TYPE REF TO if_scmg_case_api.
  145.   DATA: lt_messages     TYPE scmg_t_attr_return_value.
  146.  
  147. *--[ El GUID lo obtienes de la tabla SCMG_T_CASE_ATTR
  148. *--[ EN EXY_KEY está el número de caso por ejemplo 000300000654 y en CASE_GUID está, pues eso, el GUID
  149.   DATA: l_case_guid LIKE scmg_t_case_attr-case_guid.
  150.   BREAK-POINT.
  151.   SELECT SINGLE case_guid INTO l_case_guid FROM scmg_t_case_attr
  152.          WHERE    ext_key    = p_case. "<-- De que caso estamos hablando
  153.  
  154.  
  155.   CALL METHOD cl_scmg_case_api=>get_case
  156.     EXPORTING
  157.       im_case_guid = l_case_guid
  158.       im_enqueue   = 'X'
  159.     RECEIVING
  160.       re_case      = lref_api
  161.     EXCEPTIONS
  162.       failed       = 1
  163.       invalid_guid = 2.
  164.   IF sy-subrc EQ 0.
  165. *--[ Está función hay que hacer Z*  por:
  166. *--[ Cuando llama UDM_GET_DOCUMENT_DATA si no existe documento devuelve el SP_ID como UDM* y hay que cambiarlo por UKM*
  167.     CALL FUNCTION 'UDM_BD_CREATE_ATTACHMENT'
  168.       EXPORTING
  169.         i_guid      = l_case_guid
  170.         i_case      = lref_api
  171.         i_testrun   = space           " '003A3A4FAD54D97CE100000092D79319'
  172.       TABLES
  173.         bin_content = li_bin_content
  174.         components  = i_component
  175.       CHANGING
  176.         es_return   = l_return.
  177.     BREAK-POINT.
  178.  
  179. *--[ Importante GRABAR!!
  180.     CALL METHOD lref_api->save
  181.       EXPORTING
  182.         im_dequeue  = 'X'
  183.       IMPORTING
  184.         ex_messages = lt_messages
  185.       EXCEPTIONS
  186.         failed      = 1.
  187.     if sy-subrc ne 0.
  188. *--[ Error
  189.     endif.
  190.   ELSE.
  191. *--[ Error al abrir el caso
  192.   ENDIF.