Múltiples fuentes de datos 4D, ¿interesado?

Traducido automáticamente de Deepl

Tenemos una nueva y emocionante función que anunciar en 4D v18 y el título ya le habrá dado una pista.

Esta funcionalidad abre nuevas posibilidades para el trabajo cliente/servidor. En lugar de limitarse a la base de datos actual y requerir una conexión de red permanente, una aplicación en 4D v18 puede obtener datos de otra base de datos 4D remota que esté expuesta en un servidor 4D.

Gracias a esta característica, se dispone de muchas opciones. Por ejemplo, puede organizar sus aplicaciones para trabajar sin conexión y sólo sincronizar los datos locales cuando los datos remotos sean accesibles. O podría considerar publicar sus datos en múltiples servidores y cambiar de uno a otro cuando sea necesario. Otra opción podría ser dividir su modelo de datos en diferentes bases de datos(por ejemplo, datos locales, datos internacionales). ¿Y qué hay de tener sus datos distribuidos en diferentes lugares pero accesibles a través de un único código de cliente 4D (métodos de proyecto y objetos de formulario)? Todos estos escenarios son ahora posibles y esta entrada del blog le dice cómo.

HDI: Cómo trabajar con un datastore remoto

Con 4D v18, su base de datos 4D puede ser expuesta como un servidor REST para otras aplicaciones cliente 4D. Esto significa que un cliente 4D puede interactuar con los datos que usted ha expuesto (crear, leer, actualizar, eliminar). Y aún más buenas noticias: esta interacción se basa en los conceptos de ORDA, ¡así que está completamente orientada a objetos!

¿Cómo exponer su base de datos 4D para el acceso remoto?

En la configuración web de la base de datos:

  • En la pestaña Configuración, configure un puerto HTTP (por razones de seguridad, asegúrese de usar HTTPS para el modo de producción)

  • En la pestaña de recursos REST, seleccione la opción«Exponer como servidor REST«.

blank

  • Inicie el servidor web. En el ejemplo anterior, elegimos iniciar el servidor al iniciar la base de datos.
  • Abra su base de datos en el servidor 4D.
  • ¡Enhorabuena! ¡Su base de datos es ahora alcanzable para el acceso remoto a través de la IP de su máquina y el puerto que usted configuró!

Nota: El uso del Web Server para acceder al REST Server no requiere una licencia de Web Server. Las licencias estándar de 4D Client se utilizan para las conexiones.

Trabajar con bases de datos remotas

Comando Open datastore

Como dijimos antes, su base de datos es accesible a través de los conceptos de ORDA: una base de datos se maneja con un objeto datastore. Por lo tanto, el primer paso es obtener el objeto datastore correspondiente a la base de datos remota a la que quieres acceder. No hay problema. Llama al comando Open datastore con el nombre de host correcto y ya está en marcha.

Asociamos el objeto datastore al ID local, «estudiantes». Ahora podemos empezar a trabajar con nuestra base de datos remota utilizando ORDA (ejecutar consultas, cargar/actualizar entidades, etc.)

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

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

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

//Start working with ORDA means
ALERT ("Son "+String($schoolDS[$dataClass].all().length)+" estudiantes")

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

Consulta la Open datastore para saber más sobre cómo puede acceder a una base de datos remota con una conexión segura (TLS).

uso de múltiples bases de datos remotas

He aquí un breve ejemplo que muestra lo fácil que es trabajar con múltiples bases de datos remotas. Tenemos dos bases de datos: una contiene estudiantes franceses, la otra contiene estudiantes ingleses.

Podemos elegir entre ver a los estudiantes franceses o ingleses.

blank

blank

El método del formulario:

Case of
(FORM Event.code=On Load)
Form .frenchServer:="francés.acme.com"
Form .englishServer:="inglés.acme.com"
End case

El método del objeto detrás del botón de opción «Ver estudiantes de francés»:

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

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

El método del objeto detrás del botón de opción «Ver estudiantes de inglés»:

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

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

Nota: La primera vez que se llama al comando Open datastore, el objeto datastore se carga en memoria y se abre una sesión en el servidor. En las siguientes llamadas simplemente devuelve una referencia a este objeto datastore.

controlar el acceso a la base de datos remota

Para mantener segura la base de datos 4D que ha expuesto, puede filtrar el acceso a la misma. Veamos de nuevo el comando Open datastore comando. Como se muestra a continuación, se le puede pasar un usuario y una contraseña.

C_OBJECT($connectTo;$myStudents)

ON ERR CALL ("manageErrors")

$connectTo :=New object()
$connectTo .hostname:="students.acme.com"
$connectTo .user:="mary@4d.com"
$connectTo .password:=Form.password

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

ON ERR CALL ("")

4D ofrece dos maneras de restringir el acceso a los usuarios autorizados:

Utilizar un grupo de usuarios 4D

El acceso puede ser restringido utilizando un grupo de usuarios 4D. Cuando exponga la base de datos, seleccione el grupo con acceso permitido en la pestaña de recursos REST de la página de configuración web.

blank

Si el usuario dado en el comando Open datastore pertenece al grupo seleccionado, se concede el acceso, de lo contrario se genera un error de autenticación.

Utilice el método de autenticación en reposo de la base de datos

También puede utilizar el nuevo método de base de datos de autenticación On REST para codificar su propio control de acceso a la base de datos que ha expuesto. Este método recibe las credenciales del usuario en el Open datastore comando. Simplemente devuelve True si el usuario tiene permiso para trabajar con su base de datos remota.

He aquí un ejemplo:

C_TEXT($1;$name;$2;$password)
C_BOOLEAN ($0;$result;$3;$digest)
C_OBJECT ($user)

$name :=$1 // The user to provide in Open datastore command
$password :=$2 // The password to provide in Open datastore command
$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: Las letrasds y datastore.getInfo() han sido actualizados, y se han añadido tres nuevos métodos: datastore.startTransaction(), datastore.cancelTransaction(), y datastore.validateTransaction().

Ahora es el momento de descargar el IDH anterior para saber más sobre esta increíble función.

Avatar
• Propietario de producto - Marie-Sophie Landrieu-Yvert ingresó al equipo de 4D Product como Propietario de producto en 2017. Como tal, está a cargo de escribir las historias de los usuarios y luego traducirlas en especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Marie-Sophie se graduó en la Escuela de Ingeniería de ESIGELEC y comenzó su carrera como ingeniera en IBM en 1995. Participó en varios proyectos (de mantenimiento y creación) y trabajó como desarrolladora de Cobol. Luego trabajó como diseñadora de UML y desarrolladora de Java. Sus principales funciones fueron analizar y redactar requisitos funcionales, coordinar los equipos de negocio y de desarrollo.