Añade valores a tus consultas genéricas de ORDA

Traducido automáticamente de Deepl

A estas alturas seguro que te has dado cuenta de que las consultas ORDA no sólo son ligeras y legibles, ¡también facilitan la navegación por todo el modelo de datos utilizando conceptos orientados a objetos! En esta entrada del blog, le mostramos cómo escribir consultas poderosas y fáciles de mantener. Uno de los métodos recomendados era proporcionar la consulta y los valores por separado mediante marcadores de posición. 4D v17 R5 lleva los marcadores de posición un paso más allá al permitirle escribir consultas genéricas ORDA: ¡diga hola a los marcadores de posición con nombre para los valores!

HDI: Ejemplo de marcadores de posición con nombre para valores en consultas ORDA

Estos nuevos marcadores de posición se proporcionan como parámetros de objeto en la configuración de la consulta. Dado que un objeto es un mapa clave/valor, es muy fácil utilizarlos en las consultas.

Un ejemplo vale más que mil palabras

Aquí hay una consulta para obtener un cliente llamado Charlie con el cliente Leal como comentario. ¿Te suena? Si no es así, deberías consultar este post para refrescar la memoria.

C_OBJECT($clients)
$clients :=ds.Clients.query("nombre = :1 y comentario = :2"; "Charlie@"; "Cliente leal")

La consulta también puede escribirse como

C_OBJECT($settings;$clients)
$settings :=New object
$settings .parameters:=New object("givenName"; "Charlie@"; " givenComment"; "Loyal client")
$clients :=ds.Clients.query("name = :givenName and comment = :givenComment";$settings)

Sólo tiene que utilizar el marcador de posición con su nombre prefijado por «:» .

Su código es fácilmente legible y mantenible, sin embargo, una ventaja aún mayor es poder escribir consultas genéricas cuyos parámetros de valor pueden provenir de diferentes fuentes (una interfaz de usuario o una solicitud).

¿Qué tal un patrón como éste?

Puedes proporcionar a tus usuarios una interfaz de consulta en la que puedan elegir los criterios de búsqueda y los valores a aplicar.

El código siguiente es para una interfaz que permite a un vendedor navegar por una lista de sus clientes. Devuelve el contenido filtrado según el ID del vendedor.

C_OBJECT$settingsparameters($formData;$settings;$clients)
C_TEXT ($queryString)

$formData :=New object
DIALOG ("QueryEditor";$formData)
CLOSE WINDOW

if (OK=1)
//The logged sales person can only browse their clients
$queryString :="salesPersonUserId = :givenUserId"
//The $formData object comes from the user's interface with search criteria filled

//It contains the sales person's user id and some additional search criterias (name and city)

$settings :=New object

$settings .parameters:=$formData

If ( xml-ph-0034@deepl.ingivenName#Null)
$queryString :=$queryString+" and name = :givenName"
End if

If ($settings.parameters.givenCity#Null)
$queryString :=$queryString+" and city.name = :givenCity"
End if

$clients :=ds.Clients.query($queryString;$settings)
end if

Los ejemplos anteriores consultan una dataClass, pero si consultas la documentación, verás que también se puede aplicar a colecciones.

Como puedes ver, construir consultas de forma dinámica es muy fácil. Descargue y ejecute el IDH para saber más.

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.