Múltiplas fontes de dados 4D, interessado?

Tradução automática de Deepl

Temos uma nova e excitante característica a anunciar em 4D v18 e o título pode já lhe ter dado uma dica!

Esta característica abre novas possibilidades para o trabalho cliente/servidor. Em vez de se limitar à base de dados actual e de requerer uma ligação permanente à rede, uma aplicação em 4D v18 pode obter dados de outra base de dados 4D remota que está exposta num servidor 4D!

Muitas opções tornam-se disponíveis graças a esta funcionalidade. Por exemplo, poderia organizar as suas aplicações para trabalhar offline e só sincronizar os dados locais quando os dados remotos são acessíveis. Ou poderia considerar a publicação dos seus dados em múltiplos servidores e mudar de um para o outro conforme necessário. Outra opção poderia ser dividir o seu modelo de dados em diferentes bases de dados( por exemplo, dados locais, dados internacionais). Que tal ter os seus dados distribuídos em locais diferentes e ainda acessíveis através de um único código de cliente 4D (métodos de projecto e objectos de formulário)? Todos estes cenários são agora possíveis e este post no blog diz-lhe como!

HDI: Como trabalhar com um datastore remoto

Com 4D v18, a sua base de dados 4D pode ser exposta como um servidor REST para outras aplicações cliente 4D. Isto significa que um cliente 4D pode interagir com os dados que expôs (criar, ler, actualizar, apagar). E ainda mais boas notícias: esta interacção é baseada em conceitos ORDA, por isso é completamente orientada para objectos!

como expor a sua base de dados 4D para acesso remoto?

Nas definições Web da base de dados:

  • No separador Configuração, configure uma porta HTTP (por razões de segurança, certifique-se de utilizar HTTPS para o modo de produção!)

  • No separador de recursos REST, seleccione a opção“Expor como Servidor REST

blank

  • Iniciar o servidor Web. No exemplo acima, escolhemos iniciar o servidor no arranque da base de dados.
  • Abra a sua base de dados no Servidor 4D.
  • Parabéns! A sua base de dados está agora acessível para acesso remoto através do IP da sua máquina e da porta que configurou!

Nota: A utilização do Servidor Web para aceder ao Servidor REST não requer uma licença do Servidor Web. As licenças de Cliente 4D padrão são utilizadas para ligações.

Trabalhar com bases de dados remotas

Comando de datastore aberto

Como dissemos anteriormente, a sua base de dados é acessível através de conceitos ORDA: uma base de dados é tratada com um objecto de datastore. Por conseguinte, o primeiro passo é obter o objecto de datastore correspondente à base de dados remota a que pretende aceder. Não há problema! Chame a Open datastore comandar com o nome de anfitrião correcto e está a fugir e a correr.

Associamos o objecto de datastore ao ID local, “estudantes”. Podemos agora começar a trabalhar com a nossa base de dados remota utilizando a ORDA (executar consultas, carregar/actualizar entidades, etc.)

C_OBJECT($connectTo;$schoolDS;$s)
C_TEXT ($dataClass)

//The database contains a Students dataclass
$dataClass :="Estudantes"

$connectTo :=New object("hostname"; "school.acme.com")
$schoolDS :=Open datastore($connectTo; "estudantes") //local id of this remote datastore is "students"

//Start working with ORDA means
ALERT ("São "+String($schoolDS[$dataClass].all().length)+" estudantes")

//Run an ORDA query on the Students dataclass
$s:=$schoolDS[$dataClass].query("lastname=:1"; "Smith").first()
If ( # ) ("Estudante "+ . +" vive em "+ . . )$sNull
ALERT$slastname$saddresscity
End if

Verifique o comando Open datastore documentação para saber mais sobre como se pode aceder a uma base de dados remota com uma ligação segura (TLS).

utilizando múltiplas bases de dados remotas

Eis um pequeno exemplo que mostra como é fácil trabalhar com múltiplas bases de dados remotas. Temos duas bases de dados: uma contém estudantes franceses, a outra contém estudantes ingleses.

Podemos escolher entre ver estudantes franceses ou ingleses.

blank

blank

O método do formulário:

Case of
: (FORM Event.code=On Load)
Form .frenchServer:="french.acme.com"
Form .englishServer:="english.acme.com"
.
End case

O método do objecto por detrás do botão de rádio “View French students” (Ver estudantes franceses):

C_OBJECT($connectTo;$students)
$connectTo :=New object()
$connectTo .hostname:=Form.frenchServer
$students :=Open datastore($connectTo; "francês") //datastore containing French students

Form.students:=$students.Students.all()

O método objecto por detrás do botão de rádio “View English students” (Ver estudantes ingleses):

C_OBJECT($connectTo;$students)
$connectTo :=New object()
$connectTo .hostname:=Form.englishServer
$students :=Open datastore($connectTo; "english") //datastore containing English students

Form.students:=$students.Students.all()

Nota: A primeira vez que o comando Open datastore é chamado, o objecto datastore é carregado na memória e uma sessão é aberta no servidor. Em chamadas subsequentes, devolve simplesmente uma referência sobre este objecto de datastore.

controla o acesso à sua base de dados remota

Para manter a base de dados 4D que expôs em segurança, pode filtrar o acesso à mesma. Vamos dar outra vista de olhos à Open datastore comando. Como se mostra abaixo, pode ser passado um utilizador e uma palavra-passe.

C_OBJECT($connectTo;$myStudents)

ON ERR CALL ("manageErrors")

$connectTo :=New object()
$connectTo .hostname:="students.acme.com"
$connectTo .user:="Open datastore"
$connectTo .password:=Form.password

//local id of this remote datastore is "students"
$myStudents := ($connectTo; "students")

ON ERR CALL ("")

4D oferece duas formas de restringir o acesso a utilizadores autorizados:

Usar um grupo de utilizadores 4D

O acesso pode ser restringido utilizando um grupo de utilizadores 4D. Quando expuser a base de dados, seleccione o grupo de acesso permitido no separador de recursos REST da página de definições da Web.

blank

Se o utilizador indicado no comando Open datastore pertence ao grupo seleccionado, o acesso é concedido, caso contrário é gerado um erro de autenticação.

Utilizar o método de base de dados de autenticação em repouso

Também pode utilizar o novo método de base de dados de autenticação On REST para codificar o seu próprio controlo de acesso à base de dados que expôs. Este método recebe as credenciais do utilizador no Open datastore comando. Basta devolver True se o utilizador estiver autorizado a trabalhar com a sua base de dados remota.

Aqui está um exemplo:

C_TEXT($1;$name;$2;
;$password) // The password to provide in Open datastore commandC_BOOLEAN ($0;$result;$3;$digest)
C_OBJECT ($user)

$name :=$1 // The user to provide in Open datastore command
$password :=$2
$digest :=$3 // True if password is hashed


$result:=False

//Search for the user in our Users dataclass

$user:=ds.Users.query("name=:1";$name).first()

If ( # ) ( & ( . = )) := :=$userNull
// Passwords are hashed in Users dataclass
If$digest$userpassword$password
$resultTrue
End if
End if


$0$result

Nota: Ods e datastore.getInfo() comandos foram actualizados, e três novos métodos foram acrescentados: datastore.startTransaction(), datastore.cancelTransaction()e datastore.validateTransaction().

Agora é altura de descarregar o HDI acima para saber mais sobre esta incrível funcionalidade!

Avatar
• Proprietário do produto - Marie-Sophie Landrieu -Yvert entrou ao time 4D Product como Proprietária do Produto em 2017. Como tal, está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Marie-sophie se formou na Escola de Engenharia de ESIGELEC e começou sua carreira como engenheira da IBM em 1995. Participou em vários projetos (de manutenção e criação) e trabalhou como desenvolvedora de Cobol. Depois trabalhou como designer de UML e desenvolvedora de Java. Suas principais funções foram analisar e redigir requisitos funcionais, coordenar os times de negócio e de desenvolvimento.