[SP-pm] Automatizando consulta IBM com Perl ou Expect

Frederico Melo fdmmelo at gmail.com
Thu Mar 21 12:55:03 PDT 2013


Olá Márcio, tudo bem?

Voltei mestre! Bom, agora com um pouco mais de informação e bastante
dúvida! Li os posts que você trocou com o Eden e, para minha tristeza, não
encontrei ainda uma maneira de solucionar o meu problema. Mas, nem tudo
está perdido pois estou no caminho certo!

Segui seus exemplos e, fiz aqui no trabalho um debug no ambiente e notei
algumas coisas:

1 - meu programa em Perl está funcionando ok e interagindo com o expect
que, por sua vez dispara o s3270 (fiz um exemplo bem básico para logar no
IBM e me retornar a tela de login);
2 - assim como seu exemplo, recebi todas as strings de conexão retornados
pelo s3270, linhas no formato U F U C(192.164.123.130) I 4 24 80 15 28
0x0... OK! Muito interessante!
3 - passo os comandos do tipo:


my $cmd1 = "connect(10.4.23.30:23)\n";
$cmd1 .= "wait(InputField)\n";
$cmd1 .= "String(user1)\n"; para usuário e o mesmo equivalente para senha
$cmd1 .= "wait(InputField)\n";
$cmd1 .= "String(password)\n";
$cmd1 .= "Ascii(0,0,24,80)\n";

Nesse ponto, notei que o s3270 não reconhece o "\n" como "enter"... no meu
caso, diferente do seu, o usuário para o IBM não possui a quantidade máxima
de caracteres para esse campo (geralmente 8). O usuário possui apenas 5
caracteres e, preciso que seja enviado para o s3270 o "enter" para que ele
passe para o outro campo de senha. Pelo output com a função ascii, notei no
arquivo de log que, o campo user é preenchido utilizando o valor passado
user1 e mais os próximos 3 caracteres do segundo comando string... fica
algo assim:

data:   Userid .............. user1pas      Voce e' responsavel pelos atos
praticados
data:   Senha ...............               com  o seu  codigo  de usuario,
portanto

E não há envio de "enter" !!! Tem alguma dica? Por favor Márcio, fico muito
grato da sua ajuda e atenção!

Abc aos Mestres!
Frederico


2013/3/14 Frederico Melo <fdmmelo at gmail.com>

> Márcio! Você tem toda razão! Realmente estou muito sobrecarregado mas,
> estou em fase de finalização da outra demanda. Por incrível que pareça,
> essa pequena ajuda que me deu no exemplo abaixo irá ajudar bastante! Vou
> anotar aqui e acompanhar pela sua explicação. Tão logo finalize e coloque
> em produção o outro sistema, irei me aprofundar com dedicação exclusiva
> para a automação do IBM e, seu exemplo vai ajudar muito.
>
> Muito obrigado pela explicação de cada linha! Esclareceu bastante! Muito
> obrigado e desculpe o incômodo! Com certeza, dentro em breve contatarei o
> forum novamente e, se não se incomodar, vou lhe perguntar outras coisas
> mas, preciso caminhar sozinho para ver as dúvidas!
>
> Muito obrigado Márcio!
>
> Abc,
> Frederico
>
> 2013/3/13 Marcio - Google <marciorp at gmail.com>
>
>> Frederico,
>>
>>    Desculpe-me, mais se você não arrumar tempo para tentar e tentar, não
>> vai evoluir mesmo. Isso que está fazendo é bem complicado mesmo, e não tem
>> receita de bolo, pois quase ninguém usa, além do que como se trata de
>> posicionamento de tela e tal, vária de ambiente para ambiente, não tenho
>> como fazer por você.
>>
>>    Sobre o usuário e senha:
>>   my $exp = Expect->spawn('s3270');        ##
>>   my $cmd1 = "connect(10.1.8.192:23)\n";        ## Conectei no servidor,
>> esse ai é o IP.
>>   $cmd1 .= "wait(InputField)\n";        ## Aqui estou aguardando um
>> campo de entrada, no meu caso o cursor já cai no campo do usuário
>>   $cmd1 .= "String(usertest)\n";        ## Aqui eu "digito" na tela do
>> terminal o nome do usuário, no meu caso é "usertest"
>>   $cmd1 .= "wait(InputField)\n";        ## Aguardo o próximo campo de
>> entrada, que no meu caso é a senha. Como no meu ambiente todos os usuário
>> tem tamanho fixo e ocupam o campo todo, quando insiro o nome do usuário o
>> cursor do terminal já cai para o próximo campo, que é a senha
>>   $cmd1 .= "String(passtest)\n";        ## Digito a senha, que no meu
>> caso é "passtest"
>>   $cmd1 .= "Ascii(0,0,24,80)\n";        ## Leio a tela
>>
>>    Aquele código do histórico tem tudo que você precisa para fazer os
>> primeiros e segundos testes. A documentação do s3270 tem os comando que
>> você precisa para interagir com o terminal, isso não é Perl, é TN3270.
>>    A explicação do Eden também vai ajudar muito a tratar as primeiras
>> saídas.
>>
>>    Depois disso, poste as dificuldades, de preferência com o código que
>> você usou e os erros ou dúvidas.
>>
>>
>> [...]'s
>>
>> Marcio
>>
>> =begin disclaimer
>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130321/924fb913/attachment.html>


More information about the SaoPaulo-pm mailing list