En septiembre pasado, 4D presentó Qodly Studio para 4D, que ofrece beneficios integrales que le permiten crear aplicaciones web empresariales dinámicas y eficientes. Si aún no lo ha hecho, consulte este blogpost para aprender cómo empezar con Qodly Studio para 4D.
Qodly Studio también es accesible en qodly.com, formando parte de la nueva oferta SaaS de 4D.
¿Desea aprovechar los datos y la lógica de negocio de su aplicación 4D en una aplicación qodly.com? Le gustará saber que una aplicación web qodly.com puede ahora conectarse a una aplicación 4D desplegada en un servidor 4D gracias al nuevo comando QodlyScript openDatastore. Puede entonces utilizar un proyecto 4D como un datastore remoto desde Qodly.com.
En otras palabras:
- Una aplicación basada en 4D Server puede hacer ambas cosas: manejar clientes de escritorio 4D y clientes web utilizando formularios Qodly. Si eso es lo que hace, no necesita seguir leyendo.
- Pero supongamos que quiere extender su aplicación existente basada en 4D Server con una totalmente nueva, sólo basada en web – y alojada en Qodly.com: esta publicación es para usted y muestra cómo comunicarse entre las dos.
ejemplos concretos
Nota: el siguiente código utiliza QodlyScript, un lenguaje derivado de JavaScript y de 4D. Se parece a 4D, pero no es exactamente idéntico.
ejemplo 1
Supongamos que desarrollamos una aplicación web de recursos humanos en qodly.com: Qodly-HR. Tenemos alguna lógica de negocio ya codificada en un proyecto 4D: 4D-HR. En lugar de reescribir esta lógica en QodlyScript, ¡Simplemente la llamaremos con el comando openDatastore!
Este sencillo ejemplo maneja las tarifas por hora de los empleados dependiendo del país en el que trabajen. Dependiendo del lugar donde trabajen, la tarifa por hora de los empleados no es la misma.
Este es el modelo en Qodly-HR:
En Qodly-HR, creamos empleados. Pero para calcular sus tarifas por hora, nos basaremos en una lógica de negocio ya existente en 4D-HR. De hecho, una función computeHourlyRates está disponible en 4D-HR para hacerlo: toma una tarifa por hora en un país determinado como parámetro de entrada y devuelve una colección de tarifas por país.
El siguiente fragmento de código QodlyScript se utiliza para crear un empleado en Qodly-HR. En este fragmento de código, llamamos a nuestra función remota 4D-HR datastore computeHourlyRates ofreciéndole una tarifa horaria francesa, para recuperar las tarifas horarias de Reino Unido y Estados Unidos.
var employee: cs.EmployeesEntity
var salaryInfo : cs.SalaryInfoEntity
var salaries: collection
var info : object
var status: object
employee = ds.Employees.new()
employee.firstname="Mary"
employee.lastname="Smith"
status=employee.save()
salaries=ds.getHRDatastore().computeHourlyRates("FR", 100)
//salarios es [{country:FR,hourlyRate:100},{country:UK,hourlyRate:95},{country:US,hourlyRate:90}]
forEach(info, salarios)
salaryInfo=ds.SalaryInfo.new()
salaryInfo.fromObject(info)
salaryInfo.theEmployee=empleado
status=salaryInfo.save()
end
Esta es la clase Datastore:
extends DataStoreImplementation
exposed Function getHRDatastore() : 4D.DataStoreImplementation
var connect : object = {hostname: "hr@acme.com"}
var remoteDS : 4D.DataStoreImplementation
remoteDS = openDatastore(connect, "hr")
return remoteDS
ejemplo 2
Tenemos otro proyecto 4D: 4D-Sales para manejar las ventas y los clientes. También lo utilizamos de la misma forma que el proyecto 4D: 4D-HR.
En la clase Datastore, tenemos esta función para utilizar el proyecto 4D 4D-Ventas como un datastore remoto:
Función expuesta getSalesDatastore() : 4D.DataStoreImplementation
var connect : object = {hostname: "sales@acme.com"}
var remoteDS : 4D.DataStoreImplementation
remoteDS = openDatastore(connect, "sales")
return remoteDS
En nuestra aplicación web Qodly-HR, necesitamos obtener los clientes cuyo importe total es superior a la media.
A continuación, se muestra cómo manejamos esto. Leemos todos los clientes en el proyecto 4D: 4D-Sales y hacemos nuestra consulta.
var customers, targetCustomers: 4D.EntitySelection
var amountAverage : number
customers=ds.getSalesDatastore().Customer.all()
amountAverage=customers.average("totalAmount")
targetCustomers=customers.query("totalAmount >= :1", amountAverage)
¡Eso es todo!
Permanezca atento para saber más sobre la conexión entre Qodly.com y 4D Server.