...
Além das rotinas convencionais em ADVPL, que são acionadas no Protheus através do menu, se faz necessário que o menu também abra rotinas do tipo aplicativos web, no formato de front-end/back-end, como as rotinas que são criadas em Angular com o Portinari ou o antigo THF (TOTVS HTML Framework).
Para que isso seja possível, é necessário que esses aplicativos sejam armazenados no RPO e que tenham um controle de alterações. Essa alteração é solução deverá para permitir que o processo de atualização de um app seja feito com a aplicação de um patch, assim como uma rotina advpl comum.
O objetivo então é definir um padrão de criação de aplicativo para que seja possível automatizar o processo de extração, atualização, preparação de ambiente e abertura do aplicativo.
...
...
Requisitos provisórios de funcionamento
Devido algumas limitações de tecnologia atuais, as versões iniciais dependem de algumas configurações de ambiente que em versões futuras deixarão de ser necessárias.(Apenas para ambientes com lib de label inferior à 20200214 ou appserver inferior à 7.00.191205P)
...
Obs.: Caso o ambiente já possua uma configuração de HTTP com outro PATH será necessário alterar para o valor fixo e mover todo o conteúdo da pasta antiga para essa pasta fixa chamada http-root que deve ficar dentro da rootpath.
Configuração para ambientes atualizados
Informações |
---|
Disponível a partir da LIB 20200214 e Appserver 7.00.191205P. |
[General]
App_Environment={nome-do-ambiente-utilizado}
* Para ambientes atualizados, os parâmetros MV_BACKEND e MV_GCTPURL e também a configuração de HTTP não são mais utilizadas, bastando apenas a linha do App_Environment na General.
Antes de abrir o browse com o aplicativo rodando, há um pré-carregamento HTML/JavaScript onde a FwCallApp carrega um token (bearer) de acesso às API’s REST e grava na sessionStorage['TOKENERPTOKEN'] do aplicativo. (Obs.: As primeiras versões utilizavam o nome TOKEN, mas depois de alinhamento entre as marcas da Totvs foi mudado para ERPTOKEN)
Com esse token enviado no header Authorization de cada requisição HTTP é garantido o acesso às API’s com o perfil do usuário que se logou no Protheus antes de executar o aplicativo através do menu.
Comunicação com o REST Server
Além do token de acesso, o front-end precisará saber o endereço em que o REST Server foi configurado.
Essa informação está disponível no arquivo AppConfig.json que foi mencionado no item 8 dos padrões da solução.
...
{
"name": "Protheus THF",
"version": "12.23.0",
"serverBackend": "/",
"restEntryPoint": "rest",
"versionAPI": ""
}
Essa chave serverBackend é utilizada para definir o endereço e porta do servidor REST, e caso seja informada apenas como "/" será manipulada pela FwCallApp no momento de descompactação do resource. O valor que estiver configurado no MV_BACKEND será copiado para a chave serverBackendA chave serverBackend será atualizada para o endereço dinâmico que estiver respondendo o serviço do REST. Caso tenha outro valor diferente de barra, o mesmo não será alterado.
...
*Caso utilize a biblioteca protheus-lib-core dentro de um projeto Angular, basta fazer as requisições informando apenas o endpoint, pois um interceptor se encarrega de anexar o host do AppConfig e o token da sessionStorage de forma automática. Link https://npm.totvs.io/#/detail/protheus-lib-core
Cancelando o pré-carregamento
Caso um aplicativo não deseje utilizar os recursos disponibilizados pelo pré-carregamento, basta criar um arquivo em sua pasta raiz com o nome “noredirect” sem extensão.
...
Apenas para esclarecimento, essa tag se faz necessária pois o aplicativo não estará na pasta raiz do servidor HTTP. Ela estará em uma pasta com o nome do aplicativo que estará em uma pasta chamada app-root que por sua vez estará na pasta raiz.
Sendo assim qualquer chamada do tipo <script type="text/javascript" src="runtime.js"> iria procurar o arquivo na pasta raiz.
Então graças à tag <base href="app-root/myAppmyapp/"> o arquivo irá ser buscado na pasta myApp myapp e não na raiz.
...