Marcadores de posición para las rutas de atributos en las consultas ORDA

Traducido automáticamente de Deepl

¡Las funcionalidades de ORDA siguen llegando con 4D v17 R5! En una entrada anterior del blog, le mostramos cómo crear consultas genéricas con marcadores de posición con nombre para los valores. Esta entrada se centrará en cómo usar marcadores de posición para rutas de atributos (nombres de campos en tablas).

HDI: Ejemplo de marcadores de posición para rutas de atributos en consultas ORDA

Existen dos tipos de marcadores de posición:

Marcadores de posición indexados

Veamos un ejemplo en el que se utilizan marcadores de posición indexados para rutas de atributos. Queremos encontrar clientes cuyo nombre empiece por «Bravo» y tenga «Nuevo cliente» en el campo de comentarios:

C_OBJECT($clients)
$clients :=ds.Clients.query(":1 = 'Bravo@' y :2 = 'Nuevo cliente'"; "nombre"; "comentario")

Los marcadores de posición se insertan como :paramIndex(por ejemplo,:1, :2, … con un incremento de 1) en la cadena de consulta. Sus valores correspondientes son proporcionados por la secuencia de parámetro(s) de valor.

marcadores de posición con nombre

También puedes utilizar marcadores de posición con nombre. Utilizan el mismo concepto que los marcadores de posición con nombre para los valores. Los parámetros se insertan como :paramName y sus valores se proporcionan en la cadena de consulta:

C_OBJECT($clients;$settings)
$settings :=New object
$settings .attributes:=New object("pathOfName"; "nombre"; "pathOfComment"; "comentario")
$clients :=ds.Clients.query(":pathOfName = 'Bravo@' y :pathOfComment = 'Nuevo cliente'";$settings)

¿Por qué utilizar marcadores de posición?

Veamos el campo licencesInfo campo objeto. Indica el número de licencias en un estilo licenceName:number.

{"licencesInfo":
{"4DDevPro":10, //This client has 10 4DDevPro licences
"4DServerV17_2":18,
"4DWebappserverV17_2":23}
}

Para encontrar el número de licencias «4DDevPro», puede escribir esta consulta:

C_OBJECT($clients)
$clients :=ds.Clients.query("licencesInfo.4DDevPro >=0")

Pero ahora mire este licencesInfo campo objeto. Puede ver que el uso de marcadores de posición para las rutas de los atributos puede ser especialmente útil cuando se consulta un objeto cuyos nombres de propiedades no se ajustan a la notación de puntos:

{"licencesInfo":
{"4D Dev. Pro":10, //This client has 10 4D Dev. Pro licences
"4D Server V17.2":18,
"4D Web app/server V17.2":23}
}

En este caso particular, proporcionar los parámetros como una colección de cadenas resuelve el problema porque será interpretado por la consulta como una ruta de atributos.

C_OBJECT($clients)
$clients :=ds.Clients.query(":1 >=0";New collection("licensesInfo"; "4D Dev. Pro"
))

Esta no es la única ventaja de utilizar marcadores de posición. También hay un aspecto de seguridad mayor, ya que el uso de marcadores de posición evita la inserción de código malicioso. Tampoco hay que preocuparse por los problemas de formato o de caracteres. La lista continúa…

Los ejemplos anteriores consultan una dataClass, pero si consultas la documentación, verás que también es aplicable a las colecciones. También descubrirás más ejemplos que muestran por qué el uso de marcadores de posición es una buena decisió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.