En esta página: Filtros de Búsqueda Además de especificar una búsqueda usando un grupo de atributos, podemos especificarla en la forma de un filtro de búsqueda. Un filtro de búsqueda es una consulta expresada en la forma de una expresión lógica. La síntaxis de todos los filtros aceptados por DirContext.search() se describe en la RFC 2254. El siguiente filtro de búsqueda especifica que las entradas cualificadas deben tener un atributo "sn" con un valor de "Geisel" y un atributo "mail" con cualquier valor. (&(sn=Geisel)(mail=*)) El siguiente código crea un filtro y los controles de búsqueda por defecto SearchControls, y los usa para realizar la búsqueda. La búsqueda es equivalente a la presentada en el ejemplo de la página anterior. // Create the default search controls SearchControls ctls = new SearchControls(); // Specify the search filter to match // Ask for objects that have the attribute "sn" == "Giesel" // and the "mail" attribute String filter = "(&(sn=Geisel)(mail=*))"; // Search for objects using the filter NamingEnumeration answer = ctx.search("ou=People", filter, ctls); Ejecutar este ejemplo produce esta salida. # java SearchWithFilterRetAll >>>cn=Ted Geisel attribute: sn value: Geisel attribute: objectclass value: top value: person value: organizationalPerson value: inetOrgPerson attribute: jpegphoto value: [B@1dacd75e attribute: mail value: Ted.Geisel@JNDITutorial.com attribute: facsimiletelephonenumber value: +1 408 555 2329 attribute: cn value: Ted Geisel attribute: telephonenumber value: +1 408 555 5252 Rápida Visión de la Síntaxis de los Filtros de Búsqueda La síntaxis del filtro de búsqueda es básicamente una expresión lógica en notación de prefijo, (es decir, los operadores lógicos aparecen antes de los argumentos). La siguiente tabla lista los símbolos usados para crear filtros.
Cada ítem del filtro está compuesto usando un identificador de atributo y un valor de atributo o símbolos que denotan el valor del atributo. Por ejemplo, el ítem "sn=Geisel" significa que el atributo "sn" debe tener el valor de atributo "Geisel" y el ítem "mail=*" indica que el aributo "mail" sólo debe estar presente. Cada ítem debe estar encerrado entre paréntesis, como en "(sn=Geisel)". Estos ítems se componen usando operadores lógicos como "&" (conjunción) para crear operaciones lógicas, como en "(& (sn=Geisel) (mail=*))". Cada expresión lógica puede estar compuesta por otros ítems que a su vez pueden ser otras expresiones lógicas, como en "(| (& (sn=Geisel) (mail=*)) (sn=L*))". Este último ejemplo solicita las entradas que tiene el atributo "sn" de "Geisel" y el atributo "mail" o cuya entrada "sn" empieza con la letra "L." Para una completa descripción de la síntaxis puedes ver la RFC 2254. Devolver los Atributos Seleccionados El ejemplo anterior devolvía todos los atributos asociados con las entradas que cumplían con el filtro especificado. Podemos seleccionar los atributos a devolver seleccionando los argumentos de control de búsqueda. Podemos crear un array de identificadores de atributos que queremos incluir en el resultado y pasarlo a SearchControls.setReturningAttributes(). (Los controles de búsqueda se describen en la siguiente sección.) Aquí tenemos un ejemplo. // Specify the ids of the attributes to return String[] attrIDs = {"sn", "telephonenumber", "golfhandicap", "mail"}; SearchControls ctls = new SearchControls(); ctls.setReturningAttributes(attrIDs); Este ejemplo es equivalente al ejemplo Devolver Atributos Seleccionados de la página anterior. Al ejecutar el ejemplo se produce la siguiente salida. (La entrada no tiene un atributo "golfhandicap", por eso no se devuelve). # java SearchWithFilter >>>cn=Ted Geisel attribute: sn value: Geisel attribute: mail value: Ted.Geisel@JNDITutorial.com attribute: telephonenumber value: +1 408 555 5252
|