*&---------------------------------------------------------------------* *& 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 APPEND: '
' TO ihtml."#EC NOTEXT APPEND: ' ' 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