*&---------------------------------------------------------------------*
*& Report ZTESTEDI *
*& Autor : Diego Rodrigues - BBKO Data: 29.07.2009 *
*&---------------------------------------------------------------------*
*& Histórico de Alterações: *
*&---------------------------------------------------------------------*
*& Data |Autor |Alteração *
************************************************************************
*& Criar uma tela 0100 e nessa tela:
*& Criar um container com o nome de O_CONT
*& Outro com o nome de DBOX
*& 2 campos um com nome de v_usuario e v_message
*& mais um botão com o nome de SEND
*& --------------------------------------------
*& Criar uma tela 050 de acordo com a foto
*& ok com nome de OK e sair com nome de SAIR
*&---------------------------------------------------------------------*
REPORT ztestedi.
**********************************************************************
*** Declaração de Tipos
**********************************************************************
TYPES: BEGIN OF ty_chat,
uname TYPE zchat-uname,
texto TYPE zchat-texto,
END OF ty_chat.
**********************************************************************
*** Declaração de Tabelas
**********************************************************************
DATA: t_chat TYPE TABLE OF zchat,
t_chat_aux TYPE TABLE OF ty_chat.
**********************************************************************
*** Declaração de Work Areas
**********************************************************************
DATA: wa_chat TYPE zchat,
wa_chat_aux TYPE ty_chat.
**********************************************************************
*** Declaração de Variáveis para os Methodos.
**********************************************************************
DATA: custom_container TYPE REF TO cl_gui_custom_container,
editor TYPE REF TO cl_gui_textedit,
g_grid1 TYPE REF TO cl_gui_alv_grid.
DATA: vg_exibe TYPE boolean,
ok_code TYPE syucomm.
DATA : wa_indx TYPE indx.
**********************************************************************
*** Tabelas e work areas para validar linhas de seleção no ALV.
**********************************************************************
DATA: v_extension TYPE i,
v_usuario TYPE c LENGTH 15,
v_message TYPE c LENGTH 132.
*----------------------------------------------------------------------*
* Includes
*----------------------------------------------------------------------*
INCLUDE: zsuppi_dg_identif_centro.
*----------------------------------------------------------------------*
* Declaração de tabelas internas
*----------------------------------------------------------------------*
DATA: t_bdc LIKE bdcdata OCCURS 0 WITH HEADER LINE.
* Tabela para armazenar status tela
DATA: BEGIN OF t_func OCCURS 0,
fcode LIKE rsmpe-func,
END OF t_func.
*----------------------------------------------------------------------*
* Declaração de work areas
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* HTML
*----------------------------------------------------------------------*
DATA: "dbox TYPE REF TO cl_gui_dialogbox_container,
dbox TYPE REF TO cl_gui_custom_container,
html TYPE REF TO cl_gui_html_viewer.
*----------------------------------------------------------------------*
* Declaração de variáveis
*----------------------------------------------------------------------*
DATA: v_contador TYPE i,
v_data_hora(15),
v_process TYPE i,
v_dia1 TYPE sy-datum,
v_dia2 TYPE sy-datum,
v_hora1 TYPE sy-uzeit, "#EC NEEDED
v_hora2 TYPE sy-uzeit,
v_hora_aux TYPE sy-uzeit,
v_dh_aux1 TYPE tzntstmps, "#EC NEEDED
v_dh_aux2 TYPE tzntstmps, "#EC NEEDED
v_hora_r(6) TYPE n,
v_prim_vez VALUE 'S',
v_temp1(3) TYPE c VALUE '15',
v_centro LIKE zsuppt_dg_usuari-werks,
v_desccentro LIKE t001w-name1,
v_cancel,
* ok_code LIKE sy-ucomm,
save_ok LIKE sy-ucomm,
v_data LIKE sy-datum,
v_hora LIKE sy-uzeit.
*----------------------------------------------------------------------*
* Declaração de contantes
*----------------------------------------------------------------------*
CONSTANTS: c_x VALUE 'X'.
*******************************************************************
CLASS lcl_toolbar DEFINITION INHERITING FROM cl_gui_toolbar.
TYPE-POOLS
icon.
PUBLIC SECTION.
METHODS
constructor IMPORTING html TYPE REF TO cl_gui_html_viewer.
PRIVATE SECTION.
DATA
html TYPE REF TO cl_gui_html_viewer.
METHODS on_function_selected FOR EVENT function_selected OF lcl_toolbar
IMPORTING fcode.
ENDCLASS. "lcl_toolbar DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_toolbar IMPLEMENTATION.
METHOD constructor.
DATA:
dbox TYPE REF TO cl_gui_dialogbox_container,
ievents TYPE cntl_simple_events,
xevents LIKE LINE OF ievents.
IF sy-subrc <> 0.
ENDIF.
super->constructor( parent = dbox
display_mode = m_mode_horizontal ).
me->html = html.
xevents-eventid = m_id_function_selected.
APPEND xevents TO ievents.
set_registered_events( events = ievents ).
SET HANDLER on_function_selected FOR me.
ENDMETHOD. "constructor
*----------------------------------------------------------------------*
METHOD on_function_selected.
DATA
url TYPE c LENGTH 200. "#EC NEEDED
CASE fcode.
WHEN 'GET_CURRENT_URL'.
me->html->get_current_url( IMPORTING url = url ).
* cl_gui_cfw=>flush( ).
ENDCASE.
ENDMETHOD. "on_function_selected
ENDCLASS. "lcl_toolbar IMPLEMENTATION
DATA: toolbar TYPE REF TO lcl_toolbar.
*----------------------------------------------------------------------*
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
start,
dp_publish_www_url IMPORTING objid TYPE w3objid
lifetime TYPE c DEFAULT cndp_lifetime_transaction
EXPORTING url TYPE cndp_url
EXCEPTIONS error,
on_sapevent FOR EVENT sapevent OF cl_gui_html_viewer IMPORTING action
query_table.
ENDCLASS. "lcl_main DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_main IMPLEMENTATION.
METHOD start.
DATA:
url TYPE cndp_url,
ihtml TYPE TABLE OF char255,
t TYPE string,
v TYPE string, "#EC NEEDED
ievents TYPE cntl_simple_events,
xevents LIKE LINE OF ievents.
DATA vc_nome_container(30) TYPE c.
* IF dbox IS NOT INITIAL.
* CALL METHOD dbox->free.
* ENDIF.
*
* CREATE OBJECT dbox EXPORTING top = 35
* left = 1000
* width = 180
* height = 43.
*
* IF sy-subrc <> 0.
* ENDIF.
* Dialogbox erzeugen
IF dbox IS NOT INITIAL.
CALL METHOD dbox->finalize.
CALL METHOD dbox->free.
ENDIF.
*
vc_nome_container = 'DBOX'.
* Nome do container definido no layout da tela
CREATE OBJECT dbox
EXPORTING
container_name = vc_nome_container
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
IF sy-subrc <> 0.
* MESSAGE e020 WITH text-e08.
"Erro na criação do Container
EXIT.
ENDIF.
IF toolbar IS NOT INITIAL.
CALL METHOD toolbar->finalize.
ENDIF.
IF html IS NOT INITIAL.
CALL METHOD html->finalize.
ENDIF.
* HTML Control
CREATE OBJECT html EXPORTING parent = dbox.
* Toolbar
CREATE OBJECT toolbar EXPORTING html = html.
*********************************************************************************
CLEAR: t, ihtml[], ihtml.
APPEND: '
TELA ONLINE HTML' TO ihtml."#EC NOTEXT
APPEND: '' TO ihtml."#EC NOTEXT
APPEND: '' TO ihtml."#EC NOTEXT
APPEND: '' TO ihtml."#EC NOTEXT
APPEND: '' TO ihtml."#EC NOTEXT
dp_publish_www_url( EXPORTING objid = 'ZNAOCAI'
IMPORTING url = url
EXCEPTIONS error = 1 ).
APPEND: '' TO ihtml.
html->load_data( IMPORTING assigned_url = url
CHANGING data_table = ihtml ).
html->show_url( url = url ).
xevents-eventid = html->m_id_sapevent.
APPEND xevents TO ievents.
html->set_registered_events( events = ievents ).
SET HANDLER on_sapevent FOR html.
ADD 1 TO v_contador.
IF v_contador < 100.
SET SCREEN 0100.
LEAVE SCREEN.
ELSE.
CLEAR: v_contador.
CLEAR: t_bdc, t_bdc[].
PERFORM bdc_dynpro USING 'ZTESTEDI' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=HTML'.
CALL TRANSACTION 'ZDGONLINE' USING t_bdc MODE 'N'.
ENDIF.
ENDMETHOD. "start
*----------------------------------------------------------------------*
METHOD dp_publish_www_url.
* Colocar os 17 segundos no box.
CALL FUNCTION 'DP_PUBLISH_WWW_URL'
EXPORTING
objid = objid
lifetime = lifetime
IMPORTING
url = url
EXCEPTIONS
dp_invalid_parameters = 1
no_object = 2
dp_error_publish = 3.
IF sy-subrc <> 0. RAISE error. ENDIF.
ENDMETHOD. "dp_publish_www_url
*----------------------------------------------------------------------*
METHOD on_sapevent.
CASE action.
WHEN 'weiter'. " query_table
WHEN 'info'.
lcl_main=>start( ).
ENDCASE.
ENDMETHOD. "on_sapevent
ENDCLASS. "lcl_main IMPLEMENTATION
**********************************************************************
*** Início Codificação
**********************************************************************
START-OF-SELECTION.
CALL SCREEN 0050 STARTING AT 10 5.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'SP0100'.
SET TITLEBAR 'ST0100'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
IF v_message IS NOT INITIAL.
sy-ucomm = 'ENTE'.
wa_chat-mandt = sy-mandt.
wa_chat-uname = v_usuario.
wa_chat-texto = v_message.
wa_chat-uzeit = sy-uzeit.
wa_chat-datum = sy-datum.
APPEND wa_chat TO t_chat.
CLEAR v_message.
SORT t_chat BY uzeit.
* EXPORT t_chat FROM t_chat TO DATABASE indx(st) FROM wa_indx ID 'ABCD'.
INSERT zchat FROM wa_chat.
* EXPORT a = t_chat TO MEMORY ID 'CHAT'.
* Abrir transação ZDGONLINE em uma nova janela
IF sy-ucomm = 'ZDGONLINE'.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION' STARTING NEW TASK sy-ucomm
EXPORTING
tcode = sy-ucomm
mode_val = 'A'
update_val = 'A'
EXCEPTIONS
call_transaction_denied = 1
tcode_invalid = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
ENDIF.
IF sy-ucomm = 'HTML' .
v_temp1 = '17'. "10 minutos
lcl_main=>start( ).
ENDIF.
EXPORT v_usuario TO MEMORY ID 'MES'.
EXPORT v_message TO MEMORY ID 'USU'.
ENDIF.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module create_container OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE create_container OUTPUT.
DATA: v_hora_auxx TYPE sy-uzeit.
v_hora_auxx = sy-uzeit - 600.
REFRESH: t_chat_aux, t_chat.
SELECT *
FROM zchat
INTO TABLE t_chat
where datum = sy-datum
and uzeit > v_hora_auxx.
SORT t_chat BY uzeit.
* IMPORT t_chat = t_chat
* FROM DATABASE indx(st) TO wa_indx ID 'ABCD'.
*
* SORT t_chat BY uzeit.
*
* DELETE t_chat WHERE uzeit < v_hora_auxx.
LOOP AT t_chat INTO wa_chat.
wa_chat_aux-uname = wa_chat-uname.
wa_chat_aux-texto = wa_chat-texto.
APPEND wa_chat_aux TO t_chat_aux.
ENDLOOP.
SORT t_chat BY uzeit.
* IMPORT a = t_chat FROM MEMORY ID 'CHAT'.
PERFORM f_create_object USING 'O_CONT'
70
CHANGING custom_container
editor.
ENDMODULE. " create_container OUTPUT
*&---------------------------------------------------------------------*
*& Form f_create_object
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->CONTNAME text
* -->POSITION text
* -->O_CONT text
* -->EDITOR text
*----------------------------------------------------------------------*
FORM f_create_object USING contname TYPE any
position TYPE any
CHANGING o_cont TYPE REF TO cl_gui_custom_container
editor TYPE REF TO cl_gui_textedit.
IF o_cont IS INITIAL.
CREATE OBJECT o_cont
EXPORTING
container_name = contname
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.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Create obejct for the TextEditor control
CREATE OBJECT editor
EXPORTING
wordwrap_mode = cl_gui_textedit=>wordwrap_at_fixed_position
wordwrap_position = position
wordwrap_to_linebreak_mode = cl_gui_textedit=>true
parent = o_cont
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
gui_type_not_supported = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
DATA: v_lines TYPE i,
c_1 TYPE i VALUE 1,
c_0 TYPE i VALUE 0.
CALL METHOD editor->set_text_as_r3table
EXPORTING
table = t_chat_aux
EXCEPTIONS
error_dp = 1
error_dp_create = 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.
DESCRIBE TABLE t_chat_aux LINES v_lines.
CALL METHOD editor->set_readonly_mode
EXPORTING
readonly_mode = 1
EXCEPTIONS
error_cntl_call_method = 1
invalid_parameter = 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.
CALL METHOD editor->go_to_line
EXPORTING
LINE = v_lines
EXCEPTIONS
ERROR_CNTL_CALL_METHOD = 1
others = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. "f_create_object
*&---------------------------------------------------------------------*
*& Module m_saida INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE m_saida INPUT.
LEAVE PROGRAM.
ENDMODULE. " m_saida INPUT
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro. "#EC *
CLEAR t_bdc.
t_bdc-program = program.
t_bdc-dynpro = dynpro.
t_bdc-dynbegin = 'X'.
APPEND t_bdc.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval. "#EC *
CLEAR t_bdc.
t_bdc-fnam = fnam.
t_bdc-fval = fval.
APPEND t_bdc.
ENDFORM. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Module exit INPUT
*&---------------------------------------------------------------------*
* Sair do programa
*----------------------------------------------------------------------*
MODULE exit INPUT.
CLEAR: save_ok.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'EXIT' OR 'CANC' OR 'BACK'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " exit INPUT
**&---------------------------------------------------------------------*
**& Module status_0100 OUTPUT
**&---------------------------------------------------------------------*
** Status e títulos de tela
**----------------------------------------------------------------------*
*MODULE status_0100 OUTPUT.
* REFRESH: t_func.
*
* SET PF-STATUS 'S100' EXCLUDING t_func.
* SET TITLEBAR '100'.
*ENDMODULE. " status_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Form f_dados_tela
*&---------------------------------------------------------------------*
* Atualiza data/hora da tela
*----------------------------------------------------------------------*
FORM f_dados_tela .
CLEAR: v_data, v_hora.
v_data = sy-datum.
v_hora = sy-uzeit.
ENDFORM. " f_dados_tela
*&---------------------------------------------------------------------*
*& Module m_monta_tela OUTPUT
*&---------------------------------------------------------------------*
* Monta tela - e acesso inicial
*----------------------------------------------------------------------*
MODULE m_monta_tela OUTPUT.
IMPORT v_usuario FROM MEMORY ID 'USU'.
IMPORT v_message FROM MEMORY ID 'MES'.
CLEAR : v_cancel.
* Executar a função para identificar a centro
* IF v_prim_vez = 'S'.
* PERFORM f_identifica_centro USING c_x
* CHANGING v_centro
* v_desccentro
* v_cancel.
* ENDIF.
IF v_cancel IS NOT INITIAL.
LEAVE PROGRAM.
ENDIF.
CHECK v_cancel IS INITIAL.
IF v_process = 0.
GET TIME.
v_process = 100.
v_hora1 = sy-uzeit.
v_dia1 = v_dia2 = sy-datum.
IF v_hora2 IS INITIAL.
v_hora2 = sy-uzeit.
ENDIF.
v_hora_aux = '001000'.
CALL FUNCTION 'ZSUPPF_DG_SOMA_HORAS'
EXPORTING
p_hora1 = v_hora2
p_hora2 = v_hora_aux
IMPORTING
p_hora_sem_formatar = v_hora_r.
IF v_hora_r > '240000'.
v_hora_r(2) = '00'.
ADD 1 TO v_dia2.
ENDIF.
v_hora2 = v_hora_r.
ENDIF.
GET TIME.
v_hora1 = sy-uzeit.
v_dia1 = sy-datum.
CLEAR: v_data_hora.
CONCATENATE v_dia1 v_dia1 INTO v_data_hora.
v_dh_aux1 = v_data_hora.
CLEAR: v_data_hora.
CONCATENATE v_dia2 v_dia2 INTO v_data_hora.
v_dh_aux2 = v_data_hora.
PERFORM f_dados_tela.
IF v_prim_vez = 'N'.
v_process = v_process - 25.
ENDIF.
IF v_prim_vez = 'S'.
v_prim_vez = 'N'.
v_temp1 = '17'. "10 minutos
lcl_main=>start( ).
ENDIF.
ENDMODULE. " m_monta_tela OUTPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0050 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0050 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0050 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0050 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0050 INPUT.
EXPORT v_usuario TO MEMORY ID 'MES'.
wa_chat-mandt = sy-mandt.
wa_chat-uname = v_usuario.
CONCATENATE sy-uname 'acabou de entrar, com o nome de:' v_usuario INTO wa_chat-texto SEPARATED BY space.
wa_chat-uzeit = sy-uzeit.
wa_chat-datum = sy-datum.
APPEND wa_chat TO t_chat.
CLEAR v_message.
SORT t_chat BY uzeit.
* EXPORT t_chat FROM t_chat TO DATABASE indx(st) FROM wa_indx ID 'ABCD'.
INSERT zchat FROM wa_chat.
CALL SCREEN 0100.
ENDMODULE. " USER_COMMAND_0050 INPUT