Hola buenas tardes gente cómo están, tengo un rato ya buscando como visualizar un pdf que esta guardado en un directorio de la al11, explico, tengo un alv donde cuando le dan clic a un registro debe ir a buscar en la al11 el pdf relacionado a ese registro y mostrarlo ya sea en un popup o en otra ventana independiente.
Mi otra consulta es relacionada con la misma tx AL11 y es como renombro un archivo ??
Yo se que para leer un archivo en la al11 uso open , read y close dataset pero hasta ahi llega mi pobre conocimiento.
Ah pero eso seria para adjuntar y cambiarle el asunto xD pero muchas gracias igual ya vi la solucion: debo copiar el archivo , crear uno nuevo y borrar el anterior
Voy por partes: para visualizar PDF primero lo leo de la AL11:
Mis variables:
" Mostrar PDF
data: lo_docking_container type ref to cl_gui_docking_container.
data: lo_html type ref to cl_gui_html_viewer.
data: gt_pdfout type solix_tab,
gs_pdfout type solix.
data: p_file type string.
data: ok_code(20).
data: lv_url type char255.
form leer_pdf .
p_file = '/funcional/recepcion_contingencia/peru/proc_correctamente/20100057523_1_f010_12209.pdf' .
open dataset p_file for input in binary mode.
do.
read dataset p_file into gs_pdfout-line.
if sy-subrc ne 0.
exit.
endif.
append gs_pdfout to gt_pdfout.
enddo.
close dataset p_file.
perform display_pdf.
endform.
form display_pdf .
if not gt_pdfout is initial.
call screen 616 starting at 1 1 ending at 100 10. " Nota: el primer valor es poscion de columna, el segundo es de fila y luego del ending at el primero es el ancho y el segundo el alto.
else.
write :/ 'No data to display'.
endif.
endform. " DISPLAY_PDF
" Seguimos con la apertura del pdf leido que esta en la tabla gt_pdfout (es global por si acaso esta en un include llamado mi_programa_top01
*&---------------------------------------------------------------------*
*& Module STATUS_0616 OUTPUT
*&---------------------------------------------------------------------*
* PBO
*----------------------------------------------------------------------*
module status_0616 output.
set pf-status 'MAIN'.
clear ok_code.
IF NOT ( lo_docking_container IS INITIAL ).
CALL METHOD lo_docking_container->free
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
endif.
IF NOT ( lo_html IS INITIAL ).
CALL METHOD lo_html->free
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
endif.
create object lo_docking_container
EXPORTING
repid = sy-repid
dynnr = sy-dynnr
extension = 5000.
CREATE OBJECT lo_html
EXPORTING
parent = lo_docking_container.
*
* Load the HTML
lo_html->load_data(
exporting
type = `application`
subtype = `pdf`
IMPORTING
assigned_url = lv_url
CHANGING
data_table = gt_pdfout
EXCEPTIONS
dp_invalid_parameter = 1
dp_error_general = 2
cntl_error = 3
OTHERS = 4 ).
* Show it
lo_html->show_url( url = lv_url in_place = 'X' ).
endmodule. " STATUS_0616 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0616 INPUT
*&---------------------------------------------------------------------*
* PAI
*----------------------------------------------------------------------*
module user_command_0616 input.
case sy-ucomm.
when 'BACK' or 'EXIT' or 'CANC' or 'CONTINUE'.
if not ( lo_docking_container is initial ).
call method lo_docking_container->free
exceptions
cntl_error = 1
cntl_system_error = 2
others = 3.
endif.
if not ( lo_html is initial ).
call method lo_html->free
exceptions
cntl_error = 1
cntl_system_error = 2
others = 3.
endif.
LEAVE TO SCREEN 0. " Leave screen llama al screen donde comenzo por ejemplo si en nuestro caso lo llamamos de un alv cerrara la scren del pdf y la dejara en el alve ya que si llamaos CALL SELECTION-SCREEN nos llevara a la pantalal de parametros.
endcase.
endmodule. " USER_COMMAND_0616 INPUT
Mi otra duda era para renombrar archivos y lo hice asi
" Copiamos el archivo anterior con el nuevo nombre
call method cl_cts_language_file_io=>copy_files_local
exporting
im_source_file = 'documento_de_prueba.pdf'
im_source_directory = '/funcional/recepcion_contingencia/peru/proc_correctamente/'
im_target_file = 'new_documento_de_prueba.pdf'
im_target_directory = '/funcional/recepcion_contingencia/peru/new_proc_correctamente/'
* im_overwrite_mode = SPACE
* IMPORTING
* ex_file_size =
exceptions
open_input_file_failed = 1
open_output_file_failed = 2
write_block_failed = 3
read_block_failed = 4
close_output_file_failed = 5
others = 6.
" Borramos el archivo con el viejo nombre
DELETE DATASET '/funcional/recepcion_contingencia/peru/proc_correctamente/documento_de_prueba.pdf'.