Ir al contenido principal

Añadir o modificar campos de búsqueda automática

Bandera Nota: lo que se indica a continuación solo se aplica a los informes personalizados (no a los informes estándar que utilizan el modo «Diseño»).

Los valores predeterminados de los campos del canal de datos de AutoSearch se pueden configurar mediante el código de la pestaña «Calc». Para ello, en primer lugar, asegúrate de que el campo esté configurado con AutoSearch = True en la pestaña «Datos»; a continuación, ve a la pestaña «Calc», selecciona el objeto «Report» superior en el árbol de estructura y crea un evento en «ReportBeforeAutoSearchDialogCreate». A continuación se muestra un código de ejemplo, seguido de una explicación:

var

, ppTemp : TppAutoSearchField;

begin

, ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'COMPANY');

, if ppTemp <> nil then

, begin

, ppTemp.SearchExpression := 'ABC COMPANY';

end;

si ReplaceSpecialFields('!PROFILE!') = 'Administrador del sistema' then

begin

ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'DEPARTMENT');

if ppTemp <> nil then

begin

ppTemp.SearchOperator := soInList;

ppTemp.SearchExpression := 'DEPT1,DEPT2,DEPT3';

end;

end;

ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'EVENT_DATE');

if ppTemp <> nil then

begin

ppTemp.SearchExpression := DateToStr(CurrentDate - 7) + ',' + DateToStr(CurrentDate);

end;

end;

El código anterior da por hecho que hay tres campos configurados como campos de búsqueda automática en la pestaña «Datos» del canal de la tabla EVENTS: COMPANY, DEPARTMENT y EVENT_DATE. Este código establece nuevos valores predeterminados para los tres campos de búsqueda automática. La primera sección del código busca un campo de búsqueda automática existente en el canal «EVENTS» denominado «COMPANY». A continuación, el valor se establece en «ABC COMPANY». Es cierto que, en este caso, el valor «ABC COMPANY» se podría haber establecido como valor predeterminado directamente en la pestaña «Datos». Sin embargo, a menudo resulta útil establecer un valor «predeterminado» fijo para los campos de búsqueda automática de la pestaña «Datos», lo que garantiza al usuario que cualquier llamada inicial para activar este proceso ANTES de que aparezca el cuadro de diálogo de búsqueda automática no devolverá muchos registros (o ninguno). Por lo tanto, la pestaña «Calc» es un buen lugar para asegurarse de que el valor predeterminado se restablezca a un valor adecuado.

En la segunda sección del código, el campo «DEPARTAMENTO» se modifica con respecto a su valor de filtro predeterminado, pero solo cuando el informe lo ejecuta un «administrador del sistema». El valor predeterminado del filtro para «DEPARTAMENTO», tal y como se ha configurado en la pestaña «Datos», es «= DEPT3». Por lo general, esta es una buena opción predeterminada, pero si es un «administrador del sistema» quien genera el informe, normalmente necesita incluir varios departamentos a la vez, por lo que la opción predeterminada debería ser incluir los tres. Ten en cuenta, pues, que, en primer lugar, el operador de búsqueda se cambia a «soInList» (en lugar del valor predeterminado «soEqual» [=] configurado en la pestaña «Datos»). No suele ser necesario modificar el operador de búsqueda en el código de la pestaña «Calc», pero, en caso de que sea necesario, estos son los valores permitidos:

soEqual = El valor del campo debe coincidir con el valor de búsqueda.

soNotEqual = El valor del campo no debe coincidir con el valor de búsqueda.

soLessThan = El valor del campo debe ser menor que el valor de búsqueda.

soLessThanOrEqualTo = El valor del campo debe ser menor o igual que el valor de búsqueda.

soGreaterThan = El valor del campo debe ser mayor que el valor de búsqueda.

soGreaterThanOrEqualTo = El valor del campo debe ser mayor o igual que el valor de búsqueda.

soLike = El valor del campo debe comenzar con el valor de búsqueda. Al final del valor del criterio de búsqueda que utilice este operador se añade automáticamente un comodín, lo que hace que funcione como «empieza por».

soNotLike = El valor del campo no debe empezar por el valor de búsqueda.

soBetween = El valor del campo debe estar comprendido entre los dos valores de los criterios de búsqueda.

soNotBetween = El valor del campo no debe estar comprendido entre los dos valores de los criterios de búsqueda.

soInList = El valor del campo debe aparecer en la lista de valores de búsqueda.

soNotInList = El valor del campo no debe aparecer en la lista de valores de búsqueda.

soBlank = El valor del campo debe ser nulo. (Este operador no requiere ningún valor de búsqueda.)

soNotBlank = El valor del campo no debe ser nulo. (No es necesario introducir ningún valor de búsqueda para este operador.)

A continuación, en este segundo ejemplo, la expresión de búsqueda se establece en «DEPT1, DEPT2, DEPT3». Dado que el operador de búsqueda es ahora «soInList», la expresión de búsqueda admite una lista de valores separados por comas.

Por último, establecemos dinámicamente las dos fechas que definen un intervalo de fechas. Al configurar el valor predeterminado del filtro en la pestaña «Datos», no es habitual que los usuarios conozcan cuáles son las mejores fechas predeterminadas, ya que, por lo general, estas fechas se refieren a la fecha en la que se ejecuta el informe. En este ejemplo se da por supuesto que el campo EVENT_DATE está configurado como «soBetween ['Between']» en la pestaña «Datos». Por lo tanto, en este caso, la SearchExpression también requerirá una lista separada por comas de las dos fechas: la «desde» y la «hasta». Utiliza la función DateToStr para convertir fechas en valores de cadena (texto). Echa un vistazo a la ventana «Code Toolbox» (en la esquina inferior derecha)... en la sección «Language» para recordar otras funciones útiles, como CurrentDate.

A continuación se muestra un segundo ejemplo en el que el campo EVENT_DATE se establece por defecto en todos los eventos del mes actual:

var

, ppTemp : TppAutoSearchField;

iYear, iMonth, iDay, iToYear, iToMonth : Integer;

begin

ppTemp := Report.AutoSearchCriteriaByName('EVENTEQUIP', 'EVENT_DATE');

if ppTemp <> nil then

begin

DecodeDate(CurrentDate, iYear, iMonth, iDay);

if iMonth = 12 then

begin

iToMonth := 1;

iToYear := iYear + 1;

end else

begin

iToMonth := iMonth + 1;

iToYear := iYear;

end;

ppTemp.SearchExpression := DateToStr(EncodeDate(iYear, iMonth, 1)) + ',' +

DateToStr(EncodeDate(iToYear, iToMonth, 1));

end;

end;

También es posible crear criterios de búsqueda automática completamente nuevos en el código de la pestaña «Calc» (en lugar de limitarse a modificar los valores de los campos de búsqueda automática ya existentes). A continuación se muestra un ejemplo en el que se añaden los nuevos criterios o se modifican los ya existentes, según corresponda:

ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'COMPANY');

if ppTemp = nil then

Report.CreateAutoSearchCriteria('EVENTS', 'COMPANY', soEqual, 'ABC COMPANY', False)else

ppTemp.SearchExpression := 'ABC COMPANY';

El procedimiento Report.CreateAutoSearchCriteria admite cinco parámetros:

1.nombre del canal:

2.nombre del campo (omita cualquier prefijo de tabla como «GAGES.» o «EVENTS.», etc.)

3.el tipo de comparación: consulte la lista anterior para ver los posibles valores

4.valor predeterminado para el filtro de búsqueda automática; se admiten valores en blanco en los campos de texto

5.si el filtro de búsqueda automática es obligatorio: introduce «True» o «False»

Nota: Si puedes utilizar el código de la pestaña «Calc» para establecer los valores de todos los campos de búsqueda automática y estás seguro de que los usuarios finales no necesitarán modificarlos en el cuadro de diálogo de búsqueda automática (o no se les debe permitir modificarlos), entonces es posible desactivar este cuadro de diálogo justo antes de que se abra. Solo tienes que añadir la línea de código siguiente en algún lugar del evento ReportBeforeAutoSearchDialogCreate mencionado anteriormente:

Report.ShowAutoSearchDialog := False; |