Extension des objets ECOrganizationQuery et ECUserQuery

Lorsque vous utilisez la fonctionnalité de recherche de membres, vous pouvez étendre les objets de requête.

Pourquoi et quand exécuter cette tâche

Vous pouvez étendre les objets de requête en spécifiant plusieurs attributs supplémentaires :

  • setOrderBy() Définissez le champ ORDERBY pour la requête. Il peut s'agir de n'importe quel champ de n'importe quelle table prise en charge.
  • setStart() Définissez le point de départ du jeu de résultats, à utiliser lors de la consultation des résultats.
  • setMaxResults() Définissez le nombre maximal de résultats à renvoyer.

Considérations relatives aux performances

Gardez à l'esprit que cet objet de requête permet de formuler des requêtes très coûteuses. Toute requête qui effectue des recherches à l'aide de requêtes non sensibles à la casse ou d'opérateurs "contient" ou "se terminant par" effectueront une analyse de la table. Si vous savez que vous prendrez en charge les recherches non sensibles à la casse sur les champs, vous pouvez améliorer considérablement les performances en introduisant un index UPPERCASE pour le champ. Pour les requêtes "contient" ou "se terminant par", il n'y a rien que vous puissiez faire pour améliorer les performances. Évitez ces requêtes dans la mesure du possible. Les requêtes utilisant "commençant par" peuvent utiliser l'index.

Extension d'objets de requête existants

Cette section décrit comment personnaliser certains scénarios typiques. Il suppose que vous créez une requête de recherche qui étend à partir de l'objet ECUserQuery.

Exemple : Étendre les tables JOIN prises en charge

Si vous disposez d'une table supplémentaire sur laquelle vous souhaitez baser une recherche, vous pouvez l'ajouter à la requête en prolongeant la méthode getJoinInformation() :


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

Dans cet exemple, les informations de fusion par défaut sont étendues avec une clause JOIN pour une nouvelle table appelée CUSTOMTABLE. Ce tableau possède une clé externe pour USERS, de sorte que la condition JOIN est simple.

Exemple : Étendre la clause SELECT

Vous devez toujours garder USERS.USERS_ID comme le premier attribut retourné de la requête. Et vous devriez réfléchir soigneusement à tout changement qui permettrait de renvoyer plus d'informations, en raison des problèmes potentiels de contrôle d'accès. Toutefois, si vous avez besoin d'avoir plus d'informations retournées, et que vous pouvez être sûr que cette requête ne violera aucun contrôle d'accès, alors vous pouvez étendre la clause SELECT comme suit :


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

N'oubliez pas que le résultat de l'exécution de la requête est un vecteur de vecteurs. Avec ce changement, le vecteur interne aura désormais deux éléments : l'entrée 0 contiendra USERS.USERS_ID, l'entrée 1 contiendra USERS.DN.

Création d'un objet de requête

La création de votre propre objet de requête suit le même modèle que l'extension d'un objet de requête existant. Il n'y a que deux méthodes de remplacement : getSelectTableFields() et getJoinInformation().