Abrindo um site com TWebChannel e TWebEngine – Maratona AdvPL e TL++ 514

Nesse vídeo demonstraremos a utilização das classes TWebChannel e TWebEngine, que servem para abrir uma navegação com a internet e carregar um site em uma tela.

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zExe514
Cria uma navegação com a possibilidade de abrir páginas em html ou sites através de urls
@type  Function
@author Atilio
@since 05/04/2023
@see https://tdn.totvs.com/display/tec/TWebChannel e https://tdn.totvs.com/display/tec/TWebEngine
@obs 
    
    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/

User Function zExe514()
    Local aArea     := GetArea()
    Local cRastreio := "AA123456785BR"
    Local aPergs    := {}
  
    //Adiciona os parametros para a pergunta
    aAdd(aPergs, {1, "Rastreio",   cRastreio, "", ".T.", "", ".T.", 80, .T.})
  
    //Mostra uma pergunta com parambox para filtrar o subgrupo
    If ParamBox(aPergs, "Informe os parametros", , , , , , , , , .F., .F.)
        fMontaBusca()
    EndIf
  
    RestArea(aArea)
Return
  
Static Function fMontaBusca()
    Local cUrl          := ""
    //Tamanho da janela
    Private nJanLarg    := 800
    Private nJanAltu    := 600
    //Navegador Internet
    Private oWebChannel
    Private nPort
    Private oWebEngine
    Private aComandos   := {}
  
    //Defina a URL e os comandos que vão ser executados
    cUrl := "https://rastreamento.correios.com.br/app/index.php"
    aAdd(aComandos, 'document.getElementById("objeto").value = "' + MV_PAR01 + '"; ')

    //Cria a dialog
    DEFINE DIALOG oDlg TITLE "Pesquisa de Transportadora" FROM 000,000 TO nJanAltu,nJanLarg PIXEL

        // Prepara o conector WebSocket
        oWebChannel := TWebChannel():New()
        nPort := oWebChannel::connect()

        // Cria componente
        oWebEngine := TWebEngine():New(oDlg, 0, 0, 100, 100,, nPort)
        oWebEngine:bLoadFinished := {|self,url| fRodaScript(url) }
        oWebEngine:navigate(cUrl)
        oWebEngine:Align := CONTROL_ALIGN_ALLCLIENT

    ACTIVATE DIALOG oDlg CENTERED
    
Return
  
Static Function fRodaScript(cUrl)
    Local nAtual := 0
  
    //Percorre os comandos
    For nAtual := 1 To Len(aComandos)
        oWebEngine:runJavaScript(aComandos[nAtual])
    Next
Return

Bom pessoal, por hoje é só.

Abraços e até próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

2 Responses

  1. Poliester Moreira disse:

    Fala aí Daniel, beleza?
    É possível rodar a TWebChannel apenas em background sem gerar a tela mas salvar o conteúdo em PDF?
    Imagine o cenário onde eu vou passar um link, esse link vai gerar uma página com um documento, e eu quero gerar um PDF desse documento.
    Eu não tenho acesso ao servidor do cliente pois é T-Cloud e nenhuma opção referente a serviços ou features do Sistema Operacional pode ser usada, ou seja, é necessário resolver a ação no ADVPL bruto.

    • Bom dia Poliester, tudo joia graças a Deus e por ai?

      Via TWebChannel eu nunca fiz, mas uma ideia que poderia funcionar, nativamente em AdvPL sem recorrer a outros recursos, seria algo mais ou menos assim:
      1. Tenta usar a HttpGet para baixar o HTML da página em questão
      2. Se der certo, ai teria que ver se tem alguma função em AdvPL, que você consiga “imprimir” esse arquivo .html gerando um .pdf (tenta ver as funções File2Printer, SendFile, InitPrint, entre outras)
      3. Se der tudo certo, ai você consegue o pdf da página sem precisar abrir a tela

      Depois me dá um feedback se deu certo.

      Tenha uma ótima e abençoada segunda feira.

      Um forte abraço.

Deixe uma resposta

Terminal de Informação