Ver Mensaje Individual
  #4  
Viejo 28/08/08, 15:34:12
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671
La transaccion para subir imagenes es la SE78 aqui te dejo un codigo de ejemplo que crea el container y le pone una foto, realmente es un form pero con que lo toques un poco crearas un report, de todas formas si te parece mas comodo puedes echar un vistazo el report standar RSDEMO_PICTURE_CONTROL

FORM crear_boton USING p_nombre_boton
p_container TYPE REF TO cl_gui_custom_container
p_picture TYPE REF TO cl_gui_picture
p_imagen
CHANGING p_subrc.

DATA: lt_grafico TYPE TABLE OF ty_grafico,
lt_eventos TYPE cntl_simple_events.

DATA: ls_grafico TYPE ty_grafico,
ls_evento TYPE cntl_simple_event,
ls_stream TYPE xstring.

DATA: lv_object TYPE tdobjectgr VALUE 'GRAPHICS',
lv_name TYPE tdobname,
lv_id TYPE tdidgr VALUE 'BMAP',
lv_btype TYPE tdbtype VALUE 'BCOL',
lv_type(10) VALUE 'IMAGE',
lv_subtype(10) VALUE 'X-UNKNOWN',
lv_size TYPE i,
lv_lifetime TYPE c VALUE 'T',
lv_url(255),
lv_rc TYPE i,
lv_longitud TYPE i,
lv_offset TYPE i.

CLEAR p_subrc.

IF p_imagen IS INITIAL.

p_subrc = 4.
EXIT.

ELSE.

lv_name = p_imagen.

ENDIF.

*creo el container
IF p_container IS INITIAL.

CREATE OBJECT p_container
EXPORTING
container_name = p_nombre_boton
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.

IF sy-subrc <> 0.

p_subrc = 1.
EXIT.

ENDIF.

ENDIF.

IF p_picture IS INITIAL.

*Creamos la imagen y se la asignamos al container
CREATE OBJECT p_picture
EXPORTING
parent = p_container
EXCEPTIONS
error = 1
OTHERS = 2.

IF sy-subrc <> 0.

p_subrc = 2.

*como ya habiamos creado el container lo eliminamos y hacemos un flush
*que se borre inmediatamente
p_container->free( ).
cl_gui_cfw=>flush( ).

EXIT.

ENDIF.

ENDIF.

*pasamos la imagen subida por la transaccion SE78 a un stream
CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp
EXPORTING
p_object = lv_object
p_name = lv_name
p_id = lv_id
p_btype = lv_btype
RECEIVING
p_bmp = ls_stream.

*este stream lo tenemos que poner en forma de tabla
lv_longitud = XSTRLEN( ls_stream ).

DO.

CLEAR ls_grafico.

ls_grafico-linea = ls_stream+lv_offset(gc_255).

APPEND ls_grafico TO lt_grafico.

ADD gc_255 TO lv_offset.

SUBTRACT gc_255 FROM lv_longitud.

IF lv_longitud <= gc_255.

ls_grafico-linea = ls_stream+lv_offset(lv_longitud).

APPEND ls_grafico TO lt_grafico.

EXIT.

ENDIF.

ENDDO.

* creamos la url para esta imagen
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
type = lv_type
subtype = lv_subtype
size = lv_size
lifetime = lv_lifetime
TABLES
data = lt_grafico
CHANGING
url = lv_url.

** Al objeto imagen le indicamos cual será su imagen
CALL METHOD p_picture->load_picture_from_url
EXPORTING
url = lv_url
EXCEPTIONS
error = 1
OTHERS = 2.

IF sy-subrc <> 0.

p_subrc = 3.

*Al liberar el container tambien se liberan todos los hijos que tenga
*en este caso su hijo seria el control picture
p_container->free( ).
cl_gui_cfw=>flush( ).

EXIT.

ENDIF.

* Indicamos el modo de disposición de la imagen dentro del container
CALL METHOD p_picture->set_display_mode
EXPORTING
display_mode = p_picture->display_mode_fit_center.

*registramos el evento click
ls_evento-eventid = p_picture->eventid_picture_click.

APPEND ls_evento TO lt_eventos.

CALL METHOD p_picture->set_registered_events
EXPORTING
events = lt_eventos
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
illegal_event_combination = 3
OTHERS = 4.

IF sy-subrc <> 0.

p_subrc = 5.
*Al liberar el container tambien se liberan todos los hijos que tenga
*en este caso su hijo seria el control picture
p_container->free( ).
cl_gui_cfw=>flush( ).

EXIT.

ENDIF.

SET HANDLER go_receptor->handle_click FOR p_picture.

ENDFORM. " CREAR_BOTON
Responder Con Cita