*&---------------------------------------------------------------------*
*& Report ZNXX_02
*&---------------------------------------------------------------------*
*& Imagem clicável
*&---------------------------------------------------------------------*
REPORT z_click_imagem_se78.
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS: on_picture_click FOR EVENT picture_click OF cl_gui_picture
IMPORTING mouse_pos_x mouse_pos_y.
ENDCLASS.
CLASS lcl_event_handler IMPLEMENTATION.
METHOD on_picture_click.
MESSAGE 'Imagem clicada! Chamando transação ...' TYPE 'I'.
* CALL TRANSACTION 'VA01'. " Substitua pela transação desejada
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
CALL SCREEN 100.
MODULE pbo_0100 OUTPUT.
* Objetos necessários
DATA: go_container TYPE REF TO cl_gui_custom_container,
go_picture TYPE REF TO cl_gui_picture,
go_handler TYPE REF TO lcl_event_handler,
gt_events TYPE cntl_simple_events,
gs_event TYPE cntl_simple_event.
DATA: graphic_url(255).
DATA: BEGIN OF graphic_table OCCURS 0,
line(255) TYPE x,
END OF graphic_table.
DATA: l_graphic_conv TYPE i.
DATA: l_graphic_offs TYPE i.
DATA: graphic_size TYPE i.
DATA: l_graphic_xstr TYPE xstring.
DATA: url(255) TYPE c.
IF go_container IS INITIAL.
" Cria container e objeto de imagem
CREATE OBJECT go_container
EXPORTING container_name = 'CC_PIC'.
CREATE OBJECT go_picture
EXPORTING parent = go_container.
* Lê imagem da SE78 (xstring)
CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp
EXPORTING
p_object = 'GRAPHICS'
p_name = 'Z_IMAGEM_001'
p_id = 'BMAP'
p_btype = 'BCOL'
RECEIVING
p_bmp = l_graphic_xstr
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Converte imagem da SE78 em url
graphic_size = XSTRLEN( l_graphic_xstr ).
l_graphic_conv = graphic_size.
l_graphic_offs = 0.
WHILE l_graphic_conv > 255.
graphic_table-line = l_graphic_xstr+l_graphic_offs(255).
APPEND graphic_table.
l_graphic_offs = l_graphic_offs + 255.
l_graphic_conv = l_graphic_conv - 255.
ENDWHILE.
graphic_table-line = l_graphic_xstr+l_graphic_offs(l_graphic_conv).
APPEND graphic_table.
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
type = 'IMAGE'
subtype = 'X-UNKNOWN'
size = graphic_size
lifetime = 'T'
TABLES
data = graphic_table
CHANGING
url = url.
* Apresenta a imagem
CALL METHOD go_picture->load_picture_from_url
EXPORTING
url = url.
* Ajusta a imagem
CALL METHOD go_picture->set_display_mode
EXPORTING
display_mode = go_picture->display_mode_fit_center.
* Registra o evento de clique
gs_event-eventid = cl_gui_picture=>eventid_picture_click.
gs_event-appl_event = abap_true.
APPEND gs_event TO gt_events.
CALL METHOD go_picture->set_registered_events
EXPORTING events = gt_events.
* Cria handler de evento (habilita o evento)
CREATE OBJECT go_handler.
SET HANDLER go_handler->on_picture_click FOR go_picture.
ENDIF.
ENDMODULE.
MODULE pai_0100 INPUT.
* Não utilizado neste exemplo
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS '0100_ST'.
SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE sy-ucomm.
WHEN 'BACK' OR 'CANC' OR 'EXIT'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
*& Report ZNXX_02
*&---------------------------------------------------------------------*
*& Imagem clicável
*&---------------------------------------------------------------------*
REPORT z_click_imagem_se78.
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS: on_picture_click FOR EVENT picture_click OF cl_gui_picture
IMPORTING mouse_pos_x mouse_pos_y.
ENDCLASS.
CLASS lcl_event_handler IMPLEMENTATION.
METHOD on_picture_click.
MESSAGE 'Imagem clicada! Chamando transação ...' TYPE 'I'.
* CALL TRANSACTION 'VA01'. " Substitua pela transação desejada
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
CALL SCREEN 100.
MODULE pbo_0100 OUTPUT.
* Objetos necessários
DATA: go_container TYPE REF TO cl_gui_custom_container,
go_picture TYPE REF TO cl_gui_picture,
go_handler TYPE REF TO lcl_event_handler,
gt_events TYPE cntl_simple_events,
gs_event TYPE cntl_simple_event.
DATA: graphic_url(255).
DATA: BEGIN OF graphic_table OCCURS 0,
line(255) TYPE x,
END OF graphic_table.
DATA: l_graphic_conv TYPE i.
DATA: l_graphic_offs TYPE i.
DATA: graphic_size TYPE i.
DATA: l_graphic_xstr TYPE xstring.
DATA: url(255) TYPE c.
IF go_container IS INITIAL.
" Cria container e objeto de imagem
CREATE OBJECT go_container
EXPORTING container_name = 'CC_PIC'.
CREATE OBJECT go_picture
EXPORTING parent = go_container.
* Lê imagem da SE78 (xstring)
CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp
EXPORTING
p_object = 'GRAPHICS'
p_name = 'Z_IMAGEM_001'
p_id = 'BMAP'
p_btype = 'BCOL'
RECEIVING
p_bmp = l_graphic_xstr
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Converte imagem da SE78 em url
graphic_size = XSTRLEN( l_graphic_xstr ).
l_graphic_conv = graphic_size.
l_graphic_offs = 0.
WHILE l_graphic_conv > 255.
graphic_table-line = l_graphic_xstr+l_graphic_offs(255).
APPEND graphic_table.
l_graphic_offs = l_graphic_offs + 255.
l_graphic_conv = l_graphic_conv - 255.
ENDWHILE.
graphic_table-line = l_graphic_xstr+l_graphic_offs(l_graphic_conv).
APPEND graphic_table.
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
type = 'IMAGE'
subtype = 'X-UNKNOWN'
size = graphic_size
lifetime = 'T'
TABLES
data = graphic_table
CHANGING
url = url.
* Apresenta a imagem
CALL METHOD go_picture->load_picture_from_url
EXPORTING
url = url.
* Ajusta a imagem
CALL METHOD go_picture->set_display_mode
EXPORTING
display_mode = go_picture->display_mode_fit_center.
* Registra o evento de clique
gs_event-eventid = cl_gui_picture=>eventid_picture_click.
gs_event-appl_event = abap_true.
APPEND gs_event TO gt_events.
CALL METHOD go_picture->set_registered_events
EXPORTING events = gt_events.
* Cria handler de evento (habilita o evento)
CREATE OBJECT go_handler.
SET HANDLER go_handler->on_picture_click FOR go_picture.
ENDIF.
ENDMODULE.
MODULE pai_0100 INPUT.
* Não utilizado neste exemplo
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS '0100_ST'.
SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE sy-ucomm.
WHEN 'BACK' OR 'CANC' OR 'EXIT'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
Tela 0100
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
MODULE pbo_0100.
*
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
MODULE STATUS_0100.
MODULE pbo_0100.
*
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
- Criar o container CC_PIC
- Criar status com 'BACK', 'CANC' e 'EXIT'