Como programador 4D, pode já ter encontrado a necessidade de desenvolver aplicações sem uma interface gráfica de utilizador (GUI), também conhecida como aplicações sem cabeça. Anteriormente, em 4D, isto não era inteiramente possível de fazer …. até 4D v18! Neste post do blogue, vamos analisar algumas das novas capacidades disponíveis para que possa tornar as suas aplicações “sem cabeça”!
Porquê criar aplicações “headless”? Há vários casos de utilização, tais como a simulação do comportamento do Windows em macOS, ou ter o comportamento do serviço Windows sem utilizar o gestor de serviços, e assim por diante. Mas acima de tudo, abre novas oportunidades, tais como o desenvolvimento de bots com 4D.
Como lançar uma aplicação 4D em modo sem cabeça?
Pode agora lançar uma aplicação 4D em modo sem cabeça através do CLI (Command Line Interface) com o novo parâmetro“headless”. Disponível para todos os tipos de aplicação: Aplicações 4D, 4D Server, autónomas, remotas, fundidas. Nos exemplos abaixo, o directório actual é o directório executável.
exemplos macOS (quando o terminal é colocado na pasta “Conteúdos/MacOS” do pacote):
./4D\ Servidor — MyDatabase sem cabeça.4DLink ./”Servidor 4D”. — sem cabeça MyDatabase.4DLink ./4D — sem cabeça MyDatabase.4DLink ./MyBuiltRemoteApp — sem cabeça |
Exemplos de janelas:
“4D Server.exe” — sem cabeça MyDatabase.4DLink 4D.exe — sem cabeça MyDatabase.4DLink MyBuiltRemoteApp.exe — sem cabeça |
Acrescentámos um novo atributo “sem cabeça” ao objecto devolvido pelo Get application info comando. Torna muito mais fácil codificar em função do modo de execução: com ou sem interface.
Nota: Agora, quando se executa uma aplicação em modo de serviço em sistemas Windows, é automaticamente executada como uma aplicação sem cabeça. Parar o serviço deixa a aplicação 4D da forma correcta (por exemplo, utilizando a acção “Parar” no monitor de actividade MacOS).
O que acontece durante a execução?
Pode estar a pensar: “Está bem, é divertido, mas o que acontece se for suposto aparecer um diálogo”? Para o manter informado sobre o que acontece em tempo de execução, 4D activa automaticamente os registos de diagnóstico quando se corre em modo sem cabeça. Os registos capturam todas as interfaces de utilizador que poderiam ter sido exibidas e registam-nas com a etiqueta [{applicationName}.HDLS].
O comportamento geral é que 4D captura os comandos que tentam exibir algo, regista um evento de aviso com o nome do comando e a sua cadeia de chamadas, e cancela a acção. Existem alguns casos especiais:
- Se não houver licença disponível, 4D regista isto no registo de eventos do sistema e nos fluxos padrão, e depois abandona a acção.
- Se a base de dados necessitar de conversão, 4D regista isto no registo de eventos do sistema e nos fluxos padrão, e depois abandona a acção.
- Se não for encontrada nenhuma base de dados ou ficheiro de dados disponível, 4D regista isto no registo de eventos do sistema e nas transmissões padrão, e depois desiste.
- Quando o depurador precisa de ser exibido, 4D regista um erro e depois simula a acção “abortar”.
- Quando aparece um alerta, 4D regista e depois simula a acção “OK”.
- Quando o comando QUIT 4D é chamado, 4D regista e depois simula a acção “OK”.
- Quando é necessário actualizar uma aplicação fundida, é gerado um registo, a actualização é executada, e a aplicação reinicia em modo sem cabeça.
Exemplo
Por exemplo, um comando ALERT executado num servidor executado como um serviço no Windows já não irá parar a execução do servidor. 4D apanha automaticamente o comando e escreve uma linha de aviso nos registos de Diagnóstico. É o que parece:
11 2019-07-11 18:53:52 [myTestDatabase Server.HDLS] WARN – (Alerta: etiqueta de alerta de teste)[{“type”: “projectMethod”, “name”: “myTestAlert”, “line”:2, “database”: “myTestDatabase”}] |
Este sistema foi criado para o ajudar a ver o que acontece nas suas aplicações sem cabeça, e melhorar o seu código (se necessário).
UTILIZANDO FLUXOS PADRÃO DO SISTEMA
Acrescentámos o novo selector, Into system standard outputs, ao comando LOG EVENT para que possa enviar um texto para os fluxos padrão stdout e stderr. Como deve saber, o comando LOG EVENT tem um parâmetro opcional de“importância”. Assim, dependendo da importância do evento, o comando enviará o texto para o fluxo stdout para Information message e Warning message, e para o fluxo stderr para Error message.
Enviar o texto para stdout:
LOG EVENT(Into system standard outputs; "Este é um texto para stdout";Information message)
Enviar texto para stderr:
LOG EVENT(Into system standard outputs; "Este é um texto para stderr";Error message)
Também pode utilizar redireccionamentos para os fluxos padrão do sistema stdout e stderr para recuperar a informação gerada pelo 4D e a sua aplicação. Por defeito, estes fluxos são geralmente dirigidos para a consola, raramente para o ecrã, dependendo das configurações do sistema. Por exemplo, pode redireccionar os fluxos padrão para ficheiros utilizando as seguintes linhas de comando.
macOS:
./4D –headless MyDatabase.4DLink 1>stdout.txt 2>stderr.txt |
Janelas:
4D — MyDatabase sem cabeça.4DLink 1>stdout.txt 2>stderr.txt |
Lembrete para combinações de redireccionamento de fluxo:
- 1>outputFile: o fluxo de saída padrão será escrito no ficheiro em vez da saída padrão do sistema. O ficheiro é automaticamente criado ao iniciar o comando. Se já existir, o conteúdo antigo é apagado.
- 1>>outputFile: o mesmo comportamento que a sintaxe anterior, excepto que se o ficheiro já existir, ele acrescenta-se ao conteúdo do fluxo.
- 2>errorFile: o fluxo de erro padrão será escrito no ficheiro em vez da saída por defeito do sistema. O ficheiro é automaticamente criado ao iniciar o comando. Se já existir, o conteúdo antigo é apagado.
- 2>>errorFile: o mesmo comportamento que a sintaxe anterior, excepto que se o ficheiro já existir, ele anexa o conteúdo do fluxo.
- 2>&1: o fluxo de erros é fundido com o fluxo de saída.
- 1>&2: o fluxo de saída é fundido com o fluxo de erro.
Nota: é mesmo possível usar o comando aberto para executar um pacote 4D num sistema macOS, os fluxos serão gerados por este comando e não pela aplicação 4D!
Conclusão
Estes novos avanços permitem-lhe satisfazer os requisitos do sistema e também criar novas oportunidades, tais como os bots. Cabe-lhe a si combinar isto com os seus canais de integração contínua (CI) e de teste contínuo (CT) para a sua fábrica de software. O seu único limite é a sua imaginação!