Precisa de construir um diálogo de ligação 4D personalizado? Interessado em ligar a sua aplicação cliente a diferentes servidores? Estes são dois cenários que 4D v18 lhe permite tratar. Este post de blogue é para si se quiser criar um diálogo de ligação remota personalizado e ligá-lo a servidores 4D fundidos. Continue a ler!
Porque devo escrever o meu próprio diálogo de ligação?
Há vários casos de utilização para modificar o diálogo de ligação 4D incorporado:
- CUSTOMIZAÇÃO
Pretende-se personalizar o diálogo padrão para ligações remotas ao servidor.
- MÚLTIPLAS FILIAIS
Ao implantar a sua aplicação e criar várias bases de dados distintas. Por exemplo, uma base de dados diferente para cada filial de um grupo. Na base de dados de ligação, é possível gerir a que servidores e utilizadores de bases de dados se podem ligar e permitir que se liguem directamente.
- BASE DE DADOS DE ARQUIVO
Outra forma de utilizar um diálogo personalizado é escolher a que utilizadores da base de dados do ano fiscal arquivados podem aceder.
- PORTAL DE APLICAÇÃO
Se implementar vários produtos e quiser que os seus utilizadores utilizem uma única aplicação “portal” para se ligarem a cada produto.
Caso de utilização
Uma editora de software tem uma quinta de servidores alojada na nuvem, correspondendo cada servidor a uma necessidade empresarial específica. Anteriormente, eles implantaram tantas aplicações remotas como o número de utilizadores que podiam aceder aos servidores. Agora, podem implantar uma única aplicação remota para todos os servidores com uma base de dados “directório”. Utilizando pedidos HTTP ou datastores remotos, cada servidor envia o seu estado e informação de ligação para o servidor de “directório”. A aplicação ligada pode então consultar a base de dados de directório, ver uma lista de servidores disponíveis, e ligar-se a um.
Como fazer isso?
CRIANDO UMA BASE DE DADOS DE LIGAÇÕES
Primeiro, é necessário criar uma base de dados de ligação contendo o seu próprio diálogo de ligação. O OPEN DATABASE foi alargado para permitir a ligação a um Servidor 4D. Gerar um ficheiro 4DLink contendo a localização e porta do servidor, e depois passá-lo como parâmetro para o comando. A aplicação autónoma pára automaticamente o seu código e liga-se ao servidor, tornando-se uma aplicação remota típica.
Aqui está um snippet de código de um diálogo de selecção de servidor onde Form.selectedServer contém a informação do Servidor 4D:
Se (Form.selectedServer#Null)
C_TEXT ($xml)
C_OBJECT ($link)
$xml :="<?xml version=\"1.0\" encoding=\"UTF-8\"?><database_shortcut is_remote=\"true\" server_database_name==\"FA_RemoteConnexionServ=\""+Form.selectedServer.IP+": "+Form.selectedServer.portID+"\"/>"
$link :=Folder(fk user preferences folder).file("server.4dlink")
$link .setText($xml)
OPEN DATABASE ($link.platformPath)
Terminar se
Quando a sua base de dados de ligações estiver pronta, só precisa de construir uma base de dados compilada.
FUNDINDO A BASE DE DADOS DE DESTINO
Apenas as aplicações clientes fundidas podem ligar-se a servidores fundidos. Por conseguinte, desenvolvemos um novo mecanismo no processo de construção da aplicação para permitir a incorporação da base de dados de ligação na aplicação cliente fundida.
Criámos as novas chaves BuildApp, DatabaseToEmbedInClientWinFolder e DatabaseToEmbedInClientMacFolder, para conter os caminhos da base de dados de ligação compilada. Desta forma, ao construir a aplicação cliente/servidor final, o processo de construção da aplicação incorporará a base de dados de ligação compilada na aplicação cliente e alterará o seu nome.
Esta aplicação pode ser executada sem um ficheiro de dados ou qualquer licença. Contudo, se precisar de um ficheiro de dados, pode colocar um ficheiro “Default Data.4DD” numa pasta “Default Data” perto da estrutura compilada. Neste caso, a licença para uma aplicação autónoma fundida é integrada durante o processo de compilação da aplicação.
Trata-se de uma estrutura de aplicação cliente fundida sem uma base de dados incorporada (“cliente antigo”):
Esta é uma amostra de chaves BuildApp para embutir uma aplicação de ligação:
<DatabaseToEmbedInClientMacFolder>
::connectionApp_Build:Base de dados compilada:connectionApp:
</DatabaseToEmbedInClientMacFolder>
Esta é uma base de dados de ligações compilada:
E finalmente, esta é uma estrutura de aplicação de cliente fundida:
COMO É QUE FUNCIONA?
Em tempo de execução, a aplicação cliente fundida abrirá a base de dados de ligação integrada e depois permitirá ao utilizador seleccionar o servidor fundido ao qual se ligar. Se for utilizado um ficheiro de dados predefinido, este está em modo só de leitura.
Note-se que o processo de actualização automática a partir do servidor fundido ainda está disponível. Quando a aplicação de ligação fundida se liga ao servidor, se a sua versão não estiver ao alcance do servidor, é lançada uma actualização automática como se a aplicação fosse uma aplicação cliente padrão fundida!