- Situação: validar campos na inclusão de valores em visão de atualização adicionada há um cluster de visão na SE54.
- Entrar na transação SE54 - Cluster de visão.
- colocar a visão.
- Clicar em Hora Momento
- Selecionar o evento desejado (no meu caso usei o CK - na entrada de valores ou modificação) , esse evento seria o apropriado para checagem de valores.
- No meu caso coloquei um nome para o FORM CHECK_TESTE
- Ao dar o <ENTER> aparecerá a tela abaixo.
- O sistema pede para criar um programa onde a rotina (no meu caso CHECK_TESTE) será inserida.
- Coloque um nome
- A verificação abaixo é bem importante pois indica qual o tipo de programa q vc deve criar. É mais informativo, apenas continue.
- Como vai ser um programa só de rotinas simples eu descartei o include TOP.
- Aparecerá a janela com as características do programa e nesse momento vc tem q escolher o tipo de programa conforme a mensagem anterior. Na minha opinião o mais correto seria um POOL de subrotinas.
- Continuando ele entra no programa, conforme abaixo.
==============================================================
Abaixo um código que fiz para validação no evento da SE34, não é para mesma tabela q criei as telas acima, que apenas criei para demonstrar o passo a passo.
- O include lsvcmcod, é bom manter para obter alguns valores globais do programa standard.
- No meu código abaixo as 2 visões do cluster são a ZXX_V_LTG_CAB e a ZCC_V_LTG_ITEM
- A variável VCL_ACTION - indica se é uma inclusão ou alteração
*&---------------------------------------------------------------------*
*& Pool subrotinas ZXX_R_LTG_VIEW_EVENT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
PROGRAM ZXX_r_ltg_view_event.
INCLUDE lsvcmcod.
*&---------------------------------------------------------------------*
*& Form check_view_ltg_ck
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM check_view_ltg_ck.
DATA: l_viewname TYPE vclstruc-object,
l_error_flag TYPE vcl_flag_type,
lw_header TYPE vimdesc,
lw_total(1000) TYPE c,
lw_extract(1000) TYPE c,
lw_ltg_cab TYPE ZXX_v_ltg_cab,
lw_ltg_item TYPE ZXX_v_ltg_item.
FIELD-SYMBOLS: <lfs_view> TYPE ANY,
<lfs_view_x> TYPE x,
<lfs_ent_x> TYPE x,
<lfs_viewkey> TYPE x.
" assign data of current view to global field symbols (<vcl_total>, <vcl_extract> etc.)
l_viewname = vcl_akt_view.
PERFORM vcl_set_table_access_for_obj USING l_viewname
CHANGING l_error_flag.
" get view name (if you`ll use several views to make it dynamic)
READ TABLE <vcl_header> INTO lw_header INDEX 1.
" assign field symbols
* ASSIGN: lw_total TO <lfs_view> CASTING TYPE (lw_header-maintview),
ASSIGN: vcl_object_area TO <lfs_view> CASTING TYPE (lw_header-maintview),
<lfs_view> TO <lfs_view_x> CASTING,
<lfs_view_x>(lw_header-keylen) TO <lfs_viewkey>.
CASE vcl_akt_view.
WHEN 'ZXX_V_LTG_CAB'.
lw_ltg_cab = <lfs_view>.
IF vcl_action = 'I'.
SELECT COUNT( * )
FROM ZXX_tltg_cab
WHERE matnr EQ lw_ltg_cab-matnr
AND werks EQ lw_ltg_cab-werks
AND ltgvers EQ lw_ltg_cab-ltgvers
AND bdatu EQ lw_ltg_cab-bdatu.
IF sy-subrc = 0.
MESSAGE i010(ZXX_ltg)
WITH lw_ltg_cab-matnr lw_ltg_cab-werks
lw_ltg_cab-ltgvers lw_ltg_cab-bdatu
RAISING invalid_key.
ENDIF.
ENDIF.
WHEN 'ZXX_V_LTG_ITEM'.
lw_ltg_item = <lfs_view>.
IF vcl_action = 'I'.
SELECT COUNT( * )
FROM ZXX_tltg_item
WHERE stlnr EQ lw_ltg_item-stlnr
AND idnrk EQ lw_ltg_item-idnrk.
IF sy-subrc = 0.
MESSAGE i011(ZXX_ltg)
WITH lw_ltg_item-idnrk
RAISING invalid_key.
ENDIF.
ENDIF.
ENDCASE.
IF vcl_action = 'U'.
ENDIF.
ENDFORM. "check_view_ltg_ck
Artigo antigo, mas excelente. Ajudou muito.
ResponderExcluirAbraços
Muito útil.
ResponderExcluir