Módulo: CÂMBIO EXPORTAÇÃO
Funcionalidade: Agrupamento de Câmbio
Data/Hora da Publicação: 02/05/2012 00:00:00
Data/Hora Última Alteração: 12/07/2012 11:24:10
Descrição da Nota: FUNÇÃO PARA MENSAGEM (F6D) DE ALERTA P/ LOG DE AUDITORIA - CARREGA_LOG
Sintoma
Criada uma função somente no F6D (não enviar para cliente), para verificar se o programa que está
sendo alterado, ou função ou tabela na SE54, possuem o comando de carrega_log para as instruções de
alteração de dados nas tabelas (INSERT, MODIFY, DELETE E UPDATE).
Solução
Criada uma função somente no F6D (não enviar para cliente), para verificar se o programa que está
sendo alterado, ou função ou tabela na SE54, possuem o comando de carrega_log para as instruções de
alteração de dados nas tabelas (INSERT, MODIFY, DELETE E UPDATE).
9.0
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 12152 Data: 02/05/2012 Hora: 10:20:24
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 12152
Categoria : Melhoria
Prioridade : Média
Versão PW.CE : 8.0
Pacote : 00011
Agrupamento : 00113
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote Descrição Breve
----------------------------------------------------------------------------------------------------
Texto Rápido:
FUNÇÃO PARA MENSAGEM (F6D) DE ALERTA P/ LOG DE AUDITORIA - CARREGA_LOG
----------------------------------------------------------------------------------------------------
Palavras Chave:
FUNÇÃO PARA MENSAGEM (F6D) DE ALERTA P/ LOG DE AUDITORIA - CARREGA_LOG
----------------------------------------------------------------------------------------------------
Objetos da nota:
FUNC /PWS/ZYGL_VERIFICA_TRILHA
REPS /PWS/LZYGLGFUXX
----------------------------------------------------------------------------------------------------
Modificações efetuadas em FUNC /PWS/ZYGL_VERIFICA_TRILHA
* >> Início da inclusão:
FUNCTION /pws/zygl_verifica_trilha.
TYPES: BEGIN OF sewor_working_area,
object LIKE dwinactiv-object,
obj_name LIKE dwinactiv-obj_name,
uname LIKE dwinactiv-uname,
foreign_flag TYPE c,
delet_flag TYPE char1,
main_item_object TYPE dwinactiv-object,
main_item TYPE rsnewleng-programm,
devclass TYPE tadir-devclass,
END OF sewor_working_area.
DATA: it_tokens_novo TYPE TABLE OF stoken,
it_tokens_velho TYPE TABLE OF stoken,
it_tokens_aux TYPE TABLE OF stoken,
it_statements_n TYPE TABLE OF sstmnt,
it_statements_v TYPE TABLE OF sstmnt,
it_trdir TYPE TABLE OF trdir,
it_keywords TYPE abapprog,
it_reps_velho TYPE abapprog,
it_reps_novo TYPE abapprog,
aux_versno TYPE vrsd-versno,
row_ini TYPE stoken-row,
row_fin TYPE stoken-row,
aux_comando(1) TYPE c,
v_lines_velho(7) TYPE n,
v_lines_novo(7) TYPE n,
v_prog TYPE vrsd-objname,
v_type TYPE vrsd-objtype,
v_form_name TYPE tvimf-formname,
wa_tokens LIKE LINE OF it_tokens_novo,
wa_tokens_aux LIKE LINE OF it_tokens_novo,
fpool_name LIKE trdir-name.
DATA: cp_w_items TYPE sewor_working_area OCCURS 100 WITH HEADER LINE.
DATA: trdir_sec LIKE trdir OCCURS 1 WITH HEADER LINE.
DATA: BEGIN OF itab_tvimf OCCURS 0.
INCLUDE STRUCTURE tvimf.
DATA: END OF itab_tvimf.
e_diferente = 'N'.
CHECK i_progname(05) EQ '/PWS/'.
IMPORT cp_w_items[] FROM MEMORY ID 'TABOBJTRILHA'.
IMPORT fpool_name FROM MEMORY ID 'TABOBJPROG'.
IF i_progtype = 'TABL'.
SELECT * FROM tvimf
INTO TABLE itab_tvimf
WHERE tabname EQ i_progname.
IF sy-subrc NE 0.
e_diferente = 'S'.
ELSE.
APPEND 'INCLUDE' TO it_keywords.
MOVE: fpool_name TO v_prog.
READ REPORT v_prog INTO it_reps_novo.
SCAN ABAP-SOURCE it_reps_novo
TOKENS INTO it_tokens_novo
STATEMENTS INTO it_statements_n
KEYWORDS FROM it_keywords.
LOOP AT it_tokens_novo INTO wa_tokens.
IF wa_tokens-str(5) NE '/PWS/'.
DELETE it_tokens_novo INDEX sy-tabix.
ENDIF.
ENDLOOP.
LOOP AT itab_tvimf.
CLEAR: it_keywords,
it_reps_velho,
it_tokens_velho,
it_statements_v,
row_ini,
row_fin.
REFRESH: it_keywords,
it_reps_velho,
it_tokens_velho,
it_statements_v.
MOVE: itab_tvimf-formname TO v_form_name.
APPEND 'FORM' TO it_keywords.
LOOP AT it_tokens_novo INTO wa_tokens.
MOVE: wa_tokens-str TO v_prog.
READ REPORT v_prog INTO it_reps_velho.
SCAN ABAP-SOURCE it_reps_velho
TOKENS INTO it_tokens_velho
STATEMENTS INTO it_statements_v
KEYWORDS FROM it_keywords.
LOOP AT it_tokens_velho INTO wa_tokens_aux.
IF wa_tokens_aux-str EQ v_form_name.
row_ini = wa_tokens_aux-row.
ENDIF.
row_fin = wa_tokens_aux-row.
IF NOT row_ini IS INITIAL.
IF wa_tokens_aux-str = 'FORM'.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
IF NOT row_ini IS INITIAL.
EXIT.
ENDIF.
ENDLOOP.
CLEAR: it_tokens_velho,
it_statements_v,
it_keywords.
REFRESH: it_tokens_velho,
it_statements_v,
it_keywords.
APPEND 'PERFORM' TO it_keywords.
IF row_ini IS INITIAL.
e_diferente = 'S'.
EXIT.
ENDIF.
SCAN ABAP-SOURCE it_reps_velho
TOKENS INTO it_tokens_velho
STATEMENTS INTO it_statements_v
KEYWORDS FROM it_keywords.
e_diferente = 'S'.
LOOP AT it_tokens_velho INTO wa_tokens_aux.
IF wa_tokens_aux-str(11) EQ 'CARREGA_LOG'.
IF wa_tokens_aux-row >= row_ini AND
wa_tokens_aux-row < row_fin.
e_diferente = 'N'.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
ELSE.
APPEND 'INSERT' TO it_keywords.
APPEND 'DELETE' TO it_keywords.
APPEND 'UPDATE' TO it_keywords.
APPEND 'MODIFY' TO it_keywords.
CHECK NOT cp_w_items[] IS INITIAL.
LOOP AT cp_w_items.
CLEAR: it_reps_novo,
it_reps_velho,
it_statements_n,
it_statements_v,
it_tokens_aux,
row_ini,
row_fin.
REFRESH: it_reps_novo,
it_reps_velho,
it_statements_n,
it_statements_v,
it_tokens_aux.
MOVE: cp_w_items-object TO v_type,
cp_w_items-obj_name TO v_prog.
SELECT MAX( versno )
FROM vrsd
INTO (aux_versno)
WHERE objname = v_prog
AND objtype = v_type.
IF v_type EQ 'FUNC'.
CALL FUNCTION 'SVRS_GET_REPS_FROM_OBJECT'
EXPORTING
destination = ''
object_name = v_prog
object_type = v_type
versno = '00000'
TABLES
repos_tab = it_reps_novo
trdir_tab = trdir_sec
EXCEPTIONS
no_version = 01.
ELSE.
READ REPORT v_prog INTO it_reps_novo.
ENDIF.
CALL FUNCTION 'SVRS_GET_REPS_FROM_OBJECT'
EXPORTING
object_name = v_prog
object_type = v_type
versno = aux_versno
TABLES
repos_tab = it_reps_velho
trdir_tab = it_trdir
EXCEPTIONS
no_version = 1
OTHERS = 2.
SCAN ABAP-SOURCE it_reps_novo
TOKENS INTO it_tokens_novo
STATEMENTS INTO it_statements_n
KEYWORDS FROM it_keywords.
SCAN ABAP-SOURCE it_reps_velho
TOKENS INTO it_tokens_velho
STATEMENTS INTO it_statements_v
KEYWORDS FROM it_keywords.
it_tokens_aux[] = it_tokens_novo[].
aux_comando = 'N'.
LOOP AT it_tokens_novo INTO wa_tokens.
IF row_ini IS INITIAL.
row_ini = 1.
ENDIF.
IF sy-tabix > 1.
IF wa_tokens-str(6) = 'MODIFY' OR
wa_tokens-str(6) = 'INSERT' OR
wa_tokens-str(6) = 'DELETE' OR
wa_tokens-str(6) = 'UPDATE'.
row_fin = wa_tokens-row.
IF aux_comando = 'N'.
DELETE it_tokens_aux WHERE row >= row_ini
AND row < row_fin.
ENDIF.
row_ini = wa_tokens-row.
aux_comando = 'N'.
IF wa_tokens-str(6) = 'UPDATE'.
aux_comando = 'S'.
ENDIF.
ELSE.
IF wa_tokens-str(7) = '/PWS/ZY' AND
wa_tokens-str+9(1) = 'T'.
aux_comando = 'S'.
ENDIF.
ENDIF.
ELSE.
IF wa_tokens-str(6) = 'UPDATE'.
aux_comando = 'S'.
ENDIF.
ENDIF.
ENDLOOP.
IF aux_comando = 'N'.
DELETE it_tokens_aux WHERE row >= row_ini.
ENDIF.
LOOP AT it_tokens_aux INTO wa_tokens.
wa_tokens-row = 0.
MODIFY it_tokens_aux INDEX sy-tabix FROM wa_tokens.
ENDLOOP.
it_tokens_novo[] = it_tokens_aux[].
DESCRIBE TABLE it_tokens_novo LINES v_lines_novo.
CLEAR: it_tokens_aux,
row_ini.
REFRESH: it_tokens_aux.
it_tokens_aux[] = it_tokens_velho[].
aux_comando = 'N'.
LOOP AT it_tokens_velho INTO wa_tokens.
IF row_ini IS INITIAL.
row_ini = 1.
ENDIF.
IF sy-tabix > 1.
IF wa_tokens-str(6) = 'MODIFY' OR
wa_tokens-str(6) = 'INSERT' OR
wa_tokens-str(6) = 'DELETE' OR
wa_tokens-str(6) = 'UPDATE'.
row_fin = wa_tokens-row.
IF aux_comando = 'N'.
DELETE it_tokens_aux WHERE row >= row_ini
AND row < row_fin.
ENDIF.
row_ini = wa_tokens-row.
aux_comando = 'N'.
IF wa_tokens-str(6) = 'UPDATE'.
aux_comando = 'S'.
ENDIF.
ELSE.
IF wa_tokens-str(7) = '/PWS/ZY' AND
wa_tokens-str+9(1) = 'T'.
aux_comando = 'S'.
ENDIF.
ENDIF.
ELSE.
IF wa_tokens-str(6) = 'UPDATE'.
aux_comando = 'S'.
ENDIF.
ENDIF.
ENDLOOP.
IF aux_comando = 'N'.
DELETE it_tokens_aux WHERE row >= row_ini.
ENDIF.
LOOP AT it_tokens_aux INTO wa_tokens.
wa_tokens-row = 0.
MODIFY it_tokens_aux INDEX sy-tabix FROM wa_tokens.
ENDLOOP.
it_tokens_velho[] = it_tokens_aux[].
DESCRIBE TABLE it_tokens_velho LINES v_lines_velho.
IF v_lines_novo > v_lines_velho.
e_diferente = 'S'.
EXIT.
ENDIF.
IF it_tokens_velho[] <> it_tokens_novo[].
e_diferente = 'S'.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
IF e_diferente = 'S'.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = ' pw.CE - Trilha de Log de Auditoria.'
txt1 = ' VERIFICAR SE FOI INSERIDO O COMANDO CARREGA_LOG'
txt2 = ' EM TODOS OS PONTOS DE MANUTENÇÃO NAS TABELAS DO'
txt3 = ' BANCO DE DADOS (INSERT, DELETE, MODIFY, UPDATE).'
EXCEPTIONS
OTHERS = 0.
ENDIF.
ENDFUNCTION.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/LZYGLGFUXX
INCLUDE /PWS/LZYGLGFU01.
INCLUDE /PWS/LZYGLGFU02.
INCLUDE /PWS/LZYGLGFU03.
INCLUDE /PWS/LZYGLGFU04.
INCLUDE /PWS/LZYGLGFU05.
INCLUDE /PWS/LZYGLGFU06.
INCLUDE /PWS/LZYGLGFU07.
INCLUDE /PWS/LZYGLGFU08.
* >> Início da inclusão:
INCLUDE /PWS/LZYGLGFU09.
* << Fim da inclusão