Monday, November 06, 2006

Cargar imagenes en Dynpros


Muchas personas se preguntan como pueden hacer esto...Cargar imagenes para que sus dynpros se vean más atractivos...O quizás simplemente para impresionar a los clientes...Utilizando ABAP Objects, esto es más fácil de lo que parece...Además, podemos cargar cualquier gráfico que hayamos subido al R/3 vía la transacción SE78.


Veamos el código (Para esto necesitamos crear un Custom Control en un Dynpro, y llamarlo PICTURE).

**************************************************************
* Programa: ZDUMMY_TEST. *
* Consultor ABAP: Alvaro Tejada Galindo *
**************************************************************
REPORT ZPRUEBA_ATG.

TYPES: PICT_LINE(256) TYPE C.
DATA: PICT_TAB TYPE TABLE OF PICT_LINE,
URL(255) TYPE C.

DATA: CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
PICTURE TYPE REF TO CL_GUI_PICTURE.

DATA: L_BYTECOUNT TYPE I,
L_TDBTYPE LIKE STXBITMAPS-TDBTYPE,
L_CONTENT TYPE STANDARD TABLE OF BAPICONTEN
INITIAL SIZE 0.

DATA: GRAPHIC_SIZE TYPE I.

DATA: BEGIN OF GRAPHIC_TABLE OCCURS 0,
LINE(255) TYPE X,
END OF GRAPHIC_TABLE.

*&-----------------------------------------------------------&*
*& START-OF-SELECTION &*
*&-----------------------------------------------------------&*
START-OF-SELECTION.
CALL SCREEN 100.

*&-----------------------------------------------------------*
*& Module STATUS_0100 OUTPUT *
*&-----------------------------------------------------------*
* PBO *
*------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
PERFORM LOAD_IMAGE.
ENDMODULE. " STATUS_0100 OUTPUT

*------------------------------------------------------------*
* FORM LOAD_IMAGE *
*------------------------------------------------------------*
* Cargamos la imagen *
*------------------------------------------------------------*
FORM LOAD_IMAGE.

CREATE OBJECT: CONTAINER1 EXPORTING CONTAINER_NAME = 'PICTURE',
PICTURE EXPORTING PARENT = CONTAINER1.

CALL FUNCTION 'SAPSCRIPT_GET_GRAPHIC_BDS'
EXPORTING
I_OBJECT = 'GRAPHICS'
I_NAME = 'ENJOY'
I_ID = 'BMAP'
I_BTYPE = 'BCOL'
IMPORTING
E_BYTECOUNT = L_BYTECOUNT
TABLES
CONTENT = L_CONTENT
EXCEPTIONS
NOT_FOUND = 1
BDS_GET_FAILED = 2
BDS_NO_CONTENT = 3
OTHERS = 4.

CALL FUNCTION 'SAPSCRIPT_CONVERT_BITMAP'
EXPORTING
OLD_FORMAT = 'BDS'
NEW_FORMAT = 'BMP'
BITMAP_FILE_BYTECOUNT_IN = L_BYTECOUNT
IMPORTING
BITMAP_FILE_BYTECOUNT = GRAPHIC_SIZE
TABLES
BDS_BITMAP_FILE = L_CONTENT
BITMAP_FILE = GRAPHIC_TABLE
EXCEPTIONS
OTHERS = 1.

CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
TYPE = 'IMAGE'
SUBTYPE = 'BMP'
TABLES
DATA = GRAPHIC_TABLE
CHANGING
URL = URL.


CALL METHOD PICTURE->LOAD_PICTURE_FROM_URL EXPORTING URL = URL.
CALL METHOD PICTURE->SET_DISPLAY_MODE
EXPORTING DISPLAY_MODE = PICTURE->DISPLAY_MODE_FIT_CENTER.

ENDFORM.

Saludos,

Blag.

2 comments:

Hector said...

Esta muy bien eso, pero....
Como le hago para crear dinamicamente el container, necesito poner varias imagenes pero no cuantas en tiempo de diseño.

Alvaro "Blag" Tejada Galindo said...

Para poder crear los contenedores dinamicamente, deberias crear el screen por codigo...y hasta donde yo se no esta permitido por SAP hacerlo y a pesar de que lo he intentado, es un proceso muy complicado...supongo que justamente por eso SAP lo hizo complicado...para que no pueda hacer...

Saludos,

Blag.