Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Dica
titleMecanismo de Hibernação das Abas do Navegador


🚨 Os navegadores possuem mecanismos de economia de memória que colocam as páginas que não estão em uso em hibernação, nesta situação a conexão entre o WebApp e o AppServer irá cairserá interrompida.

Abaixo listamos as documentações oficiais dos navegadores homologados para impedir a hibernação da página do WebApp.

Google Chrome

A documentação abaixo explica como inserir o endereço do WebApp na lista de sites sempre ativos, evitando sua hibernação:

https://support.google.com/chrome/answer/12929150?hl=pt-BR#zippy=%2Cmanter-sites-espec%C3%ADficos-ativos

Microsoft Edge

O processo com o Edge é muito parecido com o Chrome, acesse o link abaixo, procure pelo item "E os sites que eu nunca quero dormir?" e siga as instruções:

https://support.microsoft.com/pt-br/topic/saiba-mais-sobre-os-recursos-de-desempenho-no-microsoft-edge-7b36f363-2119-448a-8de6-375cfd88ab25

Mozilla Firefox

No caso do Firefox é necessário ajustar o parâmetro browser.tabs.unloadOnLowMemory para false, mais informações acesse o link abaixo:

https://support.mozilla.org/pt-BR/kb/descarregue-abas-inativas-firefox-liberar-memoria

...

Neste link você terá acesso às informações de download, configuração e notas de release do WebApp:

1. Versão WebApp

Configurando

...

o App_Environment via Porta Multiprotocolo

...

A porta multiprotocolo configuração do App_Environment via Porta Multiprotocolo é um facilitador, criando rotas para ferramentas como o WebApp, WebMonitor, Rest e outras.

A documentação abaixo é importante para sua correta configuração:

...

Em ambientes com multiplos Servidores é conselhavel aconselhavel o uso do Broker HTTP, para balanceamento via WebApp.

...

O WebAgent é um serviço websocket, seguro, que permite esses acessos bloqueados pelos navegadores, mais informações no link: 2. WebApp - WebAgent

Limitações impostas pelos navegadores relativas à segurança e usabilidade

...

Nesta seção listaremos algumas limitações impostas pelos navegadores, e os contornos, quando possível.

Ao utilizar o TWebEngine (iframe):
Não é possível executar o método navigate para a página https://www.google.com/

...

A grande maioria dos sites, incluíndo o google e a TOTVS, impede impedem seu uso através de um iframe por questões de segurança, não existe contorno para essa questão, sendo apresentado o seguinte erro no console de seu navegador:

...

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
// Exemplo de uso para Windows
ShellExecute( "open", "http://www.google.com.br", "", "", 1 )
 
// Exemplo de uso para Linux
shellExecute("Browser", "/usr/bin/firefox", "http://www.google.com.br", "/", 1 ) 

Ao utilizar o TWebEngine (iframe):
Não é possível executar o método navigate para um arquivo local, exemplo: file:///dir/arquivo

...

Esta também é uma medida de segurança dos navegadores, como contorno, recomendamos copiar o arquivo em questão para uma pasta temporária no Servidor através da função CpyF2Web, acessando este arquivo na sequencia, mais informações no link: TWebEngine:Navigate

...

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
DEFINE DIALOG oDlg TITLE "Contorno para file://" FROM 0,0 TO 800,1200 PIXEL

  // Copia o arquivo da Estacao para o Servidor, retornando seu caminho
  // Este exemplo foi escrito para Linux, ao utilizar em Windows,
  //   basta mudar o caminho para o arquivo, ex: "c:/dir/arquivo" 
  cFilePath := CpyF2Web("l:/home/mansano/totvs/file.txt", .T., .F., .F., .F.)
  
  oWebEngine := TWebEngine():New(oDlg, 0, 0, 100, 100,,)
  oWebEngine:Align := CONTROL_ALIGN_ALLCLIENT

  // Executa o Navigate para o arquivo temporario no Servidor
  oWebEngine:navigate(cFilePath)

ACTIVATE DIALOG oDlg CENTERED 

Ao utilizar o TWebEngine (iframe):
Comportamento do InactiveTimeout ao digitar/navegar em uma aplicação HTML(POUI)

...

O tempo de inatividade (inactive timeout) é definido pelo administrador do ERP para garantir, que caso uma conexão fique inativa por N minutos, ela seja automáticamente encerrada.

...

ProtocoloHost name / IPPortaRota
http://10.173.1.12:8081/webapp
http://10.173.1.12:8081/webmonitor

WebApp em dispositivos móveis

O WebApp é homologado para Tablets, sem qualquer configuração adicional.

🚨 É possível também acessar o ERP a partir de um celular, porém a experiência de navegação será muito prejudicada, motivo pelo qual não é homologado.

Mais informações no link: SmartClient HTML (WebApp) - Navegadores homologados

🚨 O WebAgent não é homologado para dispositivos móveis, devido à diversas limitações de segurança impostas pelo Android/IOS.

Cadastro de Clientes sendo executado em um Galaxy S a partir do Samsung Dex

Image Removed

Como identificar corretamente a versão do Client em uso

Ao utilizar o WebApp em conjunto com o WebAgent, o retorno da função GetRemoteType() será o mesmo do SmartClient Desktop, exemplo: 1=Windows / 2=Linux/MacOS.

Caso precise confirmar se esta executando o WebApp, utilize o trecho abaixo, capturando a informação adcional por referência:

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
function u_remoteType()
  Local cLib
  Local cRmtType := GetRemoteType(@cLib) 
  conout("Tipo do remote: " + cValToChar(cRmtType)) // -> Ex: 1=Windows | 2=Linux/MacOS
  conout("Info adicional: " + cLib)                 // -> Exemplo ao utilizar o WebApp: "HTML-9.1.6 LINUX"
return

// Retorno
// Tipo do remote: 2
// Info adicional: HTML-9.1.6 LINUX

Mais informações no link: GetRemoteType

Passagem de parâmetros na abertura do ERP através do Navegador

O SmartClient Desktop permite a passagem de parâmetros quando executado via linha de comando, o WebApp permite a mesma ação, passando os parâmetros diretamente na URL de seu navegador, abaixo um exemplo:

http://10.173.9.215:5011?E=ambiente&P=SIGAFAT&A=param1&A=param2&A=param3

Mais informações no link: Parâmetros de Linha do SmartClient HTML

Passagem de parâmetros na abertura do ERP através do WebAgent (parâmetro launch)

É possível também executar o WebAgent passando parâmetros via linha de comando, uma característica importante caso queira automatizar algum processo customizado, por exemplo.

Ao utilizar o parâmetro launch, o navegador será iniciado sem abas, passando a sensação ao usuário de estar rodando uma aplicação convencional.

Exemplo:

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
C:\Users\Administrator\AppData\Local\Programs\web-agent\web-agent.exe launch "http://10.173.9.215:5011?E=ambiente&P=SIGAFAT&A=param1&A=param2&A=param3" --browser="C:\Program Files\Google\Chrome\Application\chrome.exe" 

...

Execução de rotinas sem interface através do WebAgent (parâmetro launch com --headless)

Informações

O parâmetro --headless está disponível a partir da versão 1.0.9 do WebAgent.

Existem algumas rotinas de processamento que não necessitam de interface (tela), é possivel executar essas rotinas utilizando em conjunto os parâmetros launch e --headless.

Exemplo:

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
C:\Users\Administrator\AppData\Local\Programs\web-agent\web-agent.exe launch "http://10.173.9.215:5011?E=ambiente&P=u_headless" --browser="C:\Program Files\Google\Chrome\Application\chrome.exe" --headless 

Mais informações no link: 2. WebApp - WebAgent#2.WebAppWebAgent-Headless

Image Removed

Diferenças na aplicação de CSS (SetCSS) entre o WebApp e o SmartClient Desktop

Dadas as diferenças de tecnologia entre os dois Clients, a renderiação de estilo (CSS) também pode apresentar diferenças de comportamento.

No ERP essas diferenças são tratadas pelas Squads responsaveis pelos produtos, e caso sua empresa possua customizações que utilizam CSS, podem ser necessários pequenos ajustes caso comece a utilizar o WebApp.

Mais informações nos links:

SetCSS no WebApp

SetCSS

Limite de conexões por browser

Os navegadores atuais de mercado possuem um limite máximo de conexões paralelas por domínio, para evitar ataques como Denial of Service.

No caso do ERP, não serão possiveis novas conexões com o Servidor de Aplicação quando este limite for atingido.

Caso esteja utilizando no Chrome, por exemplo, o SIGAMDI, o Menu Principal irá consumir uma conexão com o domínio (Servidor), desta forma, você poderá executar (no mesmo navegador), mais 5 rotinas simultâneas do ERP,  chegando neste limite, não serão permitidas aberturas de novas rotinas.

🚨 Abrir uma sessão deste mesmo navegador em modo anônimo/privado não irá permitir novas conexões, porém, poderá utilizar um segundo navegador, respeitando seu novo limite de conexões.

Mais informações no link: Limite de conexões por browser

...

Teclas de atalho bloqueadas pelos navegadores

Os navegadores possuem um conjunto de teclas proprietárias, impedindo seu uso através da função SetKey no WebApp.

🚨 Caso possua alguma customização que utiliza esses conjuntos de teclas, será necessário ajustar sua rotina.

Mais informações no link: SetKey no Webapp

...

Ctrl+Tab ou Ctrl+PgDn

...

Navegar entre as abas do navegador.

...

Ctrl+Shift+Tab ou Ctrl+PgUp

...

Limite de conexões por browser

...

Os navegadores atuais de mercado possuem um limite máximo de conexões paralelas por domínio, para evitar ataques como Denial of Service.

No caso do ERP, não serão possiveis novas conexões com o Servidor de Aplicação quando este limite for atingido.

Caso esteja utilizando no Chrome, por exemplo, o SIGAMDI, o Menu Principal irá consumir uma conexão com o domínio (Servidor), desta forma, você poderá executar (no mesmo navegador), mais 5 rotinas simultâneas do ERP,  chegando neste limite, não serão permitidas aberturas de novas rotinas.

🚨 Abrir uma sessão deste mesmo navegador em modo anônimo/privado não irá permitir novas conexões, porém, poderá utilizar um segundo navegador, respeitando seu novo limite de conexões.

Mais informações no link: Limite de conexões por browser

BrowserNúmero de conexões simultâneas
Firefox®6
Chrome™6
Safari®6
Opera®6
Edge®6
Yandex®5
iOS®6
Android™6

Teclas de atalho bloqueadas pelos navegadores

...

Os navegadores possuem um conjunto de teclas proprietárias, impedindo seu uso através da função SetKey no WebApp.

🚨 Caso possua alguma customização que utiliza esses conjuntos de teclas, será necessário ajustar sua rotina.

Mais informações no link: SetKey no Webapp

Teclas de atalhoDescrição
Windows/LinuxMac
Ctrl+T⌘+tAbrir uma nova guia do navegador.
Ctrl+Shift+T ⌘+Shift+tReabrir guias fechadas anteriormente na ordem em que foram fechadas.
Ctrl+N⌘+nAbrir uma nova janela do navegador.
Ctrl+Shift+N⌘+Shift+nAbrir uma nova janela de navegação anônima.

Ctrl+Tab ou Ctrl+PgDn

⌘+Option+seta para a direita

Navegar entre as abas do navegador.

Ctrl+Shift+Tab ou Ctrl+PgUp

⌘+Option+seta para a esquerdaAcessar a guia aberta anterior
Alt+Home
Abrir a página inicial na guia atual
Ctrl+W ou Ctrl+F4⌘+wFechar a guia atual do navegador.
Ctrl+Shift+W ou Alt+F4⌘+Shift+wFechar a janela do navegador.
Alt+Espaço+n⌘+mMinimizar a janela atual
Alt+Espaço+x

Maximizar a janela atual

Bloqueio de Relatórios com mais de 1.000 páginas

...

Os navegadores possuem um limitador de até 1.000 páginas exibidas através de seu próprio spool, para controle de consumo de recursos.

Relatórios do tipo TReport

Os relatórios do tipo TReport podem ser salvos em PDF, imprimindo este PDF na sequência, evitando esta limitação.

Relatórios do tipo SetPrint (##R) 

Os relatórios do tipo SetPrint não possuem impressão via PDF, para evitar essa limitação recomendamos:

  • Gerar normalmente seu relatório, mesmo que ele possua mais de 1.000 páginas
  • Após a geração, ao fazer sua impressão, via impressora física ou virtual(PDF)
  • Limite o numero de páginas a serem impressas, exemplo:
    • Caso o relatório tenha 1.500 páginas
      • Imprima da página 1 à 500
      • Em seguida, imprima da 501 à 1.000, e assim por diante...

No print abaixo, retirado da tela de Spool de Impressão, temos um exemplo desta operação:

Image Added

VSCode - Depuração via WebApp

...

Na sequencia demonstramos os passos para depuração via WebApp utilizando o TDS-VSCode, mais informações sobre depuração aqui.

  1. Acesse no painel lateral esquedo a opção "Depuração".
  2. Clique na engrenagem superior para acessar o arquivo launch.json.
  3. Clique no botão "Adicionar Configuração"

Image Added

  1. Selecione a opção "TOTVS Language Debug via Web App"

Image Added

  1. Na tag smartclientUrl informe o ip:porta para seu servidor
  2. Atente para a tag "name", onde será definido o nome para o launcher, pois será utilizado na sequencia.

Image Added

  1. Selecione o launcher que foi criado.

Image Added

  1. Acesse "Configurações".
  2. No campo de pesquisa preencha: navigador
  3. Selecione a aba "Usuário"
  4. Informe o caminho completo para o navegador de sua preferência, para verificar os navegadores homologados acesse aqui.

Image Added

  1. Inicie normalmente a depuração, da mesma forma que faria utilizando o SmartClient Desktop.

Image Added

  1. Ponto de parada

Image Added

  1. Programa sendo exibido no navegador, da mesma forma que seria exibido utilizando o SmartClient Desktop.

Image Added

WebApp em dispositivos móveis

...

O WebApp é homologado para Tablets, sem qualquer configuração adicional.

🚨 É possível também acessar o ERP a partir de um celular, porém a experiência de navegação será muito prejudicada, motivo pelo qual não é homologado.

Mais informações no link: SmartClient HTML (WebApp) - Navegadores homologados

🚨 O WebAgent não é homologado para dispositivos móveis, devido à diversas limitações de segurança impostas pelo Android/IOS.

Cadastro de Clientes sendo executado em um Galaxy S a partir do Samsung Dex

Image Added

WebApp em telas sensíveis ao toque

...

É possível utilizar o WebApp em telas sensíveis ao toque, seja um notebook ou um tablet, mas existem algumas diferenças de comportamento para facilitar seu uso.

Image Added

Mais informações no link: Telas de Toque (Touchscreen) / Mobile - Mudança de Comportamento

Como identificar corretamente a versão do Client em uso

...

Ao utilizar o WebApp em conjunto com o WebAgent, o retorno da função GetRemoteType() será o mesmo do SmartClient Desktop, exemplo: 1=Windows / 2=Linux/MacOS.

Caso precise confirmar se esta executando o WebApp, utilize o trecho abaixo, capturando a informação adcional por referência:

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
function u_remoteType()
  Local cLib
  Local cRmtType := GetRemoteType(@cLib) 
  conout("Tipo do remote: " + cValToChar(cRmtType)) // -> Ex: 1=Windows | 2=Linux/MacOS
  conout("Info adicional: " + cLib)                 // -> Exemplo ao utilizar o WebApp: "HTML-9.1.6 LINUX"
return

// Retorno
// Tipo do remote: 2
// Info adicional: HTML-9.1.6 LINUX

Mais informações no link: GetRemoteType

Passagem de parâmetros na abertura do ERP através do Navegador

...

O SmartClient Desktop permite a passagem de parâmetros quando executado via linha de comando, o WebApp permite a mesma ação, passando os parâmetros diretamente na URL de seu navegador, abaixo um exemplo:

http://10.173.9.215:5011?E=ambiente&P=SIGAFAT&A=param1&A=param2&A=param3

Mais informações no link: Parâmetros de Linha do SmartClient HTML

Passagem de parâmetros na abertura do ERP através do WebAgent (parâmetro launch)

...

É possível também executar o WebAgent passando parâmetros via linha de comando, uma característica importante caso queira automatizar algum processo customizado, por exemplo.

Ao utilizar o parâmetro launch, o navegador será iniciado sem abas, passando a sensação ao usuário de estar rodando uma aplicação convencional.

Exemplo:

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
C:\Users\Administrator\AppData\Local\Programs\web-agent\web-agent.exe launch "http://10.173.9.215:5011?E=ambiente&P=SIGAFAT&A=param1&A=param2&A=param3" --browser="C:\Program Files\Google\Chrome\Application\chrome.exe" 

Mais informações no link: 2. WebApp - WebAgent#2.WebAppWebAgent-Launch

Image Added

Execução de rotinas sem interface através do WebAgent (parâmetro launch com --headless)

...

Informações

O parâmetro --headless está disponível a partir da versão 1.0.9 do WebAgent.

Existem algumas rotinas de processamento que não necessitam de interface (tela), é possivel executar essas rotinas utilizando em conjunto os parâmetros launch e --headless.

Exemplo:

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
C:\Users\Administrator\AppData\Local\Programs\web-agent\web-agent.exe launch "http://10.173.9.215:5011?E=ambiente&P=u_headless" --browser="C:\Program Files\Google\Chrome\Application\chrome.exe" --headless 

Mais informações no link: 2. WebApp - WebAgent#2.WebAppWebAgent-Headless

Image Added

Diferenças na aplicação de CSS (SetCSS) entre o WebApp e o SmartClient Desktop

...

Dadas as diferenças de tecnologia entre os dois Clients, a renderiação de estilo (CSS) também pode apresentar diferenças de comportamento.

No ERP essas diferenças são tratadas pelas Squads responsaveis pelos produtos, e caso sua empresa possua customizações que utilizam CSS, podem ser necessários pequenos ajustes caso comece a utilizar o WebApp.

Mais informações nos links:

SetCSS no WebApp

SetCSS

Arquitetura do WebApp

...

Uma seção do WebApp consome cerca de 300Kb a mais que o SmartClient Desktop, relativos ao motor que traduz as telas AdvPL/TLPP em conteúdo HTML.

O processamento e a manipulação de dados (CRUD), continua sendo de responsabilidade do AppServer/DBAccess, não havendo diferença no consumo de recursos, independente do Client utilizado.

Image Added

...

Maximizar a janela atual

Arquitetura do WebApp

Uma seção do WebApp consome cerca de 300Kb a mais que o SmartClient Desktop, relativos ao motor que traduz as telas AdvPL/TLPP em conteúdo HTML.

O processamento e a manipulação de dados (CRUD), continua sendo de responsabilidade do AppServer/DBAccess, não havendo diferença no consumo de recursos, independente do Client utilizado.

Image Removed

WebApp em telas sensíveis ao toque

É possível utilizar o WebApp em telas sensíveis ao toque, seja um notebook ou um tablet, mas existem algumas diferenças de comportamento para facilitar seu uso.

Image Removed

Mais informações no link: Telas de Toque (Touchscreen) / Mobile - Mudança de Comportamento

Depuração via WebApp

Na sequencia demonstramos os passos para depuração via WebApp utilizando o TDS-VSCode, mais informações sobre depuração aqui.

  1. Acesse no painel lateral esquedo a opção "Depuração".
  2. Clique na engrenagem superior para acessar o arquivo launch.json.
  3. Clique no botão "Adicionar Configuração"

Image Removed

  1. Selecione a opção "TOTVS Language Debug via Web App"

Image Removed

  1. Na tag smartclientUrl informe o ip:porta para seu servidor
  2. Atente para a tag "name", onde será definido o nome para o launcher, pois será utilizado na sequencia.

Image Removed

  1. Selecione o launcher que foi criado.

Image Removed

  1. Acesse "Configurações".
  2. No campo de pesquisa preencha: navigador
  3. Selecione a aba "Usuário"
  4. Informe o caminho completo para o navegador de sua preferência, para verificar os navegadores homologados acesse aqui.

Image Removed

  1. Inicie normalmente a depuração, da mesma forma que faria utilizando o SmartClient Desktop.

Image Removed

  1. Ponto de parada

Image Removed

  1. Programa sendo exibido no navegador, da mesma forma que seria exibido utilizando o SmartClient Desktop.

Image Removed

Bloqueio de Relatórios com mais de 1000 páginas

Os navegadores possuem um limitador de até 1.000 páginas exibidas através de seu próprio spool, para controle de consumo de recursos.

Relatórios do tipo TReport

Os relatórios do tipo TReport podem ser salvos em PDF, imprimindo este PDF na sequência, evitando esta limitação.

Relatórios do tipo SetPrint (##R) 

Já os relatórios do tipo SetPrint não possuem opção para impressão em PDF, neste caso é possivel gerar um relatorio com mais de 1.000 páginas, e fazer sua impressão, através de uma impressora física ou de uma impressora PDF instalada em seu sistema operacional, limitando na sequência, o numero de páginas a serem impressas, exemplo: de 500 em 500, também evitando esta limitação.

No print abaixo, retirado da tela de Spool de Impressão, temos um exemplo desta operação:

Image Removed


Templatedocumentos

...