Olá,
1. Onde posso manter saídas de usuário para validações e substituições?
As saídas para validações e substituições são armazenadas em um include de sua escolha.
Os seguintes includes são fornecidos como exemplos por padrão:
RGGBR000 Val/Sub: Saídas para regras
RGGBS000 Val/Sub: Saídas para substituições
Você deve copiá-los para o namespace do cliente, por exemplo ZGGBR000.
O comprimento do nome escolhido não deve exceder 8 caracteres. Isso ocorre porque o nome também é gerado no código-fonte e pode exceder um certo comprimento de linha.
Você também pode criar um include separado para cada cliente, o que pode melhorar o desempenho.
Na transação GCX2, você deve definir onde seu include é utilizado. Para fazer isso, insira o nome do seu include como um pool de FORM na área de aplicação relevante.
2. Como devo criar uma saída de usuário?
Defina sua saída de usuário na rotina FORM GET_EXIT_TITLES com o tipo de saída correto (EXITS-PARAM). Você pode usar as entradas de exemplo existentes como modelo para isso.
Os tipos de saída necessários na rotina FORM GET_EXIT_TITLES estão organizados da seguinte forma:
C_EXIT_PARAM_NONE Sem parâmetros
Além do valor de retorno (B_TRUE ou B_FALSE), você não precisa de nenhum parâmetro para a validação. Se não deseja substituir um campo, use este parâmetro na substituição (selecione "Somente saída").
No entanto, você deve usar uma declaração TABLE no pool de FORM (não no formulário real) para identificar a estrutura relevante.
C_EXIT_PARAM_FIELD Um campo é transferido como parâmetro
Use apenas este tipo na substituição. Um campo é substituído exatamente. Insira saídas de usuário deste tipo na manutenção de substituições em vez de atribuir um valor constante.
C_EXIT_PARAM_CLASS Um tipo completo é transferido como parâmetro
Validações/substituições matriciais ("Somente saída"). Este tipo de saída só pode ser usado para pontos de chamada com documentos completos, por exemplo, em FI e LC. Você não pode usar este tipo de saída para outros pontos de chamada. O tipo transferido contém todas as informações sobre uma classe. Um exemplo é o uso do cabeçalho do documento e todos os elementos de linha correspondentes na área de FI.
Na rotina FORM GET_EXIT_TITLES, altere os campos NAME e TEXT da tabela interna EXITS para os valores desejados.
Use uma das rotinas de exemplo como modelo e copie-as para os nomes que você selecionou. Agora você pode implementar as funções desejadas nesta rotina FORM.
Depois de criar a saída de usuário, você pode usá-la em suas validações ou substituições.
3. O que devo considerar ao implementar a saída de usuário?
Não devem ser emitidas caixas de diálogo, mensagens de aviso, informações ou mensagens de erro em uma saída, e um "COMMIT WORK" não deve ser rejeitado. Isso, por exemplo, interromperia o processamento em lote ou causaria problemas com os documentos a serem contabilizados. Se encontrar um erro grave no conteúdo do campo na saída, envie uma mensagem de término (A ou X), o que garantirá que a transação seja concluída.
Não use comandos ABAP que o façam sair diretamente da saída, por exemplo, 'LEAVE (TO) SCREEN ...' ou 'SUBMIT <REPORT> ...' ou 'CALL TRANSACTION ...'
Em uma saída, use apenas campos de estrutura que pertençam à classe booleana da substituição, validação ou regra de chamada. Os outros campos de estrutura não estão preenchidos ou não são preenchidos corretamente para o ponto de chamada das substituições, validações ou regras.
Você só pode fazer alterações no conteúdo do campo em uma saída de substituição se este campo puder ser substituído na classe booleana. Você pode exibir esses campos escolhendo "Adicionar entrada" na manutenção de substituições.
Nos includes das saídas de substituição, não use os comandos MODIFY, INSERT ou DELETE nas estruturas usadas internamente como BSEG ou BKPF. Essas estruturas são interpretadas internamente como tabelas de banco de dados porque são definidas por uma declaração TABLES. Como resultado, o sistema escreve, exclui ou altera registros do banco de dados se você usar os comandos mencionados anteriormente. Isso pode causar sérias inconsistências e problemas no processamento de documentos.
Se deseja alterar o conteúdo do campo no tipo de saída C_EXIT_PARAM_CLASS, você deve fazer as alterações na tabela interna BOOL_DATA (por exemplo, BOOL_DATA-BSEG).
Saudações,