Sei sulla pagina 1di 3

Como fazer um programa ABAP checar execuo de processo Windows

Por Joo Antnio Soares


O sistema SAP R/3 tem como uma de suas caractersticas a existncia de
servidores em camadas que interagem para possibilitar ao usurio a execuo de suas
tarefas. So eles o servidor de banco de dados, o servidor de aplicao e o servidor de
apresentao. Resumidamente, o servidor de banco de dados onde os registros
gravados so persistidos, o servidor de aplicao onde os programas so executados e
o servidor de apresentao o que realiza a interface com o usurio.
Sendo assim, ao chamar uma transao, o sistema executa o programa
correspondente no servidor de aplicao, recupera os dados necessrios no servidor de
banco de dados, e mostra a sada no servidor de apresentao. Isso torna o sistema
transparente e seguro, mas dificulta que os programas tenham acesso aos processos do
computador do usurio, uma vez que o servidor de aplicao que dispe dos recursos
para a execuo dos programas.
Para suprir a necessidade de um programa ABAP reconhecer a execuo de
processos Windows no computador do usurio, no encontrei uma alternativa standard.
Por isso, desenvolvi o cdigo a seguir que demostra uma maneira simples de fazer tal
verificao. Basicamente, o programa cria um arquivo em lotes que baixado e
executado no computador do usurio. Esse arquivo contm a chamada de um comando
(tasklist) do prompt do Windows, que aps executado gera outro arquivo, que vai nos
dizer se o processo em questo est ou no em execuo.
(Apesar de eu no ter encontrado uma alternativa standard, isso no significa que no
exista. Sugestes e melhorias so muito bem-vindas)

*&---------------------------------------------------------------------*
*& Report Z_WINDOWS_PROCESS_CHECK
*&---------------------------------------------------------------------*
*& Autor: Joo Antnio Soares
*&---------------------------------------------------------------------*
REPORT z_windows_process_check.
*&---------------------------------------------------------------------*
*& Declarao de dados
*&---------------------------------------------------------------------*
DATA: BEGIN OF tasklist OCCURS 0,
line(255) TYPE c,
END OF tasklist,
windir(3)
filename_bat
filename_log
filepath_bat
filepath_log
filesize_log
rc

TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE

c,
string VALUE 'tasklist.bat',
string VALUE 'tasklist.log',
string,
string,
i,
i.

*&---------------------------------------------------------------------*
*& Criao da tela de seleo
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETER: p_proc TYPE string.
SELECTION-SCREEN END OF BLOCK b1.

*&---------------------------------------------------------------------*
*& Verifica a unidade do disco local no computador usurio
*&---------------------------------------------------------------------*
CALL FUNCTION 'GUI_GET_DESKTOP_INFO'
EXPORTING
type = 2
CHANGING
return = windir.
TRANSLATE p_proc TO LOWER CASE.
CLEAR: tasklist, tasklist[].
*&---------------------------------------------------------------------*
*& O comando tasklist com os parmetros -FI "IMAGENAME eq P_PROC"
*& vai verificar se o programa est em execuo. O parmetro /fo CSV
*& vai gerar um arquivo contendo informaes do processo caso ele
*& esteja em execuo, ou um arquivo em branco caso no esteja.
*&---------------------------------------------------------------------*
CONCATENATE 'tasklist -fi "IMAGENAME eq ' p_proc '" /fo CSV > ' windir
filename_log INTO tasklist-line RESPECTING BLANKS.
APPEND tasklist.
CONCATENATE:

windir filename_bat INTO filepath_bat,


windir filename_log INTO filepath_log.

*&---------------------------------------------------------------------*
*& Faz o download do arquivo tasklist.bat no disco local
*&---------------------------------------------------------------------*
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename
= filepath_bat
no_auth_check = 'X'
TABLES
data_tab
= tasklist[].
*&---------------------------------------------------------------------*
*& Executa o arquivo tasklist.bat no disco local
*&---------------------------------------------------------------------*
CALL METHOD cl_gui_frontend_services=>execute
EXPORTING
application = filepath_bat
minimized = 'X'
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
bad_parameter = 3
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
synchronous_failed = 8
not_supported_by_gui = 9
OTHERS = 10.
*&---------------------------------------------------------------------*
*& Aps a execuo, foi gerado o arquivo tasklist.log
*& A execuo ou no do processo vai ser verificada pelo tamanho do
*& arquivo gerado. Caso o arquivo tenha tamanho 0 (zero), o comando
*& tasklist no encontrou processo correspondente e o arquivo gerado
*& est em branco. Caso contrrio, o processo est em execuo
*&---------------------------------------------------------------------*

CALL METHOD cl_gui_frontend_services=>file_get_size


EXPORTING
file_name = filepath_log
IMPORTING
file_size = filesize_log
EXCEPTIONS
file_get_size_failed = 1
cntl_error
= 2
error_no_gui
= 3
not_supported_by_gui = 4
OTHERS
= 5.
CALL METHOD

cl_gui_cfw=>flush( ).

*&---------------------------------------------------------------------*
*& Deleta os arquivos tasklist.bat e tasklist.log do disco local
*&---------------------------------------------------------------------*
CALL METHOD cl_gui_frontend_services=>file_delete
EXPORTING
filename = filepath_log
CHANGING
rc
= rc.
CALL METHOD cl_gui_frontend_services=>file_delete
EXPORTING
filename = filepath_bat
CHANGING
rc
= rc.
IF filesize_log EQ 0.
WRITE 'Processo no est em execuo'.
ELSEIF filesize_log > 0.
WRITE 'Processo est em execuo'.
ENDIF.

Problemas conhecidos:

Em sistemas Windows 8 (possivelmente Windows 7 tambm, mas no testei),


h problema de permisso para salvar arquivos na unidade de disco local. Isso foi
contornado executando o SAP Logon (SAP GUI) com privilgios de administrador.
O download, execuo e deleo de arquivos do disco local requer permisses, o
que faz com que prompts sejam exibidos pelo SAP GUI para confirmar os passos.
Isso pode no ser interessante uma vez que a verificao de execuo de
processos pode ser necessria sem a interveno do usurio, mas pode ser
contornado adicionando-se excees s configuraes de segurana do SAP GUI.

Potrebbero piacerti anche