Ampliar los objetos ECOrganizationQuery y ECUserQuery

Al utilizar la característica de búsqueda de miembros, puede ampliar los objetos de consulta.

Por qué y cuándo se efectúa esta tarea

Puede ampliar los objetos de consulta especificando varios atributos adicionales:

  • setOrderBy()Establezca el campo ORDERBY para la consulta. Puede ser cualquier campo de cualquier tabla soportada.
  • setStart() Establezca el punto de partida para el conjunto de resultados cuando realice la paginación a través de los resultados.
  • setMaxResults() Establezca el número máximo de los resultados a devolver.

Consideraciones sobre rendimiento

Tenga presente que este objeto de consulta permite formular algunas consultas con mucha utilización de recursos. Todas las consultas que efectúen búsquedas utilizando consultas que no distinguen entre mayúsculas y minúsculas o 'contains' o 'ends-with', llevarán a cabo una exploración de tablas. Si sabe que los campos van a dar soporte a búsquedas que no distinguen entre mayúsculas y minúsculas, puede mejorar el rendimiento de forma significativa introduciendo un índice en MAYÚSCULAS para el campo. En las consultas 'contains' o 'ends-with', no hay nada que se pueda hacer para mejorar el rendimiento. Evite utilizarlas siempre que sea posible. Las consultas que emplean 'starts-with' pueden utilizar el índice.

Ampliar un objeto de consulta existente

En este apartado se describe cómo personalizar algunos escenarios típicos. Se da por supuesto que se crea una consulta de búsqueda que amplía del objeto ECUserQuery.

Ejemplo: Ampliar las tablas JOIN soportadas

Si dispone de una tabla adicional en la que desea basar una búsqueda, puede añadirla a la consulta ampliando el método getJoinInformation():


protected Vector getJoinInformation() {
  Vector vecJoinInformation = super.getJoinInformation();
  vecJoinInformation.add(
  new JoinInformation(
  "CUSTOMTABLE",
  new WhereClauseJoinCondition(
  "CUSTOMTABLE.USERS_ID = USERS.USERS_ID")));
  return vecJoinInformation;
}

En este ejemplo, la información de unión predeterminada se amplía con una cláusula JOIN para una nueva tabla denominada CUSTOMTABLE. Esta tabla dispone de una clave foránea para USERS, por lo que la condición JOIN es directa.

Ejemplo: Ampliar la cláusula SELECT

Siempre debe mantener USERS.USERS_ID como primer atributo devuelto desde la consulta. Debe pensar detenidamente acerca de cualquier cambio que podría devolver más información, debido a los problemas potenciales con el control de acceso. Sin embargo, si es necesario que se devuelva más información y está seguro que esta consulta no infringirá ningún control de acceso, puede ampliar la cláusula SELECT tal como se indica a continuación:


protected TableField[] getSelectTableFields() {
  TableField[] selectTableFields = new TableField[2];
  selectTableFields[0] = new TableField("USERS", "USERS_ID");
  selectTableFields[1] = new TableField("USERS", "DN");
  return selectTableFields;
}

Recuerde que el resultado de la ejecución de la consulta es un vector de vectores. Con este cambio, el vector interno ahora tendrá dos elementos, la entrada 0 mantendrá el USERS.USERS_ID y la entrada 1 mantendrá el USERS.DN.

Creación de un objeto de consulta

la creación de un objeto de consulta propio sigue el mismo patrón que la ampliación de un objeto de consulta existente. Solo hay dos métodos para alterar: getSelectTableFields() y getJoinInformation().