Búsquedas


([N3] tgnsystems) #1

Buenas a tod@s,

tengo una duda con respecto a las búsquedas porque no tengo claro si debería utilizar índices complejos. Veréis, tengo 3 tablas que entran en acción; Empresa, Localidades, Documentos. Empresa está relacionada con Localidades y Documentos. Tengo una rejilla donde muestro todos los documentos y puedo buscar por Empresas para saber los documentos de la misma. Ahora también me gustaría poder buscar por localidades, es decir, si busco en “Zaragoza” por ejemplo, la rejilla debería mostrarme todos los documentos de las empresas que están en Zaragoza.

La búsqueda por empresa funciona correctamente, pero por localidad no hay manera.

Gracias por vuestra atención, un saludo.


([N2] overBCN) #2

Hola, podrías utilizar indices complejos, pero yo te recomendaría que agregues a la búsqueda actual un nuevo componente indice de “localidades”.
Saludos


([N3] tgnsystems) #3

Gracias por tu respuesta overBCN, pero ya hice eso y no hay manera de realizar la búsqueda por localidades. En la rejilla donde aparecen los documentos tengo los campos: nombre del documento, empresa, localidad.

El nombre del documento viene de la tabla “documentos”, pero el nombre de empresa y localidad viene dado por la tabla “empresas”, localidad en este caso es un enlace a maestro a la tabla “localidades”.

Si añado como componente una búsqueda a “localidades” no me encuentra nada, supongo que el componente busca “localidades” en la tabla “localidades” y no encuentra coincidencia en la rejilla, ya que el campo “localidades” de la rejilla es “empresas.localidades”, que es el enlace a la tabla “localidades”.


([N2] AyudaVelneo) #4

Hola tgnsystems:

Dependerá de como tengas definido el índice en la tabla de documentos. Si el índice es empresa + localidad, tendrás que “pasarle” esos datos al componente de búsqueda.

Te adjunto un par de artículos de mi blog que aclaran estos conceptos.

Componentes de búsqueda I
Componentes de búsqueda II

Un saludo


([N2] overBCN) #5

Hola tgnsystems, con la información de José Vila lo tendrás mas claro.
Saludos


([N3] pacosatu) #6

Hola tgnsystems.

Creo que tienes un poco liado el tema, olvídate de momento de la Rejilla.

  • Entiendo que tienes 3 tablas: documentos -> con un puntero maestro a empresas -> empresas con un puntero maestro a localidades.
    Es decir, un documento pertenece a una sola empresa y a su vez una empresa es de una sola localidad.
  • Una vez aclarada la relación entre las tablas debes saber que en Velneo solo podemos crear Índices sobre campos que pertenecen a la tabla
    Por lo tanto en la tabla documentos solo podemos Indexar el campo puntero a maestro empresas.
    Para indexar las localidades desde la tabla documentos, ya que no es un campo directo, tendrás que crear un Índice complejo que para eso se inventaron.
  • De esta forma ya puedes añadir al objeto Búsqueda dos componentes, el Índice normal empresas y el Índice complejo localidades.

El resultado de la Búsqueda te valdrá para cualquier objeto Vista de datos, ya sea una rejilla u otro tipo de objeto.

Por supuesto hay otras opciones sin necesidad de usar índice complejo, te cito 2:

  • Ejecutar la búsqueda por el método tradicional de Velneo recorriendo las tablas a través de los punteros
  • También se puede crear en la tabla documentos un campo localidad_nombre con valor inicial empresas.localidades.name e indexar este campo directamente. En este caso tanto la localidad asignada a la empresa como el nombre de la localidad no deben de cambiar nunca.

Saludos
Paco Satué


([N3] tgnsystems) #7

Primero daros las gracias a todos por la información y ayuda.

De momento estoy intentando crear un índice complejo, y todo bien hasta que llego al componente de búsqueda. Creo el componente y en el campo “Grupo índices” cambio a complejo, pero no aparece nada para poder seleccionar. El índice complejo está creado pero no puedo seleccionarlo. ¿Qué hago mal?

Después de leer información sobre índices complejos lo que he hecho es crear uno con la tabla asociada “Empresas” y la tabla de búsqueda “localidades” y en resolución dir “localidad”. He creado también la parte del índice complejo por el campo “localidad”.


([N3] pacosatu) #8

Hola tgnsystems.

El Índice complejo debes crearlo correctamente para que funcione. A veces no es muy intuitivo y hace honor a su nombre.

En este caso la tabla asociada y la tabla secundaria del Índice complejo son la misma e igual a la tabla de Documentos. Esto es así porque la tabla de Documentos es la tabla de la que devuelve la Búsqueda y además es la más baja en el nivel de relaciones.
La parte del Índice complejo que se va a indexar será #empresas.localidades.id o #empresas.localidades.name.

En el objeto de Búsqueda de Documentos ya te aparecerá el Índice complejo para buscar por el Id o Name de localidad.
Ten en cuenta que si buscas por Documentos debes tener el Índice complejo con la tabla asociada asignada a Documentos.

Recuerda además que si ya existen datos, al reiniciar la Solución, deberás reindexar manualmente el índice complejo desde vDataClient para que contemple los registros que ya existen.

Saludos
Paco Satué


([N3] tgnsystems) #9

Muchas gracias por tu explicación Paco, he seguido tus pasos y todo perfecto, aunque la búsqueda aún no es correcta por el campo “localidades”, no me aparece ningún resultado, supongo que antes deberé reindexar el índice complejo.

Me parece que con mi nivel actual (Nivel2) no tengo derecho a vDataClient.


([N3] pacosatu) #10

Hola tgnsystems.

No tener vDataClient en N2 es una aberración se mire como se mire y máxime al comprobar esta limitación con los índices complejos.
No te queda otra que usar el API de Velneo y la función theApp.regenComplexIndex().

Saludos
Paco Satué


([N3] tgnsystems) #11

Una vez reindexados los índices complejos todo perfecto. Muchas gracias por la ayuda Paco.

Una duda sobre los índices complejos, ¿hará falta reindexarlos cada vez que cree una nueva localidad o la modifique o sólo cuando haga algún cambio en la tabla?, ¿sería necesario ir reindexando de vez en cuando?

Pere Sans


([N3] pacosatu) #12

Hola Pere.

Solo es necesario reindexar cuando hay cambios en la estructura de las tablas que intervienen.

Lo mejor es tener una Tarea en el vServer que haga la regeneración completa de Datos e índices en horas de baja actividad.

Saludos
Paco Satué