Ir para o conteúdo

 Voltar a PW3270 Suporte
Tela cheia

Chamada por script externo

5 de Novembro de 2009, 20:17 , por Desconhecido - | 2 Pessoas seguindo este artigo.
Visualizado 3720 vezes

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

  • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
    5 de Novembro de 2009, 20:47

     

    Sim, a idéia foi implementar algo semelhante, mas não idêntico, à EHLLAPI.

     Já foi implementado de várias formas...

     A lib3270 pode ser usada direto sem que seja necessário apresentar a janela do terminal (a extensão openOffice usa direto a lib para implementar métodos de acesso ao 3270 direto do StarBasic);
    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.

    • 8190715490742c33b0932dd2ca3bb150?only path=false&size=50&d=404Gutemberg Vieira(usuário não autenticado)
      5 de Novembro de 2009, 21:22

       

      Ok, talvez a melhor forma seja utilizar a lib3270 direto do python.Utilizando essa lib é possível controlar uma sessão aberta em uma a janela também, ou obrigatoriamente o acesso é feito direto? 

      • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
        5 de Novembro de 2009, 21:32

         

        Olá,

        Não. Usando a lib direto não tem como controlar uma janela já que estariam em processos diferentes, só se fosse implementado, via plugin, algum tipo de recurso IPC.

      • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
        6 de Novembro de 2009, 10:24

         

        Olá,

        Pensei numa solução "alternativa" para isso que permitiria implementar suporte a qualquer tipo de scripts: pipes. Posso implemntar um plugin que chame um processo externo com pipes usando a entra/saída padrão para interagir com o terminal.

        • Fb2b04fef29dd3cbb16c9ed09acba54b?only path=false&size=50&d=404Marlon Divino da Silva(usuário não autenticado)
          24 de Setembro de 2012, 14:30

           

          Olá, vi que o plugin para uso por pipes esta funcional, porém só existem exemplos para comandos get e set.

          Vi que o plugin suporta os seguintes comandos mas o mesmo não é documentado, existe algum lugar mostrando a forma de usá-los?

           

          connect

          cstate

          disconnect

          encoding

          enter

          luname

          pa

          pf

          status 

          • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
            24 de Setembro de 2012, 23:20

             

            Olá,

            Sim. Ele foi feito em colaboração com um usuário para permitir chamar as macros da lib3270 através de comandos enviados por uma pipe. Acredito que em algum momento no futuro as funções dele sejam "cobertas" pela implementação da hllapi.

             Quanto aos comandos que você perguntou: 

            connect - Conecta ao host informado como parâmetro (tipo:endereço:port igual ao parâmetro de linha de comando), exemplo: connect efglobe.com:23 

            cstate - Retorna o estado atual da conexão ao host (NOT_CONNECTED, RESOLVING, PENDING, CONNECTED_INITIAL, CONNECTED_ANSI, CONNECTED_3270, CONNECTED_INITIAL_E, CONNECTED_NVT, CONNECTED_SSCP ou CONNECTED_TN3270E ) 
            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.

            • Fb2b04fef29dd3cbb16c9ed09acba54b?only path=false&size=50&d=404Marlon Divino da Silva(usuário não autenticado)
              27 de Setembro de 2012, 9:45

               

              Olá, qual a diferença entre o comando "set" (sem parametros) e "enter" para enviar o comando de <enter>??

              • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
                27 de Setembro de 2012, 9:55

                 

                Olá,

                Na prática quase nenhuma já que a diferença está no valor retornado. O "set" sempre retorna o estado atual da conexão; o "enter" retorna apenas um código de erro se o terminal estiver bloqueado.

                • F9fcf7c294671619b61882921cf594e0?only path=false&size=50&d=404Fabiano Carvalho(usuário não autenticado)
                  13 de Março de 2013, 13:35

                   

                  Olá, eu tentei fazer a conexão como explicado abaixo no broffice, mas recebi a mensagem: "Erro em tempo de execução do BASIC. Variável do objeto não definida." e seleciona a linha: "if host.Connect(sHostinfo,0) <> 0 then". Pelo o que eu entendi o objeto host não está sendo criado corretamente. Isso acontece porque eu estou usando o broffice? Obrigado.

                  REM ***** BASIC *****
                  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 

                  • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
                    13 de Março de 2013, 16:31

                     

                    Olá,

                    Você conseguiu instalar o OXT no BrOffice?  Essa extensão foi originalmente desenvolvida para o OpenOffice e, com o tempo e a falta de uso acabou ficando bem para trás; tanto que nem sei se ainda funciona. Já comecei a remodelar a interface para funcionar no LibreOffice; está quase funcional, porém, até agora só em Linux.

                     

                    • F9fcf7c294671619b61882921cf594e0?only path=false&size=50&d=404Fabiano Carvalho(usuário não autenticado)
                      15 de Março de 2013, 9:46

                       

                      Olá,

                      Eu não estou familiarizado com o OXT. Na verdade eu já utilizava macros no vba pelo excel, mas isso quando utilizávamos o myExtra. O sistema mudou para o pw3270 e como alternativa para as nossas rotinas, em algumas máquinas foi instalado o myExtra novamente. Contudo, só esse procedimento não foi o suficiente, porque o windows utilizado passou a ser o windows 8 e parece que ele tem mais restrições de permissão, já que as mesmas macros que usávamos passaram a falhar nas varíáveis CreateObject e GetObject. A única maneira que funcionou para habilitar as macros novamente foi liberando o perfil de acesso como administrador e executando o excel como administrador.

                      Mas essa solução não serve porque esse acesso não é permitido. Por isso eu estou buscando uma alternativa para executar as macros dentro do contexto atual que é o sistema operacional windows 8 e nível de acesso de usuário. Eu fiz essa tentativa com o broffice, na verdade com o libreoffice 3 (não sei se tem diferença para o uso do pw3270), e surgiu esse erro que eu te falei. Procurando mais no fórum eu vi a biblioteca libhllapi.dll e testei o uso dela no excel e também não tive sucesso. Eu baixei o pw3270-5 e instalei no meu computador pessoal, pois a máquina da empresa bloqueou a instalação, retirei o arquivo libhllapi.dll e copiei para os meus documentos, alterei o código para apontar a nova pasta do libhllapi.dll e as funções foram reconhecidas, mas a macro travou na primeira exceção do código e exibiu o Message Box com a mensagem: "Erro ao inicializar a biblioteca". 

                           If hllapi_init("") <> 0 Then

                              MsgBox "Erro ao inicializar a biblioteca"

                              Exit Sub

                          End If 

                       Existe alguma maneira de fazer essas funções executarem assim?

                       Obrigado. 

                      • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
                        18 de Março de 2013, 10:50

                         

                        Olá,

                        Pela mensagem algo falhou no processo de inicialização do HLLAPI; é possível que ele não tenha encontrado ou falhado ao carregar alguma das DLLs pré-requisitos; você tem como ver qual o valor retornado pela chamada hllapi_init? Dependendo do código de erro retornado dá para ter uma idéia do que aconteceu.

                        Outra possíbilidade é usar a conexão com uma sessão já aberta do emulador, ou seja, inicie uma janela do pw3270; repare que na barra de título deve aparecer um indicador com o nome da sessão (provavelmente pw3270:a), daí, altere a chamada da função pw3270_init passando o nome da sessão como argumento (veja exemplo abaixo), dessa forma ele não usar a janela aberta para rodar o script sem tentar carregar uma nova instância do emulador. 

                           If hllapi_init("pw3270:a") <> 0 Then

                                MsgBox "Erro ao inicializar a biblioteca"

                                Exit Sub

                            End If 

                         

                        • F9fcf7c294671619b61882921cf594e0?only path=false&size=50&d=404Fabiano Carvalho(usuário não autenticado)
                          18 de Março de 2013, 12:36

                           

                          O erro que o hllapi_init está retornado é o 126. O que deve está acontecendo é a falta mesmo de alguma dll pré-requisito. Eu fiz a tentativa de copiar a dll para uma pasta que não era do sistema já que o perfil de usuário não me permitia copiar para a pasta do sistema e nem instalar uma nova versão do pw3270. Olhando aqui agora conferi que a versão que vem instalada é a 4.2.5-1845. 

                          Tentei fazer como me disse, com uma sessão já aberta, mas não tive sucesso também. Em outra máquina que eu já estava com o perfil de administrador eu consegui instalar o pw3270 com o hllapi e a macro funcionou. Só que eu vou precisar que a macro funcione quando quem estiver executando a macro não tiver privilégios de administrador. Isso ainda eu não testei. Se funcionar para o usuário comum, acho que o problema vai estar solucionado.

                          Obrigado pela a ajuda. 

                           

                          • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
                            18 de Março de 2013, 14:34

                             

                            Olá,

                            A versão 4.2.5 não tem suporte a hllapi; se você não conseguir nem mesmo instalar uma versão atualizada fica quase impossível usar macros. Depois de instalado não deve haver problema em executar a macro como usuário desde que os arquivos estejam no local correto. Essa versão também não deve nem ter mostrado o nome da sessão na barra de título.

                            Quanto ao erro 126; de acordo com a documentação do windows ele significa "ERROR_MOD_NOT_FOUND" (módulo não encontrado); provavelmente tem a ver com a versão instalada ser antiga posto que ele procura pela lib3270.dll (e associadas) no diretório apontado pela chave do registry HKEY_LOCAL_MACHINE\Software\pw3270\datadir  que só deve existir caso a instalação do pw3270 V5 ocorra com sucesso.

                             

                             

                            • F9fcf7c294671619b61882921cf594e0?only path=false&size=50&d=404Fabiano Carvalho(usuário não autenticado)
                              19 de Março de 2013, 9:30

                               

                              Olá,

                              Entendi, eu consegui o acesso como administrador e instalei o pw3270 v-5 com suporte a hllapi. Até aí tudo bem, executei a macro como administrador e funcionou. Quando testei com uma conta de usuário eu recebi o mesmo erro: "Erro ao inicializar a biblioteca", só que com outro código da função: hllapi_init, que foi -1. Dessa vez estava tudo instalado corretamente. A falta de permissão parece impedir mesmo a execução da macro. Será que eu precisaria liberar para a conta de usuário alguma permissão especial em alguma pasta que a biblioteca utilize?

                              Obrigado. 

                              • F9fcf7c294671619b61882921cf594e0?only path=false&size=50&d=404Fabiano Carvalho(usuário não autenticado)
                                19 de Março de 2013, 9:53

                                 

                                Descobri porque estava acontecendo esse erro. Toda vez que eu inicio por uma sessão já aberta (hllapi_init("pw3270:a")) e não a encerro, da próxima vez que eu executo a macro eu recebia esse erro (-1). Isso se resolveu, mas ainda estou recebendo o erro 22 na função hllapi_get_screen_at(1, 1, text). Isso só quando eu acesso como usuário. Parece que como usuário existem mesmo algumas limitações para algumas funções.

                                • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
                                  19 de Março de 2013, 10:27

                                   

                                  Olá,

                                  Você chegou a tentar criar uma sessão só para a macro (passando "" no hllapi_init)? Não deveria haver restrições se o aplicativo e a macro estão rodando no mesmo usuário. Erro 22 na get_screen_at pode ter várias causas, a mais comum seria sessão inativa, desconectada ou em estado inválido. Você chamou o get_screen_at logo depois do connect ou incluiu um "wait_for_ready" antes?

                                   

                                   

                                  • F9fcf7c294671619b61882921cf594e0?only path=false&size=50&d=404Fabiano Carvalho(usuário não autenticado)
                                    21 de Março de 2013, 10:58

                                     

                                    Olá,

                                     Quando eu faço assim hllapi_init("") as funções funcionam perfeitamente. Mas quando eu tento usar uma sessão ativa tem algumas falhas: não consigo copiar a tela e a função "wait_for_ready" também não funciona. Vou pensar em uma maneira de tentar acompanhar o andamento da macro durante a execução de outra forma. Do jeito que está já resolve o meu problema. Obrigado pela ajuda.

                                    • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
                                      21 de Março de 2013, 11:01

                                       

                                      Olá,

                                      Como a HLLAPI ainda está em desenvolvimento pode estar faltando algo no pacote que você está usando; qual a versão/revisão que você instalou? Qual das funções de cópia de tela?

                                       

                                       

        • 8190715490742c33b0932dd2ca3bb150?only path=false&size=50&d=404Gutemberg Vieira(usuário não autenticado)
          15 de Dezembro de 2009, 14:34

           

          Parece ser uma boa ideia! Imagino que no terminal implementaria um parser da entrada e escreveria o resultado da chamada da função correspondente da API na saída, certo?

          E qualquer programa externo poderia utilizá-lo!

          • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
            15 de Dezembro de 2009, 15:32

             

            Olá,

            Exato. Fica altamente flexível.

            • 3a03588f7f0d500a265e2cef2afe55b2?only path=false&size=50&d=404andre liporime(usuário não autenticado)
              8 de Abril de 2010, 20:13

               

              Perry,

               

              Vc poderia dar um exemplo prático? Como por exemplo, conectar uma sessão e copiar os dados da tela.

               

              Grato.

               

              André

              • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
                8 de Abril de 2010, 20:59

                 

                Olá,

                O plugin por pipe que estavamos discutindo nessa thread não chegou a ser implementado (ainda); um exemplo em rexx serviria?

                • 3a03588f7f0d500a265e2cef2afe55b2?only path=false&size=50&d=404andre liporime(usuário não autenticado)
                  8 de Abril de 2010, 21:42

                   

                  Certamente serviria. Mas lhe peço para detalhar o máximo possível, já que meu conhecimento é limitado.

                   

                  Muito grato.

                   

                  André

                    • 3a03588f7f0d500a265e2cef2afe55b2?only path=false&size=50&d=404andre liporime(usuário não autenticado)
                      9 de Abril de 2010, 20:43

                       

                      Primeiramente, grato pela sua boa vontade.

                      Vi seu exemplo, mas como havia dito, desconheço rexx

                      Me corrija se estiver errado, pelo que li é possível, via openoffice e lib3270, conectar-se o pw3270, enviar comandos, copiar e editar dados como se um usuário estivesse operando? Seria possível, por exemplo, criar uma macro em uma planilha do openoffice para acessar o pw3270 e copiar os dados da janela para esta planilha?

                      Vc teria um exemplo deste? Não que eu seja um craque em openoffice, mas conheço um pouco, além do mais há uma documentação muito ampla disponível, o que me ajudaria muito.

                      Grato

                      André

                      • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
                        12 de Abril de 2010, 10:45

                         

                        Olá,

                        Sim. Com a extensão OpenOffice é possível conectar ao host e simular a operação por um usuário; o exemplo  bem simples abaixo conecta a um host qualquer, e copia a primeira tela.

                        Um script mais "realista" fica em loop esperando por algumas strings "chave" que permitam que ele ache a tela deseja para, só nesse ponto, fazer a cópia.

                         

                        REM ***** BASIC *****
                        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

                        • 16bc4a8d111ebaaf08b5ccfdef7884cb?only path=false&size=50&d=404Tiago Pádua(usuário não autenticado)
                          6 de Março de 2011, 12:18

                           

                          No x3270 eu podia executar scripts por: Arquivo - Executar uma ação - script("/path/script.txt")

                          os scripts eram escritos em shell script, tem como fazer isso no gw3270?

                          • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
                            9 de Março de 2011, 15:21

                             

                            Olá,Da mesma forma que no x3270 (usando bash) ainda não; comecei até a montar um plugin com função semelhante (pipectl) mas ele anda meio parado por falta de tempo (e de idéias).De qualquer forma o suporte a scripts está 100% funcional no plugin de suporte à rexx permitindo inclusive que scripts sejam incluídos nos menus normais do aplicativo.Se se interessar pela linguagem alguns bons tutoriais podem ser encontrados em http://www.oorexx.org/docs/ 

                            • Cc285319f5c17bfb6f7655bbb5a8fc18?only path=false&size=50&d=404Jonathan Barroso(usuário não autenticado)
                              11 de Abril de 2011, 20:38

                               

                              Olá, 

                               É possivel através do VISUAL BASIC instanciar uma sessão do PW como é feito com uma sessão do EXTRA, como no código abaixo ?

                                  Set Sys = CreateObject("EXTRA.System")
                                  Set Sess = Sys.ActiveSession

                              Obrigado pela atenção...

                               

                               

                              Jonathan.

                              • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
                                16 de Junho de 2011, 22:12

                                 

                                Olá,Desculpe a demora mas eu precisava pesquisar um pouco sobre o VB antes disso e, como o tempo andou curto acabei demorando demais.Pelo que eu ví o CreateObject do VB usa a COM que, pelo menos por enquanto, não é suportada pelo pw3270. Minha idéia original para suporte VB seria implementar uma "Type Library" com chamadas semelhantes à interface rexx isso permitiria a um aplicativo VB acessar o host diretamente sem que fosse necessário criar uma janela de terminal. 

                          • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
                            13 de Março de 2013, 16:28

                             

                            Olá,

                            Agora tem! Basta instalar o pacote com o plugin "dbus" que ele passa a exportar um objeto dbus para controle do terminal via shell script (ou qualquer outra linguagem que tenha o "bind" para o serviço).

                            Um exemplo:

                            #!/bin/bash
                            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

                             

                    • 9ec7fff18064aedad16edaf7aea3e395?only path=false&size=50&d=404luiz e ferreira(usuário não autenticado)
                      5 de Fevereiro de 2014, 21:51

                       

                      Rexx originário do OS/2?

                       

                      • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
                        5 de Fevereiro de 2014, 23:31

                         

                        Olá,

                        Não, rexx originário do mainframe (((-:

                        Mas tinha no OS/2 também, assim como no amiga e em outras plataformas do tempo do bit lascado.

                         

  • F547fa86275f6e9c90eb390ca4a4662a?only path=false&size=50&d=404Hélio Pitozi de Mattos(usuário não autenticado)
    15 de Abril de 2014, 13:05

     

    Boa tarde a todos.

    Sou novo em OpenOffice e estou tentando efetuar uma macro com acesso ao emulador pw3270.

    Estou tentando através da instrução abaixo que descobri neste forum.

    host = createUnoService("br.com.bb.pw3270")
    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.

    • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
      15 de Abril de 2014, 13:16

       

      Olá,

      Você está usando linux ou windows? Se for linux: Instalou o pacote com a extensão libreoffice? Se for windows: O serviço uno não funciona mais no windows, nesse caso, é melhor usar os métodos do hllapi iguais ao do MSOffice. 

       

  • F547fa86275f6e9c90eb390ca4a4662a?only path=false&size=50&d=404Hélio Pitozi de Mattos(usuário não autenticado)
    15 de Abril de 2014, 13:45

     

    Olá

    Sistema windows. Estava tentando através libhllapi.dll. Contudo tem apresentado erro ao carregar arquivo DLL. Estou usando pw3270 5.0 64 bits de 14/04/2014 no repósitório.

    Estou usando a linha abaixo

     Declare Function hllapi& Lib "libhllapi.dll" (Func&, ByVal DataString$, Length&, RetC&)

     

    Segundo o aplicativo Depends apresenta a seguinte mensagem ao verificar as dependências da dll em c:\windows\syswow64

    Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
    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.

    • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
      15 de Abril de 2014, 14:19

       

      Olá,

      Provavelmente o mesmo problema da carga no MS-Office que está sendo discutido nessa thread. Já gerei dois instaladores que devem resolver o problema e enviei para a área de arquivos mas não sei se alguém já testou. 

  • F547fa86275f6e9c90eb390ca4a4662a?only path=false&size=50&d=404Hélio Pitozi de Mattos(usuário não autenticado)
    15 de Abril de 2014, 14:29

     

    Olá,

    Se vc está se referindo aos instaladores da versão 5 de 14/04. Foi esta que eu usei e apresenta o problema relatado. Cfe informado usei a versão de 64 bits e OpenOffice 3.0.

    Dúvida???? Segundo relato da thread pareceu-me que o colega estava tentando usar VBA pelo MS-Office. Funciona através do MS-Office, pois conheço melhor o VBA.

    • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
      15 de Abril de 2014, 14:35

       

      Olá,

      Sim. O teste dele é via MS-Office mas a DLL é a mesma; tanto que quando usava windows eu testava a libhllapi.dll no libreoffice. Mas, reparei agora que o seu problema é diferente, eu não tinha reparado num ponto importante da sua mensagem: 

      Error: Modules with different CPU types were found. 

      A arquitetura do OpenOffice que você está usando é a mesma do pw3270?

       

  • F547fa86275f6e9c90eb390ca4a4662a?only path=false&size=50&d=404Hélio Pitozi de Mattos(usuário não autenticado)
    15 de Abril de 2014, 14:50

     

    Olá Perry

    Tentei usar DLL pelos dois programas.

    Sistema Windows 7 64 bits

    MS-Office 2010 64 bits (Erro em tempo de execução 48. Arquivo libhllapi.dll não localizado.

    OpenOffice 3.0 32 bits(Erro ao carregar arquivo DLL).

    A DLL foi instalada no diretório \syswow64.

    • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
      15 de Abril de 2014, 15:38

       

      Olá,

      Acabei de subir uma versão 64bits compilada de forma diferente. A libhllapi.dll deve ter sido instalada no /windows/system32; resta saber se o MS-Office também com 64 bits vai ser capaz de carregá-la sem problemas.

       

  • F547fa86275f6e9c90eb390ca4a4662a?only path=false&size=50&d=404Hélio Pitozi de Mattos(usuário não autenticado)
    15 de Abril de 2014, 17:07

     

    Olá Perry

    Vamos por partes:  Instalação ocorreu com sucesso na pasta \system32.

    Não apresenta erro segundo aplicativo Depends de DLL dependentes .

    Contudo ainda estou com mensagens:

    MS_Office 2010

    Private Declare Function hllapi& Lib "libhllapi.dll" (Func&, ByVal DataString$, Length&, RetC&)

    Erro de execução 53: Arquivo a seguir não foi localizado; "libhllapi.dll"

    OpenOffice 3.0

    Declare Function hllapi& Lib "libhllapi.dll" (Func&, ByVal DataString$, Length&, RetC&)

    Erro em tempo de execução do BASIC. Erro ao carregar arquivo DLL.

    Já tentei digitando o caminho - Lib "c:\windows\system32\libhllapi.dll", mas não resolve.

    • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
      16 de Abril de 2014, 9:02

       

      Olá,

      Instalei duas VMs windows 7 e usei um programa VB 32bits meio antigo para testar o funcionamento da libhllapi.dll

      Windows 7 32bit + pw3270 32 bits 

      Instalei o pacote pw3270 32bits marcando a opção de hllapi; nessa funcionou sem problemas. O programa VB conseguiu achar e trocar informações com o módulo via IPC sem erro na carga.

      Windows 7 64bits + pw3270 64bits

      A libhllapi.dll foi instalada no /windows/system32; o aplicativo subiu normalmente, porém, o vb não conseguiu achar a dll. Esperado já que aplicativos de 32bits não deveriam ter acesso à DLLs de 64bits. Não consegui testar com um aplicativo 64bits nativo mas acredito que funcione.

      Windows 7 64bits + pw3270 32bits

      Não cheguei a verificar onde a DLL foi instalada mas, nesse caso, o aplicativo VB conseguiu achar e se comunicou normalmente.

       

       

  • F547fa86275f6e9c90eb390ca4a4662a?only path=false&size=50&d=404Hélio Pitozi de Mattos(usuário não autenticado)
    16 de Abril de 2014, 19:23

     

    Perry, boa noite

     Acabei de testar aqui em casa esse pacote do dia 16/06

    Windows 64 bits

    OpenOffice 4.0 32 bits

    PW3270 32 bits

    Funcionou normalmente.

    Agora vou testar na empresa amanhã depois passo mais informações.

    Obrigado.

    • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
      16 de Abril de 2014, 21:39

       

      Olá,

      Ótimo! Valeu pelo teste.

       

    • 9ec7fff18064aedad16edaf7aea3e395?only path=false&size=50&d=404luiz e ferreira(usuário não autenticado)
      19 de Abril de 2014, 1:22

       

      Prezado Hélio,
       

      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

  • F547fa86275f6e9c90eb390ca4a4662a?only path=false&size=50&d=404Hélio Pitozi de Mattos(usuário não autenticado)
    17 de Abril de 2014, 16:32

     

    Olá Perry

     Apesar de agora tanto o VB do MS_Office quanto através do OpenOffice achar a DLL (libhllapi), nos dois casos o retorno da função de conexão retorna 11 que segundo pude apurar trata-se:

    "O PS requerido está em uso por outra aplicação"

     

     

    • 3f09f0772d9354bc3661d73bf02b0f60?only path=false&size=50&d=404Perry Werneck(usuário não autenticado)
      19 de Abril de 2014, 11:47

       

      Olá,

      O erro 11 pode acontecer quando já existe uma conexão em andamento. 

      Você está acessando uma janela aberta via hllapi_init("Nome_da_sessao")  ou acessando o host direto ( via hllapi_ini(""))? Se for o primeiro caso as opções auto_connect e auto_reconnect estão ativas, se estiverem pode ser que você esteja mandando um connect quando já existe uma conexão em andamento.

       

  • F547fa86275f6e9c90eb390ca4a4662a?only path=false&size=50&d=404Hélio Pitozi de Mattos(usuário não autenticado)
    22 de Abril de 2014, 15:02

     

    Perry, boa tarde

    Tenho tentado conexão através:

    Private Declare Function hllapi& Lib "LIBHLLAPI.DLL" (Func&, ByVal DataString$, Length&, RetC&) e chamada da função através hlllapi (HllFunctionNo, HllData, HllLength, HllReturnCode), com base da biblioteca do PCSHll32 que eu utilizava com o PCOMM da Ibm.

    Declarei e testei a função hllapi_init e parece que funcionou (retornou 0). Porém não possuo material para verificar os parametros necessários para demais funções _connect, _denit, _disconnect,  _emulate_input, _enter, _erase_eof, _get_datadir, get_screen, etc.

    Tem algum material para consulta.

    Obrigado.

     

  • F547fa86275f6e9c90eb390ca4a4662a?only path=false&size=50&d=404Hélio Pitozi de Mattos(usuário não autenticado)
    28 de Abril de 2014, 14:25

     

    Boa tarde

    Consegui a relação de algumas funções e parâmetros no forum de desenvolvimento (Não todas) porém encontrei um problema.

    A função hllapi_get_screen_at(linha,coluna,texto) funcionou corretamente   no VB do Excel contudo quando eu tentei usar a função através do Calc no OpenOffice ela não funcionou; apesar da função retornar 0 a variável texto não se altera: veja o código abaixo

        linha = 1
        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.

     

  • E2b902491e30e10d3e748ee42135e3f5?only path=false&size=50&d=404José Freitas(usuário não autenticado)
    13 de Junho de 2014, 19:17

     

    Olá,

    Gostaria se possível alguém postasse um modelo pronto de macro no excel para acesso ao pw3270.

    Agradeço antecipadamente.

     Freitas 

Essa comunidade não possui posts nesse blog