Hola a todos.
El caso es el siguiente: Se ha alojado un archivo en formato excel en un repositorio archiving (no AL11) del cual se desea leer el contenido del archivo excel, pero sin descargarlo al directorio local del cliente haciendo un GUI_DOWNLOAD.
Para obtener todas las conexiones según el ID del repositorio usamos el siguiente FM.
CALL FUNCTION 'ARCHIV_GET_CONNECTIONS'
Luego para obtener el archivo en sí, usamos el FM
CALL FUNCTION 'ARCHIVOBJECT_GET_TABLE'
De este último usamos los valores que nos devuelve la tabla archivobject, con esta tabla hacemos una conversión de 1024 a 255 con el siguiente método.
cl_rmps_general_functions=>convert_1024_to_255( im_tab_1024 = table_archivobject ).
Con el resultado de esta conversión, la pasamos a una tabla interna de tipo cpt_x255.
Teniendo esto seguimos con el código que indica el siguiente tutorial, en donde utiliza clases para hacer la conversión a XML y luego una transformación para XLSX.
*Convert data to xstring
cl_scp_change_db=>xtab_to_xstr( EXPORTING im_xtab = <mi_tabla_en_cpt_x255>
im_size = l_lines
IMPORTING ex_xstring = l_xstring ).
*Load document
lo_package = cl_xlsx_document=>load_document( iv_data = l_xstring ).
*Get parts
lo_parts = lo_package->get_parts( ).
*Load XML data
l_uri = lo_parts->get_part( 2 )->get_parts( )-
>get_part( c_sheet_xml )->get_uri( )->get_uri( ).
lo_xml_part_uri = cl_openxml_parturi=>create_from_partname( l_uri ).
lo_xml_part = lo_package->get_part_by_uri( lo_xml_part_uri ).
ch_sheet_data = lo_xml_part->get_data( ).
*Load sheet data
CLEAR l_uri.
l_uri = lo_parts->get_part( 2 )->get_parts( )-
>get_part( c_shared_str_xml )->get_uri( )->get_uri( ).
lo_xml_part_uri = cl_openxml_parturi=>create_from_partname( l_uri ).
lo_xml_part = lo_package->get_part_by_uri( lo_xml_part_uri ).
ch_shared_data = lo_xml_part->get_data( ).
CATCH cx_root INTO g_ex_root.
CLEAR g_msg.
g_msg = g_ex_root->get_text( ).
IF g_msg IS NOT INITIAL.
sy-subrc = 4.
ENDIF.
ENDTRY.
Terminado esto tenemos que haber creado las transformaciones por el tcode STRANS que están detalladas en el siguiente tutorial, del cual me guié para resolver este tema
ht_ps://praveensg8.files.wordpress.com/2015/04/reading-excel-file-from-application-server-into-abap-internal-table_1.pdf
*Local data declaration
DATA lo_shared_str_dom TYPE REF TO if_ixml_document.
DATA lo_shared_str_nodeset TYPE REF TO if_ixml_node.
DATA l_shared_str_xml TYPE xstring.
*Converting XML into internal table
TRY.
CALL TRANSFORMATION z_transform_excel
SOURCE XML g_shared_data
RESULT XML l_shared_str_xml.
*XML to ABAP
CALL FUNCTION 'SDIXML_XML_TO_DOM'
EXPORTING
xml = l_shared_str_xml
IMPORTING
document = lo_shared_str_dom
EXCEPTIONS
invalid_input = 1
OTHERS = 2.
IF sy-subrc = 0.
lo_shared_str_nodeset = lo_shared_str_dom->clone( ).
ENDIF.
*Import data
CALL TRANSFORMATION z_trans_import_xls
PARAMETERS
p_shared_string = lo_shared_str_nodeset
SOURCE XML g_sheet_data
RESULT lt_data = i_data1.
CATCH cx_xslt_exception.
ENDTRY.
Gracias a @LDSDev por su aporte en la búsqueda de la solución a este tema.
Atte.
Jimmy