Olá,
No pw3270 tem alguma forma de controlar a sessão externamente usando uma linguagem como python, algo como a EHLLAPI?
Imagino que sim, já que há uma integração com o OpenOffice.org.
--
Gutemberg
Autor: Gutemberg Vieira
Olá,
No pw3270 tem alguma forma de controlar a sessão externamente usando uma linguagem como python, algo como a EHLLAPI?
Imagino que sim, já que há uma integração com o OpenOffice.org.
--
Gutemberg
Autor: Gutemberg Vieira
5959 comentários
O plugin ooRexx permite implementar elementos na toolbar ou menu que acionem scripts em rexx para controlar a sessão de dentro do terminal; A extensão ooRexx implementa um "layer" permitindo implementar um script rexx que "converse" direto com a lib3270 sem criar uma janela de terminal;
Quanto à python não cheguei a implementar (até porque não sei python) mas numa pesquisada rápida me pareceu relativamente fácil fazer um plugin para isso; o mais difícil vai ser testar.
disconnect - Desconecta do host atual
encoding - Retorna a codificação de caracteres atual (ISO-8859-1)
enter - Envia um enter
luname - Retorna o nome da LU ativa
pa - Envia uma PA, exemplo: pa 1
pf - Envia uma PF, exemplo: pf 3
status - Retorna uma única string com o estado atual da conexão, nome da lu e nome do host. A propósito: Na versão 5 as mesmas macros podem ser associadas à um menu da interface através das tags <script> </script> no xml que descreve o menu, toolbar ou keypad.
REM Exemplo de conexão a um host 3270 e copia da tela inicial para um texto global host as Object Sub Main rem Endereco do servidor
Const sHostinfo = "HOST:PORTA" rem Cria o serviço de acesso ao host 3270
host = createUnoService("br.com.bb.pw3270") rem Inicia processo de conexão ao host
if host.Connect(sHostinfo,0) <> 0 then
print "Erro ao conectar no servidor tn3270"
host.Disconnect()
exit sub
endif
REM Exemplo de conexão a um host 3270 e copia da tela inicial para um texto global host as Object Sub Main rem Endereco do servidor
Const sHostinfo = "HOST:PORTA" rem Cria o serviço de acesso ao host 3270
host = createUnoService("br.com.bb.pw3270") rem Inicia processo de conexão ao host
if host.Connect(sHostinfo,0) <> 0 then
print "Erro ao conectar no servidor tn3270"
host.Disconnect()
exit sub
endif Dim oDocument as Object
Dim oText as Object
Dim oCursor as Object oDocument = ThisComponent
oText = oDocument.Text
oCursor = oText.createTextCursor()
oCursor.gotoStart(FALSE) oText.insertString(oCursor,"Tela capturada:",FALSE)
oText.insertControlCharacter(oCursor,com.sun.star.text.ControlCharacter.LINE_BREAK,FALSE) linha = 1 while linha < 25 if not host.isConnected() then
rem Host em processo de conexao, espero
wait 2 elseif not host.isTerminalReady() then
rem Terminal em atualizacao, espero
wait 1 else rem Host esta conectado e disponivel, copio a linha atual
hContents = host.getScreenContentAt(linha,1,79) oText.insertString(oCursor,hContents,FALSE)
oText.insertControlCharacter(oCursor,com.sun.star.text.ControlCharacter.LINE_BREAK,FALSE) linha = linha+1
endif wend host.disconnect() print "Captura terminada" End Sub
Set Sess = Sys.ActiveSession Obrigado pela atenção... Jonathan.
SESSION=a
DEST=br.com.bb.pw3270
BPATH=/br/com/bb/pw3270
run_command()
{
case $1 in
revision)
dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.getRevision
;;
message)
dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.getMessageID
;;
connect)
dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.connect string:$2
;;
disconnect)
dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.disconnect
;;
quit)
dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.quit
;;
get)
dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.getScreenContents
;;
set)
dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.setTextAt int32:$2 int32:$3 string:$4
;;
enter)
dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.enter
;;
*)
echo "Comando $1 desconhecido"
;;
esac
} until [ -z "$1" ]
do
if [ ${1:0:2} = '--' ]; then
tmp=${1:2}
parameter=${tmp%%=*}
parameter=$(echo $parameter | tr "[:lower:]" "[:upper:]")
value=${tmp##*=}
case "$parameter" in
SESSION)
SESSION=$value
;;
HELP)
echo "$0 options"
echo ""
echo "Options:"
echo ""
echo " --session pw3270's session manager"
echo ""
exit 0
;;
*)
eval $parameter=$value
;;
esac
else
run_command $@
exit 0
fi
shift
done
Contudo o objeto não é criado:IsNull(host) retorna verdadeiro.Se alguém puder ajudar.Também tenho dúvida sobre ("br.com.bb.pw3270") devo colocar literalmente o que significa. Não encontrei nada a respeito em minhas pesquisas. Desde já agradeço.
Error: Modules with different CPU types were found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
Neste assunto ainda estou enfrentando muita dificuldade, assim, poderia me explicar como verifico se o que uso é compatível com o que você usou:
LibreOffice - Versão: 4.2.0.4; Windows 8.1 - 64 bits PW3270 5.0 (rev. 2778) - pw3270-5.0.0-gtk-3.8.1-i686.exe ou pw3270-5.0.0-gtk-3.8.1-x86_64.exe ou pw3270-5.0.0-gtk-2.16.6-i686.exe, por que já tentei instalar os três, e nenhuma vez funcionou. Pelo menos não a chamada a partir do Libre Grato Luiz Eduardo
coluna = 3
txt = space(9)
if hllapi_get_screen_at(linha,coluna,txt) = 0 then
MsgBox(txt)
endif
Mensagem = " "(nove espaços em branco) Alguém tem idéia de como solucionar. A alguém sabe qual a diferença entre a função acima e hllapi_get_screen.
(Infelizmente) Windows :( Grato!