Comandos úteis React Native

# get device id
adb devices

# refresh app
adb -s YOU_DEVICE_ID reverse tcp:8081 tcp:8081 && adb -s YOU_DEVICE_ID reverse tcp:9090 tcp:9090 && adb -s YOU_DEVICE_ID shell input text "RR"

# Forward port to you computer
adb reverse tcp:8081 tcp:8081

# Reload
adb shell input text "RR"

# Open react native menu developer on your device
adb shell input keyevent 82

Docker 01 – Comandos iniciais

# gerar uma nova imagem a partir de um docker em execução
docker commit 822da9494718 aj/ngnix-ubuntu:1.1

# executar o docker mandando a 80 do docker para a 8080 da máquina física
docker run -i -t -p 8080:80 aj/ngnix-ubuntu:1.1 /bin/bash

# executar o docker mandando a 80 do docker para a 8080 da máquina física sem abrir o shell
docker run -d -i -t -p 8080:80 aj/ngnix-ubuntu:1.1 /bin/bash

# para os dois dockers ficarem visível na rede um para o outro
docker run -it --name web02 --link inspiring_bose:web01 aj/ngnix-ubuntu:1.0 /bin/bash

# iniciar um docker que está parado
docker start 5aacdcd188f4

# obter as informações do docker
docker inspect 5aacdcd188f4

# executar um comando dentro do docker sem entrar nele
docker exec 5aacdcd188f4 /etc/init.d/nginx start

# executar um comando dentro do docker sem entrar nele
docker exec 5aacdcd188f4 ps -ef

# entrar no shell do docker
docker attach 27ed54219d4b

# executar um docker e abrir o shell nele
docker run -i -t ubuntu /bin/bash

# parar todos os dockers no powershell
docker ps -a -q | ForEach { docker stop $_ }

# cria o docker de acordo com o Dockerfile
docker-compose up -d

# cria o docker de acordo com o Dockerfile
docker build -t webserver:1.0 .

# redes
docker network ls

# obter detalhes da rede
docker network inspect laradock_backend

# Para sair do docker sem desliga-lo no powershell
CTRL+Z CTRL+C

# uso de recurso do docker
docker stats

# filtrar os dockers para a exibição
docker ps -f "status=exited"

# exibir todos os dockers
docker ps -a

# instalar o netstat
apt-get install net-tools

# confirmar se o apache está escutando a porta 80
netstat -atunp

# rodar o composer
docker-compose up --force-recreate

Exemplo de Dockerfile

FROM ubuntu
MAINTAINER adeilson@gmail.com
RUN apt-get update && apt-get install -y apache2 && apt-get install -y net-tools && apt-get clean
ENV APACHE_LOCK_DIR="/var/lock"
ENV APACHE_PID_FILE="/var/run/apache2.pid"
ENV APACHE_RUN_USER="www-data"
ENV APACHE_RUN_GROUP="www-data"
ENV APACHE_LOG_DIR="/var/log/apache2"

LABEL Description="Webserver"

VOLUME /var/www/html

# RUN /etc/init.d/apache2 start

EXPOSE 80

CMD apachectl -D FOREGROUND

ALV Editável

*&---------------------------------------------------------------------*
*& Report  ZADE7
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT  zade7.
*&---------------------------------------------------------------------*
*&  TOP
*&---------------------------------------------------------------------*
TABLES: zade.
TYPE-POOLS slis. "ALV
* Estrutura de campos do relatório
TYPES: BEGIN OF ty_ade.
INCLUDE STRUCTURE zade.         "Tab resultado RFC
TYPES: handle_style TYPE lvc_t_styl,    "Estilo edição
novo         TYPE c,             "Tipo proc => Novo
delete       TYPE c.             "Tipo proc => Eliminar
TYPES: END OF ty_ade.
DATA: t_ade_ori TYPE TABLE OF      zade,        "Tabela interna original.
t_ade     TYPE TABLE OF      ty_ade,      "Tabela interna com os campos para CRUD.
t_fieldcat     TYPE          lvc_t_fcat,  "Fieldcat alv
w_fieldcat     TYPE          lvc_s_fcat,
t_sort         TYPE          lvc_t_sort,  "Ordenação
w_sort         TYPE          lvc_s_sort,
w_layout       TYPE          lvc_s_layo,  "Layout alv
t_new          TYPE          lvc_t_styl,  "Registros novos
w_new          TYPE          lvc_s_styl,
t_edit         TYPE          lvc_t_styl,  "Registros editar
w_edit         TYPE          lvc_s_styl,
t_show         TYPE          lvc_t_styl,  "Registros exibir
w_show         TYPE          lvc_s_styl,
w_ade          TYPE          ty_ade,
w_ade_ori      TYPE          zade,
v_modific(1)   TYPE          c,           "Modif ou Visual
v_elimino(1)   TYPE          c,           "Eliminou registro
v_alterou(1)   TYPE          c,           "Alterou registro
v_inseriu(1)   TYPE          c,           "Criou regitro
t_ade_new      TYPE TABLE OF ty_ade,      "Registros novos
w_ade_new      TYPE          ty_ade,
t_ade_del      TYPE TABLE OF ty_ade,      "Registros eliminar
w_ade_del      TYPE          ty_ade,
t_ade_de2      TYPE TABLE OF zade,        "Registros eliminar
w_ade_de2      TYPE          zade,
t_ade_upd      TYPE TABLE OF ty_ade,      "Registros editar
w_ade_upd      TYPE          ty_ade,
t_ade_up2      TYPE TABLE OF zade,        "Registros editar
w_ade_up2      TYPE          zade,
v_log_handle   TYPE          balloghndl,  "handle da mensagem
v_msg          TYPE          abap_bool.
*&---------------------------------------------------------------------*
*&  SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-003.
SELECT-OPTIONS: s_matnr  FOR  zade-matnr, " Centro
s_descri FOR zade-descri NO INTERVALS NO-EXTENSION. " Data Documento
SELECTION-SCREEN END OF BLOCK a.
START-OF-SELECTION.
* Limpar conteúdo dos objetos
PERFORM zf_clear.
* Selecionar registros
PERFORM zf_selecionar_dados.
* Estrutura de campos e layout do ALV
PERFORM zf_alv_fieldcat.
* Estrutura de campos ordenados no ALV
PERFORM zf_alv_sort.
* Mapeamento para registros novos
PERFORM zf_new_fields.
* Mapeamento para registros alterados
PERFORM zf_edit_fields.
* Mapeamento para visualizar registros
PERFORM zf_show_fields.
* Loop para montar tabela com campos editaveis ou não
PERFORM zf_make_fields.
* Exibir relatório ALV
PERFORM zf_show_alv.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&  FORMS
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  ZF_SELECIONAR_DADOS
*&---------------------------------------------------------------------*
FORM zf_selecionar_dados .
SELECT *
INTO TABLE t_ade_ori
FROM zade
WHERE matnr  IN s_matnr
AND descri IN s_descri.
IF sy-subrc IS INITIAL.
SORT t_ade_ori BY matnr.
ELSE.
MESSAGE 'Dados não encontrado!' TYPE 'I' DISPLAY LIKE 'W'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.                    " ZF_SELECIONAR_DADOS
*&---------------------------------------------------------------------*
*&      Form  ZF_CLEAR
*&---------------------------------------------------------------------*
FORM zf_clear .
CLEAR:
v_modific,
v_elimino,
v_alterou,
v_inseriu,
t_fieldcat[],
w_fieldcat,
w_layout,
w_new,
t_new[],
w_edit,
t_edit[],
w_show,
t_show[],
w_ade,
t_ade[],
t_ade_new[],
w_ade_new,
t_ade_del[],
w_ade_del,
t_ade_de2[],
w_ade_de2,
t_ade_upd[],
w_ade_upd,
t_ade_up2[],
w_ade_up2,
t_ade_ori[].
FREE:
t_fieldcat[],
t_new[],
t_edit[],
t_show[],
t_ade[],
t_ade_new[],
t_ade_del[],
t_ade_de2[],
t_ade_upd[],
t_ade_up2[],
t_ade_ori[].
ENDFORM.                    " ZF_CLEAR
*&---------------------------------------------------------------------*
*&      Form  ZF_ALV_FIELDCAT
*& Estrutura de campos e layout do ALV
*&---------------------------------------------------------------------*
FORM zf_alv_fieldcat .
CLEAR t_fieldcat[].
* Campos do relatório
w_fieldcat-tabname        = 'T_ADE'.
w_fieldcat-fieldname      = 'MATNR'.
w_fieldcat-edit           = abap_false.
w_fieldcat-ref_table      = 'ZADE'.
w_fieldcat-ref_field      = 'MATNR'.
*  w_fieldcat-scrtext_l      = 'CNPJ'.
*  w_fieldcat-scrtext_m      = 'CNPJ'.
*  w_fieldcat-scrtext_s      = 'CNPJ'.
w_fieldcat-outputlen      = 18.
w_fieldcat-emphasize      = abap_true.
APPEND w_fieldcat TO t_fieldcat.
CLEAR w_fieldcat.
w_fieldcat-tabname        = 'T_ADE'.
w_fieldcat-fieldname      = 'DESCRI'.
w_fieldcat-edit           = abap_true.
w_fieldcat-ref_table      = 'ZADE'.
w_fieldcat-ref_field      = 'DESCRI'.
w_fieldcat-outputlen      = 30.
APPEND w_fieldcat TO t_fieldcat.
CLEAR w_fieldcat.
* Layout do relatório
w_layout-zebra            = abap_true.
w_layout-stylefname       = 'HANDLE_STYLE'.
ENDFORM.                    " ZF_ALV_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  ZF_NEW_FIELDS
*& Mapeamento para registros novos
*&---------------------------------------------------------------------*
FORM zf_new_fields .
CLEAR t_new[].
w_new-fieldname = 'MATNR'.
w_new-style     = cl_gui_alv_grid=>mc_style_enabled.
w_new-style2    = abap_false.
w_new-style3    = abap_false.
w_new-style4    = abap_false.
INSERT w_new INTO TABLE t_new.
CLEAR w_new.
w_new-fieldname = 'DESCRI'.
w_new-style     = cl_gui_alv_grid=>mc_style_enabled.
w_new-style2    = abap_false.
w_new-style3    = abap_false.
w_new-style4    = abap_false.
INSERT w_new INTO TABLE t_new.
CLEAR w_new.
ENDFORM.                    " ZF_NEW_FIELDS
*&---------------------------------------------------------------------*
*&      Form  ZF_EDIT_FIELDS
*& Mapeamento para registros a serem alterados
*&---------------------------------------------------------------------*
FORM zf_edit_fields .
CLEAR t_edit[].
w_edit-fieldname = 'MATNR'.
w_edit-style     = cl_gui_alv_grid=>mc_style_disabled.
w_edit-style2    = abap_false.
w_edit-style3    = abap_false.
w_edit-style4    = abap_false.
INSERT w_edit INTO TABLE t_edit.
CLEAR w_edit.
w_edit-fieldname = 'DESCRI'.
w_edit-style     = cl_gui_alv_grid=>mc_style_enabled.
w_edit-style2    = abap_false.
w_edit-style3    = abap_false.
w_edit-style4    = abap_false.
INSERT w_edit INTO TABLE t_edit.
CLEAR w_edit.
ENDFORM.                    " ZF_EDIT_FIELDS
*&---------------------------------------------------------------------*
*&      Form  ZF_SHOW_FIELDS
*& Mapeamento para visualizar registros
*&---------------------------------------------------------------------*
FORM zf_show_fields .
CLEAR t_show[].
w_show-fieldname = 'MATNR'.
w_show-style     = cl_gui_alv_grid=>mc_style_disabled.
w_show-style2    = abap_false.
w_show-style3    = abap_false.
w_show-style4    = abap_false.
INSERT w_show INTO TABLE t_show.
CLEAR w_show.
w_show-fieldname = 'DESCRI'.
w_show-style     = cl_gui_alv_grid=>mc_style_disabled.
w_show-style2    = abap_false.
w_show-style3    = abap_false.
w_show-style4    = abap_false.
INSERT w_show INTO TABLE t_show.
CLEAR w_show.
ENDFORM.                    " ZF_SHOW_FIELDS
*&---------------------------------------------------------------------*
*&      Form  ZF_SHOW_ALV
*& Exibir relatório ALV
*&---------------------------------------------------------------------*
FORM zf_show_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program       = sy-repid
is_layout_lvc            = w_layout
it_fieldcat_lvc          = t_fieldcat
i_callback_user_command  = 'ZF_COMMANDS'
i_callback_pf_status_set = 'ZF_STATUS'
it_sort_lvc              = t_sort
TABLES
t_outtab                 = t_ade[]
EXCEPTIONS
program_error            = 1
OTHERS                   = 2.
IF sy-subrc IS NOT INITIAL.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.                    " ZF_SHOW_ALV
*&---------------------------------------------------------------------*
*&      Form  ZF_STATUS
*& Botões do ALV
*&---------------------------------------------------------------------*
FORM zf_status USING ct_extab TYPE slis_t_extab.
*  DATA l_extab LIKE LINE OF ct_extab.
CLEAR ct_extab.
*  AUTHORITY-CHECK OBJECT 'ZOAXXXX'
*    ID 'MATNR' FIELD p_matnr "Material
*    ID 'ACTVT' FIELD '01'.   "Criar
*  IF NOT sy-subrc IS INITIAL.
*    MOVE '&NOVO' TO l_extab.
*    APPEND l_extab TO ct_extab.
*  ENDIF.
*
*  AUTHORITY-CHECK OBJECT 'ZOAXXXX'
*    ID 'MATNR' FIELD p_emp  "Material
*    ID 'ACTVT' FIELD '06'.  "Excluir
*  IF NOT sy-subrc IS INITIAL.
*    MOVE '&DELE' TO l_extab.
*    APPEND l_extab TO ct_extab.
*  ENDIF.
*
*  AUTHORITY-CHECK OBJECT 'ZOAXXXX'
*    ID 'MATNR' FIELD p_emp  "Material
*    ID 'ACTVT' FIELD '02'.  "Altera
*  IF NOT sy-subrc IS INITIAL.
*    MOVE '&MODF' TO l_extab.
*    APPEND l_extab TO ct_extab.
*  ENDIF.
SET PF-STATUS 'ZPFADE7' EXCLUDING ct_extab.
ENDFORM.                    "ZF_STATUS
*&---------------------------------------------------------------------*
*&      Form  ZF_MAKE_FIELDS
*& Manutenção dos dados quando alterados
*&---------------------------------------------------------------------*
FORM zf_make_fields .
LOOP AT t_ade_ori INTO w_ade_ori.
MOVE-CORRESPONDING w_ade_ori TO w_ade.
*    w_ade-novo = abap_true.
APPEND LINES OF t_show TO w_ade-handle_style.
APPEND w_ade TO t_ade.
CLEAR w_ade-handle_style[].
ENDLOOP.
ENDFORM.                    " ZF_MAKE_FIELDS
*&---------------------------------------------------------------------*
*&      Form  ZF_COMMANDS
*& Ação dos botões do ALV
*&---------------------------------------------------------------------*
FORM zf_commands USING ucomm    TYPE sy-ucomm
selfield TYPE slis_selfield.
DATA:
lv_tabix      TYPE        sy-tabix,
lv_duplic(1)  TYPE        c,
ref_grid      TYPE REF TO cl_gui_alv_grid,
lt_index_rows TYPE        lvc_t_row,
lt_row_no     TYPE        lvc_t_roid,
lw_row_no     TYPE        lvc_s_roid.
* Busca valores do ALV ------------------------------------------------*
IF ref_grid IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid.
ENDIF.
IF NOT ref_grid IS INITIAL.
CALL METHOD ref_grid->check_changed_data.
ENDIF.
* Refresh -------------------------------------------------------------*
CASE ucomm.
WHEN '&REFR'.
* Atualizar alv
PERFORM zf_refresh.
WHEN '&MODF'.
* Ver/Modificar registro ----------------------------------------------*
IF v_modific IS INITIAL.
LOOP AT t_ade INTO w_ade.
lv_tabix = sy-tabix.
CLEAR w_ade-handle_style[].
IF w_ade-matnr IS INITIAL.
APPEND LINES OF t_new TO w_ade-handle_style.
ELSE.
APPEND LINES OF t_edit TO w_ade-handle_style.
ENDIF.
MODIFY t_ade FROM w_ade INDEX lv_tabix.
ENDLOOP.
v_modific = abap_true.
ELSE.
LOOP AT t_ade INTO w_ade WHERE matnr IS NOT INITIAL.
lv_tabix = sy-tabix.
CLEAR w_ade-handle_style[].
APPEND LINES OF t_show TO w_ade-handle_style.
MODIFY t_ade FROM w_ade INDEX lv_tabix.
ENDLOOP.
v_modific = abap_false.
ENDIF.
* Novo registro -------------------------------------------------------*
WHEN '&NOVO'.
CLEAR w_ade.
w_ade-mandt = sy-mandt.
APPEND LINES OF t_new TO w_ade-handle_style.
w_ade-novo = abap_true.
APPEND w_ade TO t_ade.
CLEAR w_ade-handle_style[].
* Eliminar registro ---------------------------------------------------*
WHEN '&DELE'.
CALL METHOD ref_grid->get_selected_rows
IMPORTING
et_index_rows = lt_index_rows
et_row_no     = lt_row_no.
LOOP AT lt_row_no INTO lw_row_no.
READ TABLE t_ade
INTO w_ade
INDEX lw_row_no-row_id.
IF sy-subrc IS INITIAL.
lv_tabix = sy-tabix.
w_ade-delete = abap_true.
MODIFY t_ade FROM w_ade INDEX lv_tabix.
MOVE-CORRESPONDING w_ade TO w_ade_del.
APPEND w_ade_del TO t_ade_del.
CLEAR w_ade_del.
ENDIF.
ENDLOOP.
DELETE t_ade WHERE delete = abap_true.
* Gravar atualizações -------------------------------------------------*
WHEN '&SAVE'.
v_msg = abap_false.
PERFORM log_create.
* Valida registros novos
t_ade_new[] = t_ade[].
DELETE t_ade_new WHERE novo IS INITIAL.
DELETE t_ade     WHERE novo IS NOT INITIAL.
LOOP AT t_ade_new INTO w_ade_new.
* Atualiza tabela de visualização do ALV
READ TABLE t_ade
INTO w_ade
WITH KEY matnr        = w_ade_new-matnr.
IF sy-subrc IS INITIAL.
lv_duplic = abap_true.
ELSE.
w_ade-matnr        = w_ade_new-matnr.
w_ade-descri       = w_ade_new-descri.
w_ade-novo         = abap_false.
CLEAR w_ade-handle_style[].
APPEND LINES OF t_show TO w_ade-handle_style.
APPEND w_ade TO t_ade.
ENDIF.
ENDLOOP.
* Insere registros na tabela original
IF t_ade[] IS NOT INITIAL.
* Atualizar registros
LOOP AT t_ade INTO w_ade.
lv_tabix = sy-tabix.
* Adicionar/modificar registros
IF w_ade-matnr IS INITIAL.
PERFORM log_add USING 'Material deve ser preenchido!'
'E'.
CONTINUE.
ENDIF.
w_ade_upd-matnr        = w_ade-matnr.
w_ade_upd-descri       = w_ade-descri.
READ TABLE t_ade_ori
INTO w_ade_ori
WITH KEY matnr     = w_ade_upd-matnr.
IF sy-subrc IS INITIAL.
IF w_ade_ori-descri = w_ade_upd-descri.
CONTINUE.
ELSE.
v_alterou = abap_true.
ENDIF.
ELSE.
v_inseriu = abap_true.
ENDIF.
APPEND w_ade_upd TO t_ade_upd.
ENDLOOP.
* Alterar tabela de fornecedores
CLEAR t_ade_up2[].
LOOP AT t_ade_upd INTO w_ade_upd.
MOVE-CORRESPONDING w_ade_upd TO w_ade_up2.
APPEND w_ade_up2 TO t_ade_up2.
ENDLOOP.
IF NOT t_ade_up2[] IS INITIAL.
MODIFY zade FROM TABLE t_ade_up2.
ENDIF.
CLEAR t_ade_upd[].
ENDIF.
* Elimina registros
CLEAR t_ade_de2[].
LOOP AT t_ade_del INTO w_ade_del.
MOVE-CORRESPONDING w_ade_del TO w_ade_de2.
APPEND w_ade_de2 TO t_ade_de2.
ENDLOOP.
IF t_ade_de2[] IS NOT INITIAL.
DELETE zade FROM TABLE t_ade_de2.
v_elimino = abap_true.
ENDIF.
* Mensagens
IF v_inseriu IS NOT INITIAL.
PERFORM log_add USING 'Registro(s) inseridos(s) com sucesso!'
'S'.
ENDIF.
IF v_alterou IS NOT INITIAL.
PERFORM log_add USING 'Registro(s) modificado(s) com sucesso!'
'S'.
ENDIF.
IF v_elimino IS NOT INITIAL.
PERFORM log_add USING 'Registro(s) eliminado(s) com sucesso!'
'S'.
ENDIF.
IF lv_duplic IS NOT INITIAL.
PERFORM log_add USING 'Um ou mais registros duplicados foram removidos!'
'S'.
ENDIF.
PERFORM log_show.
* Atualizar alv
PERFORM zf_refresh.
ENDCASE.
*  SORT t_ade BY matnr.
* Atualiza os dados no ALV
selfield-refresh = abap_true.
ENDFORM.                    "ZF_COMMANDS
*&---------------------------------------------------------------------*
*&      Form  ZF_REFRESH
*& Atualizar alv
*&---------------------------------------------------------------------*
FORM zf_refresh .
* Limpar conteúdo dos objetos
PERFORM zf_clear.
* Selecionar registros
PERFORM zf_selecionar_dados.
* Estrutura de campos e layout do ALV
PERFORM zf_alv_fieldcat.
* Estrutura de campos ordenados no ALV
PERFORM zf_alv_sort.
* Mapeamento para registros novos
PERFORM zf_new_fields.
* Mapeamento para registros a serem alterados
PERFORM zf_edit_fields.
* Mapeamento para visualizar registros
PERFORM zf_show_fields.
* Loop para montar tabela com campos editaveis ou não
PERFORM zf_make_fields.
ENDFORM.                    " ZF_REFRESH
*&---------------------------------------------------------------------*
*&      Form  ZF_ALV_SORT
*&---------------------------------------------------------------------*
FORM zf_alv_sort.
CLEAR w_sort.
w_sort-fieldname = 'MATNR'.
w_sort-spos = '1'.
w_sort-up = 'X'.
APPEND w_sort TO t_sort.
ENDFORM.                    " ZF_ALV_SORT
*&---------------------------------------------------------------------*
*&      Form  log_create
*& Cria o handle do LOG
*&---------------------------------------------------------------------*
FORM log_create.
DATA l_s_log TYPE bal_s_log.
IF v_log_handle IS INITIAL.
* create an initial log file
l_s_log-extnumber  = 'ZADE7'(001).
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log      = l_s_log
IMPORTING
e_log_handle = v_log_handle
EXCEPTIONS
OTHERS       = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
* Limpar as mensagens anteriores
CALL FUNCTION 'BAL_LOG_MSG_DELETE_ALL'
EXPORTING
i_log_handle  = v_log_handle
EXCEPTIONS
log_not_found = 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.                    "log_create
*&---------------------------------------------------------------------*
*&      Form  LOG_ADD
*& Adiciona mensagem para exibir
*&---------------------------------------------------------------------*
FORM log_add USING p_msg       TYPE bal_s_msg-msgv1
p_msgty     TYPE bal_s_msg-msgty. "E / W / S
*                   p_probclass TYPE bal_s_msg-probclass. "1 / 2 / 3
DATA l_s_msg TYPE bal_s_msg.
v_msg = abap_true.
l_s_msg-msgid     = '88'.
l_s_msg-msgno     = 0.
l_s_msg-msgty     = p_msgty.
*  l_s_msg-probclass = p_probclass.
l_s_msg-msgv1     = p_msg.
*   add message to log file
*   (we explicitly specify I_LOG_HANLDE since we want to add this
*    message to the new opened log. The default log might be different
*    from this!).
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_log_handle = v_log_handle
i_s_msg      = l_s_msg
EXCEPTIONS
OTHERS       = 1.
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.                    "LOG_ADD
*&---------------------------------------------------------------------*
*&      Form  LOG_SHOW
*& Exibi a mensagem
*&---------------------------------------------------------------------*
FORM log_show.
DATA:
l_s_display_profile TYPE bal_s_prof.
IF v_msg EQ abap_true.
* get a prepared profile
CALL FUNCTION 'BAL_DSP_PROFILE_POPUP_GET'
IMPORTING
e_s_display_profile = l_s_display_profile
EXCEPTIONS
OTHERS              = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* set report to allow saving of variants
l_s_display_profile-disvariant-report = sy-repid.
* when you use also other ALV lists in your report,
* please specify a handle to distinguish between the display
* variants of these different lists, e.g:
l_s_display_profile-disvariant-handle = 'LOG'.
* call display function module
* We do not specify any filter (like I_S_LOG_FILTER, ...,
* I_T_MSG_HANDLE) since we want to display all logs available
CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
EXPORTING
i_s_display_profile = l_s_display_profile
EXCEPTIONS
OTHERS              = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
ENDFORM.                    "LOG_SHOW

Continue lendo