Como executar um código como se fosse outro usuário

Como executar um código como se fosse outro usuário

Resumo para quem tem pouco tempo

É possível criando um job em background rodar um programa como se fosse outro usuário, mesmo sem ter a senha dele

Introdução

Pode parecer trivial para quem já está faz bastante tempo na área, porém em alguns casos precisamos rodar uma BAPI, uma transação ou executar algum programa como se fossemos outro usuário, isso é necessário por exemplo quando estamos fazendo integrações que envolvem aprovação de documentos e não queremos que os logs do documento fiquem com o nome do usuário de integração e sim com o nome da pessoa que realmente fez a aprovação. Afinal daqui a alguns anos eu posso precisar saber se quem aprovou foi o gerente ou o diretor e não vai adiantar ter gravado no log que o aprovador foi o usuário INTEGRASAP ou o WF-BATCH.

Resolução

Quando criamos um job para ser executado é possível indicar um usuário que será na prática quem será usado na execução do programa. Desse usuário indicado que serão lidas as permissões do usuário e no nome dele que ficarão todos os logs do sistema.

Quando estamos criando um job manualmente, é nesse campo que preenchemos o nome do usuário que irá executar. É importante que o usuário que está criando esse job tenha o objeto de autorização S_BTCH_NAM (Vai achando que é qualquer um que tem esse super poder, hehe).

Não foi fornecido texto alternativo para esta imagem

Agora como fazer isso na programação? Vou demonstrar com o exemplo mais simples possível, fazendo um programa que escreve o nome do usuário que o está executando.

Não foi fornecido texto alternativo para esta imagem

E outro que cria um job chamando esse primeiro programa. As funções para criar um JOB são: 'JOB_OPEN', 'JOB_SUBMIT' e 'JOB_CLOSE'.

Não foi fornecido texto alternativo para esta imagem
Não foi fornecido texto alternativo para esta imagem

Se rodarmos o programa diretamente, veremos o nome do usuário que seria nosso "usuário de integração":

Não foi fornecido texto alternativo para esta imagem

Porém ao rodamos o nosso programa que faz a chamada e criação do job, informamos o nome do usuário que queremos que rode o programa.

Não foi fornecido texto alternativo para esta imagem
Não foi fornecido texto alternativo para esta imagem

E agora olhamos nos nossos jobs para ver o resultado, se você quiser ir direto, sem ter que entrar na SM37, pode usar esse atalho abaixo.

Não foi fornecido texto alternativo para esta imagem

Entramos no job para ver que mensagens o programa exibiu (a principio vemos que o autor do job é o nosso usuário de integração mesmo). Para vermos o spool é só marcar a linha do job e clicar em spool.

Não foi fornecido texto alternativo para esta imagem

Agora já vemos que o usuário que aparece aí é o usuário que queremos usar no processamento do programa. Então clicamos nesse ícone na coluna "Tipo" para visualizar a saída desse job. E se tudo deu certo, o sy-uname estará preenchido com o valor CSANTOS.

Não foi fornecido texto alternativo para esta imagem

E aí está, foi exatamente isso que aconteceu.

Não foi fornecido texto alternativo para esta imagem

Claro que esse é um exemplo muito simples, somente para demonstrar o funcionamento das funções que fazem a criação do job.

Em cenários mais complexos podemos ter que passar muitas informações para que esse job processe, que podem ser recuperadas de N maneiras, desde salvar em uma tabela Z para que o job leia, criar parâmetros e variantes para execução do job, alocar em memória, aí vai da criatividade e da necessidade de cada um poder preencher os espaços que faltam de acordo com a aplicação.

E lembre-se que tudo sempre guarda logs, então se usar essa informação para o mal:

Não foi fornecido texto alternativo para esta imagem

-- Diego Frutuoso Machado Rocha (Desenvolvedor SAP)

Não foi fornecido texto alternativo para esta imagem


Joel Rocha Barbosa

Analista e desenvolvedor de Sistemas de Informação

3 a

Se for usar para o mal foi ótimo kkkk

Entre para ver ou adicionar um comentário

Outros artigos de Diego Frutuoso Machado Rocha

Outras pessoas também visualizaram

Conferir tópicos